xref: /openbsd/gnu/gcc/gcc/doc/gcc.info (revision 09467b48)
1This is doc/gcc.info, produced by makeinfo version 4.8 from
2/scratch/mitchell/gcc-releases/gcc-4.2.1/gcc-4.2.1/gcc/doc/gcc.texi.
3
4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
51999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
6
7 Permission is granted to copy, distribute and/or modify this document
8under the terms of the GNU Free Documentation License, Version 1.2 or
9any later version published by the Free Software Foundation; with the
10Invariant Sections being "GNU General Public License" and "Funding Free
11Software", the Front-Cover texts being (a) (see below), and with the
12Back-Cover Texts being (b) (see below).  A copy of the license is
13included in the section entitled "GNU Free Documentation License".
14
15 (a) The FSF's Front-Cover Text is:
16
17 A GNU Manual
18
19 (b) The FSF's Back-Cover Text is:
20
21 You have freedom to copy and modify this GNU Manual, like GNU
22software.  Copies published by the Free Software Foundation raise
23funds for GNU development.
24
25INFO-DIR-SECTION Software development
26START-INFO-DIR-ENTRY
27* gcc: (gcc).                  The GNU Compiler Collection.
28END-INFO-DIR-ENTRY
29 This file documents the use of the GNU compilers.
30
31 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
321999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
33
34 Permission is granted to copy, distribute and/or modify this document
35under the terms of the GNU Free Documentation License, Version 1.2 or
36any later version published by the Free Software Foundation; with the
37Invariant Sections being "GNU General Public License" and "Funding Free
38Software", the Front-Cover texts being (a) (see below), and with the
39Back-Cover Texts being (b) (see below).  A copy of the license is
40included in the section entitled "GNU Free Documentation License".
41
42 (a) The FSF's Front-Cover Text is:
43
44 A GNU Manual
45
46 (b) The FSF's Back-Cover Text is:
47
48 You have freedom to copy and modify this GNU Manual, like GNU
49software.  Copies published by the Free Software Foundation raise
50funds for GNU development.
51
52
53
54File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
55
56Introduction
57************
58
59This manual documents how to use the GNU compilers, as well as their
60features and incompatibilities, and how to report bugs.  It corresponds
61to GCC version 4.2.1.  The internals of the GNU compilers, including
62how to port them to new targets and some information about how to write
63front ends for new languages, are documented in a separate manual.
64*Note Introduction: (gccint)Top.
65
66* Menu:
67
68* G++ and GCC::     You can compile C or C++ programs.
69* Standards::       Language standards supported by GCC.
70* Invoking GCC::    Command options supported by `gcc'.
71* C Implementation:: How GCC implements the ISO C specification.
72* C Extensions::    GNU extensions to the C language family.
73* C++ Extensions::  GNU extensions to the C++ language.
74* Objective-C::     GNU Objective-C runtime features.
75* Compatibility::   Binary Compatibility
76* Gcov::            `gcov'---a test coverage program.
77* Trouble::         If you have trouble using GCC.
78* Bugs::            How, why and where to report bugs.
79* Service::         How to find suppliers of support for GCC.
80* Contributing::    How to contribute to testing and developing GCC.
81
82* Funding::         How to help assure funding for free software.
83* GNU Project::     The GNU Project and GNU/Linux.
84
85* Copying::         GNU General Public License says
86                     how you can copy and share GCC.
87* GNU Free Documentation License:: How you can copy and share this manual.
88* Contributors::    People who have contributed to GCC.
89
90* Option Index::    Index to command line options.
91* Keyword Index::    Index of concepts and symbol names.
92
93
94File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
95
961 Programming Languages Supported by GCC
97****************************************
98
99GCC stands for "GNU Compiler Collection".  GCC is an integrated
100distribution of compilers for several major programming languages.
101These languages currently include C, C++, Objective-C, Objective-C++,
102Java, Fortran, and Ada.
103
104 The abbreviation "GCC" has multiple meanings in common use.  The
105current official meaning is "GNU Compiler Collection", which refers
106generically to the complete suite of tools.  The name historically stood
107for "GNU C Compiler", and this usage is still common when the emphasis
108is on compiling C programs.  Finally, the name is also used when
109speaking of the "language-independent" component of GCC: code shared
110among the compilers for all supported languages.
111
112 The language-independent component of GCC includes the majority of the
113optimizers, as well as the "back ends" that generate machine code for
114various processors.
115
116 The part of a compiler that is specific to a particular language is
117called the "front end".  In addition to the front ends that are
118integrated components of GCC, there are several other front ends that
119are maintained separately.  These support languages such as Pascal,
120Mercury, and COBOL.  To use these, they must be built together with GCC
121proper.
122
123 Most of the compilers for languages other than C have their own names.
124The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
125talk about compiling one of those languages, we might refer to that
126compiler by its own name, or as GCC.  Either is correct.
127
128 Historically, compilers for many languages, including C++ and Fortran,
129have been implemented as "preprocessors" which emit another high level
130language such as C.  None of the compilers included in GCC are
131implemented this way; they all generate machine code directly.  This
132sort of preprocessor should not be confused with the "C preprocessor",
133which is an integral feature of the C, C++, Objective-C and
134Objective-C++ languages.
135
136
137File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
138
1392 Language Standards Supported by GCC
140*************************************
141
142For each language compiled by GCC for which there is a standard, GCC
143attempts to follow one or more versions of that standard, possibly with
144some exceptions, and possibly with some extensions.
145
146 GCC supports three versions of the C standard, although support for
147the most recent version is not yet complete.
148
149 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
150published in 1990.  This standard was ratified as an ISO standard
151(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
152between these publications, although the sections of the ANSI standard
153were renumbered and became clauses in the ISO standard.  This standard,
154in both its forms, is commonly known as "C89", or occasionally as
155"C90", from the dates of ratification.  The ANSI standard, but not the
156ISO standard, also came with a Rationale document.  To select this
157standard in GCC, use one of the options `-ansi', `-std=c89' or
158`-std=iso9899:1990'; to obtain all the diagnostics required by the
159standard, you should also specify `-pedantic' (or `-pedantic-errors' if
160you want them to be errors rather than warnings).  *Note Options
161Controlling C Dialect: C Dialect Options.
162
163 Errors in the 1990 ISO C standard were corrected in two Technical
164Corrigenda published in 1994 and 1996.  GCC does not support the
165uncorrected version.
166
167 An amendment to the 1990 standard was published in 1995.  This
168amendment added digraphs and `__STDC_VERSION__' to the language, but
169otherwise concerned the library.  This amendment is commonly known as
170"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
171select this standard in GCC, use the option `-std=iso9899:199409'
172(with, as for other standard versions, `-pedantic' to receive all
173required diagnostics).
174
175 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1769899:1999, and is commonly known as "C99".  GCC has incomplete support
177for this standard version; see
178`http://gcc.gnu.org/gcc-4.2/c99status.html' for details.  To select this
179standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
180development, drafts of this standard version were referred to as "C9X".)
181
182 Errors in the 1999 ISO C standard were corrected in two Technical
183Corrigenda published in 2001 and 2004.  GCC does not support the
184uncorrected version.
185
186 By default, GCC provides some extensions to the C language that on
187rare occasions conflict with the C standard.  *Note Extensions to the C
188Language Family: C Extensions.  Use of the `-std' options listed above
189will disable these extensions where they conflict with the C standard
190version selected.  You may also select an extended version of the C
191language explicitly with `-std=gnu89' (for C89 with GNU extensions) or
192`-std=gnu99' (for C99 with GNU extensions).  The default, if no C
193language dialect options are given, is `-std=gnu89'; this will change to
194`-std=gnu99' in some future release when the C99 support is complete.
195Some features that are part of the C99 standard are accepted as
196extensions in C89 mode.
197
198 The ISO C standard defines (in clause 4) two classes of conforming
199implementation.  A "conforming hosted implementation" supports the
200whole standard including all the library facilities; a "conforming
201freestanding implementation" is only required to provide certain
202library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
203and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
204also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
205types, added in C99, are not required for freestanding implementations.
206The standard also defines two environments for programs, a
207"freestanding environment", required of all implementations and which
208may not have library facilities beyond those required of freestanding
209implementations, where the handling of program startup and termination
210are implementation-defined, and a "hosted environment", which is not
211required, in which all the library facilities are provided and startup
212is through a function `int main (void)' or `int main (int, char *[])'.
213An OS kernel would be a freestanding environment; a program using the
214facilities of an operating system would normally be in a hosted
215implementation.
216
217 GCC aims towards being usable as a conforming freestanding
218implementation, or as the compiler for a conforming hosted
219implementation.  By default, it will act as the compiler for a hosted
220implementation, defining `__STDC_HOSTED__' as `1' and presuming that
221when the names of ISO C functions are used, they have the semantics
222defined in the standard.  To make it act as a conforming freestanding
223implementation for a freestanding environment, use the option
224`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
225make assumptions about the meanings of function names from the standard
226library, with exceptions noted below.  To build an OS kernel, you may
227well still need to make your own arrangements for linking and startup.
228*Note Options Controlling C Dialect: C Dialect Options.
229
230 GCC does not provide the library facilities required only of hosted
231implementations, nor yet all the facilities required by C99 of
232freestanding implementations; to use the facilities of a hosted
233environment, you will need to find them elsewhere (for example, in the
234GNU C library).  *Note Standard Libraries: Standard Libraries.
235
236 Most of the compiler support routines used by GCC are present in
237`libgcc', but there are a few exceptions.  GCC requires the
238freestanding environment provide `memcpy', `memmove', `memset' and
239`memcmp'.  Finally, if `__builtin_trap' is used, and the target does
240not implement the `trap' pattern, then GCC will emit a call to `abort'.
241
242 For references to Technical Corrigenda, Rationale documents and
243information concerning the history of C that is available online, see
244`http://gcc.gnu.org/readings.html'
245
246 There is no formal written standard for Objective-C or Objective-C++.
247The most authoritative manual is "Object-Oriented Programming and the
248Objective-C Language", available at a number of web sites:
249
250   *
251     `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/'
252     is a recent (and periodically updated) version;
253
254   * `http://www.toodarkpark.org/computers/objc/' is an older example;
255
256   * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html'
257     have additional useful information.
258
259 There is no standard for treelang, which is a sample language front end
260for GCC.  Its only purpose is as a sample for people wishing to write a
261new language for GCC.  The language is documented in
262`gcc/treelang/treelang.texi' which can be turned into info or HTML
263format.
264
265 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
266conformance and compatibility of the Ada compiler.
267
268 *Note Standards: (gfortran)Standards, for details of standards
269supported by GNU Fortran.
270
271 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
272details of compatibility between `gcj' and the Java Platform.
273
274
275File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
276
2773 GCC Command Options
278*********************
279
280When you invoke GCC, it normally does preprocessing, compilation,
281assembly and linking.  The "overall options" allow you to stop this
282process at an intermediate stage.  For example, the `-c' option says
283not to run the linker.  Then the output consists of object files output
284by the assembler.
285
286 Other options are passed on to one stage of processing.  Some options
287control the preprocessor and others the compiler itself.  Yet other
288options control the assembler and linker; most of these are not
289documented here, since you rarely need to use any of them.
290
291 Most of the command line options that you can use with GCC are useful
292for C programs; when an option is only useful with another language
293(usually C++), the explanation says so explicitly.  If the description
294for a particular option does not mention a source language, you can use
295that option with all supported languages.
296
297 *Note Compiling C++ Programs: Invoking G++, for a summary of special
298options for compiling C++ programs.
299
300 The `gcc' program accepts options and file names as operands.  Many
301options have multi-letter names; therefore multiple single-letter
302options may _not_ be grouped: `-dr' is very different from `-d -r'.
303
304 You can mix options and other arguments.  For the most part, the order
305you use doesn't matter.  Order does matter when you use several options
306of the same kind; for example, if you specify `-L' more than once, the
307directories are searched in the order specified.
308
309 Many options have long names starting with `-f' or with `-W'--for
310example, `-fmove-loop-invariants', `-Wformat' and so on.  Most of these
311have both positive and negative forms; the negative form of `-ffoo'
312would be `-fno-foo'.  This manual documents only one of these two
313forms, whichever one is not the default.
314
315 *Note Option Index::, for an index to GCC's options.
316
317* Menu:
318
319* Option Summary::	Brief list of all options, without explanations.
320* Overall Options::     Controlling the kind of output:
321                        an executable, object files, assembler files,
322                        or preprocessed source.
323* Invoking G++::	Compiling C++ programs.
324* C Dialect Options::   Controlling the variant of C language compiled.
325* C++ Dialect Options:: Variations on C++.
326* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
327                        and Objective-C++.
328* Language Independent Options:: Controlling how diagnostics should be
329                        formatted.
330* Warning Options::     How picky should the compiler be?
331* Debugging Options::   Symbol tables, measurements, and debugging dumps.
332* Optimize Options::    How much optimization?
333* Preprocessor Options:: Controlling header files and macro definitions.
334                         Also, getting dependency information for Make.
335* Assembler Options::   Passing options to the assembler.
336* Link Options::        Specifying libraries and so on.
337* Directory Options::   Where to find header files and libraries.
338                        Where to find the compiler executable files.
339* Spec Files::          How to pass switches to sub-processes.
340* Target Options::      Running a cross-compiler, or an old version of GCC.
341* Submodel Options::    Specifying minor hardware or convention variations,
342                        such as 68010 vs 68020.
343* Code Gen Options::    Specifying conventions for function calls, data layout
344                        and register usage.
345* Environment Variables:: Env vars that affect GCC.
346* Precompiled Headers:: Compiling a header once, and using it many times.
347* Running Protoize::    Automatically adding or removing function prototypes.
348
349
350File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
351
3523.1 Option Summary
353==================
354
355Here is a summary of all the options, grouped by type.  Explanations are
356in the following sections.
357
358_Overall Options_
359     *Note Options Controlling the Kind of Output: Overall Options.
360          -c  -S  -E  -o FILE  -combine -pipe  -pass-exit-codes
361          -x LANGUAGE  -v  -###  --help  --target-help  --version @FILE
362
363_C Language Options_
364     *Note Options Controlling C Dialect: C Dialect Options.
365          -ansi  -std=STANDARD  -fgnu89-inline
366          -aux-info FILENAME
367          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
368          -fhosted  -ffreestanding -fopenmp -fms-extensions
369          -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
370          -fallow-single-precision  -fcond-mismatch
371          -fsigned-bitfields  -fsigned-char
372          -funsigned-bitfields  -funsigned-char
373
374_C++ Language Options_
375     *Note Options Controlling C++ Dialect: C++ Dialect Options.
376          -fabi-version=N  -fno-access-control  -fcheck-new
377          -fconserve-space  -ffriend-injection
378          -fno-elide-constructors
379          -fno-enforce-eh-specs
380          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
381          -fno-implicit-templates
382          -fno-implicit-inline-templates
383          -fno-implement-inlines  -fms-extensions
384          -fno-nonansi-builtins  -fno-operator-names
385          -fno-optional-diags  -fpermissive
386          -frepo  -fno-rtti  -fstats  -ftemplate-depth-N
387          -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++
388          -fno-default-inline  -fvisibility-inlines-hidden
389          -Wabi  -Wctor-dtor-privacy
390          -Wnon-virtual-dtor  -Wreorder
391          -Weffc++  -Wno-deprecated  -Wstrict-null-sentinel
392          -Wno-non-template-friend  -Wold-style-cast
393          -Woverloaded-virtual  -Wno-pmf-conversions
394          -Wsign-promo
395
396_Objective-C and Objective-C++ Language Options_
397     *Note Options Controlling Objective-C and Objective-C++ Dialects:
398     Objective-C and Objective-C++ Dialect Options.
399          -fconstant-string-class=CLASS-NAME
400          -fgnu-runtime  -fnext-runtime
401          -fno-nil-receivers
402          -fobjc-call-cxx-cdtors
403          -fobjc-direct-dispatch
404          -fobjc-exceptions
405          -fobjc-gc
406          -freplace-objc-classes
407          -fzero-link
408          -gen-decls
409          -Wassign-intercept
410          -Wno-protocol  -Wselector
411          -Wstrict-selector-match
412          -Wundeclared-selector
413
414_Language Independent Options_
415     *Note Options to Control Diagnostic Messages Formatting: Language
416     Independent Options.
417          -fmessage-length=N
418          -fdiagnostics-show-location=[once|every-line]
419          -fdiagnostics-show-option
420
421_Warning Options_
422     *Note Options to Request or Suppress Warnings: Warning Options.
423          -fsyntax-only  -pedantic  -pedantic-errors
424          -w  -Wextra  -Wall  -Waddress  -Waggregate-return -Wno-attributes
425          -Wbounded  -Wc++-compat -Wcast-align  -Wcast-qual  -Wchar-subscripts
426          -Wcomment-Wconversion  -Wno-deprecated-declarations
427          -Wdisabled-optimization  -Wno-div-by-zero  -Wno-endif-labels
428          -Werror  -Werror=* -Werror-implicit-function-declaration
429          -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2
430          -Wno-format-extra-args -Wformat-nonliteral
431          -Wformat-security  -Wformat-y2k
432          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
433          -Wimport  -Wno-import  -Winit-self  -Winline
434          -Wno-int-to-pointer-cast
435          -Wno-invalid-offsetof  -Winvalid-pch
436          -Wlarger-than-LEN  -Wunsafe-loop-optimizations  -Wlong-long
437          -Wmain  -Wmissing-braces  -Wmissing-field-initializers
438          -Wmissing-format-attribute  -Wmissing-include-dirs
439          -Wmissing-noreturn
440          -Wno-multichar  -Wnonnull  -Wno-overflow
441          -Woverlength-strings  -Wpacked  -Wpadded
442          -Wparentheses  -Wpointer-arith  -Wno-pointer-to-int-cast
443          -Wredundant-decls
444          -Wreturn-type  -Wsequence-point  -Wshadow
445          -Wsign-compare  -Wstack-protector
446          -Wstrict-aliasing -Wstrict-aliasing=2
447          -Wstrict-overflow -Wstrict-overflow=N
448          -Wswitch  -Wswitch-default  -Wswitch-enum
449          -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized
450          -Wunknown-pragmas  -Wno-pragmas -Wunreachable-code
451          -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter
452          -Wunused-value  -Wunused-variable  -Wvariadic-macros
453          -Wvolatile-register-var  -Wwrite-strings
454
455_C-only Warning Options_
456          -Wbad-function-cast  -Wmissing-declarations
457          -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition
458          -Wstrict-prototypes  -Wtraditional
459          -Wdeclaration-after-statement -Wpointer-sign
460
461_Debugging Options_
462     *Note Options for Debugging Your Program or GCC: Debugging Options.
463          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
464          -fdump-noaddr -fdump-unnumbered  -fdump-translation-unit[-N]
465          -fdump-class-hierarchy[-N]
466          -fdump-ipa-all -fdump-ipa-cgraph
467          -fdump-tree-all
468          -fdump-tree-original[-N]
469          -fdump-tree-optimized[-N]
470          -fdump-tree-inlined[-N]
471          -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
472          -fdump-tree-ch
473          -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
474          -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
475          -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
476          -fdump-tree-dom[-N]
477          -fdump-tree-dse[-N]
478          -fdump-tree-phiopt[-N]
479          -fdump-tree-forwprop[-N]
480          -fdump-tree-copyrename[-N]
481          -fdump-tree-nrv -fdump-tree-vect
482          -fdump-tree-sink
483          -fdump-tree-sra[-N]
484          -fdump-tree-salias
485          -fdump-tree-fre[-N]
486          -fdump-tree-vrp[-N]
487          -ftree-vectorizer-verbose=N
488          -fdump-tree-storeccp[-N]
489          -feliminate-dwarf2-dups -feliminate-unused-debug-types
490          -feliminate-unused-debug-symbols -femit-class-debug-always
491          -fmem-report -fprofile-arcs
492          -frandom-seed=STRING -fsched-verbose=N
493          -ftest-coverage  -ftime-report -fvar-tracking
494          -g  -gLEVEL  -gcoff -gdwarf-2
495          -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+
496          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
497          -print-multi-directory  -print-multi-lib
498          -print-prog-name=PROGRAM  -print-search-dirs  -Q
499          -save-temps  -time
500
501_Optimization Options_
502     *Note Options that Control Optimization: Optimize Options.
503          -falign-functions=N  -falign-jumps=N
504          -falign-labels=N  -falign-loops=N
505          -fbounds-check -fmudflap -fmudflapth -fmudflapir
506          -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize
507          -fbranch-target-load-optimize2 -fbtr-bb-exclusive
508          -fcaller-saves  -fcprop-registers  -fcse-follow-jumps
509          -fcse-skip-blocks  -fcx-limited-range  -fdata-sections
510          -fdelayed-branch  -fdelete-null-pointer-checks -fearly-inlining
511          -fexpensive-optimizations  -ffast-math  -ffloat-store
512          -fforce-addr  -ffunction-sections
513          -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -fgcse-after-reload
514          -fcrossjumping  -fif-conversion  -fif-conversion2
515          -finline-functions  -finline-functions-called-once
516          -finline-limit=N  -fkeep-inline-functions
517          -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants
518          -fmodulo-sched -fno-branch-count-reg
519          -fno-default-inline  -fno-defer-pop -fmove-loop-invariants
520          -fno-function-cse  -fno-guess-branch-probability
521          -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2
522          -funsafe-math-optimizations  -funsafe-loop-optimizations  -ffinite-math-only
523          -fno-toplevel-reorder -fno-trapping-math  -fno-zero-initialized-in-bss
524          -fomit-frame-pointer  -foptimize-register-move
525          -foptimize-sibling-calls  -fprefetch-loop-arrays
526          -fprofile-generate -fprofile-use
527          -fregmove  -frename-registers
528          -freorder-blocks  -freorder-blocks-and-partition -freorder-functions
529          -frerun-cse-after-loop
530          -frounding-math -frtl-abstract-sequences
531          -fschedule-insns  -fschedule-insns2
532          -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load
533          -fsched-spec-load-dangerous
534          -fsched-stalled-insns=N -fsched-stalled-insns-dep=N
535          -fsched2-use-superblocks
536          -fsched2-use-traces -fsee -freschedule-modulo-scheduled-loops
537          -fsection-anchors  -fsignaling-nans  -fsingle-precision-constant
538          -fstack-protector  -fstack-protector-all
539          -fstrict-aliasing  -fstrict-overflow  -ftracer  -fthread-jumps
540          -funroll-all-loops  -funroll-loops  -fpeel-loops
541          -fsplit-ivs-in-unroller -funswitch-loops
542          -fvariable-expansion-in-unroller
543          -ftree-pre  -ftree-ccp  -ftree-dce -ftree-loop-optimize
544          -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts
545          -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink
546          -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize
547          -ftree-vect-loop-version -ftree-salias -fipa-pta -fweb
548          -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program
549          --param NAME=VALUE
550          -O  -O0  -O1  -O2  -O3  -Os
551
552_Preprocessor Options_
553     *Note Options Controlling the Preprocessor: Preprocessor Options.
554          -AQUESTION=ANSWER
555          -A-QUESTION[=ANSWER]
556          -C  -dD  -dI  -dM  -dN
557          -DMACRO[=DEFN]  -E  -H
558          -idirafter DIR
559          -include FILE  -imacros FILE
560          -iprefix FILE  -iwithprefix DIR
561          -iwithprefixbefore DIR  -isystem DIR
562          -imultilib DIR -isysroot DIR
563          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
564          -P  -fworking-directory  -remap
565          -trigraphs  -undef  -UMACRO  -Wp,OPTION
566          -Xpreprocessor OPTION
567
568_Assembler Option_
569     *Note Passing Options to the Assembler: Assembler Options.
570          -Wa,OPTION  -Xassembler OPTION
571
572_Linker Options_
573     *Note Options for Linking: Link Options.
574          OBJECT-FILE-NAME  -lLIBRARY
575          -nostartfiles  -nodefaultlibs  -nostdlib -pie -rdynamic
576          -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic
577          -Wl,OPTION  -Xlinker OPTION
578          -u SYMBOL
579
580_Directory Options_
581     *Note Options for Directory Search: Directory Options.
582          -BPREFIX  -IDIR  -iquoteDIR  -LDIR
583          -specs=FILE  -I- --sysroot=DIR
584
585_Target Options_
586     *Note Target Options::.
587          -V VERSION  -b MACHINE
588
589_Machine Dependent Options_
590     *Note Hardware Models and Configurations: Submodel Options.
591
592     _ARC Options_
593          -EB  -EL
594          -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
595          -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
596
597     _ARM Options_
598          -mapcs-frame  -mno-apcs-frame
599          -mabi=NAME
600          -mapcs-stack-check  -mno-apcs-stack-check
601          -mapcs-float  -mno-apcs-float
602          -mapcs-reentrant  -mno-apcs-reentrant
603          -msched-prolog  -mno-sched-prolog
604          -mlittle-endian  -mbig-endian  -mwords-little-endian
605          -mfloat-abi=NAME  -msoft-float  -mhard-float  -mfpe
606          -mthumb-interwork  -mno-thumb-interwork
607          -mcpu=NAME  -march=NAME  -mfpu=NAME
608          -mstructure-size-boundary=N
609          -mabort-on-noreturn
610          -mlong-calls  -mno-long-calls
611          -msingle-pic-base  -mno-single-pic-base
612          -mpic-register=REG
613          -mnop-fun-dllimport
614          -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
615          -mpoke-function-name
616          -mthumb  -marm
617          -mtpcs-frame  -mtpcs-leaf-frame
618          -mcaller-super-interworking  -mcallee-super-interworking
619          -mtp=NAME
620
621     _AVR Options_
622          -mmcu=MCU  -msize  -minit-stack=N  -mno-interrupts
623          -mcall-prologues  -mno-tablejump  -mtiny-stack  -mint8
624
625     _Blackfin Options_
626          -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
627          -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly
628          -mlow-64k -mno-low64k -mid-shared-library
629          -mno-id-shared-library -mshared-library-id=N
630          -mlong-calls  -mno-long-calls
631
632     _CRIS Options_
633          -mcpu=CPU  -march=CPU  -mtune=CPU
634          -mmax-stack-frame=N  -melinux-stacksize=N
635          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
636          -mstack-align  -mdata-align  -mconst-align
637          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
638          -melf  -maout  -melinux  -mlinux  -sim  -sim2
639          -mmul-bug-workaround  -mno-mul-bug-workaround
640
641     _CRX Options_
642          -mmac -mpush-args
643
644     _Darwin Options_
645          -all_load  -allowable_client  -arch  -arch_errors_fatal
646          -arch_only  -bind_at_load  -bundle  -bundle_loader
647          -client_name  -compatibility_version  -current_version
648          -dead_strip
649          -dependency-file  -dylib_file  -dylinker_install_name
650          -dynamic  -dynamiclib  -exported_symbols_list
651          -filelist  -flat_namespace  -force_cpusubtype_ALL
652          -force_flat_namespace  -headerpad_max_install_names
653          -image_base  -init  -install_name  -keep_private_externs
654          -multi_module  -multiply_defined  -multiply_defined_unused
655          -noall_load   -no_dead_strip_inits_and_terms
656          -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
657          -pagezero_size  -prebind  -prebind_all_twolevel_modules
658          -private_bundle  -read_only_relocs  -sectalign
659          -sectobjectsymbols  -whyload  -seg1addr
660          -sectcreate  -sectobjectsymbols  -sectorder
661          -segaddr -segs_read_only_addr -segs_read_write_addr
662          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
663          -segprot  -segs_read_only_addr  -segs_read_write_addr
664          -single_module  -static  -sub_library  -sub_umbrella
665          -twolevel_namespace  -umbrella  -undefined
666          -unexported_symbols_list  -weak_reference_mismatches
667          -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
668          -mkernel -mone-byte-bool
669
670     _DEC Alpha Options_
671          -mno-fp-regs  -msoft-float  -malpha-as  -mgas
672          -mieee  -mieee-with-inexact  -mieee-conformant
673          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
674          -mtrap-precision=MODE  -mbuild-constants
675          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
676          -mbwx  -mmax  -mfix  -mcix
677          -mfloat-vax  -mfloat-ieee
678          -mexplicit-relocs  -msmall-data  -mlarge-data
679          -msmall-text  -mlarge-text
680          -mmemory-latency=TIME
681
682     _DEC Alpha/VMS Options_
683          -mvms-return-codes
684
685     _FRV Options_
686          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
687          -mhard-float  -msoft-float
688          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
689          -mdouble  -mno-double
690          -mmedia  -mno-media  -mmuladd  -mno-muladd
691          -mfdpic  -minline-plt -mgprel-ro  -multilib-library-pic
692          -mlinked-fp  -mlong-calls  -malign-labels
693          -mlibrary-pic  -macc-4  -macc-8
694          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
695          -moptimize-membar -mno-optimize-membar
696          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
697          -mvliw-branch  -mno-vliw-branch
698          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
699          -mno-nested-cond-exec  -mtomcat-stats
700          -mTLS -mtls
701          -mcpu=CPU
702
703     _GNU/Linux Options_
704          -muclibc
705
706     _H8/300 Options_
707          -mrelax  -mh  -ms  -mn  -mint32  -malign-300
708
709     _HPPA Options_
710          -march=ARCHITECTURE-TYPE
711          -mbig-switch  -mdisable-fpregs  -mdisable-indexing
712          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
713          -mfixed-range=REGISTER-RANGE
714          -mjump-in-delay -mlinker-opt -mlong-calls
715          -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
716          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
717          -mno-jump-in-delay  -mno-long-load-store
718          -mno-portable-runtime  -mno-soft-float
719          -mno-space-regs  -msoft-float  -mpa-risc-1-0
720          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
721          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
722          -munix=UNIX-STD  -nolibdld  -static  -threads
723
724     _i386 and x86-64 Options_
725          -mtune=CPU-TYPE  -march=CPU-TYPE
726          -mfpmath=UNIT
727          -masm=DIALECT  -mno-fancy-math-387
728          -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
729          -mno-wide-multiply  -mrtd  -malign-double
730          -mpreferred-stack-boundary=NUM
731          -mmmx  -msse  -msse2 -msse3 -m3dnow
732          -mthreads  -mno-align-stringops  -minline-all-stringops
733          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
734          -m96bit-long-double  -mregparm=NUM  -msseregparm
735          -mstackrealign
736          -momit-leaf-frame-pointer  -mno-red-zone -mno-tls-direct-seg-refs
737          -mcmodel=CODE-MODEL
738          -m32  -m64 -mlarge-data-threshold=NUM
739
740     _IA-64 Options_
741          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
742          -mvolatile-asm-stop  -mregister-names  -mno-sdata
743          -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
744          -minline-float-divide-max-throughput
745          -minline-int-divide-min-latency
746          -minline-int-divide-max-throughput
747          -minline-sqrt-min-latency -minline-sqrt-max-throughput
748          -mno-dwarf2-asm -mearly-stop-bits
749          -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
750          -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64
751          -mno-sched-br-data-spec -msched-ar-data-spec -mno-sched-control-spec
752          -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec
753          -msched-ldc -mno-sched-control-ldc -mno-sched-spec-verbose
754          -mno-sched-prefer-non-data-spec-insns
755          -mno-sched-prefer-non-control-spec-insns
756          -mno-sched-count-spec-in-critical-path
757
758     _M32R/D Options_
759          -m32r2 -m32rx -m32r
760          -mdebug
761          -malign-loops -mno-align-loops
762          -missue-rate=NUMBER
763          -mbranch-cost=NUMBER
764          -mmodel=CODE-SIZE-MODEL-TYPE
765          -msdata=SDATA-TYPE
766          -mno-flush-func -mflush-func=NAME
767          -mno-flush-trap -mflush-trap=NUMBER
768          -G NUM
769
770     _M32C Options_
771          -mcpu=CPU -msim -memregs=NUMBER
772
773     _M680x0 Options_
774          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
775          -m68060  -mcpu32  -m5200  -mcfv4e -m68881  -mbitfield
776          -mc68000  -mc68020
777          -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel
778          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
779          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
780
781     _M68hc1x Options_
782          -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
783          -mauto-incdec  -minmax  -mlong-calls  -mshort
784          -msoft-reg-count=COUNT
785
786     _MCore Options_
787          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
788          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
789          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
790          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
791          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
792
793     _MIPS Options_
794          -EL  -EB  -march=ARCH  -mtune=ARCH
795          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64
796          -mips16  -mno-mips16  -mabi=ABI  -mabicalls  -mno-abicalls
797          -mshared  -mno-shared  -mxgot  -mno-xgot  -mgp32  -mgp64
798          -mfp32  -mfp64  -mhard-float  -msoft-float
799          -msingle-float  -mdouble-float  -mdsp  -mpaired-single  -mips3d
800          -mlong64  -mlong32  -msym32  -mno-sym32
801          -GNUM  -membedded-data  -mno-embedded-data
802          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
803          -msplit-addresses  -mno-split-addresses
804          -mexplicit-relocs  -mno-explicit-relocs
805          -mcheck-zero-division  -mno-check-zero-division
806          -mdivide-traps  -mdivide-breaks
807          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
808          -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
809          -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
810          -mfix-vr4120  -mno-fix-vr4120  -mfix-vr4130
811          -mfix-sb1  -mno-fix-sb1
812          -mflush-func=FUNC  -mno-flush-func
813          -mbranch-likely  -mno-branch-likely
814          -mfp-exceptions -mno-fp-exceptions
815          -mvr4130-align -mno-vr4130-align
816
817     _MMIX Options_
818          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
819          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
820          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
821          -mno-base-addresses  -msingle-exit  -mno-single-exit
822
823     _MN10300 Options_
824          -mmult-bug  -mno-mult-bug
825          -mam33  -mno-am33
826          -mam33-2  -mno-am33-2
827          -mreturn-pointer-on-d0
828          -mno-crt0  -mrelax
829
830     _MT Options_
831          -mno-crt0 -mbacc -msim
832          -march=CPU-TYPE
833
834     _PDP-11 Options_
835          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
836          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
837          -mint16  -mno-int32  -mfloat32  -mno-float64
838          -mfloat64  -mno-float32  -mabshi  -mno-abshi
839          -mbranch-expensive  -mbranch-cheap
840          -msplit  -mno-split  -munix-asm  -mdec-asm
841
842     _PowerPC Options_ See RS/6000 and PowerPC Options.
843
844     _RS/6000 and PowerPC Options_
845          -mcpu=CPU-TYPE
846          -mtune=CPU-TYPE
847          -mpower  -mno-power  -mpower2  -mno-power2
848          -mpowerpc  -mpowerpc64  -mno-powerpc
849          -maltivec  -mno-altivec
850          -mpowerpc-gpopt  -mno-powerpc-gpopt
851          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
852          -mmfcrf  -mno-mfcrf  -mpopcntb  -mno-popcntb  -mfprnd  -mno-fprnd
853          -mnew-mnemonics  -mold-mnemonics
854          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
855          -m64  -m32  -mxl-compat  -mno-xl-compat  -mpe
856          -malign-power  -malign-natural
857          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
858          -mstring  -mno-string  -mupdate  -mno-update
859          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
860          -mstrict-align  -mno-strict-align  -mrelocatable
861          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
862          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
863          -mdynamic-no-pic  -maltivec  -mswdiv
864          -mprioritize-restricted-insns=PRIORITY
865          -msched-costly-dep=DEPENDENCE_TYPE
866          -minsert-sched-nops=SCHEME
867          -mcall-sysv  -mcall-netbsd
868          -maix-struct-return  -msvr4-struct-return
869          -mabi=ABI-TYPE -msecure-plt -mbss-plt
870          -misel -mno-isel
871          -misel=yes  -misel=no
872          -mspe -mno-spe
873          -mspe=yes  -mspe=no
874          -mvrsave -mno-vrsave
875          -mmulhw -mno-mulhw
876          -mdlmzb -mno-dlmzb
877          -mfloat-gprs=yes  -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
878          -mprototype  -mno-prototype
879          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
880          -msdata=OPT  -mvxworks  -mwindiss  -G NUM  -pthread
881
882     _S/390 and zSeries Options_
883          -mtune=CPU-TYPE  -march=CPU-TYPE
884          -mhard-float  -msoft-float -mlong-double-64 -mlong-double-128
885          -mbackchain  -mno-backchain -mpacked-stack  -mno-packed-stack
886          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
887          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch
888          -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd
889          -mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard
890
891     _Score Options_
892          -meb -mel
893          -mnhwloop
894          -muls
895          -mmac
896          -mscore5 -mscore5u -mscore7 -mscore7d
897
898     _SH Options_
899          -m1  -m2  -m2e  -m3  -m3e
900          -m4-nofpu  -m4-single-only  -m4-single  -m4
901          -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
902          -m5-64media  -m5-64media-nofpu
903          -m5-32media  -m5-32media-nofpu
904          -m5-compact  -m5-compact-nofpu
905          -mb  -ml  -mdalign  -mrelax
906          -mbigtable  -mfmovd  -mhitachi -mrenesas -mno-renesas -mnomacsave
907          -mieee  -misize  -mpadstruct  -mspace
908          -mprefergot  -musermode -multcost=NUMBER -mdiv=STRATEGY
909          -mdivsi3_libfunc=NAME
910          -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
911           -minvalid-symbols
912
913     _SPARC Options_
914          -mcpu=CPU-TYPE
915          -mtune=CPU-TYPE
916          -mcmodel=CODE-MODEL
917          -m32  -m64  -mapp-regs  -mno-app-regs
918          -mfaster-structs  -mno-faster-structs
919          -mfpu  -mno-fpu  -mhard-float  -msoft-float
920          -mhard-quad-float  -msoft-quad-float
921          -mimpure-text  -mno-impure-text  -mlittle-endian
922          -mstack-bias  -mno-stack-bias
923          -munaligned-doubles  -mno-unaligned-doubles
924          -mv8plus  -mno-v8plus  -mvis  -mno-vis
925          -threads -pthreads -pthread
926
927     _System V Options_
928          -Qy  -Qn  -YP,PATHS  -Ym,DIR
929
930     _TMS320C3x/C4x Options_
931          -mcpu=CPU  -mbig  -msmall  -mregparm  -mmemparm
932          -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload
933          -mrpts=COUNT  -mrptb  -mdb  -mloop-unsigned
934          -mparallel-insns  -mparallel-mpy  -mpreserve-float
935
936     _V850 Options_
937          -mlong-calls  -mno-long-calls  -mep  -mno-ep
938          -mprolog-function  -mno-prolog-function  -mspace
939          -mtda=N  -msda=N  -mzda=N
940          -mapp-regs  -mno-app-regs
941          -mdisable-callt  -mno-disable-callt
942          -mv850e1
943          -mv850e
944          -mv850  -mbig-switch
945
946     _VAX Options_
947          -mg  -mgnu  -munix
948
949     _x86-64 Options_ See i386 and x86-64 Options.
950
951     _Xstormy16 Options_
952          -msim
953
954     _Xtensa Options_
955          -mconst16 -mno-const16
956          -mfused-madd  -mno-fused-madd
957          -mtext-section-literals  -mno-text-section-literals
958          -mtarget-align  -mno-target-align
959          -mlongcalls  -mno-longcalls
960
961     _zSeries Options_ See S/390 and zSeries Options.
962
963_Code Generation Options_
964     *Note Options for Code Generation Conventions: Code Gen Options.
965          -fcall-saved-REG  -fcall-used-REG
966          -ffixed-REG  -fexceptions
967          -fnon-call-exceptions  -funwind-tables
968          -fasynchronous-unwind-tables
969          -finhibit-size-directive  -finstrument-functions
970          -fno-common  -fno-ident
971          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
972          -fno-jump-tables
973          -freg-struct-return  -fshort-enums
974          -fshort-double  -fshort-wchar
975          -fverbose-asm  -fpack-struct[=N]  -fstack-check
976          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
977          -fargument-alias  -fargument-noalias
978          -fargument-noalias-global  -fargument-noalias-anything
979          -fleading-underscore  -ftls-model=MODEL
980          -ftrapv  -fwrapv  -fbounds-check
981          -fvisibility
982
983
984* Menu:
985
986* Overall Options::     Controlling the kind of output:
987                        an executable, object files, assembler files,
988                        or preprocessed source.
989* C Dialect Options::   Controlling the variant of C language compiled.
990* C++ Dialect Options:: Variations on C++.
991* Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
992                        and Objective-C++.
993* Language Independent Options:: Controlling how diagnostics should be
994                        formatted.
995* Warning Options::     How picky should the compiler be?
996* Debugging Options::   Symbol tables, measurements, and debugging dumps.
997* Optimize Options::    How much optimization?
998* Preprocessor Options:: Controlling header files and macro definitions.
999                         Also, getting dependency information for Make.
1000* Assembler Options::   Passing options to the assembler.
1001* Link Options::        Specifying libraries and so on.
1002* Directory Options::   Where to find header files and libraries.
1003                        Where to find the compiler executable files.
1004* Spec Files::          How to pass switches to sub-processes.
1005* Target Options::      Running a cross-compiler, or an old version of GCC.
1006
1007
1008File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
1009
10103.2 Options Controlling the Kind of Output
1011==========================================
1012
1013Compilation can involve up to four stages: preprocessing, compilation
1014proper, assembly and linking, always in that order.  GCC is capable of
1015preprocessing and compiling several files either into several assembler
1016input files, or into one assembler input file; then each assembler
1017input file produces an object file, and linking combines all the object
1018files (those newly compiled, and those specified as input) into an
1019executable file.
1020
1021 For any given input file, the file name suffix determines what kind of
1022compilation is done:
1023
1024`FILE.c'
1025     C source code which must be preprocessed.
1026
1027`FILE.i'
1028     C source code which should not be preprocessed.
1029
1030`FILE.ii'
1031     C++ source code which should not be preprocessed.
1032
1033`FILE.m'
1034     Objective-C source code.  Note that you must link with the
1035     `libobjc' library to make an Objective-C program work.
1036
1037`FILE.mi'
1038     Objective-C source code which should not be preprocessed.
1039
1040`FILE.mm'
1041`FILE.M'
1042     Objective-C++ source code.  Note that you must link with the
1043     `libobjc' library to make an Objective-C++ program work.  Note
1044     that `.M' refers to a literal capital M.
1045
1046`FILE.mii'
1047     Objective-C++ source code which should not be preprocessed.
1048
1049`FILE.h'
1050     C, C++, Objective-C or Objective-C++ header file to be turned into
1051     a precompiled header.
1052
1053`FILE.cc'
1054`FILE.cp'
1055`FILE.cxx'
1056`FILE.cpp'
1057`FILE.CPP'
1058`FILE.c++'
1059`FILE.C'
1060     C++ source code which must be preprocessed.  Note that in `.cxx',
1061     the last two letters must both be literally `x'.  Likewise, `.C'
1062     refers to a literal capital C.
1063
1064`FILE.mm'
1065`FILE.M'
1066     Objective-C++ source code which must be preprocessed.
1067
1068`FILE.mii'
1069     Objective-C++ source code which should not be preprocessed.
1070
1071`FILE.hh'
1072`FILE.H'
1073     C++ header file to be turned into a precompiled header.
1074
1075`FILE.f'
1076`FILE.for'
1077`FILE.FOR'
1078     Fixed form Fortran source code which should not be preprocessed.
1079
1080`FILE.F'
1081`FILE.fpp'
1082`FILE.FPP'
1083     Fixed form Fortran source code which must be preprocessed (with
1084     the traditional preprocessor).
1085
1086`FILE.f90'
1087`FILE.f95'
1088     Free form Fortran source code which should not be preprocessed.
1089
1090`FILE.F90'
1091`FILE.F95'
1092     Free form Fortran source code which must be preprocessed (with the
1093     traditional preprocessor).
1094
1095`FILE.ads'
1096     Ada source code file which contains a library unit declaration (a
1097     declaration of a package, subprogram, or generic, or a generic
1098     instantiation), or a library unit renaming declaration (a package,
1099     generic, or subprogram renaming declaration).  Such files are also
1100     called "specs".
1101
1102`FILE.adb'
1103     Ada source code file containing a library unit body (a subprogram
1104     or package body).  Such files are also called "bodies".
1105
1106`FILE.s'
1107     Assembler code.
1108
1109`FILE.S'
1110     Assembler code which must be preprocessed.
1111
1112`OTHER'
1113     An object file to be fed straight into linking.  Any file name
1114     with no recognized suffix is treated this way.
1115
1116 You can specify the input language explicitly with the `-x' option:
1117
1118`-x LANGUAGE'
1119     Specify explicitly the LANGUAGE for the following input files
1120     (rather than letting the compiler choose a default based on the
1121     file name suffix).  This option applies to all following input
1122     files until the next `-x' option.  Possible values for LANGUAGE
1123     are:
1124          c  c-header  c-cpp-output
1125          c++  c++-header  c++-cpp-output
1126          objective-c  objective-c-header  objective-c-cpp-output
1127          objective-c++ objective-c++-header objective-c++-cpp-output
1128          assembler  assembler-with-cpp
1129          ada
1130          f95  f95-cpp-input
1131          java
1132          treelang
1133
1134`-x none'
1135     Turn off any specification of a language, so that subsequent files
1136     are handled according to their file name suffixes (as they are if
1137     `-x' has not been used at all).
1138
1139`-pass-exit-codes'
1140     Normally the `gcc' program will exit with the code of 1 if any
1141     phase of the compiler returns a non-success return code.  If you
1142     specify `-pass-exit-codes', the `gcc' program will instead return
1143     with numerically highest error produced by any phase that returned
1144     an error indication.  The C, C++, and Fortran frontends return 4,
1145     if an internal compiler error is encountered.
1146
1147 If you only want some of the stages of compilation, you can use `-x'
1148(or filename suffixes) to tell `gcc' where to start, and one of the
1149options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1150some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1151do nothing at all.
1152
1153`-c'
1154     Compile or assemble the source files, but do not link.  The linking
1155     stage simply is not done.  The ultimate output is in the form of an
1156     object file for each source file.
1157
1158     By default, the object file name for a source file is made by
1159     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1160
1161     Unrecognized input files, not requiring compilation or assembly,
1162     are ignored.
1163
1164`-S'
1165     Stop after the stage of compilation proper; do not assemble.  The
1166     output is in the form of an assembler code file for each
1167     non-assembler input file specified.
1168
1169     By default, the assembler file name for a source file is made by
1170     replacing the suffix `.c', `.i', etc., with `.s'.
1171
1172     Input files that don't require compilation are ignored.
1173
1174`-E'
1175     Stop after the preprocessing stage; do not run the compiler
1176     proper.  The output is in the form of preprocessed source code,
1177     which is sent to the standard output.
1178
1179     Input files which don't require preprocessing are ignored.
1180
1181`-o FILE'
1182     Place output in file FILE.  This applies regardless to whatever
1183     sort of output is being produced, whether it be an executable file,
1184     an object file, an assembler file or preprocessed C code.
1185
1186     If `-o' is not specified, the default is to put an executable file
1187     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1188     assembler file in `SOURCE.s', a precompiled header file in
1189     `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1190     output.
1191
1192`-v'
1193     Print (on standard error output) the commands executed to run the
1194     stages of compilation.  Also print the version number of the
1195     compiler driver program and of the preprocessor and the compiler
1196     proper.
1197
1198`-###'
1199     Like `-v' except the commands are not executed and all command
1200     arguments are quoted.  This is useful for shell scripts to capture
1201     the driver-generated command lines.
1202
1203`-pipe'
1204     Use pipes rather than temporary files for communication between the
1205     various stages of compilation.  This fails to work on some systems
1206     where the assembler is unable to read from a pipe; but the GNU
1207     assembler has no trouble.
1208
1209`-combine'
1210     If you are compiling multiple source files, this option tells the
1211     driver to pass all the source files to the compiler at once (for
1212     those languages for which the compiler can handle this).  This
1213     will allow intermodule analysis (IMA) to be performed by the
1214     compiler.  Currently the only language for which this is supported
1215     is C.  If you pass source files for multiple languages to the
1216     driver, using this option, the driver will invoke the compiler(s)
1217     that support IMA once each, passing each compiler all the source
1218     files appropriate for it.  For those languages that do not support
1219     IMA this option will be ignored, and the compiler will be invoked
1220     once for each source file in that language.  If you use this
1221     option in conjunction with `-save-temps', the compiler will
1222     generate multiple pre-processed files (one for each source file),
1223     but only one (combined) `.o' or `.s' file.
1224
1225`--help'
1226     Print (on the standard output) a description of the command line
1227     options understood by `gcc'.  If the `-v' option is also specified
1228     then `--help' will also be passed on to the various processes
1229     invoked by `gcc', so that they can display the command line options
1230     they accept.  If the `-Wextra' option is also specified then
1231     command line options which have no documentation associated with
1232     them will also be displayed.
1233
1234`--target-help'
1235     Print (on the standard output) a description of target specific
1236     command line options for each tool.
1237
1238`--version'
1239     Display the version number and copyrights of the invoked GCC.
1240
1241`@FILE'
1242     Read command-line options from FILE.  The options read are
1243     inserted in place of the original @FILE option.  If FILE does not
1244     exist, or cannot be read, then the option will be treated
1245     literally, and not removed.
1246
1247     Options in FILE are separated by whitespace.  A whitespace
1248     character may be included in an option by surrounding the entire
1249     option in either single or double quotes.  Any character
1250     (including a backslash) may be included by prefixing the character
1251     to be included with a backslash.  The FILE may itself contain
1252     additional @FILE options; any such options will be processed
1253     recursively.
1254
1255
1256File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1257
12583.3 Compiling C++ Programs
1259==========================
1260
1261C++ source files conventionally use one of the suffixes `.C', `.cc',
1262`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1263`.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'.  GCC
1264recognizes files with these names and compiles them as C++ programs
1265even if you call the compiler the same way as for compiling C programs
1266(usually with the name `gcc').
1267
1268 However, the use of `gcc' does not add the C++ library.  `g++' is a
1269program that calls GCC and treats `.c', `.h' and `.i' files as C++
1270source files instead of C source files unless `-x' is used, and
1271automatically specifies linking against the C++ library.  This program
1272is also useful when precompiling a C header file with a `.h' extension
1273for use in C++ compilations.  On many systems, `g++' is also installed
1274with the name `c++'.
1275
1276 When you compile C++ programs, you may specify many of the same
1277command-line options that you use for compiling programs in any
1278language; or command-line options meaningful for C and related
1279languages; or options that are meaningful only for C++ programs.  *Note
1280Options Controlling C Dialect: C Dialect Options, for explanations of
1281options for languages related to C.  *Note Options Controlling C++
1282Dialect: C++ Dialect Options, for explanations of options that are
1283meaningful only for C++ programs.
1284
1285
1286File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1287
12883.4 Options Controlling C Dialect
1289=================================
1290
1291The following options control the dialect of C (or languages derived
1292from C, such as C++, Objective-C and Objective-C++) that the compiler
1293accepts:
1294
1295`-ansi'
1296     In C mode, support all ISO C90 programs.  In C++ mode, remove GNU
1297     extensions that conflict with ISO C++.
1298
1299     This turns off certain features of GCC that are incompatible with
1300     ISO C90 (when compiling C code), or of standard C++ (when
1301     compiling C++ code), such as the `asm' and `typeof' keywords, and
1302     predefined macros such as `unix' and `vax' that identify the type
1303     of system you are using.  It also enables the undesirable and
1304     rarely used ISO trigraph feature.  For the C compiler, it disables
1305     recognition of C++ style `//' comments as well as the `inline'
1306     keyword.
1307
1308     The alternate keywords `__asm__', `__extension__', `__inline__'
1309     and `__typeof__' continue to work despite `-ansi'.  You would not
1310     want to use them in an ISO C program, of course, but it is useful
1311     to put them in header files that might be included in compilations
1312     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1313     and `__vax__' are also available, with or without `-ansi'.
1314
1315     The `-ansi' option does not cause non-ISO programs to be rejected
1316     gratuitously.  For that, `-pedantic' is required in addition to
1317     `-ansi'.  *Note Warning Options::.
1318
1319     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1320     is used.  Some header files may notice this macro and refrain from
1321     declaring certain functions or defining certain macros that the
1322     ISO standard doesn't call for; this is to avoid interfering with
1323     any programs that might use these names for other things.
1324
1325     Functions which would normally be built in but do not have
1326     semantics defined by ISO C (such as `alloca' and `ffs') are not
1327     built-in functions with `-ansi' is used.  *Note Other built-in
1328     functions provided by GCC: Other Builtins, for details of the
1329     functions affected.
1330
1331`-std='
1332     Determine the language standard.  This option is currently only
1333     supported when compiling C or C++.  A value for this option must be
1334     provided; possible values are
1335
1336    `c89'
1337    `iso9899:1990'
1338          ISO C90 (same as `-ansi').
1339
1340    `iso9899:199409'
1341          ISO C90 as modified in amendment 1.
1342
1343    `c99'
1344    `c9x'
1345    `iso9899:1999'
1346    `iso9899:199x'
1347          ISO C99.  Note that this standard is not yet fully supported;
1348          see `http://gcc.gnu.org/gcc-4.2/c99status.html' for more
1349          information.  The names `c9x' and `iso9899:199x' are
1350          deprecated.
1351
1352    `gnu89'
1353          Default, ISO C90 plus GNU extensions (including some C99
1354          features).
1355
1356    `gnu99'
1357    `gnu9x'
1358          ISO C99 plus GNU extensions.  When ISO C99 is fully
1359          implemented in GCC, this will become the default.  The name
1360          `gnu9x' is deprecated.
1361
1362    `c++98'
1363          The 1998 ISO C++ standard plus amendments.
1364
1365    `gnu++98'
1366          The same as `-std=c++98' plus GNU extensions.  This is the
1367          default for C++ code.
1368
1369     Even when this option is not specified, you can still use some of
1370     the features of newer standards in so far as they do not conflict
1371     with previous C standards.  For example, you may use
1372     `__restrict__' even when `-std=c99' is not specified.
1373
1374     The `-std' options specifying some version of ISO C have the same
1375     effects as `-ansi', except that features that were not in ISO C90
1376     but are in the specified version (for example, `//' comments and
1377     the `inline' keyword in ISO C99) are not disabled.
1378
1379     *Note Language Standards Supported by GCC: Standards, for details
1380     of these standard versions.
1381
1382`-fgnu89-inline'
1383     The option `-fgnu89-inline' tells GCC to use the traditional GNU
1384     semantics for `inline' functions when in C99 mode.  *Note An
1385     Inline Function is As Fast As a Macro: Inline.  Using this option
1386     is roughly equivalent to adding the `gnu_inline' function
1387     attribute to all inline functions (*note Function Attributes::).
1388
1389     This option is accepted by GCC versions 4.1.3 and up.  In GCC
1390     versions prior to 4.3, C99 inline semantics are not supported, and
1391     thus this option is effectively assumed to be present regardless
1392     of whether or not it is specified; the only effect of specifying
1393     it explicitly is to disable warnings about using inline functions
1394     in C99 mode.  Likewise, the option `-fno-gnu89-inline' is not
1395     supported in versions of GCC before 4.3.  It will be supported
1396     only in C99 or gnu99 mode, not in C89 or gnu89 mode.
1397
1398     The preprocesor macros `__GNUC_GNU_INLINE__' and
1399     `__GNUC_STDC_INLINE__' may be used to check which semantics are in
1400     effect for `inline' functions.  *Note Common Predefined Macros:
1401     (cpp)Common Predefined Macros.
1402
1403`-aux-info FILENAME'
1404     Output to the given filename prototyped declarations for all
1405     functions declared and/or defined in a translation unit, including
1406     those in header files.  This option is silently ignored in any
1407     language other than C.
1408
1409     Besides declarations, the file indicates, in comments, the origin
1410     of each declaration (source file and line), whether the
1411     declaration was implicit, prototyped or unprototyped (`I', `N' for
1412     new or `O' for old, respectively, in the first character after the
1413     line number and the colon), and whether it came from a declaration
1414     or a definition (`C' or `F', respectively, in the following
1415     character).  In the case of function definitions, a K&R-style list
1416     of arguments followed by their declarations is also provided,
1417     inside comments, after the declaration.
1418
1419`-fno-asm'
1420     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1421     code can use these words as identifiers.  You can use the keywords
1422     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1423     `-fno-asm'.
1424
1425     In C++, this switch only affects the `typeof' keyword, since `asm'
1426     and `inline' are standard keywords.  You may want to use the
1427     `-fno-gnu-keywords' flag instead, which has the same effect.  In
1428     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1429     the `asm' and `typeof' keywords, since `inline' is a standard
1430     keyword in ISO C99.
1431
1432`-fno-builtin'
1433`-fno-builtin-FUNCTION'
1434     Don't recognize built-in functions that do not begin with
1435     `__builtin_' as prefix.  *Note Other built-in functions provided
1436     by GCC: Other Builtins, for details of the functions affected,
1437     including those which are not built-in functions when `-ansi' or
1438     `-std' options for strict ISO C conformance are used because they
1439     do not have an ISO standard meaning.
1440
1441     GCC normally generates special code to handle certain built-in
1442     functions more efficiently; for instance, calls to `alloca' may
1443     become single instructions that adjust the stack directly, and
1444     calls to `memcpy' may become inline copy loops.  The resulting
1445     code is often both smaller and faster, but since the function
1446     calls no longer appear as such, you cannot set a breakpoint on
1447     those calls, nor can you change the behavior of the functions by
1448     linking with a different library.  In addition, when a function is
1449     recognized as a built-in function, GCC may use information about
1450     that function to warn about problems with calls to that function,
1451     or to generate more efficient code, even if the resulting code
1452     still contains calls to that function.  For example, warnings are
1453     given with `-Wformat' for bad calls to `printf', when `printf' is
1454     built in, and `strlen' is known not to modify global memory.
1455
1456     With the `-fno-builtin-FUNCTION' option only the built-in function
1457     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1458     If a function is named this is not built-in in this version of
1459     GCC, this option is ignored.  There is no corresponding
1460     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1461     functions selectively when using `-fno-builtin' or
1462     `-ffreestanding', you may define macros such as:
1463
1464          #define abs(n)          __builtin_abs ((n))
1465          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1466
1467`-fhosted'
1468     Assert that compilation takes place in a hosted environment.  This
1469     implies `-fbuiltin'.  A hosted environment is one in which the
1470     entire standard library is available, and in which `main' has a
1471     return type of `int'.  Examples are nearly everything except a
1472     kernel.  This is equivalent to `-fno-freestanding'.
1473
1474`-ffreestanding'
1475     Assert that compilation takes place in a freestanding environment.
1476     This implies `-fno-builtin'.  A freestanding environment is one
1477     in which the standard library may not exist, and program startup
1478     may not necessarily be at `main'.  The most obvious example is an
1479     OS kernel.  This is equivalent to `-fno-hosted'.
1480
1481     *Note Language Standards Supported by GCC: Standards, for details
1482     of freestanding and hosted environments.
1483
1484`-fopenmp'
1485     Enable handling of OpenMP directives `#pragma omp' in C/C++ and
1486     `!$omp' in Fortran.  When `-fopenmp' is specified, the compiler
1487     generates parallel code according to the OpenMP Application
1488     Program Interface v2.5 `http://www.openmp.org/'.
1489
1490`-fms-extensions'
1491     Accept some non-standard constructs used in Microsoft header files.
1492
1493     Some cases of unnamed fields in structures and unions are only
1494     accepted with this option.  *Note Unnamed struct/union fields
1495     within structs/unions: Unnamed Fields, for details.
1496
1497`-trigraphs'
1498     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
1499     for strict ISO C conformance) implies `-trigraphs'.
1500
1501`-no-integrated-cpp'
1502     Performs a compilation in two passes: preprocessing and compiling.
1503     This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1504     via the `-B' option.  The user supplied compilation step can then
1505     add in an additional preprocessing step after normal preprocessing
1506     but before compiling.  The default is to use the integrated cpp
1507     (internal cpp)
1508
1509     The semantics of this option will change if "cc1", "cc1plus", and
1510     "cc1obj" are merged.
1511
1512`-traditional'
1513`-traditional-cpp'
1514     Formerly, these options caused GCC to attempt to emulate a
1515     pre-standard C compiler.  They are now only supported with the
1516     `-E' switch.  The preprocessor continues to support a pre-standard
1517     mode.  See the GNU CPP manual for details.
1518
1519`-fcond-mismatch'
1520     Allow conditional expressions with mismatched types in the second
1521     and third arguments.  The value of such an expression is void.
1522     This option is not supported for C++.
1523
1524`-funsigned-char'
1525     Let the type `char' be unsigned, like `unsigned char'.
1526
1527     Each kind of machine has a default for what `char' should be.  It
1528     is either like `unsigned char' by default or like `signed char' by
1529     default.
1530
1531     Ideally, a portable program should always use `signed char' or
1532     `unsigned char' when it depends on the signedness of an object.
1533     But many programs have been written to use plain `char' and expect
1534     it to be signed, or expect it to be unsigned, depending on the
1535     machines they were written for.  This option, and its inverse, let
1536     you make such a program work with the opposite default.
1537
1538     The type `char' is always a distinct type from each of `signed
1539     char' or `unsigned char', even though its behavior is always just
1540     like one of those two.
1541
1542`-fsigned-char'
1543     Let the type `char' be signed, like `signed char'.
1544
1545     Note that this is equivalent to `-fno-unsigned-char', which is the
1546     negative form of `-funsigned-char'.  Likewise, the option
1547     `-fno-signed-char' is equivalent to `-funsigned-char'.
1548
1549`-fsigned-bitfields'
1550`-funsigned-bitfields'
1551`-fno-signed-bitfields'
1552`-fno-unsigned-bitfields'
1553     These options control whether a bit-field is signed or unsigned,
1554     when the declaration does not use either `signed' or `unsigned'.
1555     By default, such a bit-field is signed, because this is
1556     consistent: the basic integer types such as `int' are signed types.
1557
1558
1559File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C and Objective-C++ Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
1560
15613.5 Options Controlling C++ Dialect
1562===================================
1563
1564This section describes the command-line options that are only meaningful
1565for C++ programs; but you can also use most of the GNU compiler options
1566regardless of what language your program is in.  For example, you might
1567compile a file `firstClass.C' like this:
1568
1569     g++ -g -frepo -O -c firstClass.C
1570
1571In this example, only `-frepo' is an option meant only for C++
1572programs; you can use the other options with any language supported by
1573GCC.
1574
1575 Here is a list of options that are _only_ for compiling C++ programs:
1576
1577`-fabi-version=N'
1578     Use version N of the C++ ABI.  Version 2 is the version of the C++
1579     ABI that first appeared in G++ 3.4.  Version 1 is the version of
1580     the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1581     be the version that conforms most closely to the C++ ABI
1582     specification.  Therefore, the ABI obtained using version 0 will
1583     change as ABI bugs are fixed.
1584
1585     The default is version 2.
1586
1587`-fno-access-control'
1588     Turn off all access checking.  This switch is mainly useful for
1589     working around bugs in the access control code.
1590
1591`-fcheck-new'
1592     Check that the pointer returned by `operator new' is non-null
1593     before attempting to modify the storage allocated.  This check is
1594     normally unnecessary because the C++ standard specifies that
1595     `operator new' will only return `0' if it is declared `throw()',
1596     in which case the compiler will always check the return value even
1597     without this option.  In all other cases, when `operator new' has
1598     a non-empty exception specification, memory exhaustion is
1599     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
1600
1601`-fconserve-space'
1602     Put uninitialized or runtime-initialized global variables into the
1603     common segment, as C does.  This saves space in the executable at
1604     the cost of not diagnosing duplicate definitions.  If you compile
1605     with this flag and your program mysteriously crashes after
1606     `main()' has completed, you may have an object that is being
1607     destroyed twice because two definitions were merged.
1608
1609     This option is no longer useful on most targets, now that support
1610     has been added for putting variables into BSS without making them
1611     common.
1612
1613`-ffriend-injection'
1614     Inject friend functions into the enclosing namespace, so that they
1615     are visible outside the scope of the class in which they are
1616     declared.  Friend functions were documented to work this way in
1617     the old Annotated C++ Reference Manual, and versions of G++ before
1618     4.1 always worked that way.  However, in ISO C++ a friend function
1619     which is not declared in an enclosing scope can only be found
1620     using argument dependent lookup.  This option causes friends to be
1621     injected as they were in earlier releases.
1622
1623     This option is for compatibility, and may be removed in a future
1624     release of G++.
1625
1626`-fno-elide-constructors'
1627     The C++ standard allows an implementation to omit creating a
1628     temporary which is only used to initialize another object of the
1629     same type.  Specifying this option disables that optimization, and
1630     forces G++ to call the copy constructor in all cases.
1631
1632`-fno-enforce-eh-specs'
1633     Don't generate code to check for violation of exception
1634     specifications at runtime.  This option violates the C++ standard,
1635     but may be useful for reducing code size in production builds,
1636     much like defining `NDEBUG'.  This does not give user code
1637     permission to throw exceptions in violation of the exception
1638     specifications; the compiler will still optimize based on the
1639     specifications, so throwing an unexpected exception will result in
1640     undefined behavior.
1641
1642`-ffor-scope'
1643`-fno-for-scope'
1644     If `-ffor-scope' is specified, the scope of variables declared in
1645     a for-init-statement is limited to the `for' loop itself, as
1646     specified by the C++ standard.  If `-fno-for-scope' is specified,
1647     the scope of variables declared in a for-init-statement extends to
1648     the end of the enclosing scope, as was the case in old versions of
1649     G++, and other (traditional) implementations of C++.
1650
1651     The default if neither flag is given to follow the standard, but
1652     to allow and give a warning for old-style code that would
1653     otherwise be invalid, or have different behavior.
1654
1655`-fno-gnu-keywords'
1656     Do not recognize `typeof' as a keyword, so that code can use this
1657     word as an identifier.  You can use the keyword `__typeof__'
1658     instead.  `-ansi' implies `-fno-gnu-keywords'.
1659
1660`-fno-implicit-templates'
1661     Never emit code for non-inline templates which are instantiated
1662     implicitly (i.e. by use); only emit code for explicit
1663     instantiations.  *Note Template Instantiation::, for more
1664     information.
1665
1666`-fno-implicit-inline-templates'
1667     Don't emit code for implicit instantiations of inline templates,
1668     either.  The default is to handle inlines differently so that
1669     compiles with and without optimization will need the same set of
1670     explicit instantiations.
1671
1672`-fno-implement-inlines'
1673     To save space, do not emit out-of-line copies of inline functions
1674     controlled by `#pragma implementation'.  This will cause linker
1675     errors if these functions are not inlined everywhere they are
1676     called.
1677
1678`-fms-extensions'
1679     Disable pedantic warnings about constructs used in MFC, such as
1680     implicit int and getting a pointer to member function via
1681     non-standard syntax.
1682
1683`-fno-nonansi-builtins'
1684     Disable built-in declarations of functions that are not mandated by
1685     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
1686     `bzero', `conjf', and other related functions.
1687
1688`-fno-operator-names'
1689     Do not treat the operator name keywords `and', `bitand', `bitor',
1690     `compl', `not', `or' and `xor' as synonyms as keywords.
1691
1692`-fno-optional-diags'
1693     Disable diagnostics that the standard says a compiler does not
1694     need to issue.  Currently, the only such diagnostic issued by G++
1695     is the one for a name having multiple meanings within a class.
1696
1697`-fpermissive'
1698     Downgrade some diagnostics about nonconformant code from errors to
1699     warnings.  Thus, using `-fpermissive' will allow some
1700     nonconforming code to compile.
1701
1702`-frepo'
1703     Enable automatic template instantiation at link time.  This option
1704     also implies `-fno-implicit-templates'.  *Note Template
1705     Instantiation::, for more information.
1706
1707`-fno-rtti'
1708     Disable generation of information about every class with virtual
1709     functions for use by the C++ runtime type identification features
1710     (`dynamic_cast' and `typeid').  If you don't use those parts of
1711     the language, you can save some space by using this flag.  Note
1712     that exception handling uses the same information, but it will
1713     generate it as needed. The `dynamic_cast' operator can still be
1714     used for casts that do not require runtime type information, i.e.
1715     casts to `void *' or to unambiguous base classes.
1716
1717`-fstats'
1718     Emit statistics about front-end processing at the end of the
1719     compilation.  This information is generally only useful to the G++
1720     development team.
1721
1722`-ftemplate-depth-N'
1723     Set the maximum instantiation depth for template classes to N.  A
1724     limit on the template instantiation depth is needed to detect
1725     endless recursions during template class instantiation.  ANSI/ISO
1726     C++ conforming programs must not rely on a maximum depth greater
1727     than 17.
1728
1729`-fno-threadsafe-statics'
1730     Do not emit the extra code to use the routines specified in the C++
1731     ABI for thread-safe initialization of local statics.  You can use
1732     this option to reduce code size slightly in code that doesn't need
1733     to be thread-safe.
1734
1735`-fuse-cxa-atexit'
1736     Register destructors for objects with static storage duration with
1737     the `__cxa_atexit' function rather than the `atexit' function.
1738     This option is required for fully standards-compliant handling of
1739     static destructors, but will only work if your C library supports
1740     `__cxa_atexit'.
1741
1742`-fno-use-cxa-get-exception-ptr'
1743     Don't use the `__cxa_get_exception_ptr' runtime routine.  This
1744     will cause `std::uncaught_exception' to be incorrect, but is
1745     necessary if the runtime routine is not available.
1746
1747`-fvisibility-inlines-hidden'
1748     This switch declares that the user does not attempt to compare
1749     pointers to inline methods where the addresses of the two functions
1750     were taken in different shared objects.
1751
1752     The effect of this is that GCC may, effectively, mark inline
1753     methods with `__attribute__ ((visibility ("hidden")))' so that
1754     they do not appear in the export table of a DSO and do not require
1755     a PLT indirection when used within the DSO.  Enabling this option
1756     can have a dramatic effect on load and link times of a DSO as it
1757     massively reduces the size of the dynamic export table when the
1758     library makes heavy use of templates.
1759
1760     The behaviour of this switch is not quite the same as marking the
1761     methods as hidden directly, because it does not affect static
1762     variables local to the function or cause the compiler to deduce
1763     that the function is defined in only one shared object.
1764
1765     You may mark a method as having a visibility explicitly to negate
1766     the effect of the switch for that method.  For example, if you do
1767     want to compare pointers to a particular inline method, you might
1768     mark it as having default visibility.  Marking the enclosing class
1769     with explicit visibility will have no effect.
1770
1771     Explicitly instantiated inline methods are unaffected by this
1772     option as their linkage might otherwise cross a shared library
1773     boundary.  *Note Template Instantiation::.
1774
1775`-fno-weak'
1776     Do not use weak symbol support, even if it is provided by the
1777     linker.  By default, G++ will use weak symbols if they are
1778     available.  This option exists only for testing, and should not be
1779     used by end-users; it will result in inferior code and has no
1780     benefits.  This option may be removed in a future release of G++.
1781
1782`-nostdinc++'
1783     Do not search for header files in the standard directories
1784     specific to C++, but do still search the other standard
1785     directories.  (This option is used when building the C++ library.)
1786
1787 In addition, these optimization, warning, and code generation options
1788have meanings only for C++ programs:
1789
1790`-fno-default-inline'
1791     Do not assume `inline' for functions defined inside a class scope.
1792     *Note Options That Control Optimization: Optimize Options.  Note
1793     that these functions will have linkage like inline functions; they
1794     just won't be inlined by default.
1795
1796`-Wabi (C++ only)'
1797     Warn when G++ generates code that is probably not compatible with
1798     the vendor-neutral C++ ABI.  Although an effort has been made to
1799     warn about all such cases, there are probably some cases that are
1800     not warned about, even though G++ is generating incompatible code.
1801     There may also be cases where warnings are emitted even though
1802     the code that is generated will be compatible.
1803
1804     You should rewrite your code to avoid these warnings if you are
1805     concerned about the fact that code generated by G++ may not be
1806     binary compatible with code generated by other compilers.
1807
1808     The known incompatibilities at this point include:
1809
1810        * Incorrect handling of tail-padding for bit-fields.  G++ may
1811          attempt to pack data into the same byte as a base class.  For
1812          example:
1813
1814               struct A { virtual void f(); int f1 : 1; };
1815               struct B : public A { int f2 : 1; };
1816
1817          In this case, G++ will place `B::f2' into the same byte
1818          as`A::f1'; other compilers will not.  You can avoid this
1819          problem by explicitly padding `A' so that its size is a
1820          multiple of the byte size on your platform; that will cause
1821          G++ and other compilers to layout `B' identically.
1822
1823        * Incorrect handling of tail-padding for virtual bases.  G++
1824          does not use tail padding when laying out virtual bases.  For
1825          example:
1826
1827               struct A { virtual void f(); char c1; };
1828               struct B { B(); char c2; };
1829               struct C : public A, public virtual B {};
1830
1831          In this case, G++ will not place `B' into the tail-padding for
1832          `A'; other compilers will.  You can avoid this problem by
1833          explicitly padding `A' so that its size is a multiple of its
1834          alignment (ignoring virtual base classes); that will cause
1835          G++ and other compilers to layout `C' identically.
1836
1837        * Incorrect handling of bit-fields with declared widths greater
1838          than that of their underlying types, when the bit-fields
1839          appear in a union.  For example:
1840
1841               union U { int i : 4096; };
1842
1843          Assuming that an `int' does not have 4096 bits, G++ will make
1844          the union too small by the number of bits in an `int'.
1845
1846        * Empty classes can be placed at incorrect offsets.  For
1847          example:
1848
1849               struct A {};
1850
1851               struct B {
1852                 A a;
1853                 virtual void f ();
1854               };
1855
1856               struct C : public B, public A {};
1857
1858          G++ will place the `A' base class of `C' at a nonzero offset;
1859          it should be placed at offset zero.  G++ mistakenly believes
1860          that the `A' data member of `B' is already at offset zero.
1861
1862        * Names of template functions whose types involve `typename' or
1863          template template parameters can be mangled incorrectly.
1864
1865               template <typename Q>
1866               void f(typename Q::X) {}
1867
1868               template <template <typename> class Q>
1869               void f(typename Q<int>::X) {}
1870
1871          Instantiations of these templates may be mangled incorrectly.
1872
1873
1874`-Wctor-dtor-privacy (C++ only)'
1875     Warn when a class seems unusable because all the constructors or
1876     destructors in that class are private, and it has neither friends
1877     nor public static member functions.
1878
1879`-Wnon-virtual-dtor (C++ only)'
1880     Warn when a class appears to be polymorphic, thereby requiring a
1881     virtual destructor, yet it declares a non-virtual one.  This
1882     warning is also enabled if -Weffc++ is specified.
1883
1884`-Wreorder (C++ only)'
1885     Warn when the order of member initializers given in the code does
1886     not match the order in which they must be executed.  For instance:
1887
1888          struct A {
1889            int i;
1890            int j;
1891            A(): j (0), i (1) { }
1892          };
1893
1894     The compiler will rearrange the member initializers for `i' and
1895     `j' to match the declaration order of the members, emitting a
1896     warning to that effect.  This warning is enabled by `-Wall'.
1897
1898 The following `-W...' options are not affected by `-Wall'.
1899
1900`-Weffc++ (C++ only)'
1901     Warn about violations of the following style guidelines from Scott
1902     Meyers' `Effective C++' book:
1903
1904        * Item 11:  Define a copy constructor and an assignment
1905          operator for classes with dynamically allocated memory.
1906
1907        * Item 12:  Prefer initialization to assignment in constructors.
1908
1909        * Item 14:  Make destructors virtual in base classes.
1910
1911        * Item 15:  Have `operator=' return a reference to `*this'.
1912
1913        * Item 23:  Don't try to return a reference when you must
1914          return an object.
1915
1916
1917     Also warn about violations of the following style guidelines from
1918     Scott Meyers' `More Effective C++' book:
1919
1920        * Item 6:  Distinguish between prefix and postfix forms of
1921          increment and decrement operators.
1922
1923        * Item 7:  Never overload `&&', `||', or `,'.
1924
1925
1926     When selecting this option, be aware that the standard library
1927     headers do not obey all of these guidelines; use `grep -v' to
1928     filter out those warnings.
1929
1930`-Wno-deprecated (C++ only)'
1931     Do not warn about usage of deprecated features.  *Note Deprecated
1932     Features::.
1933
1934`-Wstrict-null-sentinel (C++ only)'
1935     Warn also about the use of an uncasted `NULL' as sentinel.  When
1936     compiling only with GCC this is a valid sentinel, as `NULL' is
1937     defined to `__null'.  Although it is a null pointer constant not a
1938     null pointer, it is guaranteed to of the same size as a pointer.
1939     But this use is not portable across different compilers.
1940
1941`-Wno-non-template-friend (C++ only)'
1942     Disable warnings when non-templatized friend functions are declared
1943     within a template.  Since the advent of explicit template
1944     specification support in G++, if the name of the friend is an
1945     unqualified-id (i.e., `friend foo(int)'), the C++ language
1946     specification demands that the friend declare or define an
1947     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
1948     implemented explicit specification, unqualified-ids could be
1949     interpreted as a particular specialization of a templatized
1950     function.  Because this non-conforming behavior is no longer the
1951     default behavior for G++, `-Wnon-template-friend' allows the
1952     compiler to check existing code for potential trouble spots and is
1953     on by default.  This new compiler behavior can be turned off with
1954     `-Wno-non-template-friend' which keeps the conformant compiler code
1955     but disables the helpful warning.
1956
1957`-Wold-style-cast (C++ only)'
1958     Warn if an old-style (C-style) cast to a non-void type is used
1959     within a C++ program.  The new-style casts (`dynamic_cast',
1960     `static_cast', `reinterpret_cast', and `const_cast') are less
1961     vulnerable to unintended effects and much easier to search for.
1962
1963`-Woverloaded-virtual (C++ only)'
1964     Warn when a function declaration hides virtual functions from a
1965     base class.  For example, in:
1966
1967          struct A {
1968            virtual void f();
1969          };
1970
1971          struct B: public A {
1972            void f(int);
1973          };
1974
1975     the `A' class version of `f' is hidden in `B', and code like:
1976
1977          B* b;
1978          b->f();
1979
1980     will fail to compile.
1981
1982`-Wno-pmf-conversions (C++ only)'
1983     Disable the diagnostic for converting a bound pointer to member
1984     function to a plain pointer.
1985
1986`-Wsign-promo (C++ only)'
1987     Warn when overload resolution chooses a promotion from unsigned or
1988     enumerated type to a signed type, over a conversion to an unsigned
1989     type of the same size.  Previous versions of G++ would try to
1990     preserve unsignedness, but the standard mandates the current
1991     behavior.
1992
1993          struct A {
1994            operator int ();
1995            A& operator = (int);
1996          };
1997
1998          main ()
1999          {
2000            A a,b;
2001            a = b;
2002          }
2003
2004     In this example, G++ will synthesize a default `A& operator =
2005     (const A&);', while cfront will use the user-defined `operator ='.
2006
2007
2008File: gcc.info,  Node: Objective-C and Objective-C++ Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
2009
20103.6 Options Controlling Objective-C and Objective-C++ Dialects
2011==============================================================
2012
2013(NOTE: This manual does not describe the Objective-C and Objective-C++
2014languages themselves.  See *Note Language Standards Supported by GCC:
2015Standards, for references.)
2016
2017 This section describes the command-line options that are only
2018meaningful for Objective-C and Objective-C++ programs, but you can also
2019use most of the language-independent GNU compiler options.  For
2020example, you might compile a file `some_class.m' like this:
2021
2022     gcc -g -fgnu-runtime -O -c some_class.m
2023
2024In this example, `-fgnu-runtime' is an option meant only for
2025Objective-C and Objective-C++ programs; you can use the other options
2026with any language supported by GCC.
2027
2028 Note that since Objective-C is an extension of the C language,
2029Objective-C compilations may also use options specific to the C
2030front-end (e.g., `-Wtraditional').  Similarly, Objective-C++
2031compilations may use C++-specific options (e.g., `-Wabi').
2032
2033 Here is a list of options that are _only_ for compiling Objective-C
2034and Objective-C++ programs:
2035
2036`-fconstant-string-class=CLASS-NAME'
2037     Use CLASS-NAME as the name of the class to instantiate for each
2038     literal string specified with the syntax `@"..."'.  The default
2039     class name is `NXConstantString' if the GNU runtime is being used,
2040     and `NSConstantString' if the NeXT runtime is being used (see
2041     below).  The `-fconstant-cfstrings' option, if also present, will
2042     override the `-fconstant-string-class' setting and cause `@"..."'
2043     literals to be laid out as constant CoreFoundation strings.
2044
2045`-fgnu-runtime'
2046     Generate object code compatible with the standard GNU Objective-C
2047     runtime.  This is the default for most types of systems.
2048
2049`-fnext-runtime'
2050     Generate output compatible with the NeXT runtime.  This is the
2051     default for NeXT-based systems, including Darwin and Mac OS X.
2052     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
2053     option is used.
2054
2055`-fno-nil-receivers'
2056     Assume that all Objective-C message dispatches (e.g., `[receiver
2057     message:arg]') in this translation unit ensure that the receiver
2058     is not `nil'.  This allows for more efficient entry points in the
2059     runtime to be used.  Currently, this option is only available in
2060     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2061
2062`-fobjc-call-cxx-cdtors'
2063     For each Objective-C class, check if any of its instance variables
2064     is a C++ object with a non-trivial default constructor.  If so,
2065     synthesize a special `- (id) .cxx_construct' instance method that
2066     will run non-trivial default constructors on any such instance
2067     variables, in order, and then return `self'.  Similarly, check if
2068     any instance variable is a C++ object with a non-trivial
2069     destructor, and if so, synthesize a special `- (void)
2070     .cxx_destruct' method that will run all such default destructors,
2071     in reverse order.
2072
2073     The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods
2074     thusly generated will only operate on instance variables declared
2075     in the current Objective-C class, and not those inherited from
2076     superclasses.  It is the responsibility of the Objective-C runtime
2077     to invoke all such methods in an object's inheritance hierarchy.
2078     The `- (id) .cxx_construct' methods will be invoked by the runtime
2079     immediately after a new object instance is allocated; the `-
2080     (void) .cxx_destruct' methods will be invoked immediately before
2081     the runtime deallocates an object instance.
2082
2083     As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2084     later has support for invoking the `- (id) .cxx_construct' and `-
2085     (void) .cxx_destruct' methods.
2086
2087`-fobjc-direct-dispatch'
2088     Allow fast jumps to the message dispatcher.  On Darwin this is
2089     accomplished via the comm page.
2090
2091`-fobjc-exceptions'
2092     Enable syntactic support for structured exception handling in
2093     Objective-C, similar to what is offered by C++ and Java.  This
2094     option is unavailable in conjunction with the NeXT runtime on Mac
2095     OS X 10.2 and earlier.
2096
2097            @try {
2098              ...
2099                 @throw expr;
2100              ...
2101            }
2102            @catch (AnObjCClass *exc) {
2103              ...
2104                @throw expr;
2105              ...
2106                @throw;
2107              ...
2108            }
2109            @catch (AnotherClass *exc) {
2110              ...
2111            }
2112            @catch (id allOthers) {
2113              ...
2114            }
2115            @finally {
2116              ...
2117                @throw expr;
2118              ...
2119            }
2120
2121     The `@throw' statement may appear anywhere in an Objective-C or
2122     Objective-C++ program; when used inside of a `@catch' block, the
2123     `@throw' may appear without an argument (as shown above), in which
2124     case the object caught by the `@catch' will be rethrown.
2125
2126     Note that only (pointers to) Objective-C objects may be thrown and
2127     caught using this scheme.  When an object is thrown, it will be
2128     caught by the nearest `@catch' clause capable of handling objects
2129     of that type, analogously to how `catch' blocks work in C++ and
2130     Java.  A `@catch(id ...)' clause (as shown above) may also be
2131     provided to catch any and all Objective-C exceptions not caught by
2132     previous `@catch' clauses (if any).
2133
2134     The `@finally' clause, if present, will be executed upon exit from
2135     the immediately preceding `@try ... @catch' section.  This will
2136     happen regardless of whether any exceptions are thrown, caught or
2137     rethrown inside the `@try ... @catch' section, analogously to the
2138     behavior of the `finally' clause in Java.
2139
2140     There are several caveats to using the new exception mechanism:
2141
2142        * Although currently designed to be binary compatible with
2143          `NS_HANDLER'-style idioms provided by the `NSException'
2144          class, the new exceptions can only be used on Mac OS X 10.3
2145          (Panther) and later systems, due to additional functionality
2146          needed in the (NeXT) Objective-C runtime.
2147
2148        * As mentioned above, the new exceptions do not support handling
2149          types other than Objective-C objects.   Furthermore, when
2150          used from Objective-C++, the Objective-C exception model does
2151          not interoperate with C++ exceptions at this time.  This
2152          means you cannot `@throw' an exception from Objective-C and
2153          `catch' it in C++, or vice versa (i.e., `throw ... @catch').
2154
2155     The `-fobjc-exceptions' switch also enables the use of
2156     synchronization blocks for thread-safe execution:
2157
2158            @synchronized (ObjCClass *guard) {
2159              ...
2160            }
2161
2162     Upon entering the `@synchronized' block, a thread of execution
2163     shall first check whether a lock has been placed on the
2164     corresponding `guard' object by another thread.  If it has, the
2165     current thread shall wait until the other thread relinquishes its
2166     lock.  Once `guard' becomes available, the current thread will
2167     place its own lock on it, execute the code contained in the
2168     `@synchronized' block, and finally relinquish the lock (thereby
2169     making `guard' available to other threads).
2170
2171     Unlike Java, Objective-C does not allow for entire methods to be
2172     marked `@synchronized'.  Note that throwing exceptions out of
2173     `@synchronized' blocks is allowed, and will cause the guarding
2174     object to be unlocked properly.
2175
2176`-fobjc-gc'
2177     Enable garbage collection (GC) in Objective-C and Objective-C++
2178     programs.
2179
2180`-freplace-objc-classes'
2181     Emit a special marker instructing `ld(1)' not to statically link in
2182     the resulting object file, and allow `dyld(1)' to load it in at
2183     run time instead.  This is used in conjunction with the
2184     Fix-and-Continue debugging mode, where the object file in question
2185     may be recompiled and dynamically reloaded in the course of
2186     program execution, without the need to restart the program itself.
2187     Currently, Fix-and-Continue functionality is only available in
2188     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2189
2190`-fzero-link'
2191     When compiling for the NeXT runtime, the compiler ordinarily
2192     replaces calls to `objc_getClass("...")' (when the name of the
2193     class is known at compile time) with static class references that
2194     get initialized at load time, which improves run-time performance.
2195     Specifying the `-fzero-link' flag suppresses this behavior and
2196     causes calls to `objc_getClass("...")' to be retained.  This is
2197     useful in Zero-Link debugging mode, since it allows for individual
2198     class implementations to be modified during program execution.
2199
2200`-gen-decls'
2201     Dump interface declarations for all classes seen in the source
2202     file to a file named `SOURCENAME.decl'.
2203
2204`-Wassign-intercept'
2205     Warn whenever an Objective-C assignment is being intercepted by the
2206     garbage collector.
2207
2208`-Wno-protocol'
2209     If a class is declared to implement a protocol, a warning is
2210     issued for every method in the protocol that is not implemented by
2211     the class.  The default behavior is to issue a warning for every
2212     method not explicitly implemented in the class, even if a method
2213     implementation is inherited from the superclass.  If you use the
2214     `-Wno-protocol' option, then methods inherited from the superclass
2215     are considered to be implemented, and no warning is issued for
2216     them.
2217
2218`-Wselector'
2219     Warn if multiple methods of different types for the same selector
2220     are found during compilation.  The check is performed on the list
2221     of methods in the final stage of compilation.  Additionally, a
2222     check is performed for each selector appearing in a
2223     `@selector(...)'  expression, and a corresponding method for that
2224     selector has been found during compilation.  Because these checks
2225     scan the method table only at the end of compilation, these
2226     warnings are not produced if the final stage of compilation is not
2227     reached, for example because an error is found during compilation,
2228     or because the `-fsyntax-only' option is being used.
2229
2230`-Wstrict-selector-match'
2231     Warn if multiple methods with differing argument and/or return
2232     types are found for a given selector when attempting to send a
2233     message using this selector to a receiver of type `id' or `Class'.
2234     When this flag is off (which is the default behavior), the
2235     compiler will omit such warnings if any differences found are
2236     confined to types which share the same size and alignment.
2237
2238`-Wundeclared-selector'
2239     Warn if a `@selector(...)' expression referring to an undeclared
2240     selector is found.  A selector is considered undeclared if no
2241     method with that name has been declared before the
2242     `@selector(...)' expression, either explicitly in an `@interface'
2243     or `@protocol' declaration, or implicitly in an `@implementation'
2244     section.  This option always performs its checks as soon as a
2245     `@selector(...)' expression is found, while `-Wselector' only
2246     performs its checks in the final stage of compilation.  This also
2247     enforces the coding style convention that methods and selectors
2248     must be declared before being used.
2249
2250`-print-objc-runtime-info'
2251     Generate C header describing the largest structure that is passed
2252     by value, if any.
2253
2254
2255
2256File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C and Objective-C++ Dialect Options,  Up: Invoking GCC
2257
22583.7 Options to Control Diagnostic Messages Formatting
2259=====================================================
2260
2261Traditionally, diagnostic messages have been formatted irrespective of
2262the output device's aspect (e.g. its width, ...).  The options described
2263below can be used to control the diagnostic messages formatting
2264algorithm, e.g. how many characters per line, how often source location
2265information should be reported.  Right now, only the C++ front end can
2266honor these options.  However it is expected, in the near future, that
2267the remaining front ends would be able to digest them correctly.
2268
2269`-fmessage-length=N'
2270     Try to format error messages so that they fit on lines of about N
2271     characters.  The default is 72 characters for `g++' and 0 for the
2272     rest of the front ends supported by GCC.  If N is zero, then no
2273     line-wrapping will be done; each error message will appear on a
2274     single line.
2275
2276`-fdiagnostics-show-location=once'
2277     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2278     messages reporter to emit _once_ source location information; that
2279     is, in case the message is too long to fit on a single physical
2280     line and has to be wrapped, the source location won't be emitted
2281     (as prefix) again, over and over, in subsequent continuation
2282     lines.  This is the default behavior.
2283
2284`-fdiagnostics-show-location=every-line'
2285     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2286     messages reporter to emit the same source location information (as
2287     prefix) for physical lines that result from the process of breaking
2288     a message which is too long to fit on a single line.
2289
2290`-fdiagnostics-show-option'
2291     This option instructs the diagnostic machinery to add text to each
2292     diagnostic emitted, which indicates which command line option
2293     directly controls that diagnostic, when such an option is known to
2294     the diagnostic machinery.
2295
2296
2297
2298File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
2299
23003.8 Options to Request or Suppress Warnings
2301===========================================
2302
2303Warnings are diagnostic messages that report constructions which are
2304not inherently erroneous but which are risky or suggest there may have
2305been an error.
2306
2307 You can request many specific warnings with options beginning `-W',
2308for example `-Wimplicit' to request warnings on implicit declarations.
2309Each of these specific warning options also has a negative form
2310beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2311This manual lists only one of the two forms, whichever is not the
2312default.
2313
2314 The following options control the amount and kinds of warnings produced
2315by GCC; for further, language-specific options also refer to *Note C++
2316Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
2317Options::.
2318
2319`-fsyntax-only'
2320     Check the code for syntax errors, but don't do anything beyond
2321     that.
2322
2323`-pedantic'
2324     Issue all the warnings demanded by strict ISO C and ISO C++;
2325     reject all programs that use forbidden extensions, and some other
2326     programs that do not follow ISO C and ISO C++.  For ISO C, follows
2327     the version of the ISO C standard specified by any `-std' option
2328     used.
2329
2330     Valid ISO C and ISO C++ programs should compile properly with or
2331     without this option (though a rare few will require `-ansi' or a
2332     `-std' option specifying the required version of ISO C).  However,
2333     without this option, certain GNU extensions and traditional C and
2334     C++ features are supported as well.  With this option, they are
2335     rejected.
2336
2337     `-pedantic' does not cause warning messages for use of the
2338     alternate keywords whose names begin and end with `__'.  Pedantic
2339     warnings are also disabled in the expression that follows
2340     `__extension__'.  However, only system header files should use
2341     these escape routes; application programs should avoid them.
2342     *Note Alternate Keywords::.
2343
2344     Some users try to use `-pedantic' to check programs for strict ISO
2345     C conformance.  They soon find that it does not do quite what they
2346     want: it finds some non-ISO practices, but not all--only those for
2347     which ISO C _requires_ a diagnostic, and some others for which
2348     diagnostics have been added.
2349
2350     A feature to report any failure to conform to ISO C might be
2351     useful in some instances, but would require considerable
2352     additional work and would be quite different from `-pedantic'.  We
2353     don't have plans to support such a feature in the near future.
2354
2355     Where the standard specified with `-std' represents a GNU extended
2356     dialect of C, such as `gnu89' or `gnu99', there is a corresponding
2357     "base standard", the version of ISO C on which the GNU extended
2358     dialect is based.  Warnings from `-pedantic' are given where they
2359     are required by the base standard.  (It would not make sense for
2360     such warnings to be given only for features not in the specified
2361     GNU C dialect, since by definition the GNU dialects of C include
2362     all features the compiler supports with the given option, and
2363     there would be nothing to warn about.)
2364
2365`-pedantic-errors'
2366     Like `-pedantic', except that errors are produced rather than
2367     warnings.
2368
2369`-w'
2370     Inhibit all warning messages.
2371
2372`-Wno-import'
2373     Inhibit warning messages about the use of `#import'.
2374
2375`-Wchar-subscripts'
2376     Warn if an array subscript has type `char'.  This is a common cause
2377     of error, as programmers often forget that this type is signed on
2378     some machines.  This warning is enabled by `-Wall'.
2379
2380`-Wcomment'
2381     Warn whenever a comment-start sequence `/*' appears in a `/*'
2382     comment, or whenever a Backslash-Newline appears in a `//' comment.
2383     This warning is enabled by `-Wall'.
2384
2385`-Wfatal-errors'
2386     This option causes the compiler to abort compilation on the first
2387     error occurred rather than trying to keep going and printing
2388     further error messages.
2389
2390`-Wbounded'
2391     Check calls to functions with the `bounded' attribute (*note Function
2392     Attributes::).
2393
2394`-Wformat'
2395     Check calls to `printf' and `scanf', etc., to make sure that the
2396     arguments supplied have types appropriate to the format string
2397     specified, and that the conversions specified in the format string
2398     make sense.  This includes standard functions, and others
2399     specified by format attributes (*note Function Attributes::), in
2400     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2401     extension, not in the C standard) families (or other
2402     target-specific families).  Which functions are checked without
2403     format attributes having been specified depends on the standard
2404     version selected, and such checks of functions without the
2405     attribute specified are disabled by `-ffreestanding' or
2406     `-fno-builtin'.
2407
2408     The formats are checked against the format features supported by
2409     GNU libc version 2.2.  These include all ISO C90 and C99 features,
2410     as well as features from the Single Unix Specification and some
2411     BSD and GNU extensions.  Other library implementations may not
2412     support all these features; GCC does not support warning about
2413     features that go beyond a particular library's limitations.
2414     However, if `-pedantic' is used with `-Wformat', warnings will be
2415     given about format features not in the selected standard version
2416     (but not for `strfmon' formats, since those are not in any version
2417     of the C standard).  *Note Options Controlling C Dialect: C
2418     Dialect Options.
2419
2420     Since `-Wformat' also checks for null format arguments for several
2421     functions, `-Wformat' also implies `-Wnonnull'.
2422
2423     `-Wformat' is included in `-Wall'.  For more control over some
2424     aspects of format checking, the options `-Wformat-y2k',
2425     `-Wno-format-extra-args', `-Wno-format-zero-length',
2426     `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2427     available, but are not included in `-Wall'.
2428
2429`-Wformat-y2k'
2430     If `-Wformat' is specified, also warn about `strftime' formats
2431     which may yield only a two-digit year.
2432
2433`-Wno-format-extra-args'
2434     If `-Wformat' is specified, do not warn about excess arguments to a
2435     `printf' or `scanf' format function.  The C standard specifies
2436     that such arguments are ignored.
2437
2438     Where the unused arguments lie between used arguments that are
2439     specified with `$' operand number specifications, normally
2440     warnings are still given, since the implementation could not know
2441     what type to pass to `va_arg' to skip the unused arguments.
2442     However, in the case of `scanf' formats, this option will suppress
2443     the warning if the unused arguments are all pointers, since the
2444     Single Unix Specification says that such unused arguments are
2445     allowed.
2446
2447`-Wno-format-zero-length'
2448     If `-Wformat' is specified, do not warn about zero-length formats.
2449     The C standard specifies that zero-length formats are allowed.
2450
2451`-Wformat-nonliteral'
2452     If `-Wformat' is specified, also warn if the format string is not a
2453     string literal and so cannot be checked, unless the format function
2454     takes its format arguments as a `va_list'.
2455
2456`-Wformat-security'
2457     If `-Wformat' is specified, also warn about uses of format
2458     functions that represent possible security problems.  At present,
2459     this warns about calls to `printf' and `scanf' functions where the
2460     format string is not a string literal and there are no format
2461     arguments, as in `printf (foo);'.  This may be a security hole if
2462     the format string came from untrusted input and contains `%n'.
2463     (This is currently a subset of what `-Wformat-nonliteral' warns
2464     about, but in future warnings may be added to `-Wformat-security'
2465     that are not included in `-Wformat-nonliteral'.)
2466
2467`-Wformat=2'
2468     Enable `-Wformat' plus format checks not included in `-Wformat'.
2469     Currently equivalent to `-Wformat -Wformat-nonliteral
2470     -Wformat-security -Wformat-y2k'.
2471
2472`-Wnonnull'
2473     Warn about passing a null pointer for arguments marked as
2474     requiring a non-null value by the `nonnull' function attribute.
2475
2476     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
2477     disabled with the `-Wno-nonnull' option.
2478
2479`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
2480     Warn about uninitialized variables which are initialized with
2481     themselves.  Note this option can only be used with the
2482     `-Wuninitialized' option, which in turn only works with `-O1' and
2483     above.
2484
2485     For example, GCC will warn about `i' being uninitialized in the
2486     following snippet only when `-Winit-self' has been specified:
2487          int f()
2488          {
2489            int i = i;
2490            return i;
2491          }
2492
2493`-Wimplicit-int'
2494     Warn when a declaration does not specify a type.  This warning is
2495     enabled by `-Wall'.
2496
2497`-Wimplicit-function-declaration'
2498`-Werror-implicit-function-declaration'
2499     Give a warning (or error) whenever a function is used before being
2500     declared.  The form `-Wno-error-implicit-function-declaration' is
2501     not supported.  This warning is enabled by `-Wall' (as a warning,
2502     not an error).
2503
2504`-Wimplicit'
2505     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
2506     This warning is enabled by `-Wall'.
2507
2508`-Wmain'
2509     Warn if the type of `main' is suspicious.  `main' should be a
2510     function with external linkage, returning int, taking either zero
2511     arguments, two, or three arguments of appropriate types.  This
2512     warning is enabled by `-Wall'.
2513
2514`-Wmissing-braces'
2515     Warn if an aggregate or union initializer is not fully bracketed.
2516     In the following example, the initializer for `a' is not fully
2517     bracketed, but that for `b' is fully bracketed.
2518
2519          int a[2][2] = { 0, 1, 2, 3 };
2520          int b[2][2] = { { 0, 1 }, { 2, 3 } };
2521
2522     This warning is enabled by `-Wall'.
2523
2524`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
2525     Warn if a user-supplied include directory does not exist.
2526
2527`-Wparentheses'
2528     Warn if parentheses are omitted in certain contexts, such as when
2529     there is an assignment in a context where a truth value is
2530     expected, or when operators are nested whose precedence people
2531     often get confused about.  Only the warning for an assignment used
2532     as a truth value is supported when compiling C++; the other
2533     warnings are only supported when compiling C.
2534
2535     Also warn if a comparison like `x<=y<=z' appears; this is
2536     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
2537     interpretation from that of ordinary mathematical notation.
2538
2539     Also warn about constructions where there may be confusion to which
2540     `if' statement an `else' branch belongs.  Here is an example of
2541     such a case:
2542
2543          {
2544            if (a)
2545              if (b)
2546                foo ();
2547            else
2548              bar ();
2549          }
2550
2551     In C, every `else' branch belongs to the innermost possible `if'
2552     statement, which in this example is `if (b)'.  This is often not
2553     what the programmer expected, as illustrated in the above example
2554     by indentation the programmer chose.  When there is the potential
2555     for this confusion, GCC will issue a warning when this flag is
2556     specified.  To eliminate the warning, add explicit braces around
2557     the innermost `if' statement so there is no way the `else' could
2558     belong to the enclosing `if'.  The resulting code would look like
2559     this:
2560
2561          {
2562            if (a)
2563              {
2564                if (b)
2565                  foo ();
2566                else
2567                  bar ();
2568              }
2569          }
2570
2571     This warning is enabled by `-Wall'.
2572
2573`-Wsequence-point'
2574     Warn about code that may have undefined semantics because of
2575     violations of sequence point rules in the C and C++ standards.
2576
2577     The C and C++ standards defines the order in which expressions in
2578     a C/C++ program are evaluated in terms of "sequence points", which
2579     represent a partial ordering between the execution of parts of the
2580     program: those executed before the sequence point, and those
2581     executed after it.  These occur after the evaluation of a full
2582     expression (one which is not part of a larger expression), after
2583     the evaluation of the first operand of a `&&', `||', `? :' or `,'
2584     (comma) operator, before a function is called (but after the
2585     evaluation of its arguments and the expression denoting the called
2586     function), and in certain other places.  Other than as expressed
2587     by the sequence point rules, the order of evaluation of
2588     subexpressions of an expression is not specified.  All these rules
2589     describe only a partial order rather than a total order, since,
2590     for example, if two functions are called within one expression
2591     with no sequence point between them, the order in which the
2592     functions are called is not specified.  However, the standards
2593     committee have ruled that function calls do not overlap.
2594
2595     It is not specified when between sequence points modifications to
2596     the values of objects take effect.  Programs whose behavior
2597     depends on this have undefined behavior; the C and C++ standards
2598     specify that "Between the previous and next sequence point an
2599     object shall have its stored value modified at most once by the
2600     evaluation of an expression.  Furthermore, the prior value shall
2601     be read only to determine the value to be stored.".  If a program
2602     breaks these rules, the results on any particular implementation
2603     are entirely unpredictable.
2604
2605     Examples of code with undefined behavior are `a = a++;', `a[n] =
2606     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
2607     diagnosed by this option, and it may give an occasional false
2608     positive result, but in general it has been found fairly effective
2609     at detecting this sort of problem in programs.
2610
2611     The standard is worded confusingly, therefore there is some debate
2612     over the precise meaning of the sequence point rules in subtle
2613     cases.  Links to discussions of the problem, including proposed
2614     formal definitions, may be found on the GCC readings page, at
2615     `http://gcc.gnu.org/readings.html'.
2616
2617     This warning is enabled by `-Wall' for C and C++.
2618
2619`-Wreturn-type'
2620     Warn whenever a function is defined with a return-type that
2621     defaults to `int'.  Also warn about any `return' statement with no
2622     return-value in a function whose return-type is not `void'.
2623
2624     For C, also warn if the return type of a function has a type
2625     qualifier such as `const'.  Such a type qualifier has no effect,
2626     since the value returned by a function is not an lvalue.  ISO C
2627     prohibits qualified `void' return types on function definitions,
2628     so such return types always receive a warning even without this
2629     option.
2630
2631     For C++, a function without return type always produces a
2632     diagnostic message, even when `-Wno-return-type' is specified.
2633     The only exceptions are `main' and functions defined in system
2634     headers.
2635
2636     This warning is enabled by `-Wall'.
2637
2638`-Wswitch'
2639     Warn whenever a `switch' statement has an index of enumerated type
2640     and lacks a `case' for one or more of the named codes of that
2641     enumeration.  (The presence of a `default' label prevents this
2642     warning.)  `case' labels outside the enumeration range also
2643     provoke warnings when this option is used.  This warning is
2644     enabled by `-Wall'.
2645
2646`-Wswitch-default'
2647     Warn whenever a `switch' statement does not have a `default' case.
2648
2649`-Wswitch-enum'
2650     Warn whenever a `switch' statement has an index of enumerated type
2651     and lacks a `case' for one or more of the named codes of that
2652     enumeration.  `case' labels outside the enumeration range also
2653     provoke warnings when this option is used.
2654
2655`-Wtrigraphs'
2656     Warn if any trigraphs are encountered that might change the
2657     meaning of the program (trigraphs within comments are not warned
2658     about).  This warning is enabled by `-Wall'.
2659
2660`-Wunused-function'
2661     Warn whenever a static function is declared but not defined or a
2662     non-inline static function is unused.  This warning is enabled by
2663     `-Wall'.
2664
2665`-Wunused-label'
2666     Warn whenever a label is declared but not used.  This warning is
2667     enabled by `-Wall'.
2668
2669     To suppress this warning use the `unused' attribute (*note
2670     Variable Attributes::).
2671
2672`-Wunused-parameter'
2673     Warn whenever a function parameter is unused aside from its
2674     declaration.
2675
2676     To suppress this warning use the `unused' attribute (*note
2677     Variable Attributes::).
2678
2679`-Wunused-variable'
2680     Warn whenever a local variable or non-constant static variable is
2681     unused aside from its declaration.  This warning is enabled by
2682     `-Wall'.
2683
2684     To suppress this warning use the `unused' attribute (*note
2685     Variable Attributes::).
2686
2687`-Wunused-value'
2688     Warn whenever a statement computes a result that is explicitly not
2689     used.  This warning is enabled by `-Wall'.
2690
2691     To suppress this warning cast the expression to `void'.
2692
2693`-Wunused'
2694     All the above `-Wunused' options combined.
2695
2696     In order to get a warning about an unused function parameter, you
2697     must either specify `-Wextra -Wunused' (note that `-Wall' implies
2698     `-Wunused'), or separately specify `-Wunused-parameter'.
2699
2700`-Wuninitialized'
2701     Warn if an automatic variable is used without first being
2702     initialized or if a variable may be clobbered by a `setjmp' call.
2703
2704     These warnings are possible only in optimizing compilation,
2705     because they require data flow information that is computed only
2706     when optimizing.  If you do not specify `-O', you will not get
2707     these warnings. Instead, GCC will issue a warning about
2708     `-Wuninitialized' requiring `-O'.
2709
2710     If you want to warn about code which uses the uninitialized value
2711     of the variable in its own initializer, use the `-Winit-self'
2712     option.
2713
2714     These warnings occur for individual uninitialized or clobbered
2715     elements of structure, union or array variables as well as for
2716     variables which are uninitialized or clobbered as a whole.  They do
2717     not occur for variables or elements declared `volatile'.  Because
2718     these warnings depend on optimization, the exact variables or
2719     elements for which there are warnings will depend on the precise
2720     optimization options and version of GCC used.
2721
2722     Note that there may be no warning about a variable that is used
2723     only to compute a value that itself is never used, because such
2724     computations may be deleted by data flow analysis before the
2725     warnings are printed.
2726
2727     These warnings are made optional because GCC is not smart enough
2728     to see all the reasons why the code might be correct despite
2729     appearing to have an error.  Here is one example of how this can
2730     happen:
2731
2732          {
2733            int x;
2734            switch (y)
2735              {
2736              case 1: x = 1;
2737                break;
2738              case 2: x = 4;
2739                break;
2740              case 3: x = 5;
2741              }
2742            foo (x);
2743          }
2744
2745     If the value of `y' is always 1, 2 or 3, then `x' is always
2746     initialized, but GCC doesn't know this.  Here is another common
2747     case:
2748
2749          {
2750            int save_y;
2751            if (change_y) save_y = y, y = new_y;
2752            ...
2753            if (change_y) y = save_y;
2754          }
2755
2756     This has no bug because `save_y' is used only if it is set.
2757
2758     This option also warns when a non-volatile automatic variable
2759     might be changed by a call to `longjmp'.  These warnings as well
2760     are possible only in optimizing compilation.
2761
2762     The compiler sees only the calls to `setjmp'.  It cannot know
2763     where `longjmp' will be called; in fact, a signal handler could
2764     call it at any point in the code.  As a result, you may get a
2765     warning even when there is in fact no problem because `longjmp'
2766     cannot in fact be called at the place which would cause a problem.
2767
2768     Some spurious warnings can be avoided if you declare all the
2769     functions you use that never return as `noreturn'.  *Note Function
2770     Attributes::.
2771
2772     This warning is enabled by `-Wall'.
2773
2774`-Wunknown-pragmas'
2775     Warn when a #pragma directive is encountered which is not
2776     understood by GCC.  If this command line option is used, warnings
2777     will even be issued for unknown pragmas in system header files.
2778     This is not the case if the warnings were only enabled by the
2779     `-Wall' command line option.
2780
2781`-Wno-pragmas'
2782     Do not warn about misuses of pragmas, such as incorrect parameters,
2783     invalid syntax, or conflicts between pragmas.  See also
2784     `-Wunknown-pragmas'.
2785
2786`-Wstrict-aliasing'
2787     This option is only active when `-fstrict-aliasing' is active.  It
2788     warns about code which might break the strict aliasing rules that
2789     the compiler is using for optimization.  The warning does not
2790     catch all cases, but does attempt to catch the more common
2791     pitfalls.  It is included in `-Wall'.
2792
2793`-Wstrict-aliasing=2'
2794     This option is only active when `-fstrict-aliasing' is active.  It
2795     warns about code which might break the strict aliasing rules that
2796     the compiler is using for optimization.  This warning catches more
2797     cases than `-Wstrict-aliasing', but it will also give a warning
2798     for some ambiguous cases that are safe.
2799
2800`-Wstrict-overflow'
2801
2802`-Wstrict-overflow=N'
2803     This option is only active when `-fstrict-overflow' is active.  It
2804     warns about cases where the compiler optimizes based on the
2805     assumption that signed overflow does not occur.  Note that it does
2806     not warn about all cases where the code might overflow: it only
2807     warns about cases where the compiler implements some optimization.
2808     Thus this warning depends on the optimization level.
2809
2810     An optimization which assumes that signed overflow does not occur
2811     is perfectly safe if the values of the variables involved are such
2812     that overflow never does, in fact, occur.  Therefore this warning
2813     can easily give a false positive: a warning about code which is not
2814     actually a problem.  To help focus on important issues, several
2815     warning levels are defined.  No warnings are issued for the use of
2816     undefined signed overflow when estimating how many iterations a
2817     loop will require, in particular when determining whether a loop
2818     will be executed at all.
2819
2820    `-Wstrict-overflow=1'
2821          Warn about cases which are both questionable and easy to
2822          avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
2823          the compiler will simplify this to `1'.  This level of
2824          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
2825          not, and must be explicitly requested.
2826
2827    `-Wstrict-overflow=2'
2828          Also warn about other cases where a comparison is simplified
2829          to a constant.  For example: `abs (x) >= 0'.  This can only be
2830          simplified when `-fstrict-overflow' is in effect, because
2831          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
2832          zero.  `-Wstrict-overflow' (with no level) is the same as
2833          `-Wstrict-overflow=2'.
2834
2835    `-Wstrict-overflow=3'
2836          Also warn about other cases where a comparison is simplified.
2837          For example: `x + 1 > 1' will be simplified to `x > 0'.
2838
2839    `-Wstrict-overflow=4'
2840          Also warn about other simplifications not covered by the
2841          above cases.  For example: `(x * 10) / 5' will be simplified
2842          to `x * 2'.
2843
2844    `-Wstrict-overflow=5'
2845          Also warn about cases where the compiler reduces the
2846          magnitude of a constant involved in a comparison.  For
2847          example: `x + 2 > y' will be simplified to `x + 1 >= y'.
2848          This is reported only at the highest warning level because
2849          this simplification applies to many comparisons, so this
2850          warning level will give a very large number of false
2851          positives.
2852
2853`-Wall'
2854     All of the above `-W' options combined.  This enables all the
2855     warnings about constructions that some users consider
2856     questionable, and that are easy to avoid (or modify to prevent the
2857     warning), even in conjunction with macros.  This also enables some
2858     language-specific warnings described in *Note C++ Dialect
2859     Options:: and *Note Objective-C and Objective-C++ Dialect
2860     Options::.
2861
2862 The following `-W...' options are not implied by `-Wall'.  Some of
2863them warn about constructions that users generally do not consider
2864questionable, but which occasionally you might wish to check for;
2865others warn about constructions that are necessary or hard to avoid in
2866some cases, and there is no simple way to modify the code to suppress
2867the warning.
2868
2869`-Wextra'
2870     (This option used to be called `-W'.  The older name is still
2871     supported, but the newer name is more descriptive.)  Print extra
2872     warning messages for these events:
2873
2874        * A function can return either with or without a value.
2875          (Falling off the end of the function body is considered
2876          returning without a value.)  For example, this function would
2877          evoke such a warning:
2878
2879               foo (a)
2880               {
2881                 if (a > 0)
2882                   return a;
2883               }
2884
2885        * An expression-statement or the left-hand side of a comma
2886          expression contains no side effects.  To suppress the
2887          warning, cast the unused expression to void.  For example, an
2888          expression such as `x[i,j]' will cause a warning, but
2889          `x[(void)i,j]' will not.
2890
2891        * An unsigned value is compared against zero with `<' or `>='.
2892
2893        * Storage-class specifiers like `static' are not the first
2894          things in a declaration.  According to the C Standard, this
2895          usage is obsolescent.
2896
2897        * If `-Wall' or `-Wunused' is also specified, warn about unused
2898          arguments.
2899
2900        * A comparison between signed and unsigned values could produce
2901          an incorrect result when the signed value is converted to
2902          unsigned.  (But don't warn if `-Wno-sign-compare' is also
2903          specified.)
2904
2905        * An aggregate has an initializer which does not initialize all
2906          members.  This warning can be independently controlled by
2907          `-Wmissing-field-initializers'.
2908
2909        * An initialized field without side effects is overridden when
2910          using designated initializers (*note Designated Initializers:
2911          Designated Inits.).  This warning can be independently
2912          controlled by `-Woverride-init'.
2913
2914        * A function parameter is declared without a type specifier in
2915          K&R-style functions:
2916
2917               void foo(bar) { }
2918
2919        * An empty body occurs in an `if' or `else' statement.
2920
2921        * A pointer is compared against integer zero with `<', `<=',
2922          `>', or `>='.
2923
2924        * A variable might be changed by `longjmp' or `vfork'.
2925
2926        * (C++ only) An enumerator and a non-enumerator both appear in
2927          a conditional expression.
2928
2929        * (C++ only) A non-static reference or non-static `const'
2930          member appears in a class without constructors.
2931
2932        * (C++ only) Ambiguous virtual bases.
2933
2934        * (C++ only) Subscripting an array which has been declared
2935          `register'.
2936
2937        * (C++ only) Taking the address of a variable which has been
2938          declared `register'.
2939
2940        * (C++ only) A base class is not initialized in a derived
2941          class' copy constructor.
2942
2943`-Wno-div-by-zero'
2944     Do not warn about compile-time integer division by zero.  Floating
2945     point division by zero is not warned about, as it can be a
2946     legitimate way of obtaining infinities and NaNs.
2947
2948`-Wsystem-headers'
2949     Print warning messages for constructs found in system header files.
2950     Warnings from system headers are normally suppressed, on the
2951     assumption that they usually do not indicate real problems and
2952     would only make the compiler output harder to read.  Using this
2953     command line option tells GCC to emit warnings from system headers
2954     as if they occurred in user code.  However, note that using
2955     `-Wall' in conjunction with this option will _not_ warn about
2956     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
2957     must also be used.
2958
2959`-Wfloat-equal'
2960     Warn if floating point values are used in equality comparisons.
2961
2962     The idea behind this is that sometimes it is convenient (for the
2963     programmer) to consider floating-point values as approximations to
2964     infinitely precise real numbers.  If you are doing this, then you
2965     need to compute (by analyzing the code, or in some other way) the
2966     maximum or likely maximum error that the computation introduces,
2967     and allow for it when performing comparisons (and when producing
2968     output, but that's a different problem).  In particular, instead
2969     of testing for equality, you would check to see whether the two
2970     values have ranges that overlap; and this is done with the
2971     relational operators, so equality comparisons are probably
2972     mistaken.
2973
2974`-Wtraditional (C only)'
2975     Warn about certain constructs that behave differently in
2976     traditional and ISO C.  Also warn about ISO C constructs that have
2977     no traditional C equivalent, and/or problematic constructs which
2978     should be avoided.
2979
2980        * Macro parameters that appear within string literals in the
2981          macro body.  In traditional C macro replacement takes place
2982          within string literals, but does not in ISO C.
2983
2984        * In traditional C, some preprocessor directives did not exist.
2985          Traditional preprocessors would only consider a line to be a
2986          directive if the `#' appeared in column 1 on the line.
2987          Therefore `-Wtraditional' warns about directives that
2988          traditional C understands but would ignore because the `#'
2989          does not appear as the first character on the line.  It also
2990          suggests you hide directives like `#pragma' not understood by
2991          traditional C by indenting them.  Some traditional
2992          implementations would not recognize `#elif', so it suggests
2993          avoiding it altogether.
2994
2995        * A function-like macro that appears without arguments.
2996
2997        * The unary plus operator.
2998
2999        * The `U' integer constant suffix, or the `F' or `L' floating
3000          point constant suffixes.  (Traditional C does support the `L'
3001          suffix on integer constants.)  Note, these suffixes appear in
3002          macros defined in the system headers of most modern systems,
3003          e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
3004          macros in user code might normally lead to spurious warnings,
3005          however GCC's integrated preprocessor has enough context to
3006          avoid warning in these cases.
3007
3008        * A function declared external in one block and then used after
3009          the end of the block.
3010
3011        * A `switch' statement has an operand of type `long'.
3012
3013        * A non-`static' function declaration follows a `static' one.
3014          This construct is not accepted by some traditional C
3015          compilers.
3016
3017        * The ISO type of an integer constant has a different width or
3018          signedness from its traditional type.  This warning is only
3019          issued if the base of the constant is ten.  I.e. hexadecimal
3020          or octal values, which typically represent bit patterns, are
3021          not warned about.
3022
3023        * Usage of ISO string concatenation is detected.
3024
3025        * Initialization of automatic aggregates.
3026
3027        * Identifier conflicts with labels.  Traditional C lacks a
3028          separate namespace for labels.
3029
3030        * Initialization of unions.  If the initializer is zero, the
3031          warning is omitted.  This is done under the assumption that
3032          the zero initializer in user code appears conditioned on e.g.
3033          `__STDC__' to avoid missing initializer warnings and relies
3034          on default initialization to zero in the traditional C case.
3035
3036        * Conversions by prototypes between fixed/floating point values
3037          and vice versa.  The absence of these prototypes when
3038          compiling with traditional C would cause serious problems.
3039          This is a subset of the possible conversion warnings, for the
3040          full set use `-Wconversion'.
3041
3042        * Use of ISO C style function definitions.  This warning
3043          intentionally is _not_ issued for prototype declarations or
3044          variadic functions because these ISO C features will appear
3045          in your code when using libiberty's traditional C
3046          compatibility macros, `PARAMS' and `VPARAMS'.  This warning
3047          is also bypassed for nested functions because that feature is
3048          already a GCC extension and thus not relevant to traditional
3049          C compatibility.
3050
3051`-Wdeclaration-after-statement (C only)'
3052     Warn when a declaration is found after a statement in a block.
3053     This construct, known from C++, was introduced with ISO C99 and is
3054     by default allowed in GCC.  It is not supported by ISO C90 and was
3055     not supported by GCC versions before GCC 3.0.  *Note Mixed
3056     Declarations::.
3057
3058`-Wundef'
3059     Warn if an undefined identifier is evaluated in an `#if' directive.
3060
3061`-Wno-endif-labels'
3062     Do not warn whenever an `#else' or an `#endif' are followed by
3063     text.
3064
3065`-Wshadow'
3066     Warn whenever a local variable shadows another local variable,
3067     parameter or global variable or whenever a built-in function is
3068     shadowed.
3069
3070`-Wlarger-than-LEN'
3071     Warn whenever an object of larger than LEN bytes is defined.
3072
3073`-Wunsafe-loop-optimizations'
3074     Warn if the loop cannot be optimized because the compiler could not
3075     assume anything on the bounds of the loop indices.  With
3076     `-funsafe-loop-optimizations' warn if the compiler made such
3077     assumptions.
3078
3079`-Wpointer-arith'
3080     Warn about anything that depends on the "size of" a function type
3081     or of `void'.  GNU C assigns these types a size of 1, for
3082     convenience in calculations with `void *' pointers and pointers to
3083     functions.
3084
3085`-Wbad-function-cast (C only)'
3086     Warn whenever a function call is cast to a non-matching type.  For
3087     example, warn if `int malloc()' is cast to `anything *'.
3088
3089`-Wc++-compat'
3090     Warn about ISO C constructs that are outside of the common subset
3091     of ISO C and ISO C++, e.g. request for implicit conversion from
3092     `void *' to a pointer to non-`void' type.
3093
3094`-Wcast-qual'
3095     Warn whenever a pointer is cast so as to remove a type qualifier
3096     from the target type.  For example, warn if a `const char *' is
3097     cast to an ordinary `char *'.
3098
3099`-Wcast-align'
3100     Warn whenever a pointer is cast such that the required alignment
3101     of the target is increased.  For example, warn if a `char *' is
3102     cast to an `int *' on machines where integers can only be accessed
3103     at two- or four-byte boundaries.
3104
3105`-Wwrite-strings'
3106     When compiling C, give string constants the type `const
3107     char[LENGTH]' so that copying the address of one into a
3108     non-`const' `char *' pointer will get a warning; when compiling
3109     C++, warn about the deprecated conversion from string literals to
3110     `char *'.  This warning, by default, is enabled for C++ programs.
3111     These warnings will help you find at compile time code that can
3112     try to write into a string constant, but only if you have been
3113     very careful about using `const' in declarations and prototypes.
3114     Otherwise, it will just be a nuisance; this is why we did not make
3115     `-Wall' request these warnings.
3116
3117`-Wconversion'
3118     Warn if a prototype causes a type conversion that is different
3119     from what would happen to the same argument in the absence of a
3120     prototype.  This includes conversions of fixed point to floating
3121     and vice versa, and conversions changing the width or signedness
3122     of a fixed point argument except when the same as the default
3123     promotion.
3124
3125     Also, warn if a negative integer constant expression is implicitly
3126     converted to an unsigned type.  For example, warn about the
3127     assignment `x = -1' if `x' is unsigned.  But do not warn about
3128     explicit casts like `(unsigned) -1'.
3129
3130`-Wsign-compare'
3131     Warn when a comparison between signed and unsigned values could
3132     produce an incorrect result when the signed value is converted to
3133     unsigned.  This warning is also enabled by `-Wextra'; to get the
3134     other warnings of `-Wextra' without this warning, use `-Wextra
3135     -Wno-sign-compare'.
3136
3137`-Waddress'
3138     Warn about suspicious uses of memory addresses. These include using
3139     the address of a function in a conditional expression, such as
3140     `void func(void); if (func)', and comparisons against the memory
3141     address of a string literal, such as `if (x == "abc")'.  Such uses
3142     typically indicate a programmer error: the address of a function
3143     always evaluates to true, so their use in a conditional usually
3144     indicate that the programmer forgot the parentheses in a function
3145     call; and comparisons against string literals result in unspecified
3146     behavior and are not portable in C, so they usually indicate that
3147     the programmer intended to use `strcmp'.  This warning is enabled
3148     by `-Wall'.
3149
3150`-Waggregate-return'
3151     Warn if any functions that return structures or unions are defined
3152     or called.  (In languages where you can return an array, this also
3153     elicits a warning.)
3154
3155`-Wno-attributes'
3156     Do not warn if an unexpected `__attribute__' is used, such as
3157     unrecognized attributes, function attributes applied to variables,
3158     etc.  This will not stop errors for incorrect use of supported
3159     attributes.
3160
3161`-Wstrict-prototypes (C only)'
3162     Warn if a function is declared or defined without specifying the
3163     argument types.  (An old-style function definition is permitted
3164     without a warning if preceded by a declaration which specifies the
3165     argument types.)
3166
3167`-Wold-style-definition (C only)'
3168     Warn if an old-style function definition is used.  A warning is
3169     given even if there is a previous prototype.
3170
3171`-Wmissing-prototypes (C only)'
3172     Warn if a global function is defined without a previous prototype
3173     declaration.  This warning is issued even if the definition itself
3174     provides a prototype.  The aim is to detect global functions that
3175     fail to be declared in header files.
3176
3177`-Wmissing-declarations (C only)'
3178     Warn if a global function is defined without a previous
3179     declaration.  Do so even if the definition itself provides a
3180     prototype.  Use this option to detect global functions that are
3181     not declared in header files.
3182
3183`-Wmissing-field-initializers'
3184     Warn if a structure's initializer has some fields missing.  For
3185     example, the following code would cause such a warning, because
3186     `x.h' is implicitly zero:
3187
3188          struct s { int f, g, h; };
3189          struct s x = { 3, 4 };
3190
3191     This option does not warn about designated initializers, so the
3192     following modification would not trigger a warning:
3193
3194          struct s { int f, g, h; };
3195          struct s x = { .f = 3, .g = 4 };
3196
3197     This warning is included in `-Wextra'.  To get other `-Wextra'
3198     warnings without this one, use `-Wextra
3199     -Wno-missing-field-initializers'.
3200
3201`-Wmissing-noreturn'
3202     Warn about functions which might be candidates for attribute
3203     `noreturn'.  Note these are only possible candidates, not absolute
3204     ones.  Care should be taken to manually verify functions actually
3205     do not ever return before adding the `noreturn' attribute,
3206     otherwise subtle code generation bugs could be introduced.  You
3207     will not get a warning for `main' in hosted C environments.
3208
3209`-Wmissing-format-attribute'
3210     Warn about function pointers which might be candidates for `format'
3211     attributes.  Note these are only possible candidates, not absolute
3212     ones.  GCC will guess that function pointers with `format'
3213     attributes that are used in assignment, initialization, parameter
3214     passing or return statements should have a corresponding `format'
3215     attribute in the resulting type.  I.e. the left-hand side of the
3216     assignment or initialization, the type of the parameter variable,
3217     or the return type of the containing function respectively should
3218     also have a `format' attribute to avoid the warning.
3219
3220     GCC will also warn about function definitions which might be
3221     candidates for `format' attributes.  Again, these are only
3222     possible candidates.  GCC will guess that `format' attributes
3223     might be appropriate for any function that calls a function like
3224     `vprintf' or `vscanf', but this might not always be the case, and
3225     some functions for which `format' attributes are appropriate may
3226     not be detected.
3227
3228`-Wno-multichar'
3229     Do not warn if a multicharacter constant (`'FOOF'') is used.
3230     Usually they indicate a typo in the user's code, as they have
3231     implementation-defined values, and should not be used in portable
3232     code.
3233
3234`-Wnormalized=<none|id|nfc|nfkc>'
3235     In ISO C and ISO C++, two identifiers are different if they are
3236     different sequences of characters.  However, sometimes when
3237     characters outside the basic ASCII character set are used, you can
3238     have two different character sequences that look the same.  To
3239     avoid confusion, the ISO 10646 standard sets out some
3240     "normalization rules" which when applied ensure that two sequences
3241     that look the same are turned into the same sequence.  GCC can
3242     warn you if you are using identifiers which have not been
3243     normalized; this option controls that warning.
3244
3245     There are four levels of warning that GCC supports.  The default is
3246     `-Wnormalized=nfc', which warns about any identifier which is not
3247     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
3248     recommended form for most uses.
3249
3250     Unfortunately, there are some characters which ISO C and ISO C++
3251     allow in identifiers that when turned into NFC aren't allowable as
3252     identifiers.  That is, there's no way to use these symbols in
3253     portable ISO C or C++ and have all your identifiers in NFC.
3254     `-Wnormalized=id' suppresses the warning for these characters.  It
3255     is hoped that future versions of the standards involved will
3256     correct this, which is why this option is not the default.
3257
3258     You can switch the warning off for all characters by writing
3259     `-Wnormalized=none'.  You would only want to do this if you were
3260     using some other normalization scheme (like "D"), because
3261     otherwise you can easily create bugs that are literally impossible
3262     to see.
3263
3264     Some characters in ISO 10646 have distinct meanings but look
3265     identical in some fonts or display methodologies, especially once
3266     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
3267     LATIN SMALL LETTER N", will display just like a regular `n' which
3268     has been placed in a superscript.  ISO 10646 defines the "NFKC"
3269     normalization scheme to convert all these into a standard form as
3270     well, and GCC will warn if your code is not in NFKC if you use
3271     `-Wnormalized=nfkc'.  This warning is comparable to warning about
3272     every identifier that contains the letter O because it might be
3273     confused with the digit 0, and so is not the default, but may be
3274     useful as a local coding convention if the programming environment
3275     is unable to be fixed to display these characters distinctly.
3276
3277`-Wno-deprecated-declarations'
3278     Do not warn about uses of functions (*note Function Attributes::),
3279     variables (*note Variable Attributes::), and types (*note Type
3280     Attributes::) marked as deprecated by using the `deprecated'
3281     attribute.
3282
3283`-Wno-overflow'
3284     Do not warn about compile-time overflow in constant expressions.
3285
3286`-Woverride-init'
3287     Warn if an initialized field without side effects is overridden
3288     when using designated initializers (*note Designated Initializers:
3289     Designated Inits.).
3290
3291     This warning is included in `-Wextra'.  To get other `-Wextra'
3292     warnings without this one, use `-Wextra -Wno-override-init'.
3293
3294`-Wpacked'
3295     Warn if a structure is given the packed attribute, but the packed
3296     attribute has no effect on the layout or size of the structure.
3297     Such structures may be mis-aligned for little benefit.  For
3298     instance, in this code, the variable `f.x' in `struct bar' will be
3299     misaligned even though `struct bar' does not itself have the
3300     packed attribute:
3301
3302          struct foo {
3303            int x;
3304            char a, b, c, d;
3305          } __attribute__((packed));
3306          struct bar {
3307            char z;
3308            struct foo f;
3309          };
3310
3311`-Wpadded'
3312     Warn if padding is included in a structure, either to align an
3313     element of the structure or to align the whole structure.
3314     Sometimes when this happens it is possible to rearrange the fields
3315     of the structure to reduce the padding and so make the structure
3316     smaller.
3317
3318`-Wredundant-decls'
3319     Warn if anything is declared more than once in the same scope,
3320     even in cases where multiple declaration is valid and changes
3321     nothing.
3322
3323`-Wnested-externs (C only)'
3324     Warn if an `extern' declaration is encountered within a function.
3325
3326`-Wunreachable-code'
3327     Warn if the compiler detects that code will never be executed.
3328
3329     This option is intended to warn when the compiler detects that at
3330     least a whole line of source code will never be executed, because
3331     some condition is never satisfied or because it is after a
3332     procedure that never returns.
3333
3334     It is possible for this option to produce a warning even though
3335     there are circumstances under which part of the affected line can
3336     be executed, so care should be taken when removing
3337     apparently-unreachable code.
3338
3339     For instance, when a function is inlined, a warning may mean that
3340     the line is unreachable in only one inlined copy of the function.
3341
3342     This option is not made part of `-Wall' because in a debugging
3343     version of a program there is often substantial code which checks
3344     correct functioning of the program and is, hopefully, unreachable
3345     because the program does work.  Another common use of unreachable
3346     code is to provide behavior which is selectable at compile-time.
3347
3348`-Winline'
3349     Warn if a function can not be inlined and it was declared as
3350     inline.  Even with this option, the compiler will not warn about
3351     failures to inline functions declared in system headers.
3352
3353     The compiler uses a variety of heuristics to determine whether or
3354     not to inline a function.  For example, the compiler takes into
3355     account the size of the function being inlined and the amount of
3356     inlining that has already been done in the current function.
3357     Therefore, seemingly insignificant changes in the source program
3358     can cause the warnings produced by `-Winline' to appear or
3359     disappear.
3360
3361`-Wno-invalid-offsetof (C++ only)'
3362     Suppress warnings from applying the `offsetof' macro to a non-POD
3363     type.  According to the 1998 ISO C++ standard, applying `offsetof'
3364     to a non-POD type is undefined.  In existing C++ implementations,
3365     however, `offsetof' typically gives meaningful results even when
3366     applied to certain kinds of non-POD types. (Such as a simple
3367     `struct' that fails to be a POD type only by virtue of having a
3368     constructor.)  This flag is for users who are aware that they are
3369     writing nonportable code and who have deliberately chosen to
3370     ignore the warning about it.
3371
3372     The restrictions on `offsetof' may be relaxed in a future version
3373     of the C++ standard.
3374
3375`-Wno-int-to-pointer-cast (C only)'
3376     Suppress warnings from casts to pointer type of an integer of a
3377     different size.
3378
3379`-Wno-pointer-to-int-cast (C only)'
3380     Suppress warnings from casts from a pointer to an integer type of a
3381     different size.
3382
3383`-Winvalid-pch'
3384     Warn if a precompiled header (*note Precompiled Headers::) is
3385     found in the search path but can't be used.
3386
3387`-Wlong-long'
3388     Warn if `long long' type is used.  This is default.  To inhibit
3389     the warning messages, use `-Wno-long-long'.  Flags `-Wlong-long'
3390     and `-Wno-long-long' are taken into account only when `-pedantic'
3391     flag is used.
3392
3393`-Wvariadic-macros'
3394     Warn if variadic macros are used in pedantic ISO C90 mode, or the
3395     GNU alternate syntax when in pedantic ISO C99 mode.  This is
3396     default.  To inhibit the warning messages, use
3397     `-Wno-variadic-macros'.
3398
3399`-Wvolatile-register-var'
3400     Warn if a register variable is declared volatile.  The volatile
3401     modifier does not inhibit all optimizations that may eliminate
3402     reads and/or writes to register variables.
3403
3404`-Wdisabled-optimization'
3405     Warn if a requested optimization pass is disabled.  This warning
3406     does not generally indicate that there is anything wrong with your
3407     code; it merely indicates that GCC's optimizers were unable to
3408     handle the code effectively.  Often, the problem is that your code
3409     is too big or too complex; GCC will refuse to optimize programs
3410     when the optimization itself is likely to take inordinate amounts
3411     of time.
3412
3413`-Wpointer-sign'
3414     Warn for pointer argument passing or assignment with different
3415     signedness.  This option is only supported for C and Objective-C.
3416     It is implied by `-Wall' and by `-pedantic', which can be disabled
3417     with `-Wno-pointer-sign'.
3418
3419`-Werror'
3420     Make all warnings into errors.
3421
3422`-Werror='
3423     Make the specified warning into an errors.  The specifier for a
3424     warning is appended, for example `-Werror=switch' turns the
3425     warnings controlled by `-Wswitch' into errors.  This switch takes
3426     a negative form, to be used to negate `-Werror' for specific
3427     warnings, for example `-Wno-error=switch' makes `-Wswitch'
3428     warnings not be errors, even when `-Werror' is in effect.  You can
3429     use the `-fdiagnostics-show-option' option to have each
3430     controllable warning amended with the option which controls it, to
3431     determine what to use with this option.
3432
3433     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3434     However, `-Wno-error='FOO does not imply anything.
3435
3436`-Wstack-protector'
3437     This option is only active when `-fstack-protector' is active.  It
3438     warns about functions that will not be protected against stack
3439     smashing.
3440
3441`-Woverlength-strings'
3442     Warn about string constants which are longer than the "minimum
3443     maximum" length specified in the C standard.  Modern compilers
3444     generally allow string constants which are much longer than the
3445     standard's minimum limit, but very portable programs should avoid
3446     using longer strings.
3447
3448     The limit applies _after_ string constant concatenation, and does
3449     not count the trailing NUL.  In C89, the limit was 509 characters;
3450     in C99, it was raised to 4095.  C++98 does not specify a normative
3451     minimum maximum, so we do not diagnose overlength strings in C++.
3452
3453     This option is implied by `-pedantic', and can be disabled with
3454     `-Wno-overlength-strings'.
3455
3456
3457File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
3458
34593.9 Options for Debugging Your Program or GCC
3460=============================================
3461
3462GCC has various special options that are used for debugging either your
3463program or GCC:
3464
3465`-g'
3466     Produce debugging information in the operating system's native
3467     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
3468     debugging information.
3469
3470     On most systems that use stabs format, `-g' enables use of extra
3471     debugging information that only GDB can use; this extra information
3472     makes debugging work better in GDB but will probably make other
3473     debuggers crash or refuse to read the program.  If you want to
3474     control for certain whether to generate the extra information, use
3475     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
3476     below).
3477
3478     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
3479     optimized code may occasionally produce surprising results: some
3480     variables you declared may not exist at all; flow of control may
3481     briefly move where you did not expect it; some statements may not
3482     be executed because they compute constant results or their values
3483     were already at hand; some statements may execute in different
3484     places because they were moved out of loops.
3485
3486     Nevertheless it proves possible to debug optimized output.  This
3487     makes it reasonable to use the optimizer for programs that might
3488     have bugs.
3489
3490     The following options are useful when GCC is generated with the
3491     capability for more than one debugging format.
3492
3493`-ggdb'
3494     Produce debugging information for use by GDB.  This means to use
3495     the most expressive format available (DWARF 2, stabs, or the
3496     native format if neither of those are supported), including GDB
3497     extensions if at all possible.
3498
3499`-gstabs'
3500     Produce debugging information in stabs format (if that is
3501     supported), without GDB extensions.  This is the format used by
3502     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
3503     systems this option produces stabs debugging output which is not
3504     understood by DBX or SDB.  On System V Release 4 systems this
3505     option requires the GNU assembler.
3506
3507`-feliminate-unused-debug-symbols'
3508     Produce debugging information in stabs format (if that is
3509     supported), for only symbols that are actually used.
3510
3511`-femit-class-debug-always'
3512     Instead of emitting debugging information for a C++ class in only
3513     one object file, emit it in all object files using the class.
3514     This option should be used only with debuggers that are unable to
3515     handle the way GCC normally emits debugging information for
3516     classes because using this option will increase the size of
3517     debugging information by as much as a factor of two.
3518
3519`-gstabs+'
3520     Produce debugging information in stabs format (if that is
3521     supported), using GNU extensions understood only by the GNU
3522     debugger (GDB).  The use of these extensions is likely to make
3523     other debuggers crash or refuse to read the program.
3524
3525`-gcoff'
3526     Produce debugging information in COFF format (if that is
3527     supported).  This is the format used by SDB on most System V
3528     systems prior to System V Release 4.
3529
3530`-gxcoff'
3531     Produce debugging information in XCOFF format (if that is
3532     supported).  This is the format used by the DBX debugger on IBM
3533     RS/6000 systems.
3534
3535`-gxcoff+'
3536     Produce debugging information in XCOFF format (if that is
3537     supported), using GNU extensions understood only by the GNU
3538     debugger (GDB).  The use of these extensions is likely to make
3539     other debuggers crash or refuse to read the program, and may cause
3540     assemblers other than the GNU assembler (GAS) to fail with an
3541     error.
3542
3543`-gdwarf-2'
3544     Produce debugging information in DWARF version 2 format (if that is
3545     supported).  This is the format used by DBX on IRIX 6.  With this
3546     option, GCC uses features of DWARF version 3 when they are useful;
3547     version 3 is upward compatible with version 2, but may still cause
3548     problems for older debuggers.
3549
3550`-gvms'
3551     Produce debugging information in VMS debug format (if that is
3552     supported).  This is the format used by DEBUG on VMS systems.
3553
3554`-gLEVEL'
3555`-ggdbLEVEL'
3556`-gstabsLEVEL'
3557`-gcoffLEVEL'
3558`-gxcoffLEVEL'
3559`-gvmsLEVEL'
3560     Request debugging information and also use LEVEL to specify how
3561     much information.  The default level is 2.
3562
3563     Level 1 produces minimal information, enough for making backtraces
3564     in parts of the program that you don't plan to debug.  This
3565     includes descriptions of functions and external variables, but no
3566     information about local variables and no line numbers.
3567
3568     Level 3 includes extra information, such as all the macro
3569     definitions present in the program.  Some debuggers support macro
3570     expansion when you use `-g3'.
3571
3572     `-gdwarf-2' does not accept a concatenated debug level, because
3573     GCC used to support an option `-gdwarf' that meant to generate
3574     debug information in version 1 of the DWARF format (which is very
3575     different from version 2), and it would have been too confusing.
3576     That debug format is long obsolete, but the option cannot be
3577     changed now.  Instead use an additional `-gLEVEL' option to change
3578     the debug level for DWARF2.
3579
3580`-feliminate-dwarf2-dups'
3581     Compress DWARF2 debugging information by eliminating duplicated
3582     information about each symbol.  This option only makes sense when
3583     generating DWARF2 debugging information with `-gdwarf-2'.
3584
3585`-p'
3586     Generate extra code to write profile information suitable for the
3587     analysis program `prof'.  You must use this option when compiling
3588     the source files you want data about, and you must also use it when
3589     linking.
3590
3591`-pg'
3592     Generate extra code to write profile information suitable for the
3593     analysis program `gprof'.  You must use this option when compiling
3594     the source files you want data about, and you must also use it when
3595     linking.
3596
3597`-Q'
3598     Makes the compiler print out each function name as it is compiled,
3599     and print some statistics about each pass when it finishes.
3600
3601`-ftime-report'
3602     Makes the compiler print some statistics about the time consumed
3603     by each pass when it finishes.
3604
3605`-fmem-report'
3606     Makes the compiler print some statistics about permanent memory
3607     allocation when it finishes.
3608
3609`-fprofile-arcs'
3610     Add code so that program flow "arcs" are instrumented.  During
3611     execution the program records how many times each branch and call
3612     is executed and how many times it is taken or returns.  When the
3613     compiled program exits it saves this data to a file called
3614     `AUXNAME.gcda' for each source file.  The data may be used for
3615     profile-directed optimizations (`-fbranch-probabilities'), or for
3616     test coverage analysis (`-ftest-coverage').  Each object file's
3617     AUXNAME is generated from the name of the output file, if
3618     explicitly specified and it is not the final executable, otherwise
3619     it is the basename of the source file.  In both cases any suffix
3620     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
3621     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
3622     *Note Cross-profiling::.
3623
3624`--coverage'
3625     This option is used to compile and link code instrumented for
3626     coverage analysis.  The option is a synonym for `-fprofile-arcs'
3627     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
3628     See the documentation for those options for more details.
3629
3630        * Compile the source files with `-fprofile-arcs' plus
3631          optimization and code generation options.  For test coverage
3632          analysis, use the additional `-ftest-coverage' option.  You
3633          do not need to profile every source file in a program.
3634
3635        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
3636          latter implies the former).
3637
3638        * Run the program on a representative workload to generate the
3639          arc profile information.  This may be repeated any number of
3640          times.  You can run concurrent instances of your program, and
3641          provided that the file system supports locking, the data
3642          files will be correctly updated.  Also `fork' calls are
3643          detected and correctly handled (double counting will not
3644          happen).
3645
3646        * For profile-directed optimizations, compile the source files
3647          again with the same optimization and code generation options
3648          plus `-fbranch-probabilities' (*note Options that Control
3649          Optimization: Optimize Options.).
3650
3651        * For test coverage analysis, use `gcov' to produce human
3652          readable information from the `.gcno' and `.gcda' files.
3653          Refer to the `gcov' documentation for further information.
3654
3655
3656     With `-fprofile-arcs', for each function of your program GCC
3657     creates a program flow graph, then finds a spanning tree for the
3658     graph.  Only arcs that are not on the spanning tree have to be
3659     instrumented: the compiler adds code to count the number of times
3660     that these arcs are executed.  When an arc is the only exit or
3661     only entrance to a block, the instrumentation code can be added to
3662     the block; otherwise, a new basic block must be created to hold
3663     the instrumentation code.
3664
3665`-ftest-coverage'
3666     Produce a notes file that the `gcov' code-coverage utility (*note
3667     `gcov'--a Test Coverage Program: Gcov.) can use to show program
3668     coverage.  Each source file's note file is called `AUXNAME.gcno'.
3669     Refer to the `-fprofile-arcs' option above for a description of
3670     AUXNAME and instructions on how to generate test coverage data.
3671     Coverage data will match the source files more closely, if you do
3672     not optimize.
3673
3674`-dLETTERS'
3675
3676`-fdump-rtl-PASS'
3677     Says to make debugging dumps during compilation at times specified
3678     by LETTERS.    This is used for debugging the RTL-based passes of
3679     the compiler.  The file names for most of the dumps are made by
3680     appending a pass number and a word to the DUMPNAME.  DUMPNAME is
3681     generated from the name of the output file, if explicitly
3682     specified and it is not an executable, otherwise it is the
3683     basename of the source file.
3684
3685     Most debug dumps can be enabled either passing a letter to the `-d'
3686     option, or with a long `-fdump-rtl' switch; here are the possible
3687     letters for use in LETTERS and PASS, and their meanings:
3688
3689    `-dA'
3690          Annotate the assembler output with miscellaneous debugging
3691          information.
3692
3693    `-dB'
3694    `-fdump-rtl-bbro'
3695          Dump after block reordering, to `FILE.148r.bbro'.
3696
3697    `-dc'
3698    `-fdump-rtl-combine'
3699          Dump after instruction combination, to the file
3700          `FILE.129r.combine'.
3701
3702    `-dC'
3703    `-fdump-rtl-ce1'
3704    `-fdump-rtl-ce2'
3705          `-dC' and `-fdump-rtl-ce1' enable dumping after the first if
3706          conversion, to the file `FILE.117r.ce1'.  `-dC' and
3707          `-fdump-rtl-ce2' enable dumping after the second if
3708          conversion, to the file `FILE.130r.ce2'.
3709
3710    `-dd'
3711    `-fdump-rtl-btl'
3712    `-fdump-rtl-dbr'
3713          `-dd' and `-fdump-rtl-btl' enable dumping after branch target
3714          load optimization, to `FILE.31.btl'.  `-dd' and
3715          `-fdump-rtl-dbr' enable dumping after delayed branch
3716          scheduling, to `FILE.36.dbr'.
3717
3718    `-dD'
3719          Dump all macro definitions, at the end of preprocessing, in
3720          addition to normal output.
3721
3722    `-dE'
3723    `-fdump-rtl-ce3'
3724          Dump after the third if conversion, to `FILE.146r.ce3'.
3725
3726    `-df'
3727    `-fdump-rtl-cfg'
3728    `-fdump-rtl-life'
3729          `-df' and `-fdump-rtl-cfg' enable dumping after control and
3730          data flow analysis, to `FILE.116r.cfg'.  `-df' and
3731          `-fdump-rtl-cfg' enable dumping dump after life analysis, to
3732          `FILE.128r.life1' and `FILE.135r.life2'.
3733
3734    `-dg'
3735    `-fdump-rtl-greg'
3736          Dump after global register allocation, to `FILE.139r.greg'.
3737
3738    `-dG'
3739    `-fdump-rtl-gcse'
3740    `-fdump-rtl-bypass'
3741          `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to
3742          `FILE.114r.gcse'.  `-dG' and `-fdump-rtl-bypass' enable
3743          dumping after jump bypassing and control flow optimizations,
3744          to `FILE.115r.bypass'.
3745
3746    `-dh'
3747    `-fdump-rtl-eh'
3748          Dump after finalization of EH handling code, to `FILE.02.eh'.
3749
3750    `-di'
3751    `-fdump-rtl-sibling'
3752          Dump after sibling call optimizations, to `FILE.106r.sibling'.
3753
3754    `-dj'
3755    `-fdump-rtl-jump'
3756          Dump after the first jump optimization, to `FILE.112r.jump'.
3757
3758    `-dk'
3759    `-fdump-rtl-stack'
3760          Dump after conversion from registers to stack, to
3761          `FILE.152r.stack'.
3762
3763    `-dl'
3764    `-fdump-rtl-lreg'
3765          Dump after local register allocation, to `FILE.138r.lreg'.
3766
3767    `-dL'
3768    `-fdump-rtl-loop2'
3769          `-dL' and `-fdump-rtl-loop2' enable dumping after the loop
3770          optimization pass, to `FILE.119r.loop2',
3771          `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and
3772          `FILE.125r.loop2_done'.
3773
3774    `-dm'
3775    `-fdump-rtl-sms'
3776          Dump after modulo scheduling, to `FILE.136r.sms'.
3777
3778    `-dM'
3779    `-fdump-rtl-mach'
3780          Dump after performing the machine dependent reorganization
3781          pass, to `FILE.155r.mach'.
3782
3783    `-dn'
3784    `-fdump-rtl-rnreg'
3785          Dump after register renumbering, to `FILE.147r.rnreg'.
3786
3787    `-dN'
3788    `-fdump-rtl-regmove'
3789          Dump after the register move pass, to `FILE.132r.regmove'.
3790
3791    `-do'
3792    `-fdump-rtl-postreload'
3793          Dump after post-reload optimizations, to `FILE.24.postreload'.
3794
3795    `-dr'
3796    `-fdump-rtl-expand'
3797          Dump after RTL generation, to `FILE.104r.expand'.
3798
3799    `-dR'
3800    `-fdump-rtl-sched2'
3801          Dump after the second scheduling pass, to `FILE.150r.sched2'.
3802
3803    `-ds'
3804    `-fdump-rtl-cse'
3805          Dump after CSE (including the jump optimization that
3806          sometimes follows CSE), to `FILE.113r.cse'.
3807
3808    `-dS'
3809    `-fdump-rtl-sched'
3810          Dump after the first scheduling pass, to `FILE.21.sched'.
3811
3812    `-dt'
3813    `-fdump-rtl-cse2'
3814          Dump after the second CSE pass (including the jump
3815          optimization that sometimes follows CSE), to `FILE.127r.cse2'.
3816
3817    `-dT'
3818    `-fdump-rtl-tracer'
3819          Dump after running tracer, to `FILE.118r.tracer'.
3820
3821    `-dV'
3822    `-fdump-rtl-vpt'
3823    `-fdump-rtl-vartrack'
3824          `-dV' and `-fdump-rtl-vpt' enable dumping after the value
3825          profile transformations, to `FILE.10.vpt'.  `-dV' and
3826          `-fdump-rtl-vartrack' enable dumping after variable tracking,
3827          to `FILE.154r.vartrack'.
3828
3829    `-dw'
3830    `-fdump-rtl-flow2'
3831          Dump after the second flow pass, to `FILE.142r.flow2'.
3832
3833    `-dz'
3834    `-fdump-rtl-peephole2'
3835          Dump after the peephole pass, to `FILE.145r.peephole2'.
3836
3837    `-dZ'
3838    `-fdump-rtl-web'
3839          Dump after live range splitting, to `FILE.126r.web'.
3840
3841    `-da'
3842    `-fdump-rtl-all'
3843          Produce all the dumps listed above.
3844
3845    `-dH'
3846          Produce a core dump whenever an error occurs.
3847
3848    `-dm'
3849          Print statistics on memory usage, at the end of the run, to
3850          standard error.
3851
3852    `-dp'
3853          Annotate the assembler output with a comment indicating which
3854          pattern and alternative was used.  The length of each
3855          instruction is also printed.
3856
3857    `-dP'
3858          Dump the RTL in the assembler output as a comment before each
3859          instruction.  Also turns on `-dp' annotation.
3860
3861    `-dv'
3862          For each of the other indicated dump files (either with `-d'
3863          or `-fdump-rtl-PASS'), dump a representation of the control
3864          flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
3865
3866    `-dx'
3867          Just generate RTL for a function instead of compiling it.
3868          Usually used with `r' (`-fdump-rtl-expand').
3869
3870    `-dy'
3871          Dump debugging information during parsing, to standard error.
3872
3873`-fdump-noaddr'
3874     When doing debugging dumps (see `-d' option above), suppress
3875     address output.  This makes it more feasible to use diff on
3876     debugging dumps for compiler invocations with different compiler
3877     binaries and/or different text / bss / data / heap / stack / dso
3878     start locations.
3879
3880`-fdump-unnumbered'
3881     When doing debugging dumps (see `-d' option above), suppress
3882     instruction numbers, line number note and address output.  This
3883     makes it more feasible to use diff on debugging dumps for compiler
3884     invocations with different options, in particular with and without
3885     `-g'.
3886
3887`-fdump-translation-unit (C++ only)'
3888`-fdump-translation-unit-OPTIONS (C++ only)'
3889     Dump a representation of the tree structure for the entire
3890     translation unit to a file.  The file name is made by appending
3891     `.tu' to the source file name.  If the `-OPTIONS' form is used,
3892     OPTIONS controls the details of the dump as described for the
3893     `-fdump-tree' options.
3894
3895`-fdump-class-hierarchy (C++ only)'
3896`-fdump-class-hierarchy-OPTIONS (C++ only)'
3897     Dump a representation of each class's hierarchy and virtual
3898     function table layout to a file.  The file name is made by
3899     appending `.class' to the source file name.  If the `-OPTIONS'
3900     form is used, OPTIONS controls the details of the dump as
3901     described for the `-fdump-tree' options.
3902
3903`-fdump-ipa-SWITCH'
3904     Control the dumping at various stages of inter-procedural analysis
3905     language tree to a file.  The file name is generated by appending
3906     a switch specific suffix to the source file name.  The following
3907     dumps are possible:
3908
3909    `all'
3910          Enables all inter-procedural analysis dumps; currently the
3911          only produced dump is the `cgraph' dump.
3912
3913    `cgraph'
3914          Dumps information about call-graph optimization, unused
3915          function removal, and inlining decisions.
3916
3917`-fdump-tree-SWITCH'
3918`-fdump-tree-SWITCH-OPTIONS'
3919     Control the dumping at various stages of processing the
3920     intermediate language tree to a file.  The file name is generated
3921     by appending a switch specific suffix to the source file name.  If
3922     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
3923     options that control the details of the dump.  Not all options are
3924     applicable to all dumps, those which are not meaningful will be
3925     ignored.  The following options are available
3926
3927    `address'
3928          Print the address of each node.  Usually this is not
3929          meaningful as it changes according to the environment and
3930          source file.  Its primary use is for tying up a dump file
3931          with a debug environment.
3932
3933    `slim'
3934          Inhibit dumping of members of a scope or body of a function
3935          merely because that scope has been reached.  Only dump such
3936          items when they are directly reachable by some other path.
3937          When dumping pretty-printed trees, this option inhibits
3938          dumping the bodies of control structures.
3939
3940    `raw'
3941          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'
3961          Enable showing the unique ID (`DECL_UID') for each variable.
3962
3963    `all'
3964          Turn on all options, except `raw', `slim' and `lineno'.
3965
3966     The following tree dumps are possible:
3967    `original'
3968          Dump before any tree based optimization, to `FILE.original'.
3969
3970    `optimized'
3971          Dump after all tree based optimization, to `FILE.optimized'.
3972
3973    `inlined'
3974          Dump after function inlining, to `FILE.inlined'.
3975
3976    `gimple'
3977          Dump each function before and after the gimplification pass
3978          to a file.  The file name is made by appending `.gimple' to
3979          the source file name.
3980
3981    `cfg'
3982          Dump the control flow graph of each function to a file.  The
3983          file name is made by appending `.cfg' to the source file name.
3984
3985    `vcg'
3986          Dump the control flow graph of each function to a file in VCG
3987          format.  The file name is made by appending `.vcg' to the
3988          source file name.  Note that if the file contains more than
3989          one function, the generated file cannot be used directly by
3990          VCG.  You will need to cut and paste each function's graph
3991          into its own separate file first.
3992
3993    `ch'
3994          Dump each function after copying loop headers.  The file name
3995          is made by appending `.ch' to the source file name.
3996
3997    `ssa'
3998          Dump SSA related information to a file.  The file name is
3999          made by appending `.ssa' to the source file name.
4000
4001    `salias'
4002          Dump structure aliasing variable information to a file.  This
4003          file name is made by appending `.salias' to the source file
4004          name.
4005
4006    `alias'
4007          Dump aliasing information for each function.  The file name
4008          is made by appending `.alias' to the source file name.
4009
4010    `ccp'
4011          Dump each function after CCP.  The file name is made by
4012          appending `.ccp' to the source file name.
4013
4014    `storeccp'
4015          Dump each function after STORE-CCP.  The file name is made by
4016          appending `.storeccp' to the source file name.
4017
4018    `pre'
4019          Dump trees after partial redundancy elimination.  The file
4020          name is made by appending `.pre' to the source file name.
4021
4022    `fre'
4023          Dump trees after full redundancy elimination.  The file name
4024          is made by appending `.fre' to the source file name.
4025
4026    `copyprop'
4027          Dump trees after copy propagation.  The file name is made by
4028          appending `.copyprop' to the source file name.
4029
4030    `store_copyprop'
4031          Dump trees after store copy-propagation.  The file name is
4032          made by appending `.store_copyprop' to the source file name.
4033
4034    `dce'
4035          Dump each function after dead code elimination.  The file
4036          name is made by appending `.dce' to the source file name.
4037
4038    `mudflap'
4039          Dump each function after adding mudflap instrumentation.  The
4040          file name is made by appending `.mudflap' to the source file
4041          name.
4042
4043    `sra'
4044          Dump each function after performing scalar replacement of
4045          aggregates.  The file name is made by appending `.sra' to the
4046          source file name.
4047
4048    `sink'
4049          Dump each function after performing code sinking.  The file
4050          name is made by appending `.sink' to the source file name.
4051
4052    `dom'
4053          Dump each function after applying dominator tree
4054          optimizations.  The file name is made by appending `.dom' to
4055          the source file name.
4056
4057    `dse'
4058          Dump each function after applying dead store elimination.
4059          The file name is made by appending `.dse' to the source file
4060          name.
4061
4062    `phiopt'
4063          Dump each function after optimizing PHI nodes into
4064          straightline code.  The file name is made by appending
4065          `.phiopt' to the source file name.
4066
4067    `forwprop'
4068          Dump each function after forward propagating single use
4069          variables.  The file name is made by appending `.forwprop' to
4070          the source file name.
4071
4072    `copyrename'
4073          Dump each function after applying the copy rename
4074          optimization.  The file name is made by appending
4075          `.copyrename' to the source file name.
4076
4077    `nrv'
4078          Dump each function after applying the named return value
4079          optimization on generic trees.  The file name is made by
4080          appending `.nrv' to the source file name.
4081
4082    `vect'
4083          Dump each function after applying vectorization of loops.
4084          The file name is made by appending `.vect' to the source file
4085          name.
4086
4087    `vrp'
4088          Dump each function after Value Range Propagation (VRP).  The
4089          file name is made by appending `.vrp' to the source file name.
4090
4091    `all'
4092          Enable all the available tree dumps with the flags provided
4093          in this option.
4094
4095`-ftree-vectorizer-verbose=N'
4096     This option controls the amount of debugging output the vectorizer
4097     prints.  This information is written to standard error, unless
4098     `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
4099     case it is output to the usual dump listing file, `.vect'.  For
4100     N=0 no diagnostic information is reported.  If N=1 the vectorizer
4101     reports each loop that got vectorized, and the total number of
4102     loops that got vectorized.  If N=2 the vectorizer also reports
4103     non-vectorized loops that passed the first analysis phase
4104     (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
4105     single-entry/exit loops.  This is the same verbosity level that
4106     `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
4107     either more information dumped for each reported loop, or same
4108     amount of information reported for more loops: If N=3, alignment
4109     related information is added to the reports.  If N=4,
4110     data-references related information (e.g. memory dependences,
4111     memory access-patterns) is added to the reports.  If N=5, the
4112     vectorizer reports also non-vectorized inner-most loops that did
4113     not pass the first analysis phase (i.e. may not be countable, or
4114     may have complicated control-flow).  If N=6, the vectorizer
4115     reports also non-vectorized nested loops.  For N=7, all the
4116     information the vectorizer generates during its analysis and
4117     transformation is reported.  This is the same verbosity level that
4118     `-fdump-tree-vect-details' uses.
4119
4120`-frandom-seed=STRING'
4121     This option provides a seed that GCC uses when it would otherwise
4122     use random numbers.  It is used to generate certain symbol names
4123     that have to be different in every compiled file.  It is also used
4124     to place unique stamps in coverage data files and the object files
4125     that produce them.  You can use the `-frandom-seed' option to
4126     produce reproducibly identical object files.
4127
4128     The STRING should be different for every file you compile.
4129
4130`-fsched-verbose=N'
4131     On targets that use instruction scheduling, this option controls
4132     the amount of debugging output the scheduler prints.  This
4133     information is written to standard error, unless `-dS' or `-dR' is
4134     specified, in which case it is output to the usual dump listing
4135     file, `.sched' or `.sched2' respectively.  However for N greater
4136     than nine, the output is always printed to standard error.
4137
4138     For N greater than zero, `-fsched-verbose' outputs the same
4139     information as `-dRS'.  For N greater than one, it also output
4140     basic block probabilities, detailed ready list information and
4141     unit/insn info.  For N greater than two, it includes RTL at abort
4142     point, control-flow and regions info.  And for N over four,
4143     `-fsched-verbose' also includes dependence info.
4144
4145`-save-temps'
4146     Store the usual "temporary" intermediate files permanently; place
4147     them in the current directory and name them based on the source
4148     file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
4149     files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
4150     preprocessed `foo.i' output file even though the compiler now
4151     normally uses an integrated preprocessor.
4152
4153     When used in combination with the `-x' command line option,
4154     `-save-temps' is sensible enough to avoid over writing an input
4155     source file with the same extension as an intermediate file.  The
4156     corresponding intermediate file may be obtained by renaming the
4157     source file before using `-save-temps'.
4158
4159`-time'
4160     Report the CPU time taken by each subprocess in the compilation
4161     sequence.  For C source files, this is the compiler proper and
4162     assembler (plus the linker if linking is done).  The output looks
4163     like this:
4164
4165          # cc1 0.12 0.01
4166          # as 0.00 0.01
4167
4168     The first number on each line is the "user time", that is time
4169     spent executing the program itself.  The second number is "system
4170     time", time spent executing operating system routines on behalf of
4171     the program.  Both numbers are in seconds.
4172
4173`-fvar-tracking'
4174     Run variable tracking pass.  It computes where variables are
4175     stored at each position in code.  Better debugging information is
4176     then generated (if the debugging information format supports this
4177     information).
4178
4179     It is enabled by default when compiling with optimization (`-Os',
4180     `-O', `-O2', ...), debugging information (`-g') and the debug info
4181     format supports it.
4182
4183`-print-file-name=LIBRARY'
4184     Print the full absolute name of the library file LIBRARY that
4185     would be used when linking--and don't do anything else.  With this
4186     option, GCC does not compile or link anything; it just prints the
4187     file name.
4188
4189`-print-multi-directory'
4190     Print the directory name corresponding to the multilib selected by
4191     any other switches present in the command line.  This directory is
4192     supposed to exist in `GCC_EXEC_PREFIX'.
4193
4194`-print-multi-lib'
4195     Print the mapping from multilib directory names to compiler
4196     switches that enable them.  The directory name is separated from
4197     the switches by `;', and each switch starts with an `@' instead of
4198     the `-', without spaces between multiple switches.  This is
4199     supposed to ease shell-processing.
4200
4201`-print-prog-name=PROGRAM'
4202     Like `-print-file-name', but searches for a program such as `cpp'.
4203
4204`-print-libgcc-file-name'
4205     Same as `-print-file-name=libgcc.a'.
4206
4207     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
4208     you do want to link with `libgcc.a'.  You can do
4209
4210          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
4211
4212`-print-search-dirs'
4213     Print the name of the configured installation directory and a list
4214     of program and library directories `gcc' will search--and don't do
4215     anything else.
4216
4217     This is useful when `gcc' prints the error message `installation
4218     problem, cannot exec cpp0: No such file or directory'.  To resolve
4219     this you either need to put `cpp0' and the other compiler
4220     components where `gcc' expects to find them, or you can set the
4221     environment variable `GCC_EXEC_PREFIX' to the directory where you
4222     installed them.  Don't forget the trailing `/'.  *Note Environment
4223     Variables::.
4224
4225`-dumpmachine'
4226     Print the compiler's target machine (for example,
4227     `i686-pc-linux-gnu')--and don't do anything else.
4228
4229`-dumpversion'
4230     Print the compiler version (for example, `3.0')--and don't do
4231     anything else.
4232
4233`-dumpspecs'
4234     Print the compiler's built-in specs--and don't do anything else.
4235     (This is used when GCC itself is being built.)  *Note Spec Files::.
4236
4237`-feliminate-unused-debug-types'
4238     Normally, when producing DWARF2 output, GCC will emit debugging
4239     information for all types declared in a compilation unit,
4240     regardless of whether or not they are actually used in that
4241     compilation unit.  Sometimes this is useful, such as if, in the
4242     debugger, you want to cast a value to a type that is not actually
4243     used in your program (but is declared).  More often, however, this
4244     results in a significant amount of wasted space.  With this
4245     option, GCC will avoid producing debug symbol output for types
4246     that are nowhere used in the source file being compiled.
4247
4248
4249File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
4250
42513.10 Options That Control Optimization
4252======================================
4253
4254These options control various sorts of optimizations.
4255
4256 Without any optimization option, the compiler's goal is to reduce the
4257cost of compilation and to make debugging produce the expected results.
4258Statements are independent: if you stop the program with a breakpoint
4259between statements, you can then assign a new value to any variable or
4260change the program counter to any other statement in the function and
4261get exactly the results you would expect from the source code.
4262
4263 Turning on optimization flags makes the compiler attempt to improve
4264the performance and/or code size at the expense of compilation time and
4265possibly the ability to debug the program.
4266
4267 The compiler performs optimization based on the knowledge it has of
4268the program.  Optimization levels `-O' and above, in particular, enable
4269_unit-at-a-time_ mode, which allows the compiler to consider
4270information gained from later functions in the file when compiling a
4271function.  Compiling multiple files at once to a single output file in
4272_unit-at-a-time_ mode allows the compiler to use information gained
4273from all of the files when compiling each of them.
4274
4275 Not all optimizations are controlled directly by a flag.  Only
4276optimizations that have a flag are listed.
4277
4278`-O'
4279`-O1'
4280     Optimize.  Optimizing compilation takes somewhat more time, and a
4281     lot more memory for a large function.
4282
4283     With `-O', the compiler tries to reduce code size and execution
4284     time, without performing any optimizations that take a great deal
4285     of compilation time.
4286
4287     `-O' turns on the following optimization flags:
4288          -fdefer-pop
4289          -fdelayed-branch
4290          -fguess-branch-probability
4291          -fcprop-registers
4292          -fif-conversion
4293          -fif-conversion2
4294          -ftree-ccp
4295          -ftree-dce
4296          -ftree-dominator-opts
4297          -ftree-dse
4298          -ftree-ter
4299          -ftree-lrs
4300          -ftree-sra
4301          -ftree-copyrename
4302          -ftree-fre
4303          -ftree-ch
4304          -funit-at-a-time
4305          -fmerge-constants
4306
4307     `-O' also turns on `-fomit-frame-pointer' on machines where doing
4308     so does not interfere with debugging.
4309
4310`-O2'
4311     Optimize even more.  GCC performs nearly all supported
4312     optimizations that do not involve a space-speed tradeoff.  The
4313     compiler does not perform loop unrolling or function inlining when
4314     you specify `-O2'.  As compared to `-O', this option increases
4315     both compilation time and the performance of the generated code.
4316
4317     `-O2' turns on all optimization flags specified by `-O'.  It also
4318     turns on the following optimization flags:
4319          -fthread-jumps
4320          -fcrossjumping
4321          -foptimize-sibling-calls
4322          -fcse-follow-jumps  -fcse-skip-blocks
4323          -fgcse  -fgcse-lm
4324          -fexpensive-optimizations
4325          -frerun-cse-after-loop
4326          -fcaller-saves
4327          -fpeephole2
4328          -fschedule-insns  -fschedule-insns2
4329          -fsched-interblock  -fsched-spec
4330          -fregmove
4331          -fstrict-aliasing -fstrict-overflow
4332          -fdelete-null-pointer-checks
4333          -freorder-blocks  -freorder-functions
4334          -falign-functions  -falign-jumps
4335          -falign-loops  -falign-labels
4336          -ftree-vrp
4337          -ftree-pre
4338
4339     Please note the warning under `-fgcse' about invoking `-O2' on
4340     programs that use computed gotos.
4341
4342     `-O2' doesn't turn on `-ftree-vrp' for the Ada compiler.  This
4343     option must be explicitly specified on the command line to be
4344     enabled for the Ada compiler.
4345
4346`-O3'
4347     Optimize yet more.  `-O3' turns on all optimizations specified by
4348     `-O2' and also turns on the `-finline-functions',
4349     `-funswitch-loops' and `-fgcse-after-reload' options.
4350
4351`-O0'
4352     Do not optimize.  This is the default.
4353
4354`-Os'
4355     Optimize for size.  `-Os' enables all `-O2' optimizations that do
4356     not typically increase code size.  It also performs further
4357     optimizations designed to reduce code size.
4358
4359     `-Os' disables the following optimization flags:
4360          -falign-functions  -falign-jumps  -falign-loops
4361          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
4362          -fprefetch-loop-arrays  -ftree-vect-loop-version
4363
4364     If you use multiple `-O' options, with or without level numbers,
4365     the last such option is the one that is effective.
4366
4367 Options of the form `-fFLAG' specify machine-independent flags.  Most
4368flags have both positive and negative forms; the negative form of
4369`-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
4370is listed--the one you typically will use.  You can figure out the
4371other form by either removing `no-' or adding it.
4372
4373 The following options control specific optimizations.  They are either
4374activated by `-O' options or are related to ones that are.  You can use
4375the following flags in the rare cases when "fine-tuning" of
4376optimizations to be performed is desired.
4377
4378`-fno-default-inline'
4379     Do not make member functions inline by default merely because they
4380     are defined inside the class scope (C++ only).  Otherwise, when
4381     you specify `-O', member functions defined inside class scope are
4382     compiled inline by default; i.e., you don't need to add `inline'
4383     in front of the member function name.
4384
4385`-fno-defer-pop'
4386     Always pop the arguments to each function call as soon as that
4387     function returns.  For machines which must pop arguments after a
4388     function call, the compiler normally lets arguments accumulate on
4389     the stack for several function calls and pops them all at once.
4390
4391     Disabled at levels `-O', `-O2', `-O3', `-Os'.
4392
4393`-fforce-mem'
4394     Force memory operands to be copied into registers before doing
4395     arithmetic on them.  This produces better code by making all memory
4396     references potential common subexpressions.  When they are not
4397     common subexpressions, instruction combination should eliminate
4398     the separate register-load. This option is now a nop and will be
4399     removed in 4.3.
4400
4401`-fforce-addr'
4402     Force memory address constants to be copied into registers before
4403     doing arithmetic on them.
4404
4405`-fomit-frame-pointer'
4406     Don't keep the frame pointer in a register for functions that
4407     don't need one.  This avoids the instructions to save, set up and
4408     restore frame pointers; it also makes an extra register available
4409     in many functions.  *It also makes debugging impossible on some
4410     machines.*
4411
4412     On some machines, such as the VAX, this flag has no effect, because
4413     the standard calling sequence automatically handles the frame
4414     pointer and nothing is saved by pretending it doesn't exist.  The
4415     machine-description macro `FRAME_POINTER_REQUIRED' controls
4416     whether a target machine supports this flag.  *Note Register
4417     Usage: (gccint)Registers.
4418
4419     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4420
4421`-foptimize-sibling-calls'
4422     Optimize sibling and tail recursive calls.
4423
4424     Enabled at levels `-O2', `-O3', `-Os'.
4425
4426`-fno-inline'
4427     Don't pay attention to the `inline' keyword.  Normally this option
4428     is used to keep the compiler from expanding any functions inline.
4429     Note that if you are not optimizing, no functions can be expanded
4430     inline.
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 if `-funit-at-a-time' is enabled.
4450
4451`-fearly-inlining'
4452     Inline functions marked by `always_inline' and functions whose
4453     body seems smaller than the function call overhead early before
4454     doing `-fprofile-generate' instrumentation and real inlining pass.
4455     Doing so makes profiling significantly cheaper and usually
4456     inlining faster on programs having large chains of nested wrapper
4457     functions.
4458
4459     Enabled by default.
4460
4461`-finline-limit=N'
4462     By default, GCC limits the size of functions that can be inlined.
4463     This flag allows the control of this limit for functions that are
4464     explicitly marked as inline (i.e., marked with the inline keyword
4465     or defined within the class definition in c++).  N is the size of
4466     functions that can be inlined in number of pseudo instructions
4467     (not counting parameter handling).  The default value of N is 600.
4468     Increasing this value can result in more inlined code at the cost
4469     of compilation time and memory consumption.  Decreasing usually
4470     makes the compilation faster and less code will be inlined (which
4471     presumably means slower programs).  This option is particularly
4472     useful for programs that use inlining heavily such as those based
4473     on recursive templates with C++.
4474
4475     Inlining is actually controlled by a number of parameters, which
4476     may be specified individually by using `--param NAME=VALUE'.  The
4477     `-finline-limit=N' option sets some of these parameters as follows:
4478
4479    `max-inline-insns-single'
4480          is set to N/2.
4481
4482    `max-inline-insns-auto'
4483          is set to N/2.
4484
4485    `min-inline-insns'
4486          is set to 130 or N/4, whichever is smaller.
4487
4488    `max-inline-insns-rtl'
4489          is set to N.
4490
4491     See below for a documentation of the individual parameters
4492     controlling inlining.
4493
4494     _Note:_ pseudo instruction represents, in this particular context,
4495     an abstract measurement of function's size.  In no way does it
4496     represent a count of assembly instructions and as such its exact
4497     meaning might change from one release to an another.
4498
4499`-fkeep-inline-functions'
4500     In C, emit `static' functions that are declared `inline' into the
4501     object file, even if the function has been inlined into all of its
4502     callers.  This switch does not affect functions using the `extern
4503     inline' extension in GNU C.  In C++, emit any and all inline
4504     functions into the object file.
4505
4506`-fkeep-static-consts'
4507     Emit variables declared `static const' when optimization isn't
4508     turned on, even if the variables aren't referenced.
4509
4510     GCC enables this option by default.  If you want to force the
4511     compiler to check if the variable was referenced, regardless of
4512     whether or not optimization is turned on, use the
4513     `-fno-keep-static-consts' option.
4514
4515`-fmerge-constants'
4516     Attempt to merge identical constants (string constants and
4517     floating point constants) across compilation units.
4518
4519     This option is the default for optimized compilation if the
4520     assembler and linker support it.  Use `-fno-merge-constants' to
4521     inhibit this behavior.
4522
4523     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4524
4525`-fmerge-all-constants'
4526     Attempt to merge identical constants and identical variables.
4527
4528     This option implies `-fmerge-constants'.  In addition to
4529     `-fmerge-constants' this considers e.g. even constant initialized
4530     arrays or initialized constant variables with integral or floating
4531     point types.  Languages like C or C++ require each non-automatic
4532     variable to have distinct location, so using this option will
4533     result in non-conforming behavior.
4534
4535`-fmodulo-sched'
4536     Perform swing modulo scheduling immediately before the first
4537     scheduling pass.  This pass looks at innermost loops and reorders
4538     their instructions by overlapping different iterations.
4539
4540`-fno-branch-count-reg'
4541     Do not use "decrement and branch" instructions on a count register,
4542     but instead generate a sequence of instructions that decrement a
4543     register, compare it against zero, then branch based upon the
4544     result.  This option is only meaningful on architectures that
4545     support such instructions, which include x86, PowerPC, IA-64 and
4546     S/390.
4547
4548     The default is `-fbranch-count-reg'.
4549
4550`-fno-function-cse'
4551     Do not put function addresses in registers; make each instruction
4552     that calls a constant function contain the function's address
4553     explicitly.
4554
4555     This option results in less efficient code, but some strange hacks
4556     that alter the assembler output may be confused by the
4557     optimizations performed when this option is not used.
4558
4559     The default is `-ffunction-cse'
4560
4561`-fno-zero-initialized-in-bss'
4562     If the target supports a BSS section, GCC by default puts
4563     variables that are initialized to zero into BSS.  This can save
4564     space in the resulting code.
4565
4566     This option turns off this behavior because some programs
4567     explicitly rely on variables going to the data section.  E.g., so
4568     that the resulting executable can find the beginning of that
4569     section and/or make assumptions based on that.
4570
4571     The default is `-fzero-initialized-in-bss'.
4572
4573`-fbounds-check'
4574     For front-ends that support it, generate additional code to check
4575     that indices used to access arrays are within the declared range.
4576     This is currently only supported by the Java and Fortran
4577     front-ends, where this option defaults to true and false
4578     respectively.
4579
4580`-fmudflap -fmudflapth -fmudflapir'
4581     For front-ends that support it (C and C++), instrument all risky
4582     pointer/array dereferencing operations, some standard library
4583     string/heap functions, and some other associated constructs with
4584     range/validity tests.  Modules so instrumented should be immune to
4585     buffer overflows, invalid heap use, and some other classes of C/C++
4586     programming errors.  The instrumentation relies on a separate
4587     runtime library (`libmudflap'), which will be linked into a
4588     program if `-fmudflap' is given at link time.  Run-time behavior
4589     of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
4590     environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
4591     its options.
4592
4593     Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
4594     your program is multi-threaded.  Use `-fmudflapir', in addition to
4595     `-fmudflap' or `-fmudflapth', if instrumentation should ignore
4596     pointer reads.  This produces less instrumentation (and therefore
4597     faster execution) and still provides some protection against
4598     outright memory corrupting writes, but allows erroneously read
4599     data to propagate within a program.
4600
4601`-fthread-jumps'
4602     Perform optimizations where we check to see if a jump branches to a
4603     location where another comparison subsumed by the first is found.
4604     If so, the first branch is redirected to either the destination of
4605     the second branch or a point immediately following it, depending
4606     on whether the condition is known to be true or false.
4607
4608     Enabled at levels `-O2', `-O3', `-Os'.
4609
4610`-fcse-follow-jumps'
4611     In common subexpression elimination, scan through jump instructions
4612     when the target of the jump is not reached by any other path.  For
4613     example, when CSE encounters an `if' statement with an `else'
4614     clause, CSE will follow the jump when the condition tested is
4615     false.
4616
4617     Enabled at levels `-O2', `-O3', `-Os'.
4618
4619`-fcse-skip-blocks'
4620     This is similar to `-fcse-follow-jumps', but causes CSE to follow
4621     jumps which conditionally skip over blocks.  When CSE encounters a
4622     simple `if' statement with no else clause, `-fcse-skip-blocks'
4623     causes CSE to follow the jump around the body of the `if'.
4624
4625     Enabled at levels `-O2', `-O3', `-Os'.
4626
4627`-frerun-cse-after-loop'
4628     Re-run common subexpression elimination after loop optimizations
4629     has been performed.
4630
4631     Enabled at levels `-O2', `-O3', `-Os'.
4632
4633`-fgcse'
4634     Perform a global common subexpression elimination pass.  This pass
4635     also performs global constant and copy propagation.
4636
4637     _Note:_ When compiling a program using computed gotos, a GCC
4638     extension, you may get better runtime performance if you disable
4639     the global common subexpression elimination pass by adding
4640     `-fno-gcse' to the command line.
4641
4642     Enabled at levels `-O2', `-O3', `-Os'.
4643
4644`-fgcse-lm'
4645     When `-fgcse-lm' is enabled, global common subexpression
4646     elimination will attempt to move loads which are only killed by
4647     stores into themselves.  This allows a loop containing a
4648     load/store sequence to be changed to a load outside the loop, and
4649     a copy/store within the loop.
4650
4651     Enabled by default when gcse is enabled.
4652
4653`-fgcse-sm'
4654     When `-fgcse-sm' is enabled, a store motion pass is run after
4655     global common subexpression elimination.  This pass will attempt
4656     to move stores out of loops.  When used in conjunction with
4657     `-fgcse-lm', loops containing a load/store sequence can be changed
4658     to a load before the loop and a store after the loop.
4659
4660     Not enabled at any optimization level.
4661
4662`-fgcse-las'
4663     When `-fgcse-las' is enabled, the global common subexpression
4664     elimination pass eliminates redundant loads that come after stores
4665     to the same memory location (both partial and full redundancies).
4666
4667     Not enabled at any optimization level.
4668
4669`-fgcse-after-reload'
4670     When `-fgcse-after-reload' is enabled, a redundant load elimination
4671     pass is performed after reload.  The purpose of this pass is to
4672     cleanup redundant spilling.
4673
4674`-funsafe-loop-optimizations'
4675     If given, the loop optimizer will assume that loop indices do not
4676     overflow, and that the loops with nontrivial exit condition are not
4677     infinite.  This enables a wider range of loop optimizations even if
4678     the loop optimizer itself cannot prove that these assumptions are
4679     valid.  Using `-Wunsafe-loop-optimizations', the compiler will
4680     warn you if it finds this kind of loop.
4681
4682`-fcrossjumping'
4683     Perform cross-jumping transformation.  This transformation unifies
4684     equivalent code and save code size.  The resulting code may or may
4685     not perform better than without cross-jumping.
4686
4687     Enabled at levels `-O2', `-O3', `-Os'.
4688
4689`-fif-conversion'
4690     Attempt to transform conditional jumps into branch-less
4691     equivalents.  This include use of conditional moves, min, max, set
4692     flags and abs instructions, and some tricks doable by standard
4693     arithmetics.  The use of conditional execution on chips where it
4694     is available is controlled by `if-conversion2'.
4695
4696     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4697
4698`-fif-conversion2'
4699     Use conditional execution (where available) to transform
4700     conditional jumps into branch-less equivalents.
4701
4702     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4703
4704`-fdelete-null-pointer-checks'
4705     Use global dataflow analysis to identify and eliminate useless
4706     checks for null pointers.  The compiler assumes that dereferencing
4707     a null pointer would have halted the program.  If a pointer is
4708     checked after it has already been dereferenced, it cannot be null.
4709
4710     In some environments, this assumption is not true, and programs can
4711     safely dereference null pointers.  Use
4712     `-fno-delete-null-pointer-checks' to disable this optimization for
4713     programs which depend on that behavior.
4714
4715     Enabled at levels `-O2', `-O3', `-Os'.
4716
4717`-fexpensive-optimizations'
4718     Perform a number of minor optimizations that are relatively
4719     expensive.
4720
4721     Enabled at levels `-O2', `-O3', `-Os'.
4722
4723`-foptimize-register-move'
4724`-fregmove'
4725     Attempt to reassign register numbers in move instructions and as
4726     operands of other simple instructions in order to maximize the
4727     amount of register tying.  This is especially helpful on machines
4728     with two-operand instructions.
4729
4730     Note `-fregmove' and `-foptimize-register-move' are the same
4731     optimization.
4732
4733     Enabled at levels `-O2', `-O3', `-Os'.
4734
4735`-fdelayed-branch'
4736     If supported for the target machine, attempt to reorder
4737     instructions to exploit instruction slots available after delayed
4738     branch instructions.
4739
4740     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4741
4742`-fschedule-insns'
4743     If supported for the target machine, attempt to reorder
4744     instructions to eliminate execution stalls due to required data
4745     being unavailable.  This helps machines that have slow floating
4746     point or memory load instructions by allowing other instructions
4747     to be issued until the result of the load or floating point
4748     instruction is required.
4749
4750     Enabled at levels `-O2', `-O3', `-Os'.
4751
4752`-fschedule-insns2'
4753     Similar to `-fschedule-insns', but requests an additional pass of
4754     instruction scheduling after register allocation has been done.
4755     This is especially useful on machines with a relatively small
4756     number of registers and where memory load instructions take more
4757     than one cycle.
4758
4759     Enabled at levels `-O2', `-O3', `-Os'.
4760
4761`-fno-sched-interblock'
4762     Don't schedule instructions across basic blocks.  This is normally
4763     enabled by default when scheduling before register allocation, i.e.
4764     with `-fschedule-insns' or at `-O2' or higher.
4765
4766`-fno-sched-spec'
4767     Don't allow speculative motion of non-load instructions.  This is
4768     normally enabled by default when scheduling before register
4769     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
4770
4771`-fsched-spec-load'
4772     Allow speculative motion of some load instructions.  This only
4773     makes sense when scheduling before register allocation, i.e. with
4774     `-fschedule-insns' or at `-O2' or higher.
4775
4776`-fsched-spec-load-dangerous'
4777     Allow speculative motion of more load instructions.  This only
4778     makes sense when scheduling before register allocation, i.e. with
4779     `-fschedule-insns' or at `-O2' or higher.
4780
4781`-fsched-stalled-insns=N'
4782     Define how many insns (if any) can be moved prematurely from the
4783     queue of stalled insns into the ready list, during the second
4784     scheduling pass.
4785
4786`-fsched-stalled-insns-dep=N'
4787     Define how many insn groups (cycles) will be examined for a
4788     dependency on a stalled insn that is candidate for premature
4789     removal from the queue of stalled insns.  Has an effect only
4790     during the second scheduling pass, and only if
4791     `-fsched-stalled-insns' is used and its value is not zero.
4792
4793`-fsched2-use-superblocks'
4794     When scheduling after register allocation, do use superblock
4795     scheduling algorithm.  Superblock scheduling allows motion across
4796     basic block boundaries resulting on faster schedules.  This option
4797     is experimental, as not all machine descriptions used by GCC model
4798     the CPU closely enough to avoid unreliable results from the
4799     algorithm.
4800
4801     This only makes sense when scheduling after register allocation,
4802     i.e. with `-fschedule-insns2' or at `-O2' or higher.
4803
4804`-fsched2-use-traces'
4805     Use `-fsched2-use-superblocks' algorithm when scheduling after
4806     register allocation and additionally perform code duplication in
4807     order to increase the size of superblocks using tracer pass.  See
4808     `-ftracer' for details on trace formation.
4809
4810     This mode should produce faster but significantly longer programs.
4811     Also without `-fbranch-probabilities' the traces constructed may
4812     not match the reality and hurt the performance.  This only makes
4813     sense when scheduling after register allocation, i.e. with
4814     `-fschedule-insns2' or at `-O2' or higher.
4815
4816`-fsee'
4817     Eliminates redundant extension instructions and move the non
4818     redundant ones to optimal placement using LCM.
4819
4820`-freschedule-modulo-scheduled-loops'
4821     The modulo scheduling comes before the traditional scheduling, if
4822     a loop was modulo scheduled we may want to prevent the later
4823     scheduling passes from changing its schedule, we use this option
4824     to control that.
4825
4826`-fcaller-saves'
4827     Enable values to be allocated in registers that will be clobbered
4828     by function calls, by emitting extra instructions to save and
4829     restore the registers around such calls.  Such allocation is done
4830     only when it seems to result in better code than would otherwise
4831     be produced.
4832
4833     This option is always enabled by default on certain machines,
4834     usually those which have no call-preserved registers to use
4835     instead.
4836
4837     Enabled at levels `-O2', `-O3', `-Os'.
4838
4839`-ftree-pre'
4840     Perform Partial Redundancy Elimination (PRE) on trees.  This flag
4841     is enabled by default at `-O2' and `-O3'.
4842
4843`-ftree-fre'
4844     Perform Full Redundancy Elimination (FRE) on trees.  The difference
4845     between FRE and PRE is that FRE only considers expressions that
4846     are computed on all paths leading to the redundant computation.
4847     This analysis faster than PRE, though it exposes fewer
4848     redundancies.  This flag is enabled by default at `-O' and higher.
4849
4850`-ftree-copy-prop'
4851     Perform copy propagation on trees.  This pass eliminates
4852     unnecessary copy operations.  This flag is enabled by default at
4853     `-O' and higher.
4854
4855`-ftree-store-copy-prop'
4856     Perform copy propagation of memory loads and stores.  This pass
4857     eliminates unnecessary copy operations in memory references
4858     (structures, global variables, arrays, etc).  This flag is enabled
4859     by default at `-O2' and higher.
4860
4861`-ftree-salias'
4862     Perform structural alias analysis on trees.  This flag is enabled
4863     by default at `-O' and higher.
4864
4865`-fipa-pta'
4866     Perform interprocedural pointer analysis.
4867
4868`-ftree-sink'
4869     Perform forward store motion  on trees.  This flag is enabled by
4870     default at `-O' and higher.
4871
4872`-ftree-ccp'
4873     Perform sparse conditional constant propagation (CCP) on trees.
4874     This pass only operates on local scalar variables and is enabled
4875     by default at `-O' and higher.
4876
4877`-ftree-store-ccp'
4878     Perform sparse conditional constant propagation (CCP) on trees.
4879     This pass operates on both local scalar variables and memory
4880     stores and loads (global variables, structures, arrays, etc).
4881     This flag is enabled by default at `-O2' and higher.
4882
4883`-ftree-dce'
4884     Perform dead code elimination (DCE) on trees.  This flag is
4885     enabled by default at `-O' and higher.
4886
4887`-ftree-dominator-opts'
4888     Perform a variety of simple scalar cleanups (constant/copy
4889     propagation, redundancy elimination, range propagation and
4890     expression simplification) based on a dominator tree traversal.
4891     This also performs jump threading (to reduce jumps to jumps). This
4892     flag is enabled by default at `-O' and higher.
4893
4894`-ftree-ch'
4895     Perform loop header copying on trees.  This is beneficial since it
4896     increases effectiveness of code motion optimizations.  It also
4897     saves one jump.  This flag is enabled by default at `-O' and
4898     higher.  It is not enabled for `-Os', since it usually increases
4899     code size.
4900
4901`-ftree-loop-optimize'
4902     Perform loop optimizations on trees.  This flag is enabled by
4903     default at `-O' and higher.
4904
4905`-ftree-loop-linear'
4906     Perform linear loop transformations on tree.  This flag can
4907     improve cache performance and allow further loop optimizations to
4908     take place.
4909
4910`-ftree-loop-im'
4911     Perform loop invariant motion on trees.  This pass moves only
4912     invariants that would be hard to handle at RTL level (function
4913     calls, operations that expand to nontrivial sequences of insns).
4914     With `-funswitch-loops' it also moves operands of conditions that
4915     are invariant out of the loop, so that we can use just trivial
4916     invariantness analysis in loop unswitching.  The pass also includes
4917     store motion.
4918
4919`-ftree-loop-ivcanon'
4920     Create a canonical counter for number of iterations in the loop
4921     for that determining number of iterations requires complicated
4922     analysis.  Later optimizations then may determine the number
4923     easily.  Useful especially in connection with unrolling.
4924
4925`-fivopts'
4926     Perform induction variable optimizations (strength reduction,
4927     induction variable merging and induction variable elimination) on
4928     trees.
4929
4930`-ftree-sra'
4931     Perform scalar replacement of aggregates.  This pass replaces
4932     structure references with scalars to prevent committing structures
4933     to memory too early.  This flag is enabled by default at `-O' and
4934     higher.
4935
4936`-ftree-copyrename'
4937     Perform copy renaming on trees.  This pass attempts to rename
4938     compiler temporaries to other variables at copy locations, usually
4939     resulting in variable names which more closely resemble the
4940     original variables.  This flag is enabled by default at `-O' and
4941     higher.
4942
4943`-ftree-ter'
4944     Perform temporary expression replacement during the SSA->normal
4945     phase.  Single use/single def temporaries are replaced at their
4946     use location with their defining expression.  This results in
4947     non-GIMPLE code, but gives the expanders much more complex trees
4948     to work on resulting in better RTL generation.  This is enabled by
4949     default at `-O' and higher.
4950
4951`-ftree-lrs'
4952     Perform live range splitting during the SSA->normal phase.
4953     Distinct live ranges of a variable are split into unique
4954     variables, allowing for better optimization later.  This is
4955     enabled by default at `-O' and higher.
4956
4957`-ftree-vectorize'
4958     Perform loop vectorization on trees.
4959
4960`-ftree-vect-loop-version'
4961     Perform loop versioning when doing loop vectorization on trees.
4962     When a loop appears to be vectorizable except that data alignment
4963     or data dependence cannot be determined at compile time then
4964     vectorized and non-vectorized versions of the loop are generated
4965     along with runtime checks for alignment or dependence to control
4966     which version is executed.  This option is enabled by default
4967     except at level `-Os' where it is disabled.
4968
4969`-ftree-vrp'
4970     Perform Value Range Propagation on trees.  This is similar to the
4971     constant propagation pass, but instead of values, ranges of values
4972     are propagated.  This allows the optimizers to remove unnecessary
4973     range checks like array bound checks and null pointer checks.
4974     This is enabled by default at `-O2' and higher.  Null pointer check
4975     elimination is only done if `-fdelete-null-pointer-checks' is
4976     enabled.
4977
4978`-ftracer'
4979     Perform tail duplication to enlarge superblock size.  This
4980     transformation simplifies the control flow of the function
4981     allowing other optimizations to do better job.
4982
4983`-funroll-loops'
4984     Unroll loops whose number of iterations can be determined at
4985     compile time or upon entry to the loop.  `-funroll-loops' implies
4986     `-frerun-cse-after-loop'.  This option makes code larger, and may
4987     or may not make it run faster.
4988
4989`-funroll-all-loops'
4990     Unroll all loops, even if their number of iterations is uncertain
4991     when the loop is entered.  This usually makes programs run more
4992     slowly.  `-funroll-all-loops' implies the same options as
4993     `-funroll-loops',
4994
4995`-fsplit-ivs-in-unroller'
4996     Enables expressing of values of induction variables in later
4997     iterations of the unrolled loop using the value in the first
4998     iteration.  This breaks long dependency chains, thus improving
4999     efficiency of the scheduling passes.
5000
5001     Combination of `-fweb' and CSE is often sufficient to obtain the
5002     same effect.  However in cases the loop body is more complicated
5003     than a single basic block, this is not reliable.  It also does not
5004     work at all on some of the architectures due to restrictions in
5005     the CSE pass.
5006
5007     This optimization is enabled by default.
5008
5009`-fvariable-expansion-in-unroller'
5010     With this option, the compiler will create multiple copies of some
5011     local variables when unrolling a loop which can result in superior
5012     code.
5013
5014`-fprefetch-loop-arrays'
5015     If supported by the target machine, generate instructions to
5016     prefetch memory to improve the performance of loops that access
5017     large arrays.
5018
5019     This option may generate better or worse code; results are highly
5020     dependent on the structure of loops within the source code.
5021
5022     Disabled at level `-Os'.
5023
5024`-fno-peephole'
5025`-fno-peephole2'
5026     Disable any machine-specific peephole optimizations.  The
5027     difference between `-fno-peephole' and `-fno-peephole2' is in how
5028     they are implemented in the compiler; some targets use one, some
5029     use the other, a few use both.
5030
5031     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
5032     levels `-O2', `-O3', `-Os'.
5033
5034`-fno-guess-branch-probability'
5035     Do not guess branch probabilities using heuristics.
5036
5037     GCC will use heuristics to guess branch probabilities if they are
5038     not provided by profiling feedback (`-fprofile-arcs').  These
5039     heuristics are based on the control flow graph.  If some branch
5040     probabilities are specified by `__builtin_expect', then the
5041     heuristics will be used to guess branch probabilities for the rest
5042     of the control flow graph, taking the `__builtin_expect' info into
5043     account.  The interactions between the heuristics and
5044     `__builtin_expect' can be complex, and in some cases, it may be
5045     useful to disable the heuristics so that the effects of
5046     `__builtin_expect' are easier to understand.
5047
5048     The default is `-fguess-branch-probability' at levels `-O', `-O2',
5049     `-O3', `-Os'.
5050
5051`-freorder-blocks'
5052     Reorder basic blocks in the compiled function in order to reduce
5053     number of taken branches and improve code locality.
5054
5055     Enabled at levels `-O2', `-O3'.
5056
5057`-freorder-blocks-and-partition'
5058     In addition to reordering basic blocks in the compiled function,
5059     in order to reduce number of taken branches, partitions hot and
5060     cold basic blocks into separate sections of the assembly and .o
5061     files, to improve paging and cache locality performance.
5062
5063     This optimization is automatically turned off in the presence of
5064     exception handling, for linkonce sections, for functions with a
5065     user-defined section attribute and on any architecture that does
5066     not support named sections.
5067
5068`-freorder-functions'
5069     Reorder functions in the object file in order to improve code
5070     locality.  This is implemented by using special subsections
5071     `.text.hot' for most frequently executed functions and
5072     `.text.unlikely' for unlikely executed functions.  Reordering is
5073     done by the linker so object file format must support named
5074     sections and linker must place them in a reasonable way.
5075
5076     Also profile feedback must be available in to make this option
5077     effective.  See `-fprofile-arcs' for details.
5078
5079     Enabled at levels `-O2', `-O3', `-Os'.
5080
5081`-fstrict-aliasing'
5082     Allows the compiler to assume the strictest aliasing rules
5083     applicable to the language being compiled.  For C (and C++), this
5084     activates optimizations based on the type of expressions.  In
5085     particular, an object of one type is assumed never to reside at
5086     the same address as an object of a different type, unless the
5087     types are almost the same.  For example, an `unsigned int' can
5088     alias an `int', but not a `void*' or a `double'.  A character type
5089     may alias any other type.
5090
5091     Pay special attention to code like this:
5092          union a_union {
5093            int i;
5094            double d;
5095          };
5096
5097          int f() {
5098            a_union t;
5099            t.d = 3.0;
5100            return t.i;
5101          }
5102     The practice of reading from a different union member than the one
5103     most recently written to (called "type-punning") is common.  Even
5104     with `-fstrict-aliasing', type-punning is allowed, provided the
5105     memory is accessed through the union type.  So, the code above
5106     will work as expected.  However, this code might not:
5107          int f() {
5108            a_union t;
5109            int* ip;
5110            t.d = 3.0;
5111            ip = &t.i;
5112            return *ip;
5113          }
5114
5115     Every language that wishes to perform language-specific alias
5116     analysis should define a function that computes, given an `tree'
5117     node, an alias set for the node.  Nodes in different alias sets
5118     are not allowed to alias.  For an example, see the C front-end
5119     function `c_get_alias_set'.
5120
5121     Enabled at levels `-O2', `-O3', `-Os'.
5122
5123`-fstrict-overflow'
5124     Allow the compiler to assume strict signed overflow rules,
5125     depending on the language being compiled.  For C (and C++) this
5126     means that overflow when doing arithmetic with signed numbers is
5127     undefined, which means that the compiler may assume that it will
5128     not happen.  This permits various optimizations.  For example, the
5129     compiler will assume that an expression like `i + 10 > i' will
5130     always be true for signed `i'.  This assumption is only valid if
5131     signed overflow is undefined, as the expression is false if `i +
5132     10' overflows when using twos complement arithmetic.  When this
5133     option is in effect any attempt to determine whether an operation
5134     on signed numbers will overflow must be written carefully to not
5135     actually involve overflow.
5136
5137     See also the `-fwrapv' option.  Using `-fwrapv' means that signed
5138     overflow is fully defined: it wraps.  When `-fwrapv' is used,
5139     there is no difference between `-fstrict-overflow' and
5140     `-fno-strict-overflow'.  With `-fwrapv' certain types of overflow
5141     are permitted.  For example, if the compiler gets an overflow when
5142     doing arithmetic on constants, the overflowed value can still be
5143     used with `-fwrapv', but not otherwise.
5144
5145     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
5146     `-Os'.
5147
5148`-falign-functions'
5149`-falign-functions=N'
5150     Align the start of functions to the next power-of-two greater than
5151     N, skipping up to N bytes.  For instance, `-falign-functions=32'
5152     aligns functions to the next 32-byte boundary, but
5153     `-falign-functions=24' would align to the next 32-byte boundary
5154     only if this can be done by skipping 23 bytes or less.
5155
5156     `-fno-align-functions' and `-falign-functions=1' are equivalent
5157     and mean that functions will not be aligned.
5158
5159     Some assemblers only support this flag when N is a power of two;
5160     in that case, it is rounded up.
5161
5162     If N is not specified or is zero, use a machine-dependent default.
5163
5164     Enabled at levels `-O2', `-O3'.
5165
5166`-falign-labels'
5167`-falign-labels=N'
5168     Align all branch targets to a power-of-two boundary, skipping up to
5169     N bytes like `-falign-functions'.  This option can easily make
5170     code slower, because it must insert dummy operations for when the
5171     branch target is reached in the usual flow of the code.
5172
5173     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
5174     that labels will not be aligned.
5175
5176     If `-falign-loops' or `-falign-jumps' are applicable and are
5177     greater than this value, then their values are used instead.
5178
5179     If N is not specified or is zero, use a machine-dependent default
5180     which is very likely to be `1', meaning no alignment.
5181
5182     Enabled at levels `-O2', `-O3'.
5183
5184`-falign-loops'
5185`-falign-loops=N'
5186     Align loops to a power-of-two boundary, skipping up to N bytes
5187     like `-falign-functions'.  The hope is that the loop will be
5188     executed many times, which will make up for any execution of the
5189     dummy operations.
5190
5191     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
5192     that loops will not be aligned.
5193
5194     If N is not specified or is zero, use a machine-dependent default.
5195
5196     Enabled at levels `-O2', `-O3'.
5197
5198`-falign-jumps'
5199`-falign-jumps=N'
5200     Align branch targets to a power-of-two boundary, for branch targets
5201     where the targets can only be reached by jumping, skipping up to N
5202     bytes like `-falign-functions'.  In this case, no dummy operations
5203     need be executed.
5204
5205     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
5206     that loops will not be aligned.
5207
5208     If N is not specified or is zero, use a machine-dependent default.
5209
5210     Enabled at levels `-O2', `-O3'.
5211
5212`-funit-at-a-time'
5213     Parse the whole compilation unit before starting to produce code.
5214     This allows some extra optimizations to take place but consumes
5215     more memory (in general).  There are some compatibility issues
5216     with _unit-at-a-time_ mode:
5217        * enabling _unit-at-a-time_ mode may change the order in which
5218          functions, variables, and top-level `asm' statements are
5219          emitted, and will likely break code relying on some particular
5220          ordering.  The majority of such top-level `asm' statements,
5221          though, can be replaced by `section' attributes.  The
5222          `fno-toplevel-reorder' option may be used to keep the ordering
5223          used in the input file, at the cost of some optimizations.
5224
5225        * _unit-at-a-time_ mode removes unreferenced static variables
5226          and functions.  This may result in undefined references when
5227          an `asm' statement refers directly to variables or functions
5228          that are otherwise unused.  In that case either the
5229          variable/function shall be listed as an operand of the `asm'
5230          statement operand or, in the case of top-level `asm'
5231          statements the attribute `used' shall be used on the
5232          declaration.
5233
5234        * Static functions now can use non-standard passing conventions
5235          that may break `asm' statements calling functions directly.
5236          Again, attribute `used' will prevent this behavior.
5237
5238     As a temporary workaround, `-fno-unit-at-a-time' can be used, but
5239     this scheme may not be supported by future releases of GCC.
5240
5241     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5242
5243`-fno-toplevel-reorder'
5244     Do not reorder top-level functions, variables, and `asm'
5245     statements.  Output them in the same order that they appear in the
5246     input file.  When this option is used, unreferenced static
5247     variables will not be removed.  This option is intended to support
5248     existing code which relies on a particular ordering.  For new
5249     code, it is better to use attributes.
5250
5251`-fweb'
5252     Constructs webs as commonly used for register allocation purposes
5253     and assign each web individual pseudo register.  This allows the
5254     register allocation pass to operate on pseudos directly, but also
5255     strengthens several other optimization passes, such as CSE, loop
5256     optimizer and trivial dead code remover.  It can, however, make
5257     debugging impossible, since variables will no longer stay in a
5258     "home register".
5259
5260     Enabled by default with `-funroll-loops'.
5261
5262`-fwhole-program'
5263     Assume that the current compilation unit represents whole program
5264     being compiled.  All public functions and variables with the
5265     exception of `main' and those merged by attribute
5266     `externally_visible' become static functions and in a affect gets
5267     more aggressively optimized by interprocedural optimizers.  While
5268     this option is equivalent to proper use of `static' keyword for
5269     programs consisting of single file, in combination with option
5270     `--combine' this flag can be used to compile most of smaller scale
5271     C programs since the functions and variables become local for the
5272     whole combined compilation unit, not for the single source file
5273     itself.
5274
5275`-fno-cprop-registers'
5276     After register allocation and post-register allocation instruction
5277     splitting, we perform a copy-propagation pass to try to reduce
5278     scheduling dependencies and occasionally eliminate the copy.
5279
5280     Disabled at levels `-O', `-O2', `-O3', `-Os'.
5281
5282`-fprofile-generate'
5283     Enable options usually used for instrumenting application to
5284     produce profile useful for later recompilation with profile
5285     feedback based optimization.  You must use `-fprofile-generate'
5286     both when compiling and when linking your program.
5287
5288     The following options are enabled: `-fprofile-arcs',
5289     `-fprofile-values', `-fvpt'.
5290
5291`-fprofile-use'
5292     Enable profile feedback directed optimizations, and optimizations
5293     generally profitable only with profile feedback available.
5294
5295     The following options are enabled: `-fbranch-probabilities',
5296     `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'
5297
5298
5299 The following options control compiler behavior regarding floating
5300point arithmetic.  These options trade off between speed and
5301correctness.  All must be specifically enabled.
5302
5303`-ffloat-store'
5304     Do not store floating point variables in registers, and inhibit
5305     other options that might change whether a floating point value is
5306     taken from a register or memory.
5307
5308     This option prevents undesirable excess precision on machines such
5309     as the 68000 where the floating registers (of the 68881) keep more
5310     precision than a `double' is supposed to have.  Similarly for the
5311     x86 architecture.  For most programs, the excess precision does
5312     only good, but a few programs rely on the precise definition of
5313     IEEE floating point.  Use `-ffloat-store' for such programs, after
5314     modifying them to store all pertinent intermediate computations
5315     into variables.
5316
5317`-ffast-math'
5318     Sets `-fno-math-errno', `-funsafe-math-optimizations',
5319     `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math',
5320     `-fno-signaling-nans' and `fcx-limited-range'.
5321
5322     This option causes the preprocessor macro `__FAST_MATH__' to be
5323     defined.
5324
5325     This option should never be turned on by any `-O' option since it
5326     can result in incorrect output for programs which depend on an
5327     exact implementation of IEEE or ISO rules/specifications for math
5328     functions.
5329
5330`-fno-math-errno'
5331     Do not set ERRNO after calling math functions that are executed
5332     with a single instruction, e.g., sqrt.  A program that relies on
5333     IEEE exceptions for math error handling may want to use this flag
5334     for speed while maintaining IEEE arithmetic compatibility.
5335
5336     This option should never be turned on by any `-O' option since it
5337     can result in incorrect output for programs which depend on an
5338     exact implementation of IEEE or ISO rules/specifications for math
5339     functions.
5340
5341     The default is `-fmath-errno'.
5342
5343     On Darwin systems, the math library never sets `errno'.  There is
5344     therefore no reason for the compiler to consider the possibility
5345     that it might, and `-fno-math-errno' is the default.
5346
5347`-funsafe-math-optimizations'
5348     Allow optimizations for floating-point arithmetic that (a) assume
5349     that arguments and results are valid and (b) may violate IEEE or
5350     ANSI standards.  When used at link-time, it may include libraries
5351     or startup files that change the default FPU control word or other
5352     similar optimizations.
5353
5354     This option should never be turned on by any `-O' option since it
5355     can result in incorrect output for programs which depend on an
5356     exact implementation of IEEE or ISO rules/specifications for math
5357     functions.
5358
5359     The default is `-fno-unsafe-math-optimizations'.
5360
5361`-ffinite-math-only'
5362     Allow optimizations for floating-point arithmetic that assume that
5363     arguments and results are not NaNs or +-Infs.
5364
5365     This option should never be turned on by any `-O' option since it
5366     can result in incorrect output for programs which depend on an
5367     exact implementation of IEEE or ISO rules/specifications.
5368
5369     The default is `-fno-finite-math-only'.
5370
5371`-fno-trapping-math'
5372     Compile code assuming that floating-point operations cannot
5373     generate user-visible traps.  These traps include division by
5374     zero, overflow, underflow, inexact result and invalid operation.
5375     This option implies `-fno-signaling-nans'.  Setting this option
5376     may allow faster code if one relies on "non-stop" IEEE arithmetic,
5377     for example.
5378
5379     This option should never be turned on by any `-O' option since it
5380     can result in incorrect output for programs which depend on an
5381     exact implementation of IEEE or ISO rules/specifications for math
5382     functions.
5383
5384     The default is `-ftrapping-math'.
5385
5386`-frounding-math'
5387     Disable transformations and optimizations that assume default
5388     floating point rounding behavior.  This is round-to-zero for all
5389     floating point to integer conversions, and round-to-nearest for
5390     all other arithmetic truncations.  This option should be specified
5391     for programs that change the FP rounding mode dynamically, or that
5392     may be executed with a non-default rounding mode.  This option
5393     disables constant folding of floating point expressions at
5394     compile-time (which may be affected by rounding mode) and
5395     arithmetic transformations that are unsafe in the presence of
5396     sign-dependent rounding modes.
5397
5398     The default is `-fno-rounding-math'.
5399
5400     This option is experimental and does not currently guarantee to
5401     disable all GCC optimizations that are affected by rounding mode.
5402     Future versions of GCC may provide finer control of this setting
5403     using C99's `FENV_ACCESS' pragma.  This command line option will
5404     be used to specify the default state for `FENV_ACCESS'.
5405
5406`-frtl-abstract-sequences'
5407     It is a size optimization method. This option is to find identical
5408     sequences of code, which can be turned into pseudo-procedures  and
5409     then  replace  all  occurrences with  calls to  the  newly created
5410     subroutine. It is kind of an opposite of `-finline-functions'.
5411     This optimization runs at RTL level.
5412
5413`-fsignaling-nans'
5414     Compile code assuming that IEEE signaling NaNs may generate
5415     user-visible traps during floating-point operations.  Setting this
5416     option disables optimizations that may change the number of
5417     exceptions visible with signaling NaNs.  This option implies
5418     `-ftrapping-math'.
5419
5420     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
5421     defined.
5422
5423     The default is `-fno-signaling-nans'.
5424
5425     This option is experimental and does not currently guarantee to
5426     disable all GCC optimizations that affect signaling NaN behavior.
5427
5428`-fsingle-precision-constant'
5429     Treat floating point constant as single precision constant instead
5430     of implicitly converting it to double precision constant.
5431
5432`-fcx-limited-range'
5433`-fno-cx-limited-range'
5434     When enabled, this option states that a range reduction step is not
5435     needed when performing complex division.  The default is
5436     `-fno-cx-limited-range', but is enabled by `-ffast-math'.
5437
5438     This option controls the default setting of the ISO C99
5439     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
5440     all languages.
5441
5442
5443 The following options control optimizations that may improve
5444performance, but are not enabled by any `-O' options.  This section
5445includes experimental options that may produce broken code.
5446
5447`-fbranch-probabilities'
5448     After running a program compiled with `-fprofile-arcs' (*note
5449     Options for Debugging Your Program or `gcc': Debugging Options.),
5450     you can compile it a second time using `-fbranch-probabilities',
5451     to improve optimizations based on the number of times each branch
5452     was taken.  When the program compiled with `-fprofile-arcs' exits
5453     it saves arc execution counts to a file called `SOURCENAME.gcda'
5454     for each source file  The information in this data file is very
5455     dependent on the structure of the generated code, so you must use
5456     the same source code and the same optimization options for both
5457     compilations.
5458
5459     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
5460     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
5461     optimization.  Currently, they are only used in one place: in
5462     `reorg.c', instead of guessing which path a branch is mostly to
5463     take, the `REG_BR_PROB' values are used to exactly determine which
5464     path is taken more often.
5465
5466`-fprofile-values'
5467     If combined with `-fprofile-arcs', it adds code so that some data
5468     about values of expressions in the program is gathered.
5469
5470     With `-fbranch-probabilities', it reads back the data gathered
5471     from profiling values of expressions and adds `REG_VALUE_PROFILE'
5472     notes to instructions for their later usage in optimizations.
5473
5474     Enabled with `-fprofile-generate' and `-fprofile-use'.
5475
5476`-fvpt'
5477     If combined with `-fprofile-arcs', it instructs the compiler to add
5478     a code to gather information about values of expressions.
5479
5480     With `-fbranch-probabilities', it reads back the data gathered and
5481     actually performs the optimizations based on them.  Currently the
5482     optimizations include specialization of division operation using
5483     the knowledge about the value of the denominator.
5484
5485`-frename-registers'
5486     Attempt to avoid false dependencies in scheduled code by making use
5487     of registers left over after register allocation.  This
5488     optimization will most benefit processors with lots of registers.
5489     Depending on the debug information format adopted by the target,
5490     however, it can make debugging impossible, since variables will no
5491     longer stay in a "home register".
5492
5493     Enabled by default with `-funroll-loops'.
5494
5495`-ftracer'
5496     Perform tail duplication to enlarge superblock size.  This
5497     transformation simplifies the control flow of the function
5498     allowing other optimizations to do better job.
5499
5500     Enabled with `-fprofile-use'.
5501
5502`-funroll-loops'
5503     Unroll loops whose number of iterations can be determined at
5504     compile time or upon entry to the loop.  `-funroll-loops' implies
5505     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
5506     also turns on complete loop peeling (i.e. complete removal of
5507     loops with small constant number of iterations).  This option
5508     makes code larger, and may or may not make it run faster.
5509
5510     Enabled with `-fprofile-use'.
5511
5512`-funroll-all-loops'
5513     Unroll all loops, even if their number of iterations is uncertain
5514     when the loop is entered.  This usually makes programs run more
5515     slowly.  `-funroll-all-loops' implies the same options as
5516     `-funroll-loops'.
5517
5518`-fpeel-loops'
5519     Peels the loops for that there is enough information that they do
5520     not roll much (from profile feedback).  It also turns on complete
5521     loop peeling (i.e. complete removal of loops with small constant
5522     number of iterations).
5523
5524     Enabled with `-fprofile-use'.
5525
5526`-fmove-loop-invariants'
5527     Enables the loop invariant motion pass in the RTL loop optimizer.
5528     Enabled at level `-O1'
5529
5530`-funswitch-loops'
5531     Move branches with loop invariant conditions out of the loop, with
5532     duplicates of the loop on both branches (modified according to
5533     result of the condition).
5534
5535`-ffunction-sections'
5536`-fdata-sections'
5537     Place each function or data item into its own section in the output
5538     file if the target supports arbitrary sections.  The name of the
5539     function or the name of the data item determines the section's name
5540     in the output file.
5541
5542     Use these options on systems where the linker can perform
5543     optimizations to improve locality of reference in the instruction
5544     space.  Most systems using the ELF object format and SPARC
5545     processors running Solaris 2 have linkers with such optimizations.
5546     AIX may have these optimizations in the future.
5547
5548     Only use these options when there are significant benefits from
5549     doing so.  When you specify these options, the assembler and
5550     linker will create larger object and executable files and will
5551     also be slower.  You will not be able to use `gprof' on all
5552     systems if you specify this option and you may have problems with
5553     debugging if you specify both this option and `-g'.
5554
5555`-fbranch-target-load-optimize'
5556     Perform branch target register load optimization before prologue /
5557     epilogue threading.  The use of target registers can typically be
5558     exposed only during reload, thus hoisting loads out of loops and
5559     doing inter-block scheduling needs a separate optimization pass.
5560
5561`-fbranch-target-load-optimize2'
5562     Perform branch target register load optimization after prologue /
5563     epilogue threading.
5564
5565`-fbtr-bb-exclusive'
5566     When performing branch target register load optimization, don't
5567     reuse branch target registers in within any basic block.
5568
5569`-fstack-protector'
5570     Emit extra code to check for buffer overflows, such as stack
5571     smashing attacks.  This is done by adding a guard variable to
5572     functions with vulnerable objects.  This includes functions that
5573     call alloca, and functions with buffers larger than 8 bytes.  The
5574     guards are initialized when a function is entered and then checked
5575     when the function exits.  If a guard check fails, an error message
5576     is printed and the program exits.
5577
5578`-fstack-protector-all'
5579     Like `-fstack-protector' except that all functions are protected.
5580
5581`-fsection-anchors'
5582     Try to reduce the number of symbolic address calculations by using
5583     shared "anchor" symbols to address nearby objects.  This
5584     transformation can help to reduce the number of GOT entries and
5585     GOT accesses on some targets.
5586
5587     For example, the implementation of the following function `foo':
5588
5589          static int a, b, c;
5590          int foo (void) { return a + b + c; }
5591
5592     would usually calculate the addresses of all three variables, but
5593     if you compile it with `-fsection-anchors', it will access the
5594     variables from a common anchor point instead.  The effect is
5595     similar to the following pseudocode (which isn't valid C):
5596
5597          int foo (void)
5598          {
5599            register int *xr = &x;
5600            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
5601          }
5602
5603     Not all targets support this option.
5604
5605`--param NAME=VALUE'
5606     In some places, GCC uses various constants to control the amount of
5607     optimization that is done.  For example, GCC will not inline
5608     functions that contain more that a certain number of instructions.
5609     You can control some of these constants on the command-line using
5610     the `--param' option.
5611
5612     The names of specific parameters, and the meaning of the values,
5613     are tied to the internals of the compiler, and are subject to
5614     change without notice in future releases.
5615
5616     In each case, the VALUE is an integer.  The allowable choices for
5617     NAME are given in the following table:
5618
5619    `salias-max-implicit-fields'
5620          The maximum number of fields in a variable without direct
5621          structure accesses for which structure aliasing will consider
5622          trying to track each field.  The default is 5
5623
5624    `salias-max-array-elements'
5625          The maximum number of elements an array can have and its
5626          elements still be tracked individually by structure aliasing.
5627          The default is 4
5628
5629    `sra-max-structure-size'
5630          The maximum structure size, in bytes, at which the scalar
5631          replacement of aggregates (SRA) optimization will perform
5632          block copies.  The default value, 0, implies that GCC will
5633          select the most appropriate size itself.
5634
5635    `sra-field-structure-ratio'
5636          The threshold ratio (as a percentage) between instantiated
5637          fields and the complete structure size.  We say that if the
5638          ratio of the number of bytes in instantiated fields to the
5639          number of bytes in the complete structure exceeds this
5640          parameter, then block copies are not used.  The default is 75.
5641
5642    `max-crossjump-edges'
5643          The maximum number of incoming edges to consider for
5644          crossjumping.  The algorithm used by `-fcrossjumping' is
5645          O(N^2) in the number of edges incoming to each block.
5646          Increasing values mean more aggressive optimization, making
5647          the compile time increase with probably small improvement in
5648          executable size.
5649
5650    `min-crossjump-insns'
5651          The minimum number of instructions which must be matched at
5652          the end of two blocks before crossjumping will be performed
5653          on them.  This value is ignored in the case where all
5654          instructions in the block being crossjumped from are matched.
5655          The default value is 5.
5656
5657    `max-grow-copy-bb-insns'
5658          The maximum code size expansion factor when copying basic
5659          blocks instead of jumping.  The expansion is relative to a
5660          jump instruction.  The default value is 8.
5661
5662    `max-goto-duplication-insns'
5663          The maximum number of instructions to duplicate to a block
5664          that jumps to a computed goto.  To avoid O(N^2) behavior in a
5665          number of passes, GCC factors computed gotos early in the
5666          compilation process, and unfactors them as late as possible.
5667          Only computed jumps at the end of a basic blocks with no more
5668          than max-goto-duplication-insns are unfactored.  The default
5669          value is 8.
5670
5671    `max-delay-slot-insn-search'
5672          The maximum number of instructions to consider when looking
5673          for an instruction to fill a delay slot.  If more than this
5674          arbitrary number of instructions is searched, the time
5675          savings from filling the delay slot will be minimal so stop
5676          searching.  Increasing values mean more aggressive
5677          optimization, making the compile time increase with probably
5678          small improvement in executable run time.
5679
5680    `max-delay-slot-live-search'
5681          When trying to fill delay slots, the maximum number of
5682          instructions to consider when searching for a block with
5683          valid live register information.  Increasing this arbitrarily
5684          chosen value means more aggressive optimization, increasing
5685          the compile time.  This parameter should be removed when the
5686          delay slot code is rewritten to maintain the control-flow
5687          graph.
5688
5689    `max-gcse-memory'
5690          The approximate maximum amount of memory that will be
5691          allocated in order to perform the global common subexpression
5692          elimination optimization.  If more memory than specified is
5693          required, the optimization will not be done.
5694
5695    `max-gcse-passes'
5696          The maximum number of passes of GCSE to run.  The default is
5697          1.
5698
5699    `max-pending-list-length'
5700          The maximum number of pending dependencies scheduling will
5701          allow before flushing the current state and starting over.
5702          Large functions with few branches or calls can create
5703          excessively large lists which needlessly consume memory and
5704          resources.
5705
5706    `max-inline-insns-single'
5707          Several parameters control the tree inliner used in gcc.
5708          This number sets the maximum number of instructions (counted
5709          in GCC's internal representation) in a single function that
5710          the tree inliner will consider for inlining.  This only
5711          affects functions declared inline and methods implemented in
5712          a class declaration (C++).  The default value is 450.
5713
5714    `max-inline-insns-auto'
5715          When you use `-finline-functions' (included in `-O3'), a lot
5716          of functions that would otherwise not be considered for
5717          inlining by the compiler will be investigated.  To those
5718          functions, a different (more restrictive) limit compared to
5719          functions declared inline can be applied.  The default value
5720          is 90.
5721
5722    `large-function-insns'
5723          The limit specifying really large functions.  For functions
5724          larger than this limit after inlining inlining is constrained
5725          by `--param large-function-growth'.  This parameter is useful
5726          primarily to avoid extreme compilation time caused by
5727          non-linear algorithms used by the backend.  This parameter is
5728          ignored when `-funit-at-a-time' is not used.  The default
5729          value is 2700.
5730
5731    `large-function-growth'
5732          Specifies maximal growth of large function caused by inlining
5733          in percents.  This parameter is ignored when
5734          `-funit-at-a-time' is not used.  The default value is 100
5735          which limits large function growth to 2.0 times the original
5736          size.
5737
5738    `large-unit-insns'
5739          The limit specifying large translation unit.  Growth caused
5740          by inlining of units larger than this limit is limited by
5741          `--param inline-unit-growth'.  For small units this might be
5742          too tight (consider unit consisting of function A that is
5743          inline and B that just calls A three time.  If B is small
5744          relative to A, the growth of unit is 300\% and yet such
5745          inlining is very sane.  For very large units consisting of
5746          small inlininable functions however the overall unit growth
5747          limit is needed to avoid exponential explosion of code size.
5748          Thus for smaller units, the size is increased to `--param
5749          large-unit-insns' before applying `--param
5750          inline-unit-growth'.  The default is 10000
5751
5752    `inline-unit-growth'
5753          Specifies maximal overall growth of the compilation unit
5754          caused by inlining.  This parameter is ignored when
5755          `-funit-at-a-time' is not used.  The default value is 50
5756          which limits unit growth to 1.5 times the original size.
5757
5758    `max-inline-insns-recursive'
5759    `max-inline-insns-recursive-auto'
5760          Specifies maximum number of instructions out-of-line copy of
5761          self recursive inline function can grow into by performing
5762          recursive inlining.
5763
5764          For functions declared inline `--param
5765          max-inline-insns-recursive' is taken into account.  For
5766          function not declared inline, recursive inlining happens only
5767          when `-finline-functions' (included in `-O3') is enabled and
5768          `--param max-inline-insns-recursive-auto' is used.  The
5769          default value is 450.
5770
5771    `max-inline-recursive-depth'
5772    `max-inline-recursive-depth-auto'
5773          Specifies maximum recursion depth used by the recursive
5774          inlining.
5775
5776          For functions declared inline `--param
5777          max-inline-recursive-depth' is taken into account.  For
5778          function not declared inline, recursive inlining happens only
5779          when `-finline-functions' (included in `-O3') is enabled and
5780          `--param max-inline-recursive-depth-auto' is used.  The
5781          default value is 450.
5782
5783    `min-inline-recursive-probability'
5784          Recursive inlining is profitable only for function having
5785          deep recursion in average and can hurt for function having
5786          little recursion depth by increasing the prologue size or
5787          complexity of function body to other optimizers.
5788
5789          When profile feedback is available (see `-fprofile-generate')
5790          the actual recursion depth can be guessed from probability
5791          that function will recurse via given call expression.  This
5792          parameter limits inlining only to call expression whose
5793          probability exceeds given threshold (in percents).  The
5794          default value is 10.
5795
5796    `inline-call-cost'
5797          Specify cost of call instruction relative to simple
5798          arithmetics operations (having cost of 1).  Increasing this
5799          cost disqualifies inlining of non-leaf functions and at the
5800          same time increases size of leaf function that is believed to
5801          reduce function size by being inlined.  In effect it
5802          increases amount of inlining for code having large
5803          abstraction penalty (many functions that just pass the
5804          arguments to other functions) and decrease inlining for code
5805          with low abstraction penalty.  The default value is 16.
5806
5807    `max-unrolled-insns'
5808          The maximum number of instructions that a loop should have if
5809          that loop is unrolled, and if the loop is unrolled, it
5810          determines how many times the loop code is unrolled.
5811
5812    `max-average-unrolled-insns'
5813          The maximum number of instructions biased by probabilities of
5814          their execution that a loop should have if that loop is
5815          unrolled, and if the loop is unrolled, it determines how many
5816          times the loop code is unrolled.
5817
5818    `max-unroll-times'
5819          The maximum number of unrollings of a single loop.
5820
5821    `max-peeled-insns'
5822          The maximum number of instructions that a loop should have if
5823          that loop is peeled, and if the loop is peeled, it determines
5824          how many times the loop code is peeled.
5825
5826    `max-peel-times'
5827          The maximum number of peelings of a single loop.
5828
5829    `max-completely-peeled-insns'
5830          The maximum number of insns of a completely peeled loop.
5831
5832    `max-completely-peel-times'
5833          The maximum number of iterations of a loop to be suitable for
5834          complete peeling.
5835
5836    `max-unswitch-insns'
5837          The maximum number of insns of an unswitched loop.
5838
5839    `max-unswitch-level'
5840          The maximum number of branches unswitched in a single loop.
5841
5842    `lim-expensive'
5843          The minimum cost of an expensive expression in the loop
5844          invariant motion.
5845
5846    `iv-consider-all-candidates-bound'
5847          Bound on number of candidates for induction variables below
5848          that all candidates are considered for each use in induction
5849          variable optimizations.  Only the most relevant candidates
5850          are considered if there are more candidates, to avoid
5851          quadratic time complexity.
5852
5853    `iv-max-considered-uses'
5854          The induction variable optimizations give up on loops that
5855          contain more induction variable uses.
5856
5857    `iv-always-prune-cand-set-bound'
5858          If number of candidates in the set is smaller than this value,
5859          we always try to remove unnecessary ivs from the set during
5860          its optimization when a new iv is added to the set.
5861
5862    `scev-max-expr-size'
5863          Bound on size of expressions used in the scalar evolutions
5864          analyzer.  Large expressions slow the analyzer.
5865
5866    `vect-max-version-checks'
5867          The maximum number of runtime checks that can be performed
5868          when doing loop versioning in the vectorizer.  See option
5869          ftree-vect-loop-version for more information.
5870
5871    `max-iterations-to-track'
5872          The maximum number of iterations of a loop the brute force
5873          algorithm for analysis of # of iterations of the loop tries
5874          to evaluate.
5875
5876    `hot-bb-count-fraction'
5877          Select fraction of the maximal count of repetitions of basic
5878          block in program given basic block needs to have to be
5879          considered hot.
5880
5881    `hot-bb-frequency-fraction'
5882          Select fraction of the maximal frequency of executions of
5883          basic block in function given basic block needs to have to be
5884          considered hot
5885
5886    `max-predicted-iterations'
5887          The maximum number of loop iterations we predict statically.
5888          This is useful in cases where function contain single loop
5889          with known bound and other loop with unknown.  We predict the
5890          known number of iterations correctly, while the unknown
5891          number of iterations average to roughly 10.  This means that
5892          the loop without bounds would appear artificially cold
5893          relative to the other one.
5894
5895    `tracer-dynamic-coverage'
5896    `tracer-dynamic-coverage-feedback'
5897          This value is used to limit superblock formation once the
5898          given percentage of executed instructions is covered.  This
5899          limits unnecessary code size expansion.
5900
5901          The `tracer-dynamic-coverage-feedback' is used only when
5902          profile feedback is available.  The real profiles (as opposed
5903          to statically estimated ones) are much less balanced allowing
5904          the threshold to be larger value.
5905
5906    `tracer-max-code-growth'
5907          Stop tail duplication once code growth has reached given
5908          percentage.  This is rather hokey argument, as most of the
5909          duplicates will be eliminated later in cross jumping, so it
5910          may be set to much higher values than is the desired code
5911          growth.
5912
5913    `tracer-min-branch-ratio'
5914          Stop reverse growth when the reverse probability of best edge
5915          is less than this threshold (in percent).
5916
5917    `tracer-min-branch-ratio'
5918    `tracer-min-branch-ratio-feedback'
5919          Stop forward growth if the best edge do have probability
5920          lower than this threshold.
5921
5922          Similarly to `tracer-dynamic-coverage' two values are
5923          present, one for compilation for profile feedback and one for
5924          compilation without.  The value for compilation with profile
5925          feedback needs to be more conservative (higher) in order to
5926          make tracer effective.
5927
5928    `max-cse-path-length'
5929          Maximum number of basic blocks on path that cse considers.
5930          The default is 10.
5931
5932    `max-cse-insns'
5933          The maximum instructions CSE process before flushing. The
5934          default is 1000.
5935
5936    `global-var-threshold'
5937          Counts the number of function calls (N) and the number of
5938          call-clobbered variables (V).  If NxV is larger than this
5939          limit, a single artificial variable will be created to
5940          represent all the call-clobbered variables at function call
5941          sites.  This artificial variable will then be made to alias
5942          every call-clobbered variable.  (done as `int * size_t' on
5943          the host machine; beware overflow).
5944
5945    `max-aliased-vops'
5946          Maximum number of virtual operands allowed to represent
5947          aliases before triggering the alias grouping heuristic.
5948          Alias grouping reduces compile times and memory consumption
5949          needed for aliasing at the expense of precision loss in alias
5950          information.
5951
5952    `ggc-min-expand'
5953          GCC uses a garbage collector to manage its own memory
5954          allocation.  This parameter specifies the minimum percentage
5955          by which the garbage collector's heap should be allowed to
5956          expand between collections.  Tuning this may improve
5957          compilation speed; it has no effect on code generation.
5958
5959          The default is 30% + 70% * (RAM/1GB) with an upper bound of
5960          100% when RAM >= 1GB.  If `getrlimit' is available, the
5961          notion of "RAM" is the smallest of actual RAM and
5962          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
5963          calculate RAM on a particular platform, the lower bound of
5964          30% is used.  Setting this parameter and `ggc-min-heapsize'
5965          to zero causes a full collection to occur at every
5966          opportunity.  This is extremely slow, but can be useful for
5967          debugging.
5968
5969    `ggc-min-heapsize'
5970          Minimum size of the garbage collector's heap before it begins
5971          bothering to collect garbage.  The first collection occurs
5972          after the heap expands by `ggc-min-expand'% beyond
5973          `ggc-min-heapsize'.  Again, tuning this may improve
5974          compilation speed, and has no effect on code generation.
5975
5976          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
5977          which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
5978          exceeded, but with a lower bound of 4096 (four megabytes) and
5979          an upper bound of 131072 (128 megabytes).  If GCC is not able
5980          to calculate RAM on a particular platform, the lower bound is
5981          used.  Setting this parameter very large effectively disables
5982          garbage collection.  Setting this parameter and
5983          `ggc-min-expand' to zero causes a full collection to occur at
5984          every opportunity.
5985
5986    `max-reload-search-insns'
5987          The maximum number of instruction reload should look backward
5988          for equivalent register.  Increasing values mean more
5989          aggressive optimization, making the compile time increase
5990          with probably slightly better performance.  The default value
5991          is 100.
5992
5993    `max-cselib-memory-locations'
5994          The maximum number of memory locations cselib should take
5995          into account.  Increasing values mean more aggressive
5996          optimization, making the compile time increase with probably
5997          slightly better performance.  The default value is 500.
5998
5999    `max-flow-memory-locations'
6000          Similar as `max-cselib-memory-locations' but for dataflow
6001          liveness.  The default value is 100.
6002
6003    `reorder-blocks-duplicate'
6004    `reorder-blocks-duplicate-feedback'
6005          Used by basic block reordering pass to decide whether to use
6006          unconditional branch or duplicate the code on its
6007          destination.  Code is duplicated when its estimated size is
6008          smaller than this value multiplied by the estimated size of
6009          unconditional jump in the hot spots of the program.
6010
6011          The `reorder-block-duplicate-feedback' is used only when
6012          profile feedback is available and may be set to higher values
6013          than `reorder-block-duplicate' since information about the
6014          hot spots is more accurate.
6015
6016    `max-sched-ready-insns'
6017          The maximum number of instructions ready to be issued the
6018          scheduler should consider at any given time during the first
6019          scheduling pass.  Increasing values mean more thorough
6020          searches, making the compilation time increase with probably
6021          little benefit.  The default value is 100.
6022
6023    `max-sched-region-blocks'
6024          The maximum number of blocks in a region to be considered for
6025          interblock scheduling.  The default value is 10.
6026
6027    `max-sched-region-insns'
6028          The maximum number of insns in a region to be considered for
6029          interblock scheduling.  The default value is 100.
6030
6031    `min-spec-prob'
6032          The minimum probability (in percents) of reaching a source
6033          block for interblock speculative scheduling.  The default
6034          value is 40.
6035
6036    `max-sched-extend-regions-iters'
6037          The maximum number of iterations through CFG to extend
6038          regions.  0 - disable region extension, N - do at most N
6039          iterations.  The default value is 0.
6040
6041    `max-sched-insn-conflict-delay'
6042          The maximum conflict delay for an insn to be considered for
6043          speculative motion.  The default value is 3.
6044
6045    `sched-spec-prob-cutoff'
6046          The minimal probability of speculation success (in percents),
6047          so that speculative insn will be scheduled.  The default
6048          value is 40.
6049
6050    `max-last-value-rtl'
6051          The maximum size measured as number of RTLs that can be
6052          recorded in an expression in combiner for a pseudo register
6053          as last known value of that register.  The default is 10000.
6054
6055    `integer-share-limit'
6056          Small integer constants can use a shared data structure,
6057          reducing the compiler's memory usage and increasing its
6058          speed.  This sets the maximum value of a shared integer
6059          constant's.  The default value is 256.
6060
6061    `min-virtual-mappings'
6062          Specifies the minimum number of virtual mappings in the
6063          incremental SSA updater that should be registered to trigger
6064          the virtual mappings heuristic defined by
6065          virtual-mappings-ratio.  The default value is 100.
6066
6067    `virtual-mappings-ratio'
6068          If the number of virtual mappings is virtual-mappings-ratio
6069          bigger than the number of virtual symbols to be updated, then
6070          the incremental SSA updater switches to a full update for
6071          those symbols.  The default ratio is 3.
6072
6073    `ssp-buffer-size'
6074          The minimum size of buffers (i.e. arrays) that will receive
6075          stack smashing protection when `-fstack-protection' is used.
6076
6077    `max-jump-thread-duplication-stmts'
6078          Maximum number of statements allowed in a block that needs to
6079          be duplicated when threading jumps.
6080
6081    `max-fields-for-field-sensitive'
6082          Maximum number of fields in a structure we will treat in a
6083          field sensitive manner during pointer analysis.
6084
6085
6086
6087File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
6088
60893.11 Options Controlling the Preprocessor
6090=========================================
6091
6092These options control the C preprocessor, which is run on each C source
6093file before actual compilation.
6094
6095 If you use the `-E' option, nothing is done except preprocessing.
6096Some of these options make sense only together with `-E' because they
6097cause the preprocessor output to be unsuitable for actual compilation.
6098
6099     You can use `-Wp,OPTION' to bypass the compiler driver and pass
6100     OPTION directly through to the preprocessor.  If OPTION contains
6101     commas, it is split into multiple options at the commas.  However,
6102     many options are modified, translated or interpreted by the
6103     compiler driver before being passed to the preprocessor, and `-Wp'
6104     forcibly bypasses this phase.  The preprocessor's direct interface
6105     is undocumented and subject to change, so whenever possible you
6106     should avoid using `-Wp' and let the driver handle the options
6107     instead.
6108
6109`-Xpreprocessor OPTION'
6110     Pass OPTION as an option to the preprocessor.  You can use this to
6111     supply system-specific preprocessor options which GCC does not
6112     know how to recognize.
6113
6114     If you want to pass an option that takes an argument, you must use
6115     `-Xpreprocessor' twice, once for the option and once for the
6116     argument.
6117
6118`-D NAME'
6119     Predefine NAME as a macro, with definition `1'.
6120
6121`-D NAME=DEFINITION'
6122     The contents of DEFINITION are tokenized and processed as if they
6123     appeared during translation phase three in a `#define' directive.
6124     In particular, the definition will be truncated by embedded
6125     newline characters.
6126
6127     If you are invoking the preprocessor from a shell or shell-like
6128     program you may need to use the shell's quoting syntax to protect
6129     characters such as spaces that have a meaning in the shell syntax.
6130
6131     If you wish to define a function-like macro on the command line,
6132     write its argument list with surrounding parentheses before the
6133     equals sign (if any).  Parentheses are meaningful to most shells,
6134     so you will need to quote the option.  With `sh' and `csh',
6135     `-D'NAME(ARGS...)=DEFINITION'' works.
6136
6137     `-D' and `-U' options are processed in the order they are given on
6138     the command line.  All `-imacros FILE' and `-include FILE' options
6139     are processed after all `-D' and `-U' options.
6140
6141`-U NAME'
6142     Cancel any previous definition of NAME, either built in or
6143     provided with a `-D' option.
6144
6145`-undef'
6146     Do not predefine any system-specific or GCC-specific macros.  The
6147     standard predefined macros remain defined.
6148
6149`-I DIR'
6150     Add the directory DIR to the list of directories to be searched
6151     for header files.  Directories named by `-I' are searched before
6152     the standard system include directories.  If the directory DIR is
6153     a standard system include directory, the option is ignored to
6154     ensure that the default search order for system directories and
6155     the special treatment of system headers are not defeated .
6156
6157`-o FILE'
6158     Write output to FILE.  This is the same as specifying FILE as the
6159     second non-option argument to `cpp'.  `gcc' has a different
6160     interpretation of a second non-option argument, so you must use
6161     `-o' to specify the output file.
6162
6163`-Wall'
6164     Turns on all optional warnings which are desirable for normal code.
6165     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
6166     warning about integer promotion causing a change of sign in `#if'
6167     expressions.  Note that many of the preprocessor's warnings are on
6168     by default and have no options to control them.
6169
6170`-Wcomment'
6171`-Wcomments'
6172     Warn whenever a comment-start sequence `/*' appears in a `/*'
6173     comment, or whenever a backslash-newline appears in a `//' comment.
6174     (Both forms have the same effect.)
6175
6176`-Wtrigraphs'
6177     Most trigraphs in comments cannot affect the meaning of the
6178     program.  However, a trigraph that would form an escaped newline
6179     (`??/' at the end of a line) can, by changing where the comment
6180     begins or ends.  Therefore, only trigraphs that would form escaped
6181     newlines produce warnings inside a comment.
6182
6183     This option is implied by `-Wall'.  If `-Wall' is not given, this
6184     option is still enabled unless trigraphs are enabled.  To get
6185     trigraph conversion without warnings, but get the other `-Wall'
6186     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
6187
6188`-Wtraditional'
6189     Warn about certain constructs that behave differently in
6190     traditional and ISO C.  Also warn about ISO C constructs that have
6191     no traditional C equivalent, and problematic constructs which
6192     should be avoided.
6193
6194`-Wimport'
6195     Warn the first time `#import' is used.
6196
6197`-Wundef'
6198     Warn whenever an identifier which is not a macro is encountered in
6199     an `#if' directive, outside of `defined'.  Such identifiers are
6200     replaced with zero.
6201
6202`-Wunused-macros'
6203     Warn about macros defined in the main file that are unused.  A
6204     macro is "used" if it is expanded or tested for existence at least
6205     once.  The preprocessor will also warn if the macro has not been
6206     used at the time it is redefined or undefined.
6207
6208     Built-in macros, macros defined on the command line, and macros
6209     defined in include files are not warned about.
6210
6211     _Note:_ If a macro is actually used, but only used in skipped
6212     conditional blocks, then CPP will report it as unused.  To avoid
6213     the warning in such a case, you might improve the scope of the
6214     macro's definition by, for example, moving it into the first
6215     skipped block.  Alternatively, you could provide a dummy use with
6216     something like:
6217
6218          #if defined the_macro_causing_the_warning
6219          #endif
6220
6221`-Wendif-labels'
6222     Warn whenever an `#else' or an `#endif' are followed by text.
6223     This usually happens in code of the form
6224
6225          #if FOO
6226          ...
6227          #else FOO
6228          ...
6229          #endif FOO
6230
6231     The second and third `FOO' should be in comments, but often are not
6232     in older programs.  This warning is on by default.
6233
6234`-Werror'
6235     Make all warnings into hard errors.  Source code which triggers
6236     warnings will be rejected.
6237
6238`-Wsystem-headers'
6239     Issue warnings for code in system headers.  These are normally
6240     unhelpful in finding bugs in your own code, therefore suppressed.
6241     If you are responsible for the system library, you may want to see
6242     them.
6243
6244`-w'
6245     Suppress all warnings, including those which GNU CPP issues by
6246     default.
6247
6248`-pedantic'
6249     Issue all the mandatory diagnostics listed in the C standard.
6250     Some of them are left out by default, since they trigger
6251     frequently on harmless code.
6252
6253`-pedantic-errors'
6254     Issue all the mandatory diagnostics, and make all mandatory
6255     diagnostics into errors.  This includes mandatory diagnostics that
6256     GCC issues without `-pedantic' but treats as warnings.
6257
6258`-M'
6259     Instead of outputting the result of preprocessing, output a rule
6260     suitable for `make' describing the dependencies of the main source
6261     file.  The preprocessor outputs one `make' rule containing the
6262     object file name for that source file, a colon, and the names of
6263     all the included files, including those coming from `-include' or
6264     `-imacros' command line options.
6265
6266     Unless specified explicitly (with `-MT' or `-MQ'), the object file
6267     name consists of the basename of the source file with any suffix
6268     replaced with object file suffix.  If there are many included
6269     files then the rule is split into several lines using `\'-newline.
6270     The rule has no commands.
6271
6272     This option does not suppress the preprocessor's debug output,
6273     such as `-dM'.  To avoid mixing such debug output with the
6274     dependency rules you should explicitly specify the dependency
6275     output file with `-MF', or use an environment variable like
6276     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
6277     output will still be sent to the regular output stream as normal.
6278
6279     Passing `-M' to the driver implies `-E', and suppresses warnings
6280     with an implicit `-w'.
6281
6282`-MM'
6283     Like `-M' but do not mention header files that are found in system
6284     header directories, nor header files that are included, directly
6285     or indirectly, from such a header.
6286
6287     This implies that the choice of angle brackets or double quotes in
6288     an `#include' directive does not in itself determine whether that
6289     header will appear in `-MM' dependency output.  This is a slight
6290     change in semantics from GCC versions 3.0 and earlier.
6291
6292`-MF FILE'
6293     When used with `-M' or `-MM', specifies a file to write the
6294     dependencies to.  If no `-MF' switch is given the preprocessor
6295     sends the rules to the same place it would have sent preprocessed
6296     output.
6297
6298     When used with the driver options `-MD' or `-MMD', `-MF' overrides
6299     the default dependency output file.
6300
6301`-MG'
6302     In conjunction with an option such as `-M' requesting dependency
6303     generation, `-MG' assumes missing header files are generated files
6304     and adds them to the dependency list without raising an error.
6305     The dependency filename is taken directly from the `#include'
6306     directive without prepending any path.  `-MG' also suppresses
6307     preprocessed output, as a missing header file renders this useless.
6308
6309     This feature is used in automatic updating of makefiles.
6310
6311`-MP'
6312     This option instructs CPP to add a phony target for each dependency
6313     other than the main file, causing each to depend on nothing.  These
6314     dummy rules work around errors `make' gives if you remove header
6315     files without updating the `Makefile' to match.
6316
6317     This is typical output:
6318
6319          test.o: test.c test.h
6320
6321          test.h:
6322
6323`-MT TARGET'
6324     Change the target of the rule emitted by dependency generation.  By
6325     default CPP takes the name of the main input file, including any
6326     path, deletes any file suffix such as `.c', and appends the
6327     platform's usual object suffix.  The result is the target.
6328
6329     An `-MT' option will set the target to be exactly the string you
6330     specify.  If you want multiple targets, you can specify them as a
6331     single argument to `-MT', or use multiple `-MT' options.
6332
6333     For example, `-MT '$(objpfx)foo.o'' might give
6334
6335          $(objpfx)foo.o: foo.c
6336
6337`-MQ TARGET'
6338     Same as `-MT', but it quotes any characters which are special to
6339     Make.  `-MQ '$(objpfx)foo.o'' gives
6340
6341          $$(objpfx)foo.o: foo.c
6342
6343     The default target is automatically quoted, as if it were given
6344     with `-MQ'.
6345
6346`-MD'
6347     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
6348     implied.  The driver determines FILE based on whether an `-o'
6349     option is given.  If it is, the driver uses its argument but with
6350     a suffix of `.d', otherwise it take the basename of the input file
6351     and applies a `.d' suffix.
6352
6353     If `-MD' is used in conjunction with `-E', any `-o' switch is
6354     understood to specify the dependency output file (*note -MF:
6355     dashMF.), but if used without `-E', each `-o' is understood to
6356     specify a target object file.
6357
6358     Since `-E' is not implied, `-MD' can be used to generate a
6359     dependency output file as a side-effect of the compilation process.
6360
6361`-MMD'
6362     Like `-MD' except mention only user header files, not system
6363     header files.
6364
6365`-fpch-deps'
6366     When using precompiled headers (*note Precompiled Headers::), this
6367     flag will cause the dependency-output flags to also list the files
6368     from the precompiled header's dependencies.  If not specified only
6369     the precompiled header would be listed and not the files that were
6370     used to create it because those files are not consulted when a
6371     precompiled header is used.
6372
6373`-fpch-preprocess'
6374     This option allows use of a precompiled header (*note Precompiled
6375     Headers::) together with `-E'.  It inserts a special `#pragma',
6376     `#pragma GCC pch_preprocess "<filename>"' in the output to mark
6377     the place where the precompiled header was found, and its
6378     filename.  When `-fpreprocessed' is in use, GCC recognizes this
6379     `#pragma' and loads the PCH.
6380
6381     This option is off by default, because the resulting preprocessed
6382     output is only really suitable as input to GCC.  It is switched on
6383     by `-save-temps'.
6384
6385     You should not write this `#pragma' in your own code, but it is
6386     safe to edit the filename if the PCH file is available in a
6387     different location.  The filename may be absolute or it may be
6388     relative to GCC's current directory.
6389
6390`-x c'
6391`-x c++'
6392`-x objective-c'
6393`-x assembler-with-cpp'
6394     Specify the source language: C, C++, Objective-C, or assembly.
6395     This has nothing to do with standards conformance or extensions;
6396     it merely selects which base syntax to expect.  If you give none
6397     of these options, cpp will deduce the language from the extension
6398     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
6399     extensions for C++ and assembly are also recognized.  If cpp does
6400     not recognize the extension, it will treat the file as C; this is
6401     the most generic mode.
6402
6403     _Note:_ Previous versions of cpp accepted a `-lang' option which
6404     selected both the language and the standards conformance level.
6405     This option has been removed, because it conflicts with the `-l'
6406     option.
6407
6408`-std=STANDARD'
6409`-ansi'
6410     Specify the standard to which the code should conform.  Currently
6411     CPP knows about C and C++ standards; others may be added in the
6412     future.
6413
6414     STANDARD may be one of:
6415    `iso9899:1990'
6416    `c89'
6417          The ISO C standard from 1990.  `c89' is the customary
6418          shorthand for this version of the standard.
6419
6420          The `-ansi' option is equivalent to `-std=c89'.
6421
6422    `iso9899:199409'
6423          The 1990 C standard, as amended in 1994.
6424
6425    `iso9899:1999'
6426    `c99'
6427    `iso9899:199x'
6428    `c9x'
6429          The revised ISO C standard, published in December 1999.
6430          Before publication, this was known as C9X.
6431
6432    `gnu89'
6433          The 1990 C standard plus GNU extensions.  This is the default.
6434
6435    `gnu99'
6436    `gnu9x'
6437          The 1999 C standard plus GNU extensions.
6438
6439    `c++98'
6440          The 1998 ISO C++ standard plus amendments.
6441
6442    `gnu++98'
6443          The same as `-std=c++98' plus GNU extensions.  This is the
6444          default for C++ code.
6445
6446`-I-'
6447     Split the include path.  Any directories specified with `-I'
6448     options before `-I-' are searched only for headers requested with
6449     `#include "FILE"'; they are not searched for `#include <FILE>'.
6450     If additional directories are specified with `-I' options after
6451     the `-I-', those directories are searched for all `#include'
6452     directives.
6453
6454     In addition, `-I-' inhibits the use of the directory of the current
6455     file directory as the first search directory for `#include "FILE"'.
6456     This option has been deprecated.
6457
6458`-nostdinc'
6459     Do not search the standard system directories for header files.
6460     Only the directories you have specified with `-I' options (and the
6461     directory of the current file, if appropriate) are searched.
6462
6463`-nostdinc++'
6464     Do not search for header files in the C++-specific standard
6465     directories, but do still search the other standard directories.
6466     (This option is used when building the C++ library.)
6467
6468`-include FILE'
6469     Process FILE as if `#include "file"' appeared as the first line of
6470     the primary source file.  However, the first directory searched
6471     for FILE is the preprocessor's working directory _instead of_ the
6472     directory containing the main source file.  If not found there, it
6473     is searched for in the remainder of the `#include "..."' search
6474     chain as normal.
6475
6476     If multiple `-include' options are given, the files are included
6477     in the order they appear on the command line.
6478
6479`-imacros FILE'
6480     Exactly like `-include', except that any output produced by
6481     scanning FILE is thrown away.  Macros it defines remain defined.
6482     This allows you to acquire all the macros from a header without
6483     also processing its declarations.
6484
6485     All files specified by `-imacros' are processed before all files
6486     specified by `-include'.
6487
6488`-idirafter DIR'
6489     Search DIR for header files, but do it _after_ all directories
6490     specified with `-I' and the standard system directories have been
6491     exhausted.  DIR is treated as a system include directory.
6492
6493`-iprefix PREFIX'
6494     Specify PREFIX as the prefix for subsequent `-iwithprefix'
6495     options.  If the prefix represents a directory, you should include
6496     the final `/'.
6497
6498`-iwithprefix DIR'
6499`-iwithprefixbefore DIR'
6500     Append DIR to the prefix specified previously with `-iprefix', and
6501     add the resulting directory to the include search path.
6502     `-iwithprefixbefore' puts it in the same place `-I' would;
6503     `-iwithprefix' puts it where `-idirafter' would.
6504
6505`-isysroot DIR'
6506     This option is like the `--sysroot' option, but applies only to
6507     header files.  See the `--sysroot' option for more information.
6508
6509`-imultilib DIR'
6510     Use DIR as a subdirectory of the directory containing
6511     target-specific C++ headers.
6512
6513`-isystem DIR'
6514     Search DIR for header files, after all directories specified by
6515     `-I' but before the standard system directories.  Mark it as a
6516     system directory, so that it gets the same special treatment as is
6517     applied to the standard system directories.
6518
6519`-iquote DIR'
6520     Search DIR only for header files requested with `#include "FILE"';
6521     they are not searched for `#include <FILE>', before all
6522     directories specified by `-I' and before the standard system
6523     directories.
6524
6525`-fdollars-in-identifiers'
6526     Accept `$' in identifiers.
6527
6528`-fextended-identifiers'
6529     Accept universal character names in identifiers.  This option is
6530     experimental; in a future version of GCC, it will be enabled by
6531     default for C99 and C++.
6532
6533`-fpreprocessed'
6534     Indicate to the preprocessor that the input file has already been
6535     preprocessed.  This suppresses things like macro expansion,
6536     trigraph conversion, escaped newline splicing, and processing of
6537     most directives.  The preprocessor still recognizes and removes
6538     comments, so that you can pass a file preprocessed with `-C' to
6539     the compiler without problems.  In this mode the integrated
6540     preprocessor is little more than a tokenizer for the front ends.
6541
6542     `-fpreprocessed' is implicit if the input file has one of the
6543     extensions `.i', `.ii' or `.mi'.  These are the extensions that
6544     GCC uses for preprocessed files created by `-save-temps'.
6545
6546`-ftabstop=WIDTH'
6547     Set the distance between tab stops.  This helps the preprocessor
6548     report correct column numbers in warnings or errors, even if tabs
6549     appear on the line.  If the value is less than 1 or greater than
6550     100, the option is ignored.  The default is 8.
6551
6552`-fexec-charset=CHARSET'
6553     Set the execution character set, used for string and character
6554     constants.  The default is UTF-8.  CHARSET can be any encoding
6555     supported by the system's `iconv' library routine.
6556
6557`-fwide-exec-charset=CHARSET'
6558     Set the wide execution character set, used for wide string and
6559     character constants.  The default is UTF-32 or UTF-16, whichever
6560     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
6561     CHARSET can be any encoding supported by the system's `iconv'
6562     library routine; however, you will have problems with encodings
6563     that do not fit exactly in `wchar_t'.
6564
6565`-finput-charset=CHARSET'
6566     Set the input character set, used for translation from the
6567     character set of the input file to the source character set used
6568     by GCC.  If the locale does not specify, or GCC cannot get this
6569     information from the locale, the default is UTF-8.  This can be
6570     overridden by either the locale or this command line option.
6571     Currently the command line option takes precedence if there's a
6572     conflict.  CHARSET can be any encoding supported by the system's
6573     `iconv' library routine.
6574
6575`-fworking-directory'
6576     Enable generation of linemarkers in the preprocessor output that
6577     will let the compiler know the current working directory at the
6578     time of preprocessing.  When this option is enabled, the
6579     preprocessor will emit, after the initial linemarker, a second
6580     linemarker with the current working directory followed by two
6581     slashes.  GCC will use this directory, when it's present in the
6582     preprocessed input, as the directory emitted as the current
6583     working directory in some debugging information formats.  This
6584     option is implicitly enabled if debugging information is enabled,
6585     but this can be inhibited with the negated form
6586     `-fno-working-directory'.  If the `-P' flag is present in the
6587     command line, this option has no effect, since no `#line'
6588     directives are emitted whatsoever.
6589
6590`-fno-show-column'
6591     Do not print column numbers in diagnostics.  This may be necessary
6592     if diagnostics are being scanned by a program that does not
6593     understand the column numbers, such as `dejagnu'.
6594
6595`-A PREDICATE=ANSWER'
6596     Make an assertion with the predicate PREDICATE and answer ANSWER.
6597     This form is preferred to the older form `-A PREDICATE(ANSWER)',
6598     which is still supported, because it does not use shell special
6599     characters.
6600
6601`-A -PREDICATE=ANSWER'
6602     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
6603
6604`-dCHARS'
6605     CHARS is a sequence of one or more of the following characters,
6606     and must not be preceded by a space.  Other characters are
6607     interpreted by the compiler proper, or reserved for future
6608     versions of GCC, and so are silently ignored.  If you specify
6609     characters whose behavior conflicts, the result is undefined.
6610
6611    `M'
6612          Instead of the normal output, generate a list of `#define'
6613          directives for all the macros defined during the execution of
6614          the preprocessor, including predefined macros.  This gives
6615          you a way of finding out what is predefined in your version
6616          of the preprocessor.  Assuming you have no file `foo.h', the
6617          command
6618
6619               touch foo.h; cpp -dM foo.h
6620
6621          will show all the predefined macros.
6622
6623    `D'
6624          Like `M' except in two respects: it does _not_ include the
6625          predefined macros, and it outputs _both_ the `#define'
6626          directives and the result of preprocessing.  Both kinds of
6627          output go to the standard output file.
6628
6629    `N'
6630          Like `D', but emit only the macro names, not their expansions.
6631
6632    `I'
6633          Output `#include' directives in addition to the result of
6634          preprocessing.
6635
6636`-P'
6637     Inhibit generation of linemarkers in the output from the
6638     preprocessor.  This might be useful when running the preprocessor
6639     on something that is not C code, and will be sent to a program
6640     which might be confused by the linemarkers.
6641
6642`-C'
6643     Do not discard comments.  All comments are passed through to the
6644     output file, except for comments in processed directives, which
6645     are deleted along with the directive.
6646
6647     You should be prepared for side effects when using `-C'; it causes
6648     the preprocessor to treat comments as tokens in their own right.
6649     For example, comments appearing at the start of what would be a
6650     directive line have the effect of turning that line into an
6651     ordinary source line, since the first token on the line is no
6652     longer a `#'.
6653
6654`-CC'
6655     Do not discard comments, including during macro expansion.  This is
6656     like `-C', except that comments contained within macros are also
6657     passed through to the output file where the macro is expanded.
6658
6659     In addition to the side-effects of the `-C' option, the `-CC'
6660     option causes all C++-style comments inside a macro to be
6661     converted to C-style comments.  This is to prevent later use of
6662     that macro from inadvertently commenting out the remainder of the
6663     source line.
6664
6665     The `-CC' option is generally used to support lint comments.
6666
6667`-traditional-cpp'
6668     Try to imitate the behavior of old-fashioned C preprocessors, as
6669     opposed to ISO C preprocessors.
6670
6671`-trigraphs'
6672     Process trigraph sequences.  These are three-character sequences,
6673     all starting with `??', that are defined by ISO C to stand for
6674     single characters.  For example, `??/' stands for `\', so `'??/n''
6675     is a character constant for a newline.  By default, GCC ignores
6676     trigraphs, but in standard-conforming modes it converts them.  See
6677     the `-std' and `-ansi' options.
6678
6679     The nine trigraphs and their replacements are
6680
6681          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
6682          Replacement:      [    ]    {    }    #    \    ^    |    ~
6683
6684`-remap'
6685     Enable special code to work around file systems which only permit
6686     very short file names, such as MS-DOS.
6687
6688`--help'
6689`--target-help'
6690     Print text describing all the command line options instead of
6691     preprocessing anything.
6692
6693`-v'
6694     Verbose mode.  Print out GNU CPP's version number at the beginning
6695     of execution, and report the final form of the include path.
6696
6697`-H'
6698     Print the name of each header file used, in addition to other
6699     normal activities.  Each name is indented to show how deep in the
6700     `#include' stack it is.  Precompiled header files are also
6701     printed, even if they are found to be invalid; an invalid
6702     precompiled header file is printed with `...x' and a valid one
6703     with `...!' .
6704
6705`-version'
6706`--version'
6707     Print out GNU CPP's version number.  With one dash, proceed to
6708     preprocess as normal.  With two dashes, exit immediately.
6709
6710
6711File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
6712
67133.12 Passing Options to the Assembler
6714=====================================
6715
6716You can pass options to the assembler.
6717
6718`-Wa,OPTION'
6719     Pass OPTION as an option to the assembler.  If OPTION contains
6720     commas, it is split into multiple options at the commas.
6721
6722`-Xassembler OPTION'
6723     Pass OPTION as an option to the assembler.  You can use this to
6724     supply system-specific assembler options which GCC does not know
6725     how to recognize.
6726
6727     If you want to pass an option that takes an argument, you must use
6728     `-Xassembler' twice, once for the option and once for the argument.
6729
6730
6731
6732File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
6733
67343.13 Options for Linking
6735========================
6736
6737These options come into play when the compiler links object files into
6738an executable output file.  They are meaningless if the compiler is not
6739doing a link step.
6740
6741`OBJECT-FILE-NAME'
6742     A file name that does not end in a special recognized suffix is
6743     considered to name an object file or library.  (Object files are
6744     distinguished from libraries by the linker according to the file
6745     contents.)  If linking is done, these object files are used as
6746     input to the linker.
6747
6748`-c'
6749`-S'
6750`-E'
6751     If any of these options is used, then the linker is not run, and
6752     object file names should not be used as arguments.  *Note Overall
6753     Options::.
6754
6755`-lLIBRARY'
6756`-l LIBRARY'
6757     Search the library named LIBRARY when linking.  (The second
6758     alternative with the library as a separate argument is only for
6759     POSIX compliance and is not recommended.)
6760
6761     It makes a difference where in the command you write this option;
6762     the linker searches and processes libraries and object files in
6763     the order they are specified.  Thus, `foo.o -lz bar.o' searches
6764     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
6765     refers to functions in `z', those functions may not be loaded.
6766
6767     The linker searches a standard list of directories for the library,
6768     which is actually a file named `libLIBRARY.a'.  The linker then
6769     uses this file as if it had been specified precisely by name.
6770
6771     The directories searched include several standard system
6772     directories plus any that you specify with `-L'.
6773
6774     Normally the files found this way are library files--archive files
6775     whose members are object files.  The linker handles an archive
6776     file by scanning through it for members which define symbols that
6777     have so far been referenced but not defined.  But if the file that
6778     is found is an ordinary object file, it is linked in the usual
6779     fashion.  The only difference between using an `-l' option and
6780     specifying a file name is that `-l' surrounds LIBRARY with `lib'
6781     and `.a' and searches several directories.
6782
6783`-lobjc'
6784     You need this special case of the `-l' option in order to link an
6785     Objective-C or Objective-C++ program.
6786
6787`-nostartfiles'
6788     Do not use the standard system startup files when linking.  The
6789     standard system libraries are used normally, unless `-nostdlib' or
6790     `-nodefaultlibs' is used.
6791
6792`-nodefaultlibs'
6793     Do not use the standard system libraries when linking.  Only the
6794     libraries you specify will be passed to the linker.  The standard
6795     startup files are used normally, unless `-nostartfiles' is used.
6796     The compiler may generate calls to `memcmp', `memset', `memcpy'
6797     and `memmove'.  These entries are usually resolved by entries in
6798     libc.  These entry points should be supplied through some other
6799     mechanism when this option is specified.
6800
6801`-nostdlib'
6802     Do not use the standard system startup files or libraries when
6803     linking.  No startup files and only the libraries you specify will
6804     be passed to the linker.  The compiler may generate calls to
6805     `memcmp', `memset', `memcpy' and `memmove'.  These entries are
6806     usually resolved by entries in libc.  These entry points should be
6807     supplied through some other mechanism when this option is
6808     specified.
6809
6810     One of the standard libraries bypassed by `-nostdlib' and
6811     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
6812     that GCC uses to overcome shortcomings of particular machines, or
6813     special needs for some languages.  (*Note Interfacing to GCC
6814     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
6815     most cases, you need `libgcc.a' even when you want to avoid other
6816     standard libraries.  In other words, when you specify `-nostdlib'
6817     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
6818     This ensures that you have no unresolved references to internal GCC
6819     library subroutines.  (For example, `__main', used to ensure C++
6820     constructors will be called; *note `collect2': (gccint)Collect2.)
6821
6822`-pie'
6823     Produce a position independent executable on targets which support
6824     it.  For predictable results, you must also specify the same set
6825     of options that were used to generate code (`-fpie', `-fPIE', or
6826     model suboptions) when you specify this option.
6827
6828`-rdynamic'
6829     Pass the flag `-export-dynamic' to the ELF linker, on targets that
6830     support it. This instructs the linker to add all symbols, not only
6831     used ones, to the dynamic symbol table. This option is needed for
6832     some uses of `dlopen' or to allow obtaining backtraces from within
6833     a program.
6834
6835`-s'
6836     Remove all symbol table and relocation information from the
6837     executable.
6838
6839`-static'
6840     On systems that support dynamic linking, this prevents linking
6841     with the shared libraries.  On other systems, this option has no
6842     effect.
6843
6844`-shared'
6845     Produce a shared object which can then be linked with other
6846     objects to form an executable.  Not all systems support this
6847     option.  For predictable results, you must also specify the same
6848     set of options that were used to generate code (`-fpic', `-fPIC',
6849     or model suboptions) when you specify this option.(1)
6850
6851`-shared-libgcc'
6852`-static-libgcc'
6853     On systems that provide `libgcc' as a shared library, these options
6854     force the use of either the shared or static version respectively.
6855     If no shared version of `libgcc' was built when the compiler was
6856     configured, these options have no effect.
6857
6858     There are several situations in which an application should use the
6859     shared `libgcc' instead of the static version.  The most common of
6860     these is when the application wishes to throw and catch exceptions
6861     across different shared libraries.  In that case, each of the
6862     libraries as well as the application itself should use the shared
6863     `libgcc'.
6864
6865     Therefore, the G++ and GCJ drivers automatically add
6866     `-shared-libgcc' whenever you build a shared library or a main
6867     executable, because C++ and Java programs typically use
6868     exceptions, so this is the right thing to do.
6869
6870     If, instead, you use the GCC driver to create shared libraries,
6871     you may find that they will not always be linked with the shared
6872     `libgcc'.  If GCC finds, at its configuration time, that you have
6873     a non-GNU linker or a GNU linker that does not support option
6874     `--eh-frame-hdr', it will link the shared version of `libgcc' into
6875     shared libraries by default.  Otherwise, it will take advantage of
6876     the linker and optimize away the linking with the shared version
6877     of `libgcc', linking with the static version of libgcc by default.
6878     This allows exceptions to propagate through such shared
6879     libraries, without incurring relocation costs at library load time.
6880
6881     However, if a library or main executable is supposed to throw or
6882     catch exceptions, you must link it using the G++ or GCJ driver, as
6883     appropriate for the languages used in the program, or using the
6884     option `-shared-libgcc', such that it is linked with the shared
6885     `libgcc'.
6886
6887`-symbolic'
6888     Bind references to global symbols when building a shared object.
6889     Warn about any unresolved references (unless overridden by the
6890     link editor option `-Xlinker -z -Xlinker defs').  Only a few
6891     systems support this option.
6892
6893`-Xlinker OPTION'
6894     Pass OPTION as an option to the linker.  You can use this to
6895     supply system-specific linker options which GCC does not know how
6896     to recognize.
6897
6898     If you want to pass an option that takes an argument, you must use
6899     `-Xlinker' twice, once for the option and once for the argument.
6900     For example, to pass `-assert definitions', you must write
6901     `-Xlinker -assert -Xlinker definitions'.  It does not work to write
6902     `-Xlinker "-assert definitions"', because this passes the entire
6903     string as a single argument, which is not what the linker expects.
6904
6905`-Wl,OPTION'
6906     Pass OPTION as an option to the linker.  If OPTION contains
6907     commas, it is split into multiple options at the commas.
6908
6909`-u SYMBOL'
6910     Pretend the symbol SYMBOL is undefined, to force linking of
6911     library modules to define it.  You can use `-u' multiple times with
6912     different symbols to force loading of additional library modules.
6913
6914 ---------- Footnotes ----------
6915
6916 (1) On some systems, `gcc -shared' needs to build supplementary stub
6917code for constructors to work.  On multi-libbed systems, `gcc -shared'
6918must select the correct support libraries to link against.  Failing to
6919supply the correct flags may lead to subtle defects.  Supplying them in
6920cases where they are not necessary is innocuous.
6921
6922
6923File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
6924
69253.14 Options for Directory Search
6926=================================
6927
6928These options specify directories to search for header files, for
6929libraries and for parts of the compiler:
6930
6931`-IDIR'
6932     Add the directory DIR to the head of the list of directories to be
6933     searched for header files.  This can be used to override a system
6934     header file, substituting your own version, since these
6935     directories are searched before the system header file
6936     directories.  However, you should not use this option to add
6937     directories that contain vendor-supplied system header files (use
6938     `-isystem' for that).  If you use more than one `-I' option, the
6939     directories are scanned in left-to-right order; the standard
6940     system directories come after.
6941
6942     If a standard system include directory, or a directory specified
6943     with `-isystem', is also specified with `-I', the `-I' option will
6944     be ignored.  The directory will still be searched but as a system
6945     directory at its normal position in the system include chain.
6946     This is to ensure that GCC's procedure to fix buggy system headers
6947     and the ordering for the include_next directive are not
6948     inadvertently changed.  If you really need to change the search
6949     order for system directories, use the `-nostdinc' and/or
6950     `-isystem' options.
6951
6952`-iquoteDIR'
6953     Add the directory DIR to the head of the list of directories to be
6954     searched for header files only for the case of `#include "FILE"';
6955     they are not searched for `#include <FILE>', otherwise just like
6956     `-I'.
6957
6958`-LDIR'
6959     Add directory DIR to the list of directories to be searched for
6960     `-l'.
6961
6962`-BPREFIX'
6963     This option specifies where to find the executables, libraries,
6964     include files, and data files of the compiler itself.
6965
6966     The compiler driver program runs one or more of the subprograms
6967     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
6968     program it tries to run, both with and without `MACHINE/VERSION/'
6969     (*note Target Options::).
6970
6971     For each subprogram to be run, the compiler driver first tries the
6972     `-B' prefix, if any.  If that name is not found, or if `-B' was
6973     not specified, the driver tries two standard prefixes, which are
6974     `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
6975     results in a file name that is found, the unmodified program name
6976     is searched for using the directories specified in your `PATH'
6977     environment variable.
6978
6979     The compiler will check to see if the path provided by the `-B'
6980     refers to a directory, and if necessary it will add a directory
6981     separator character at the end of the path.
6982
6983     `-B' prefixes that effectively specify directory names also apply
6984     to libraries in the linker, because the compiler translates these
6985     options into `-L' options for the linker.  They also apply to
6986     includes files in the preprocessor, because the compiler
6987     translates these options into `-isystem' options for the
6988     preprocessor.  In this case, the compiler appends `include' to the
6989     prefix.
6990
6991     The run-time support file `libgcc.a' can also be searched for using
6992     the `-B' prefix, if needed.  If it is not found there, the two
6993     standard prefixes above are tried, and that is all.  The file is
6994     left out of the link if it is not found by those means.
6995
6996     Another way to specify a prefix much like the `-B' prefix is to use
6997     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
6998     Variables::.
6999
7000     As a special kludge, if the path provided by `-B' is
7001     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
7002     will be replaced by `[dir/]include'.  This is to help with
7003     boot-strapping the compiler.
7004
7005`-specs=FILE'
7006     Process FILE after the compiler reads in the standard `specs'
7007     file, in order to override the defaults that the `gcc' driver
7008     program uses when determining what switches to pass to `cc1',
7009     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
7010     specified on the command line, and they are processed in order,
7011     from left to right.
7012
7013`--sysroot=DIR'
7014     Use DIR as the logical root directory for headers and libraries.
7015     For example, if the compiler would normally search for headers in
7016     `/usr/include' and libraries in `/usr/lib', it will instead search
7017     `DIR/usr/include' and `DIR/usr/lib'.
7018
7019     If you use both this option and the `-isysroot' option, then the
7020     `--sysroot' option will apply to libraries, but the `-isysroot'
7021     option will apply to header files.
7022
7023     The GNU linker (beginning with version 2.16) has the necessary
7024     support for this option.  If your linker does not support this
7025     option, the header file aspect of `--sysroot' will still work, but
7026     the library aspect will not.
7027
7028`-I-'
7029     This option has been deprecated.  Please use `-iquote' instead for
7030     `-I' directories before the `-I-' and remove the `-I-'.  Any
7031     directories you specify with `-I' options before the `-I-' option
7032     are searched only for the case of `#include "FILE"'; they are not
7033     searched for `#include <FILE>'.
7034
7035     If additional directories are specified with `-I' options after
7036     the `-I-', these directories are searched for all `#include'
7037     directives.  (Ordinarily _all_ `-I' directories are used this way.)
7038
7039     In addition, the `-I-' option inhibits the use of the current
7040     directory (where the current input file came from) as the first
7041     search directory for `#include "FILE"'.  There is no way to
7042     override this effect of `-I-'.  With `-I.' you can specify
7043     searching the directory which was current when the compiler was
7044     invoked.  That is not exactly the same as what the preprocessor
7045     does by default, but it is often satisfactory.
7046
7047     `-I-' does not inhibit the use of the standard system directories
7048     for header files.  Thus, `-I-' and `-nostdinc' are independent.
7049
7050
7051File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
7052
70533.15 Specifying subprocesses and the switches to pass to them
7054=============================================================
7055
7056`gcc' is a driver program.  It performs its job by invoking a sequence
7057of other programs to do the work of compiling, assembling and linking.
7058GCC interprets its command-line parameters and uses these to deduce
7059which programs it should invoke, and which command-line options it
7060ought to place on their command lines.  This behavior is controlled by
7061"spec strings".  In most cases there is one spec string for each
7062program that GCC can invoke, but a few programs have multiple spec
7063strings to control their behavior.  The spec strings built into GCC can
7064be overridden by using the `-specs=' command-line switch to specify a
7065spec file.
7066
7067 "Spec files" are plaintext files that are used to construct spec
7068strings.  They consist of a sequence of directives separated by blank
7069lines.  The type of directive is determined by the first non-whitespace
7070character on the line and it can be one of the following:
7071
7072`%COMMAND'
7073     Issues a COMMAND to the spec file processor.  The commands that can
7074     appear here are:
7075
7076    `%include <FILE>'
7077          Search for FILE and insert its text at the current point in
7078          the specs file.
7079
7080    `%include_noerr <FILE>'
7081          Just like `%include', but do not generate an error message if
7082          the include file cannot be found.
7083
7084    `%rename OLD_NAME NEW_NAME'
7085          Rename the spec string OLD_NAME to NEW_NAME.
7086
7087
7088`*[SPEC_NAME]:'
7089     This tells the compiler to create, override or delete the named
7090     spec string.  All lines after this directive up to the next
7091     directive or blank line are considered to be the text for the spec
7092     string.  If this results in an empty string then the spec will be
7093     deleted.  (Or, if the spec did not exist, then nothing will
7094     happened.)  Otherwise, if the spec does not currently exist a new
7095     spec will be created.  If the spec does exist then its contents
7096     will be overridden by the text of this directive, unless the first
7097     character of that text is the `+' character, in which case the
7098     text will be appended to the spec.
7099
7100`[SUFFIX]:'
7101     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
7102     and up to the next directive or blank line are considered to make
7103     up the spec string for the indicated suffix.  When the compiler
7104     encounters an input file with the named suffix, it will processes
7105     the spec string in order to work out how to compile that file.
7106     For example:
7107
7108          .ZZ:
7109          z-compile -input %i
7110
7111     This says that any input file whose name ends in `.ZZ' should be
7112     passed to the program `z-compile', which should be invoked with the
7113     command-line switch `-input' and with the result of performing the
7114     `%i' substitution.  (See below.)
7115
7116     As an alternative to providing a spec string, the text that
7117     follows a suffix directive can be one of the following:
7118
7119    `@LANGUAGE'
7120          This says that the suffix is an alias for a known LANGUAGE.
7121          This is similar to using the `-x' command-line switch to GCC
7122          to specify a language explicitly.  For example:
7123
7124               .ZZ:
7125               @c++
7126
7127          Says that .ZZ files are, in fact, C++ source files.
7128
7129    `#NAME'
7130          This causes an error messages saying:
7131
7132               NAME compiler not installed on this system.
7133
7134     GCC already has an extensive list of suffixes built into it.  This
7135     directive will add an entry to the end of the list of suffixes, but
7136     since the list is searched from the end backwards, it is
7137     effectively possible to override earlier entries using this
7138     technique.
7139
7140
7141 GCC has the following spec strings built into it.  Spec files can
7142override these strings or create their own.  Note that individual
7143targets can also add their own spec strings to this list.
7144
7145     asm          Options to pass to the assembler
7146     asm_final    Options to pass to the assembler post-processor
7147     cpp          Options to pass to the C preprocessor
7148     cc1          Options to pass to the C compiler
7149     cc1plus      Options to pass to the C++ compiler
7150     endfile      Object files to include at the end of the link
7151     link         Options to pass to the linker
7152     lib          Libraries to include on the command line to the linker
7153     libgcc       Decides which GCC support library to pass to the linker
7154     linker       Sets the name of the linker
7155     predefines   Defines to be passed to the C preprocessor
7156     signed_char  Defines to pass to CPP to say whether `char' is signed
7157                  by default
7158     startfile    Object files to include at the start of the link
7159
7160 Here is a small example of a spec file:
7161
7162     %rename lib                 old_lib
7163
7164     *lib:
7165     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
7166
7167 This example renames the spec called `lib' to `old_lib' and then
7168overrides the previous definition of `lib' with a new one.  The new
7169definition adds in some extra command-line options before including the
7170text of the old definition.
7171
7172 "Spec strings" are a list of command-line options to be passed to their
7173corresponding program.  In addition, the spec strings can contain
7174`%'-prefixed sequences to substitute variable text or to conditionally
7175insert text into the command line.  Using these constructs it is
7176possible to generate quite complex command lines.
7177
7178 Here is a table of all defined `%'-sequences for spec strings.  Note
7179that spaces are not generated automatically around the results of
7180expanding these sequences.  Therefore you can concatenate them together
7181or combine them with constant text in a single argument.
7182
7183`%%'
7184     Substitute one `%' into the program name or argument.
7185
7186`%i'
7187     Substitute the name of the input file being processed.
7188
7189`%b'
7190     Substitute the basename of the input file being processed.  This
7191     is the substring up to (and not including) the last period and not
7192     including the directory.
7193
7194`%B'
7195     This is the same as `%b', but include the file suffix (text after
7196     the last period).
7197
7198`%d'
7199     Marks the argument containing or following the `%d' as a temporary
7200     file name, so that that file will be deleted if GCC exits
7201     successfully.  Unlike `%g', this contributes no text to the
7202     argument.
7203
7204`%gSUFFIX'
7205     Substitute a file name that has suffix SUFFIX and is chosen once
7206     per compilation, and mark the argument in the same way as `%d'.
7207     To reduce exposure to denial-of-service attacks, the file name is
7208     now chosen in a way that is hard to predict even when previously
7209     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
7210     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
7211     matches the regexp `[.A-Za-z]*' or the special string `%O', which
7212     is treated exactly as if `%O' had been preprocessed.  Previously,
7213     `%g' was simply substituted with a file name chosen once per
7214     compilation, without regard to any appended suffix (which was
7215     therefore treated just like ordinary text), making such attacks
7216     more likely to succeed.
7217
7218`%uSUFFIX'
7219     Like `%g', but generates a new temporary file name even if
7220     `%uSUFFIX' was already seen.
7221
7222`%USUFFIX'
7223     Substitutes the last file name generated with `%uSUFFIX',
7224     generating a new one if there is no such last file name.  In the
7225     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
7226     they don't share the same suffix _space_, so `%g.s ... %U.s ...
7227     %g.s ... %U.s' would involve the generation of two distinct file
7228     names, one for each `%g.s' and another for each `%U.s'.
7229     Previously, `%U' was simply substituted with a file name chosen
7230     for the previous `%u', without regard to any appended suffix.
7231
7232`%jSUFFIX'
7233     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
7234     writable, and if save-temps is off; otherwise, substitute the name
7235     of a temporary file, just like `%u'.  This temporary file is not
7236     meant for communication between processes, but rather as a junk
7237     disposal mechanism.
7238
7239`%|SUFFIX'
7240`%mSUFFIX'
7241     Like `%g', except if `-pipe' is in effect.  In that case `%|'
7242     substitutes a single dash and `%m' substitutes nothing at all.
7243     These are the two most common ways to instruct a program that it
7244     should read from standard input or write to standard output.  If
7245     you need something more elaborate you can use an `%{pipe:`X'}'
7246     construct: see for example `f/lang-specs.h'.
7247
7248`%.SUFFIX'
7249     Substitutes .SUFFIX for the suffixes of a matched switch's args
7250     when it is subsequently output with `%*'.  SUFFIX is terminated by
7251     the next space or %.
7252
7253`%w'
7254     Marks the argument containing or following the `%w' as the
7255     designated output file of this compilation.  This puts the argument
7256     into the sequence of arguments that `%o' will substitute later.
7257
7258`%o'
7259     Substitutes the names of all the output files, with spaces
7260     automatically placed around them.  You should write spaces around
7261     the `%o' as well or the results are undefined.  `%o' is for use in
7262     the specs for running the linker.  Input files whose names have no
7263     recognized suffix are not compiled at all, but they are included
7264     among the output files, so they will be linked.
7265
7266`%O'
7267     Substitutes the suffix for object files.  Note that this is
7268     handled specially when it immediately follows `%g, %u, or %U',
7269     because of the need for those to form complete file names.  The
7270     handling is such that `%O' is treated exactly as if it had already
7271     been substituted, except that `%g, %u, and %U' do not currently
7272     support additional SUFFIX characters following `%O' as they would
7273     following, for example, `.o'.
7274
7275`%p'
7276     Substitutes the standard macro predefinitions for the current
7277     target machine.  Use this when running `cpp'.
7278
7279`%P'
7280     Like `%p', but puts `__' before and after the name of each
7281     predefined macro, except for macros that start with `__' or with
7282     `_L', where L is an uppercase letter.  This is for ISO C.
7283
7284`%I'
7285     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
7286     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
7287     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
7288     necessary.
7289
7290`%s'
7291     Current argument is the name of a library or startup file of some
7292     sort.  Search for that file in a standard list of directories and
7293     substitute the full name found.
7294
7295`%eSTR'
7296     Print STR as an error message.  STR is terminated by a newline.
7297     Use this when inconsistent options are detected.
7298
7299`%(NAME)'
7300     Substitute the contents of spec string NAME at this point.
7301
7302`%[NAME]'
7303     Like `%(...)' but put `__' around `-D' arguments.
7304
7305`%x{OPTION}'
7306     Accumulate an option for `%X'.
7307
7308`%X'
7309     Output the accumulated linker options specified by `-Wl' or a `%x'
7310     spec string.
7311
7312`%Y'
7313     Output the accumulated assembler options specified by `-Wa'.
7314
7315`%Z'
7316     Output the accumulated preprocessor options specified by `-Wp'.
7317
7318`%a'
7319     Process the `asm' spec.  This is used to compute the switches to
7320     be passed to the assembler.
7321
7322`%A'
7323     Process the `asm_final' spec.  This is a spec string for passing
7324     switches to an assembler post-processor, if such a program is
7325     needed.
7326
7327`%l'
7328     Process the `link' spec.  This is the spec for computing the
7329     command line passed to the linker.  Typically it will make use of
7330     the `%L %G %S %D and %E' sequences.
7331
7332`%D'
7333     Dump out a `-L' option for each directory that GCC believes might
7334     contain startup files.  If the target supports multilibs then the
7335     current multilib directory will be prepended to each of these
7336     paths.
7337
7338`%L'
7339     Process the `lib' spec.  This is a spec string for deciding which
7340     libraries should be included on the command line to the linker.
7341
7342`%G'
7343     Process the `libgcc' spec.  This is a spec string for deciding
7344     which GCC support library should be included on the command line
7345     to the linker.
7346
7347`%S'
7348     Process the `startfile' spec.  This is a spec for deciding which
7349     object files should be the first ones passed to the linker.
7350     Typically this might be a file named `crt0.o'.
7351
7352`%E'
7353     Process the `endfile' spec.  This is a spec string that specifies
7354     the last object files that will be passed to the linker.
7355
7356`%C'
7357     Process the `cpp' spec.  This is used to construct the arguments
7358     to be passed to the C preprocessor.
7359
7360`%1'
7361     Process the `cc1' spec.  This is used to construct the options to
7362     be passed to the actual C compiler (`cc1').
7363
7364`%2'
7365     Process the `cc1plus' spec.  This is used to construct the options
7366     to be passed to the actual C++ compiler (`cc1plus').
7367
7368`%*'
7369     Substitute the variable part of a matched option.  See below.
7370     Note that each comma in the substituted string is replaced by a
7371     single space.
7372
7373`%<`S''
7374     Remove all occurrences of `-S' from the command line.  Note--this
7375     command is position dependent.  `%' commands in the spec string
7376     before this one will see `-S', `%' commands in the spec string
7377     after this one will not.
7378
7379`%:FUNCTION(ARGS)'
7380     Call the named function FUNCTION, passing it ARGS.  ARGS is first
7381     processed as a nested spec string, then split into an argument
7382     vector in the usual fashion.  The function returns a string which
7383     is processed as if it had appeared literally as part of the
7384     current spec.
7385
7386     The following built-in spec functions are provided:
7387
7388    ``if-exists''
7389          The `if-exists' spec function takes one argument, an absolute
7390          pathname to a file.  If the file exists, `if-exists' returns
7391          the pathname.  Here is a small example of its usage:
7392
7393               *startfile:
7394               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
7395
7396    ``if-exists-else''
7397          The `if-exists-else' spec function is similar to the
7398          `if-exists' spec function, except that it takes two
7399          arguments.  The first argument is an absolute pathname to a
7400          file.  If the file exists, `if-exists-else' returns the
7401          pathname.  If it does not exist, it returns the second
7402          argument.  This way, `if-exists-else' can be used to select
7403          one file or another, based on the existence of the first.
7404          Here is a small example of its usage:
7405
7406               *startfile:
7407               crt0%O%s %:if-exists(crti%O%s) \
7408               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
7409
7410    ``replace-outfile''
7411          The `replace-outfile' spec function takes two arguments.  It
7412          looks for the first argument in the outfiles array and
7413          replaces it with the second argument.  Here is a small
7414          example of its usage:
7415
7416               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
7417
7418
7419`%{`S'}'
7420     Substitutes the `-S' switch, if that switch was given to GCC.  If
7421     that switch was not specified, this substitutes nothing.  Note that
7422     the leading dash is omitted when specifying this option, and it is
7423     automatically inserted if the substitution is performed.  Thus the
7424     spec string `%{foo}' would match the command-line option `-foo'
7425     and would output the command line option `-foo'.
7426
7427`%W{`S'}'
7428     Like %{`S'} but mark last argument supplied within as a file to be
7429     deleted on failure.
7430
7431`%{`S'*}'
7432     Substitutes all the switches specified to GCC whose names start
7433     with `-S', but which also take an argument.  This is used for
7434     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
7435     being one switch whose names starts with `o'.  %{o*} would
7436     substitute this text, including the space.  Thus two arguments
7437     would be generated.
7438
7439`%{`S'*&`T'*}'
7440     Like %{`S'*}, but preserve order of `S' and `T' options (the order
7441     of `S' and `T' in the spec is not significant).  There can be any
7442     number of ampersand-separated variables; for each the wild card is
7443     optional.  Useful for CPP as `%{D*&U*&A*}'.
7444
7445`%{`S':`X'}'
7446     Substitutes `X', if the `-S' switch was given to GCC.
7447
7448`%{!`S':`X'}'
7449     Substitutes `X', if the `-S' switch was _not_ given to GCC.
7450
7451`%{`S'*:`X'}'
7452     Substitutes `X' if one or more switches whose names start with
7453     `-S' are specified to GCC.  Normally `X' is substituted only once,
7454     no matter how many such switches appeared.  However, if `%*'
7455     appears somewhere in `X', then `X' will be substituted once for
7456     each matching switch, with the `%*' replaced by the part of that
7457     switch that matched the `*'.
7458
7459`%{.`S':`X'}'
7460     Substitutes `X', if processing a file with suffix `S'.
7461
7462`%{!.`S':`X'}'
7463     Substitutes `X', if _not_ processing a file with suffix `S'.
7464
7465`%{`S'|`P':`X'}'
7466     Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
7467     be combined with `!', `.', and `*' sequences as well, although
7468     they have a stronger binding than the `|'.  If `%*' appears in
7469     `X', all of the alternatives must be starred, and only the first
7470     matching alternative is substituted.
7471
7472     For example, a spec string like this:
7473
7474          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
7475
7476     will output the following command-line options from the following
7477     input command-line options:
7478
7479          fred.c        -foo -baz
7480          jim.d         -bar -boggle
7481          -d fred.c     -foo -baz -boggle
7482          -d jim.d      -bar -baz -boggle
7483
7484`%{S:X; T:Y; :D}'
7485     If `S' was given to GCC, substitutes `X'; else if `T' was given to
7486     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
7487     clauses as you need.  This may be combined with `.', `!', `|', and
7488     `*' as needed.
7489
7490
7491 The conditional text `X' in a %{`S':`X'} or similar construct may
7492contain other nested `%' constructs or spaces, or even newlines.  They
7493are processed as usual, as described above.  Trailing white space in
7494`X' is ignored.  White space may also appear anywhere on the left side
7495of the colon in these constructs, except between `.' or `*' and the
7496corresponding word.
7497
7498 The `-O', `-f', `-m', and `-W' switches are handled specifically in
7499these constructs.  If another value of `-O' or the negated form of a
7500`-f', `-m', or `-W' switch is found later in the command line, the
7501earlier switch value is ignored, except with {`S'*} where `S' is just
7502one letter, which passes all matching options.
7503
7504 The character `|' at the beginning of the predicate text is used to
7505indicate that a command should be piped to the following command, but
7506only if `-pipe' is specified.
7507
7508 It is built into GCC which switches take arguments and which do not.
7509(You might think it would be useful to generalize this to allow each
7510compiler's spec to say which switches take arguments.  But this cannot
7511be done in a consistent fashion.  GCC cannot even decide which input
7512files have been specified without knowing which switches take arguments,
7513and it must know which input files to compile in order to tell which
7514compilers to run).
7515
7516 GCC also knows implicitly that arguments starting in `-l' are to be
7517treated as compiler output files, and passed to the linker in their
7518proper position among the other output files.
7519
7520
7521File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
7522
75233.16 Specifying Target Machine and Compiler Version
7524===================================================
7525
7526The usual way to run GCC is to run the executable called `gcc', or
7527`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
7528run a version other than the one that was installed last.  Sometimes
7529this is inconvenient, so GCC provides options that will switch to
7530another cross-compiler or version.
7531
7532`-b MACHINE'
7533     The argument MACHINE specifies the target machine for compilation.
7534
7535     The value to use for MACHINE is the same as was specified as the
7536     machine type when configuring GCC as a cross-compiler.  For
7537     example, if a cross-compiler was configured with `configure
7538     arm-elf', meaning to compile for an arm processor with elf
7539     binaries, then you would specify `-b arm-elf' to run that cross
7540     compiler.  Because there are other options beginning with `-b', the
7541     configuration must contain a hyphen.
7542
7543`-V VERSION'
7544     The argument VERSION specifies which version of GCC to run.  This
7545     is useful when multiple versions are installed.  For example,
7546     VERSION might be `4.0', meaning to run GCC version 4.0.
7547
7548 The `-V' and `-b' options work by running the
7549`<machine>-gcc-<version>' executable, so there's no real reason to use
7550them if you can just run that directly.
7551
7552
7553File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
7554
75553.17 Hardware Models and Configurations
7556=======================================
7557
7558Earlier we discussed the standard option `-b' which chooses among
7559different installed compilers for completely different target machines,
7560such as VAX vs. 68000 vs. 80386.
7561
7562 In addition, each of these target machine types can have its own
7563special options, starting with `-m', to choose among various hardware
7564models or configurations--for example, 68010 vs 68020, floating
7565coprocessor or none.  A single installed version of the compiler can
7566compile for any model or configuration, according to the options
7567specified.
7568
7569 Some configurations of the compiler also support additional special
7570options, usually for compatibility with other compilers on the same
7571platform.
7572
7573* Menu:
7574
7575* ARC Options::
7576* ARM Options::
7577* AVR Options::
7578* Blackfin Options::
7579* CRIS Options::
7580* CRX Options::
7581* Darwin Options::
7582* DEC Alpha Options::
7583* DEC Alpha/VMS Options::
7584* FRV Options::
7585* GNU/Linux Options::
7586* H8/300 Options::
7587* HPPA Options::
7588* i386 and x86-64 Options::
7589* IA-64 Options::
7590* M32C Options::
7591* M32R/D Options::
7592* M680x0 Options::
7593* M68hc1x Options::
7594* MCore Options::
7595* MIPS Options::
7596* MMIX Options::
7597* MN10300 Options::
7598* MT Options::
7599* PDP-11 Options::
7600* PowerPC Options::
7601* RS/6000 and PowerPC Options::
7602* S/390 and zSeries Options::
7603* Score Options::
7604* SH Options::
7605* SPARC Options::
7606* System V Options::
7607* TMS320C3x/C4x Options::
7608* V850 Options::
7609* VAX Options::
7610* x86-64 Options::
7611* Xstormy16 Options::
7612* Xtensa Options::
7613* zSeries Options::
7614
7615
7616File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
7617
76183.17.1 ARC Options
7619------------------
7620
7621These options are defined for ARC implementations:
7622
7623`-EL'
7624     Compile code for little endian mode.  This is the default.
7625
7626`-EB'
7627     Compile code for big endian mode.
7628
7629`-mmangle-cpu'
7630     Prepend the name of the cpu to all public symbol names.  In
7631     multiple-processor systems, there are many ARC variants with
7632     different instruction and register set characteristics.  This flag
7633     prevents code compiled for one cpu to be linked with code compiled
7634     for another.  No facility exists for handling variants that are
7635     "almost identical".  This is an all or nothing option.
7636
7637`-mcpu=CPU'
7638     Compile code for ARC variant CPU.  Which variants are supported
7639     depend on the configuration.  All variants support `-mcpu=base',
7640     this is the default.
7641
7642`-mtext=TEXT-SECTION'
7643`-mdata=DATA-SECTION'
7644`-mrodata=READONLY-DATA-SECTION'
7645     Put functions, data, and readonly data in TEXT-SECTION,
7646     DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
7647     This can be overridden with the `section' attribute.  *Note
7648     Variable Attributes::.
7649
7650
7651
7652File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
7653
76543.17.2 ARM Options
7655------------------
7656
7657These `-m' options are defined for Advanced RISC Machines (ARM)
7658architectures:
7659
7660`-mabi=NAME'
7661     Generate code for the specified ABI.  Permissible values are:
7662     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
7663
7664`-mapcs-frame'
7665     Generate a stack frame that is compliant with the ARM Procedure
7666     Call Standard for all functions, even if this is not strictly
7667     necessary for correct execution of the code.  Specifying
7668     `-fomit-frame-pointer' with this option will cause the stack
7669     frames not to be generated for leaf functions.  The default is
7670     `-mno-apcs-frame'.
7671
7672`-mapcs'
7673     This is a synonym for `-mapcs-frame'.
7674
7675`-mthumb-interwork'
7676     Generate code which supports calling between the ARM and Thumb
7677     instruction sets.  Without this option the two instruction sets
7678     cannot be reliably used inside one program.  The default is
7679     `-mno-thumb-interwork', since slightly larger code is generated
7680     when `-mthumb-interwork' is specified.
7681
7682`-mno-sched-prolog'
7683     Prevent the reordering of instructions in the function prolog, or
7684     the merging of those instruction with the instructions in the
7685     function's body.  This means that all functions will start with a
7686     recognizable set of instructions (or in fact one of a choice from
7687     a small set of different function prologues), and this information
7688     can be used to locate the start if functions inside an executable
7689     piece of code.  The default is `-msched-prolog'.
7690
7691`-mhard-float'
7692     Generate output containing floating point instructions.  This is
7693     the default.
7694
7695`-msoft-float'
7696     Generate output containing library calls for floating point.
7697     *Warning:* the requisite libraries are not available for all ARM
7698     targets.  Normally the facilities of the machine's usual C
7699     compiler are used, but this cannot be done directly in
7700     cross-compilation.  You must make your own arrangements to provide
7701     suitable library functions for cross-compilation.
7702
7703     `-msoft-float' changes the calling convention in the output file;
7704     therefore, it is only useful if you compile _all_ of a program with
7705     this option.  In particular, you need to compile `libgcc.a', the
7706     library that comes with GCC, with `-msoft-float' in order for this
7707     to work.
7708
7709`-mfloat-abi=NAME'
7710     Specifies which ABI to use for floating point values.  Permissible
7711     values are: `soft', `softfp' and `hard'.
7712
7713     `soft' and `hard' are equivalent to `-msoft-float' and
7714     `-mhard-float' respectively.  `softfp' allows the generation of
7715     floating point instructions, but still uses the soft-float calling
7716     conventions.
7717
7718`-mlittle-endian'
7719     Generate code for a processor running in little-endian mode.  This
7720     is the default for all standard configurations.
7721
7722`-mbig-endian'
7723     Generate code for a processor running in big-endian mode; the
7724     default is to compile code for a little-endian processor.
7725
7726`-mwords-little-endian'
7727     This option only applies when generating code for big-endian
7728     processors.  Generate code for a little-endian word order but a
7729     big-endian byte order.  That is, a byte order of the form
7730     `32107654'.  Note: this option should only be used if you require
7731     compatibility with code for big-endian ARM processors generated by
7732     versions of the compiler prior to 2.8.
7733
7734`-mcpu=NAME'
7735     This specifies the name of the target ARM processor.  GCC uses
7736     this name to determine what kind of instructions it can emit when
7737     generating assembly code.  Permissible names are: `arm2', `arm250',
7738     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
7739     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
7740     `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe',
7741     `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110',
7742     `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920',
7743     `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
7744     `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
7745     `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
7746     `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1176jz-s',
7747     `arm1176jzf-s', `xscale', `iwmmxt', `ep9312'.
7748
7749`-mtune=NAME'
7750     This option is very similar to the `-mcpu=' option, except that
7751     instead of specifying the actual target processor type, and hence
7752     restricting which instructions can be used, it specifies that GCC
7753     should tune the performance of the code as if the target were of
7754     the type specified in this option, but still choosing the
7755     instructions that it will generate based on the cpu specified by a
7756     `-mcpu=' option.  For some ARM implementations better performance
7757     can be obtained by using this option.
7758
7759`-march=NAME'
7760     This specifies the name of the target ARM architecture.  GCC uses
7761     this name to determine what kind of instructions it can emit when
7762     generating assembly code.  This option can be used in conjunction
7763     with or instead of the `-mcpu=' option.  Permissible names are:
7764     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
7765     `armv5t', `armv5te', `armv6', `armv6j', `iwmmxt', `ep9312'.
7766
7767`-mfpu=NAME'
7768`-mfpe=NUMBER'
7769`-mfp=NUMBER'
7770     This specifies what floating point hardware (or hardware
7771     emulation) is available on the target.  Permissible names are:
7772     `fpa', `fpe2', `fpe3', `maverick', `vfp'.  `-mfp' and `-mfpe' are
7773     synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older
7774     versions of GCC.
7775
7776     If `-msoft-float' is specified this specifies the format of
7777     floating point values.
7778
7779`-mstructure-size-boundary=N'
7780     The size of all structures and unions will be rounded up to a
7781     multiple of the number of bits set by this option.  Permissible
7782     values are 8, 32 and 64.  The default value varies for different
7783     toolchains.  For the COFF targeted toolchain the default value is
7784     8.  A value of 64 is only allowed if the underlying ABI supports
7785     it.
7786
7787     Specifying the larger number can produce faster, more efficient
7788     code, but can also increase the size of the program.  Different
7789     values are potentially incompatible.  Code compiled with one value
7790     cannot necessarily expect to work with code or libraries compiled
7791     with another value, if they exchange information using structures
7792     or unions.
7793
7794`-mabort-on-noreturn'
7795     Generate a call to the function `abort' at the end of a `noreturn'
7796     function.  It will be executed if the function tries to return.
7797
7798`-mlong-calls'
7799`-mno-long-calls'
7800     Tells the compiler to perform function calls by first loading the
7801     address of the function into a register and then performing a
7802     subroutine call on this register.  This switch is needed if the
7803     target function will lie outside of the 64 megabyte addressing
7804     range of the offset based version of subroutine call instruction.
7805
7806     Even if this switch is enabled, not all function calls will be
7807     turned into long calls.  The heuristic is that static functions,
7808     functions which have the `short-call' attribute, functions that
7809     are inside the scope of a `#pragma no_long_calls' directive and
7810     functions whose definitions have already been compiled within the
7811     current compilation unit, will not be turned into long calls.  The
7812     exception to this rule is that weak function definitions,
7813     functions with the `long-call' attribute or the `section'
7814     attribute, and functions that are within the scope of a `#pragma
7815     long_calls' directive, will always be turned into long calls.
7816
7817     This feature is not enabled by default.  Specifying
7818     `-mno-long-calls' will restore the default behavior, as will
7819     placing the function calls within the scope of a `#pragma
7820     long_calls_off' directive.  Note these switches have no effect on
7821     how the compiler generates code to handle function calls via
7822     function pointers.
7823
7824`-mnop-fun-dllimport'
7825     Disable support for the `dllimport' attribute.
7826
7827`-msingle-pic-base'
7828     Treat the register used for PIC addressing as read-only, rather
7829     than loading it in the prologue for each function.  The run-time
7830     system is responsible for initializing this register with an
7831     appropriate value before execution begins.
7832
7833`-mpic-register=REG'
7834     Specify the register to be used for PIC addressing.  The default
7835     is R10 unless stack-checking is enabled, when R9 is used.
7836
7837`-mcirrus-fix-invalid-insns'
7838     Insert NOPs into the instruction stream to in order to work around
7839     problems with invalid Maverick instruction combinations.  This
7840     option is only valid if the `-mcpu=ep9312' option has been used to
7841     enable generation of instructions for the Cirrus Maverick floating
7842     point co-processor.  This option is not enabled by default, since
7843     the problem is only present in older Maverick implementations.
7844     The default can be re-enabled by use of the
7845     `-mno-cirrus-fix-invalid-insns' switch.
7846
7847`-mpoke-function-name'
7848     Write the name of each function into the text section, directly
7849     preceding the function prologue.  The generated code is similar to
7850     this:
7851
7852               t0
7853                   .ascii "arm_poke_function_name", 0
7854                   .align
7855               t1
7856                   .word 0xff000000 + (t1 - t0)
7857               arm_poke_function_name
7858                   mov     ip, sp
7859                   stmfd   sp!, {fp, ip, lr, pc}
7860                   sub     fp, ip, #4
7861
7862     When performing a stack backtrace, code can inspect the value of
7863     `pc' stored at `fp + 0'.  If the trace function then looks at
7864     location `pc - 12' and the top 8 bits are set, then we know that
7865     there is a function name embedded immediately preceding this
7866     location and has length `((pc[-3]) & 0xff000000)'.
7867
7868`-mthumb'
7869     Generate code for the 16-bit Thumb instruction set.  The default
7870     is to use the 32-bit ARM instruction set.
7871
7872`-mtpcs-frame'
7873     Generate a stack frame that is compliant with the Thumb Procedure
7874     Call Standard for all non-leaf functions.  (A leaf function is one
7875     that does not call any other functions.)  The default is
7876     `-mno-tpcs-frame'.
7877
7878`-mtpcs-leaf-frame'
7879     Generate a stack frame that is compliant with the Thumb Procedure
7880     Call Standard for all leaf functions.  (A leaf function is one
7881     that does not call any other functions.)  The default is
7882     `-mno-apcs-leaf-frame'.
7883
7884`-mcallee-super-interworking'
7885     Gives all externally visible functions in the file being compiled
7886     an ARM instruction set header which switches to Thumb mode before
7887     executing the rest of the function.  This allows these functions
7888     to be called from non-interworking code.
7889
7890`-mcaller-super-interworking'
7891     Allows calls via function pointers (including virtual functions) to
7892     execute correctly regardless of whether the target code has been
7893     compiled for interworking or not.  There is a small overhead in
7894     the cost of executing a function pointer if this option is enabled.
7895
7896`-mtp=NAME'
7897     Specify the access model for the thread local storage pointer.
7898     The valid models are `soft', which generates calls to
7899     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
7900     `cp15' directly (supported in the arm6k architecture), and `auto',
7901     which uses the best available method for the selected processor.
7902     The default setting is `auto'.
7903
7904
7905
7906File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
7907
79083.17.3 AVR Options
7909------------------
7910
7911These options are defined for AVR implementations:
7912
7913`-mmcu=MCU'
7914     Specify ATMEL AVR instruction set or MCU type.
7915
7916     Instruction set avr1 is for the minimal AVR core, not supported by
7917     the C compiler, only for assembler programs (MCU types: at90s1200,
7918     attiny10, attiny11, attiny12, attiny15, attiny28).
7919
7920     Instruction set avr2 (default) is for the classic AVR core with up
7921     to 8K program memory space (MCU types: at90s2313, at90s2323,
7922     attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
7923     at90s8515, at90c8534, at90s8535).
7924
7925     Instruction set avr3 is for the classic AVR core with up to 128K
7926     program memory space (MCU types: atmega103, atmega603, at43usb320,
7927     at76c711).
7928
7929     Instruction set avr4 is for the enhanced AVR core with up to 8K
7930     program memory space (MCU types: atmega8, atmega83, atmega85).
7931
7932     Instruction set avr5 is for the enhanced AVR core with up to 128K
7933     program memory space (MCU types: atmega16, atmega161, atmega163,
7934     atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
7935
7936`-msize'
7937     Output instruction sizes to the asm file.
7938
7939`-minit-stack=N'
7940     Specify the initial stack address, which may be a symbol or
7941     numeric value, `__stack' is the default.
7942
7943`-mno-interrupts'
7944     Generated code is not compatible with hardware interrupts.  Code
7945     size will be smaller.
7946
7947`-mcall-prologues'
7948     Functions prologues/epilogues expanded as call to appropriate
7949     subroutines.  Code size will be smaller.
7950
7951`-mno-tablejump'
7952     Do not generate tablejump insns which sometimes increase code size.
7953
7954`-mtiny-stack'
7955     Change only the low 8 bits of the stack pointer.
7956
7957`-mint8'
7958     Assume int to be 8 bit integer.  This affects the sizes of all
7959     types: A char will be 1 byte, an int will be 1 byte, an long will
7960     be 2 bytes and long long will be 4 bytes.  Please note that this
7961     option does not comply to the C standards, but it will provide you
7962     with smaller code size.
7963
7964
7965File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
7966
79673.17.4 Blackfin Options
7968-----------------------
7969
7970`-momit-leaf-frame-pointer'
7971     Don't keep the frame pointer in a register for leaf functions.
7972     This avoids the instructions to save, set up and restore frame
7973     pointers and makes an extra register available in leaf functions.
7974     The option `-fomit-frame-pointer' removes the frame pointer for
7975     all functions which might make debugging harder.
7976
7977`-mspecld-anomaly'
7978     When enabled, the compiler will ensure that the generated code
7979     does not contain speculative loads after jump instructions.  This
7980     option is enabled by default.
7981
7982`-mno-specld-anomaly'
7983     Don't generate extra code to prevent speculative loads from
7984     occurring.
7985
7986`-mcsync-anomaly'
7987     When enabled, the compiler will ensure that the generated code
7988     does not contain CSYNC or SSYNC instructions too soon after
7989     conditional branches.  This option is enabled by default.
7990
7991`-mno-csync-anomaly'
7992     Don't generate extra code to prevent CSYNC or SSYNC instructions
7993     from occurring too soon after a conditional branch.
7994
7995`-mlow-64k'
7996     When enabled, the compiler is free to take advantage of the
7997     knowledge that the entire program fits into the low 64k of memory.
7998
7999`-mno-low-64k'
8000     Assume that the program is arbitrarily large.  This is the default.
8001
8002`-mid-shared-library'
8003     Generate code that supports shared libraries via the library ID
8004     method.  This allows for execute in place and shared libraries in
8005     an environment without virtual memory management.  This option
8006     implies `-fPIC'.
8007
8008`-mno-id-shared-library'
8009     Generate code that doesn't assume ID based shared libraries are
8010     being used.  This is the default.
8011
8012`-mshared-library-id=n'
8013     Specified the identification number of the ID based shared library
8014     being compiled.  Specifying a value of 0 will generate more
8015     compact code, specifying other values will force the allocation of
8016     that number to the current library but is no more space or time
8017     efficient than omitting this option.
8018
8019`-mlong-calls'
8020`-mno-long-calls'
8021     Tells the compiler to perform function calls by first loading the
8022     address of the function into a register and then performing a
8023     subroutine call on this register.  This switch is needed if the
8024     target function will lie outside of the 24 bit addressing range of
8025     the offset based version of subroutine call instruction.
8026
8027     This feature is not enabled by default.  Specifying
8028     `-mno-long-calls' will restore the default behavior.  Note these
8029     switches have no effect on how the compiler generates code to
8030     handle function calls via function pointers.
8031
8032
8033File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
8034
80353.17.5 CRIS Options
8036-------------------
8037
8038These options are defined specifically for the CRIS ports.
8039
8040`-march=ARCHITECTURE-TYPE'
8041`-mcpu=ARCHITECTURE-TYPE'
8042     Generate code for the specified architecture.  The choices for
8043     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
8044     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
8045     cris-axis-linux-gnu, where the default is `v10'.
8046
8047`-mtune=ARCHITECTURE-TYPE'
8048     Tune to ARCHITECTURE-TYPE everything applicable about the generated
8049     code, except for the ABI and the set of available instructions.
8050     The choices for ARCHITECTURE-TYPE are the same as for
8051     `-march=ARCHITECTURE-TYPE'.
8052
8053`-mmax-stack-frame=N'
8054     Warn when the stack frame of a function exceeds N bytes.
8055
8056`-melinux-stacksize=N'
8057     Only available with the `cris-axis-aout' target.  Arranges for
8058     indications in the program to the kernel loader that the stack of
8059     the program should be set to N bytes.
8060
8061`-metrax4'
8062`-metrax100'
8063     The options `-metrax4' and `-metrax100' are synonyms for
8064     `-march=v3' and `-march=v8' respectively.
8065
8066`-mmul-bug-workaround'
8067`-mno-mul-bug-workaround'
8068     Work around a bug in the `muls' and `mulu' instructions for CPU
8069     models where it applies.  This option is active by default.
8070
8071`-mpdebug'
8072     Enable CRIS-specific verbose debug-related information in the
8073     assembly code.  This option also has the effect to turn off the
8074     `#NO_APP' formatted-code indicator to the assembler at the
8075     beginning of the assembly file.
8076
8077`-mcc-init'
8078     Do not use condition-code results from previous instruction;
8079     always emit compare and test instructions before use of condition
8080     codes.
8081
8082`-mno-side-effects'
8083     Do not emit instructions with side-effects in addressing modes
8084     other than post-increment.
8085
8086`-mstack-align'
8087`-mno-stack-align'
8088`-mdata-align'
8089`-mno-data-align'
8090`-mconst-align'
8091`-mno-const-align'
8092     These options (no-options) arranges (eliminate arrangements) for
8093     the stack-frame, individual data and constants to be aligned for
8094     the maximum single data access size for the chosen CPU model.  The
8095     default is to arrange for 32-bit alignment.  ABI details such as
8096     structure layout are not affected by these options.
8097
8098`-m32-bit'
8099`-m16-bit'
8100`-m8-bit'
8101     Similar to the stack- data- and const-align options above, these
8102     options arrange for stack-frame, writable data and constants to
8103     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
8104     alignment.
8105
8106`-mno-prologue-epilogue'
8107`-mprologue-epilogue'
8108     With `-mno-prologue-epilogue', the normal function prologue and
8109     epilogue that sets up the stack-frame are omitted and no return
8110     instructions or return sequences are generated in the code.  Use
8111     this option only together with visual inspection of the compiled
8112     code: no warnings or errors are generated when call-saved
8113     registers must be saved, or storage for local variable needs to be
8114     allocated.
8115
8116`-mno-gotplt'
8117`-mgotplt'
8118     With `-fpic' and `-fPIC', don't generate (do generate) instruction
8119     sequences that load addresses for functions from the PLT part of
8120     the GOT rather than (traditional on other architectures) calls to
8121     the PLT.  The default is `-mgotplt'.
8122
8123`-maout'
8124     Legacy no-op option only recognized with the cris-axis-aout target.
8125
8126`-melf'
8127     Legacy no-op option only recognized with the cris-axis-elf and
8128     cris-axis-linux-gnu targets.
8129
8130`-melinux'
8131     Only recognized with the cris-axis-aout target, where it selects a
8132     GNU/linux-like multilib, include files and instruction set for
8133     `-march=v8'.
8134
8135`-mlinux'
8136     Legacy no-op option only recognized with the cris-axis-linux-gnu
8137     target.
8138
8139`-sim'
8140     This option, recognized for the cris-axis-aout and cris-axis-elf
8141     arranges to link with input-output functions from a simulator
8142     library.  Code, initialized data and zero-initialized data are
8143     allocated consecutively.
8144
8145`-sim2'
8146     Like `-sim', but pass linker options to locate initialized data at
8147     0x40000000 and zero-initialized data at 0x80000000.
8148
8149
8150File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
8151
81523.17.6 CRX Options
8153------------------
8154
8155These options are defined specifically for the CRX ports.
8156
8157`-mmac'
8158     Enable the use of multiply-accumulate instructions. Disabled by
8159     default.
8160
8161`-mpush-args'
8162     Push instructions will be used to pass outgoing arguments when
8163     functions are called. Enabled by default.
8164
8165
8166File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
8167
81683.17.7 Darwin Options
8169---------------------
8170
8171These options are defined for all architectures running the Darwin
8172operating system.
8173
8174 FSF GCC on Darwin does not create "fat" object files; it will create
8175an object file for the single architecture that it was built to target.
8176Apple's GCC on Darwin does create "fat" files if multiple `-arch'
8177options are used; it does so by running the compiler or linker multiple
8178times and joining the results together with `lipo'.
8179
8180 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
8181is determined by the flags that specify the ISA that GCC is targetting,
8182like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
8183used to override this.
8184
8185 The Darwin tools vary in their behavior when presented with an ISA
8186mismatch.  The assembler, `as', will only permit instructions to be
8187used that are valid for the subtype of the file it is generating, so
8188you cannot put 64-bit instructions in an `ppc750' object file.  The
8189linker for shared libraries, `/usr/bin/libtool', will fail and print an
8190error if asked to create a shared library with a less restrictive
8191subtype than its input files (for instance, trying to put a `ppc970'
8192object file in a `ppc7400' library).  The linker for executables, `ld',
8193will quietly give the executable the most restrictive subtype of any of
8194its input files.
8195
8196`-FDIR'
8197     Add the framework directory DIR to the head of the list of
8198     directories to be searched for header files.  These directories are
8199     interleaved with those specified by `-I' options and are scanned
8200     in a left-to-right order.
8201
8202     A framework directory is a directory with frameworks in it.  A
8203     framework is a directory with a `"Headers"' and/or
8204     `"PrivateHeaders"' directory contained directly in it that ends in
8205     `".framework"'.  The name of a framework is the name of this
8206     directory excluding the `".framework"'.  Headers associated with
8207     the framework are found in one of those two directories, with
8208     `"Headers"' being searched first.  A subframework is a framework
8209     directory that is in a framework's `"Frameworks"' directory.
8210     Includes of subframework headers can only appear in a header of a
8211     framework that contains the subframework, or in a sibling
8212     subframework header.  Two subframeworks are siblings if they occur
8213     in the same framework.  A subframework should not have the same
8214     name as a framework, a warning will be issued if this is violated.
8215     Currently a subframework cannot have subframeworks, in the
8216     future, the mechanism may be extended to support this.  The
8217     standard frameworks can be found in `"/System/Library/Frameworks"'
8218     and `"/Library/Frameworks"'.  An example include looks like
8219     `#include <Framework/header.h>', where `Framework' denotes the
8220     name of the framework and header.h is found in the
8221     `"PrivateHeaders"' or `"Headers"' directory.
8222
8223`-gused'
8224     Emit debugging information for symbols that are used.  For STABS
8225     debugging format, this enables `-feliminate-unused-debug-symbols'.
8226     This is by default ON.
8227
8228`-gfull'
8229     Emit debugging information for all symbols and types.
8230
8231`-mmacosx-version-min=VERSION'
8232     The earliest version of MacOS X that this executable will run on
8233     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
8234     `10.3.9'.
8235
8236     The default for this option is to make choices that seem to be most
8237     useful.
8238
8239`-mkernel'
8240     Enable kernel development mode.  The `-mkernel' option sets
8241     `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
8242     `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
8243     `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
8244     `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
8245     targets.
8246
8247`-mone-byte-bool'
8248     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
8249     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
8250     and `1' when compiling for Darwin/x86, so this option has no
8251     effect on x86.
8252
8253     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
8254     code that is not binary compatible with code generated without
8255     that switch.  Using this switch may require recompiling all other
8256     modules in a program, including system libraries.  Use this switch
8257     to conform to a non-default data model.
8258
8259`-mfix-and-continue'
8260`-ffix-and-continue'
8261`-findirect-data'
8262     Generate code suitable for fast turn around development.  Needed to
8263     enable gdb to dynamically load `.o' files into already running
8264     programs.  `-findirect-data' and `-ffix-and-continue' are provided
8265     for backwards compatibility.
8266
8267`-all_load'
8268     Loads all members of static archive libraries.  See man ld(1) for
8269     more information.
8270
8271`-arch_errors_fatal'
8272     Cause the errors having to do with files that have the wrong
8273     architecture to be fatal.
8274
8275`-bind_at_load'
8276     Causes the output file to be marked such that the dynamic linker
8277     will bind all undefined references when the file is loaded or
8278     launched.
8279
8280`-bundle'
8281     Produce a Mach-o bundle format file.  See man ld(1) for more
8282     information.
8283
8284`-bundle_loader EXECUTABLE'
8285     This option specifies the EXECUTABLE that will be loading the build
8286     output file being linked.  See man ld(1) for more information.
8287
8288`-dynamiclib'
8289     When passed this option, GCC will produce a dynamic library
8290     instead of an executable when linking, using the Darwin `libtool'
8291     command.
8292
8293`-force_cpusubtype_ALL'
8294     This causes GCC's output file to have the ALL subtype, instead of
8295     one controlled by the `-mcpu' or `-march' option.
8296
8297`-allowable_client  CLIENT_NAME'
8298`-client_name'
8299`-compatibility_version'
8300`-current_version'
8301`-dead_strip'
8302`-dependency-file'
8303`-dylib_file'
8304`-dylinker_install_name'
8305`-dynamic'
8306`-exported_symbols_list'
8307`-filelist'
8308`-flat_namespace'
8309`-force_flat_namespace'
8310`-headerpad_max_install_names'
8311`-image_base'
8312`-init'
8313`-install_name'
8314`-keep_private_externs'
8315`-multi_module'
8316`-multiply_defined'
8317`-multiply_defined_unused'
8318`-noall_load'
8319`-no_dead_strip_inits_and_terms'
8320`-nofixprebinding'
8321`-nomultidefs'
8322`-noprebind'
8323`-noseglinkedit'
8324`-pagezero_size'
8325`-prebind'
8326`-prebind_all_twolevel_modules'
8327`-private_bundle'
8328`-read_only_relocs'
8329`-sectalign'
8330`-sectobjectsymbols'
8331`-whyload'
8332`-seg1addr'
8333`-sectcreate'
8334`-sectobjectsymbols'
8335`-sectorder'
8336`-segaddr'
8337`-segs_read_only_addr'
8338`-segs_read_write_addr'
8339`-seg_addr_table'
8340`-seg_addr_table_filename'
8341`-seglinkedit'
8342`-segprot'
8343`-segs_read_only_addr'
8344`-segs_read_write_addr'
8345`-single_module'
8346`-static'
8347`-sub_library'
8348`-sub_umbrella'
8349`-twolevel_namespace'
8350`-umbrella'
8351`-undefined'
8352`-unexported_symbols_list'
8353`-weak_reference_mismatches'
8354`-whatsloaded'
8355     These options are passed to the Darwin linker.  The Darwin linker
8356     man page describes them in detail.
8357
8358
8359File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
8360
83613.17.8 DEC Alpha Options
8362------------------------
8363
8364These `-m' options are defined for the DEC Alpha implementations:
8365
8366`-mno-soft-float'
8367`-msoft-float'
8368     Use (do not use) the hardware floating-point instructions for
8369     floating-point operations.  When `-msoft-float' is specified,
8370     functions in `libgcc.a' will be used to perform floating-point
8371     operations.  Unless they are replaced by routines that emulate the
8372     floating-point operations, or compiled in such a way as to call
8373     such emulations routines, these routines will issue floating-point
8374     operations.   If you are compiling for an Alpha without
8375     floating-point operations, you must ensure that the library is
8376     built so as not to call them.
8377
8378     Note that Alpha implementations without floating-point operations
8379     are required to have floating-point registers.
8380
8381`-mfp-reg'
8382`-mno-fp-regs'
8383     Generate code that uses (does not use) the floating-point register
8384     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
8385     register set is not used, floating point operands are passed in
8386     integer registers as if they were integers and floating-point
8387     results are passed in `$0' instead of `$f0'.  This is a
8388     non-standard calling sequence, so any function with a
8389     floating-point argument or return value called by code compiled
8390     with `-mno-fp-regs' must also be compiled with that option.
8391
8392     A typical use of this option is building a kernel that does not
8393     use, and hence need not save and restore, any floating-point
8394     registers.
8395
8396`-mieee'
8397     The Alpha architecture implements floating-point hardware
8398     optimized for maximum performance.  It is mostly compliant with
8399     the IEEE floating point standard.  However, for full compliance,
8400     software assistance is required.  This option generates code fully
8401     IEEE compliant code _except_ that the INEXACT-FLAG is not
8402     maintained (see below).  If this option is turned on, the
8403     preprocessor macro `_IEEE_FP' is defined during compilation.  The
8404     resulting code is less efficient but is able to correctly support
8405     denormalized numbers and exceptional IEEE values such as
8406     not-a-number and plus/minus infinity.  Other Alpha compilers call
8407     this option `-ieee_with_no_inexact'.
8408
8409`-mieee-with-inexact'
8410     This is like `-mieee' except the generated code also maintains the
8411     IEEE INEXACT-FLAG.  Turning on this option causes the generated
8412     code to implement fully-compliant IEEE math.  In addition to
8413     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
8414     On some Alpha implementations the resulting code may execute
8415     significantly slower than the code generated by default.  Since
8416     there is very little code that depends on the INEXACT-FLAG, you
8417     should normally not specify this option.  Other Alpha compilers
8418     call this option `-ieee_with_inexact'.
8419
8420`-mfp-trap-mode=TRAP-MODE'
8421     This option controls what floating-point related traps are enabled.
8422     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
8423     trap mode can be set to one of four values:
8424
8425    `n'
8426          This is the default (normal) setting.  The only traps that
8427          are enabled are the ones that cannot be disabled in software
8428          (e.g., division by zero trap).
8429
8430    `u'
8431          In addition to the traps enabled by `n', underflow traps are
8432          enabled as well.
8433
8434    `su'
8435          Like `u', but the instructions are marked to be safe for
8436          software completion (see Alpha architecture manual for
8437          details).
8438
8439    `sui'
8440          Like `su', but inexact traps are enabled as well.
8441
8442`-mfp-rounding-mode=ROUNDING-MODE'
8443     Selects the IEEE rounding mode.  Other Alpha compilers call this
8444     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
8445
8446    `n'
8447          Normal IEEE rounding mode.  Floating point numbers are
8448          rounded towards the nearest machine number or towards the
8449          even machine number in case of a tie.
8450
8451    `m'
8452          Round towards minus infinity.
8453
8454    `c'
8455          Chopped rounding mode.  Floating point numbers are rounded
8456          towards zero.
8457
8458    `d'
8459          Dynamic rounding mode.  A field in the floating point control
8460          register (FPCR, see Alpha architecture reference manual)
8461          controls the rounding mode in effect.  The C library
8462          initializes this register for rounding towards plus infinity.
8463          Thus, unless your program modifies the FPCR, `d' corresponds
8464          to round towards plus infinity.
8465
8466`-mtrap-precision=TRAP-PRECISION'
8467     In the Alpha architecture, floating point traps are imprecise.
8468     This means without software assistance it is impossible to recover
8469     from a floating trap and program execution normally needs to be
8470     terminated.  GCC can generate code that can assist operating
8471     system trap handlers in determining the exact location that caused
8472     a floating point trap.  Depending on the requirements of an
8473     application, different levels of precisions can be selected:
8474
8475    `p'
8476          Program precision.  This option is the default and means a
8477          trap handler can only identify which program caused a
8478          floating point exception.
8479
8480    `f'
8481          Function precision.  The trap handler can determine the
8482          function that caused a floating point exception.
8483
8484    `i'
8485          Instruction precision.  The trap handler can determine the
8486          exact instruction that caused a floating point exception.
8487
8488     Other Alpha compilers provide the equivalent options called
8489     `-scope_safe' and `-resumption_safe'.
8490
8491`-mieee-conformant'
8492     This option marks the generated code as IEEE conformant.  You must
8493     not use this option unless you also specify `-mtrap-precision=i'
8494     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
8495     effect is to emit the line `.eflag 48' in the function prologue of
8496     the generated assembly file.  Under DEC Unix, this has the effect
8497     that IEEE-conformant math library routines will be linked in.
8498
8499`-mbuild-constants'
8500     Normally GCC examines a 32- or 64-bit integer constant to see if
8501     it can construct it from smaller constants in two or three
8502     instructions.  If it cannot, it will output the constant as a
8503     literal and generate code to load it from the data segment at
8504     runtime.
8505
8506     Use this option to require GCC to construct _all_ integer constants
8507     using code, even if it takes more instructions (the maximum is
8508     six).
8509
8510     You would typically use this option to build a shared library
8511     dynamic loader.  Itself a shared library, it must relocate itself
8512     in memory before it can find the variables and constants in its
8513     own data segment.
8514
8515`-malpha-as'
8516`-mgas'
8517     Select whether to generate code to be assembled by the
8518     vendor-supplied assembler (`-malpha-as') or by the GNU assembler
8519     `-mgas'.
8520
8521`-mbwx'
8522`-mno-bwx'
8523`-mcix'
8524`-mno-cix'
8525`-mfix'
8526`-mno-fix'
8527`-mmax'
8528`-mno-max'
8529     Indicate whether GCC should generate code to use the optional BWX,
8530     CIX, FIX and MAX instruction sets.  The default is to use the
8531     instruction sets supported by the CPU type specified via `-mcpu='
8532     option or that of the CPU on which GCC was built if none was
8533     specified.
8534
8535`-mfloat-vax'
8536`-mfloat-ieee'
8537     Generate code that uses (does not use) VAX F and G floating point
8538     arithmetic instead of IEEE single and double precision.
8539
8540`-mexplicit-relocs'
8541`-mno-explicit-relocs'
8542     Older Alpha assemblers provided no way to generate symbol
8543     relocations except via assembler macros.  Use of these macros does
8544     not allow optimal instruction scheduling.  GNU binutils as of
8545     version 2.12 supports a new syntax that allows the compiler to
8546     explicitly mark which relocations should apply to which
8547     instructions.  This option is mostly useful for debugging, as GCC
8548     detects the capabilities of the assembler when it is built and
8549     sets the default accordingly.
8550
8551`-msmall-data'
8552`-mlarge-data'
8553     When `-mexplicit-relocs' is in effect, static data is accessed via
8554     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
8555     bytes long or smaller are placed in a "small data area" (the
8556     `.sdata' and `.sbss' sections) and are accessed via 16-bit
8557     relocations off of the `$gp' register.  This limits the size of
8558     the small data area to 64KB, but allows the variables to be
8559     directly accessed via a single instruction.
8560
8561     The default is `-mlarge-data'.  With this option the data area is
8562     limited to just below 2GB.  Programs that require more than 2GB of
8563     data must use `malloc' or `mmap' to allocate the data in the heap
8564     instead of in the program's data segment.
8565
8566     When generating code for shared libraries, `-fpic' implies
8567     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
8568
8569`-msmall-text'
8570`-mlarge-text'
8571     When `-msmall-text' is used, the compiler assumes that the code of
8572     the entire program (or shared library) fits in 4MB, and is thus
8573     reachable with a branch instruction.  When `-msmall-data' is used,
8574     the compiler can assume that all local symbols share the same
8575     `$gp' value, and thus reduce the number of instructions required
8576     for a function call from 4 to 1.
8577
8578     The default is `-mlarge-text'.
8579
8580`-mcpu=CPU_TYPE'
8581     Set the instruction set and instruction scheduling parameters for
8582     machine type CPU_TYPE.  You can specify either the `EV' style name
8583     or the corresponding chip number.  GCC supports scheduling
8584     parameters for the EV4, EV5 and EV6 family of processors and will
8585     choose the default values for the instruction set from the
8586     processor you specify.  If you do not specify a processor type,
8587     GCC will default to the processor on which the compiler was built.
8588
8589     Supported values for CPU_TYPE are
8590
8591    `ev4'
8592    `ev45'
8593    `21064'
8594          Schedules as an EV4 and has no instruction set extensions.
8595
8596    `ev5'
8597    `21164'
8598          Schedules as an EV5 and has no instruction set extensions.
8599
8600    `ev56'
8601    `21164a'
8602          Schedules as an EV5 and supports the BWX extension.
8603
8604    `pca56'
8605    `21164pc'
8606    `21164PC'
8607          Schedules as an EV5 and supports the BWX and MAX extensions.
8608
8609    `ev6'
8610    `21264'
8611          Schedules as an EV6 and supports the BWX, FIX, and MAX
8612          extensions.
8613
8614    `ev67'
8615    `21264a'
8616          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8617          extensions.
8618
8619`-mtune=CPU_TYPE'
8620     Set only the instruction scheduling parameters for machine type
8621     CPU_TYPE.  The instruction set is not changed.
8622
8623`-mmemory-latency=TIME'
8624     Sets the latency the scheduler should assume for typical memory
8625     references as seen by the application.  This number is highly
8626     dependent on the memory access patterns used by the application
8627     and the size of the external cache on the machine.
8628
8629     Valid options for TIME are
8630
8631    `NUMBER'
8632          A decimal number representing clock cycles.
8633
8634    `L1'
8635    `L2'
8636    `L3'
8637    `main'
8638          The compiler contains estimates of the number of clock cycles
8639          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8640          (also called Dcache, Scache, and Bcache), as well as to main
8641          memory.  Note that L3 is only valid for EV5.
8642
8643
8644
8645File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
8646
86473.17.9 DEC Alpha/VMS Options
8648----------------------------
8649
8650These `-m' options are defined for the DEC Alpha/VMS implementations:
8651
8652`-mvms-return-codes'
8653     Return VMS condition codes from main.  The default is to return
8654     POSIX style condition (e.g. error) codes.
8655
8656
8657File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
8658
86593.17.10 FRV Options
8660-------------------
8661
8662`-mgpr-32'
8663     Only use the first 32 general purpose registers.
8664
8665`-mgpr-64'
8666     Use all 64 general purpose registers.
8667
8668`-mfpr-32'
8669     Use only the first 32 floating point registers.
8670
8671`-mfpr-64'
8672     Use all 64 floating point registers
8673
8674`-mhard-float'
8675     Use hardware instructions for floating point operations.
8676
8677`-msoft-float'
8678     Use library routines for floating point operations.
8679
8680`-malloc-cc'
8681     Dynamically allocate condition code registers.
8682
8683`-mfixed-cc'
8684     Do not try to dynamically allocate condition code registers, only
8685     use `icc0' and `fcc0'.
8686
8687`-mdword'
8688     Change ABI to use double word insns.
8689
8690`-mno-dword'
8691     Do not use double word instructions.
8692
8693`-mdouble'
8694     Use floating point double instructions.
8695
8696`-mno-double'
8697     Do not use floating point double instructions.
8698
8699`-mmedia'
8700     Use media instructions.
8701
8702`-mno-media'
8703     Do not use media instructions.
8704
8705`-mmuladd'
8706     Use multiply and add/subtract instructions.
8707
8708`-mno-muladd'
8709     Do not use multiply and add/subtract instructions.
8710
8711`-mfdpic'
8712     Select the FDPIC ABI, that uses function descriptors to represent
8713     pointers to functions.  Without any PIC/PIE-related options, it
8714     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
8715     and small data are within a 12-bit range from the GOT base
8716     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
8717     bits.
8718
8719`-minline-plt'
8720     Enable inlining of PLT entries in function calls to functions that
8721     are not known to bind locally.  It has no effect without `-mfdpic'.
8722     It's enabled by default if optimizing for speed and compiling for
8723     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
8724     optimization option such as `-O3' or above is present in the
8725     command line.
8726
8727`-mTLS'
8728     Assume a large TLS segment when generating thread-local code.
8729
8730`-mtls'
8731     Do not assume a large TLS segment when generating thread-local
8732     code.
8733
8734`-mgprel-ro'
8735     Enable the use of `GPREL' relocations in the FDPIC ABI for data
8736     that is known to be in read-only sections.  It's enabled by
8737     default, except for `-fpic' or `-fpie': even though it may help
8738     make the global offset table smaller, it trades 1 instruction for
8739     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
8740     of which may be shared by multiple symbols, and it avoids the need
8741     for a GOT entry for the referenced symbol, so it's more likely to
8742     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
8743
8744`-multilib-library-pic'
8745     Link with the (library, not FD) pic libraries.  It's implied by
8746     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
8747     `-mfdpic'.  You should never have to use it explicitly.
8748
8749`-mlinked-fp'
8750     Follow the EABI requirement of always creating a frame pointer
8751     whenever a stack frame is allocated.  This option is enabled by
8752     default and can be disabled with `-mno-linked-fp'.
8753
8754`-mlong-calls'
8755     Use indirect addressing to call functions outside the current
8756     compilation unit.  This allows the functions to be placed anywhere
8757     within the 32-bit address space.
8758
8759`-malign-labels'
8760     Try to align labels to an 8-byte boundary by inserting nops into
8761     the previous packet.  This option only has an effect when VLIW
8762     packing is enabled.  It doesn't create new packets; it merely adds
8763     nops to existing ones.
8764
8765`-mlibrary-pic'
8766     Generate position-independent EABI code.
8767
8768`-macc-4'
8769     Use only the first four media accumulator registers.
8770
8771`-macc-8'
8772     Use all eight media accumulator registers.
8773
8774`-mpack'
8775     Pack VLIW instructions.
8776
8777`-mno-pack'
8778     Do not pack VLIW instructions.
8779
8780`-mno-eflags'
8781     Do not mark ABI switches in e_flags.
8782
8783`-mcond-move'
8784     Enable the use of conditional-move instructions (default).
8785
8786     This switch is mainly for debugging the compiler and will likely
8787     be removed in a future version.
8788
8789`-mno-cond-move'
8790     Disable the use of conditional-move instructions.
8791
8792     This switch is mainly for debugging the compiler and will likely
8793     be removed in a future version.
8794
8795`-mscc'
8796     Enable the use of conditional set instructions (default).
8797
8798     This switch is mainly for debugging the compiler and will likely
8799     be removed in a future version.
8800
8801`-mno-scc'
8802     Disable the use of conditional set instructions.
8803
8804     This switch is mainly for debugging the compiler and will likely
8805     be removed in a future version.
8806
8807`-mcond-exec'
8808     Enable the use of conditional execution (default).
8809
8810     This switch is mainly for debugging the compiler and will likely
8811     be removed in a future version.
8812
8813`-mno-cond-exec'
8814     Disable the use of conditional execution.
8815
8816     This switch is mainly for debugging the compiler and will likely
8817     be removed in a future version.
8818
8819`-mvliw-branch'
8820     Run a pass to pack branches into VLIW instructions (default).
8821
8822     This switch is mainly for debugging the compiler and will likely
8823     be removed in a future version.
8824
8825`-mno-vliw-branch'
8826     Do not run a pass to pack branches into VLIW instructions.
8827
8828     This switch is mainly for debugging the compiler and will likely
8829     be removed in a future version.
8830
8831`-mmulti-cond-exec'
8832     Enable optimization of `&&' and `||' in conditional execution
8833     (default).
8834
8835     This switch is mainly for debugging the compiler and will likely
8836     be removed in a future version.
8837
8838`-mno-multi-cond-exec'
8839     Disable optimization of `&&' and `||' in conditional execution.
8840
8841     This switch is mainly for debugging the compiler and will likely
8842     be removed in a future version.
8843
8844`-mnested-cond-exec'
8845     Enable nested conditional execution optimizations (default).
8846
8847     This switch is mainly for debugging the compiler and will likely
8848     be removed in a future version.
8849
8850`-mno-nested-cond-exec'
8851     Disable nested conditional execution optimizations.
8852
8853     This switch is mainly for debugging the compiler and will likely
8854     be removed in a future version.
8855
8856`-moptimize-membar'
8857     This switch removes redundant `membar' instructions from the
8858     compiler generated code.  It is enabled by default.
8859
8860`-mno-optimize-membar'
8861     This switch disables the automatic removal of redundant `membar'
8862     instructions from the generated code.
8863
8864`-mtomcat-stats'
8865     Cause gas to print out tomcat statistics.
8866
8867`-mcpu=CPU'
8868     Select the processor type for which to generate code.  Possible
8869     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
8870     `fr400', `fr300' and `simple'.
8871
8872
8873
8874File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
8875
88763.17.11 GNU/Linux Options
8877-------------------------
8878
8879These `-m' options are defined for GNU/Linux targets:
8880
8881`-mglibc'
8882     Use the GNU C library instead of uClibc.  This is the default
8883     except on `*-*-linux-*uclibc*' targets.
8884
8885`-muclibc'
8886     Use uClibc instead of the GNU C library.  This is the default on
8887     `*-*-linux-*uclibc*' targets.
8888
8889
8890File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
8891
88923.17.12 H8/300 Options
8893----------------------
8894
8895These `-m' options are defined for the H8/300 implementations:
8896
8897`-mrelax'
8898     Shorten some address references at link time, when possible; uses
8899     the linker option `-relax'.  *Note `ld' and the H8/300:
8900     (ld)H8/300, for a fuller description.
8901
8902`-mh'
8903     Generate code for the H8/300H.
8904
8905`-ms'
8906     Generate code for the H8S.
8907
8908`-mn'
8909     Generate code for the H8S and H8/300H in the normal mode.  This
8910     switch must be used either with `-mh' or `-ms'.
8911
8912`-ms2600'
8913     Generate code for the H8S/2600.  This switch must be used with
8914     `-ms'.
8915
8916`-mint32'
8917     Make `int' data 32 bits by default.
8918
8919`-malign-300'
8920     On the H8/300H and H8S, use the same alignment rules as for the
8921     H8/300.  The default for the H8/300H and H8S is to align longs and
8922     floats on 4 byte boundaries.  `-malign-300' causes them to be
8923     aligned on 2 byte boundaries.  This option has no effect on the
8924     H8/300.
8925
8926
8927File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
8928
89293.17.13 HPPA Options
8930--------------------
8931
8932These `-m' options are defined for the HPPA family of computers:
8933
8934`-march=ARCHITECTURE-TYPE'
8935     Generate code for the specified architecture.  The choices for
8936     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
8937     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
8938     an HP-UX system to determine the proper architecture option for
8939     your machine.  Code compiled for lower numbered architectures will
8940     run on higher numbered architectures, but not the other way around.
8941
8942`-mpa-risc-1-0'
8943`-mpa-risc-1-1'
8944`-mpa-risc-2-0'
8945     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
8946     respectively.
8947
8948`-mbig-switch'
8949     Generate code suitable for big switch tables.  Use this option
8950     only if the assembler/linker complain about out of range branches
8951     within a switch table.
8952
8953`-mjump-in-delay'
8954     Fill delay slots of function calls with unconditional jump
8955     instructions by modifying the return pointer for the function call
8956     to be the target of the conditional jump.
8957
8958`-mdisable-fpregs'
8959     Prevent floating point registers from being used in any manner.
8960     This is necessary for compiling kernels which perform lazy context
8961     switching of floating point registers.  If you use this option and
8962     attempt to perform floating point operations, the compiler will
8963     abort.
8964
8965`-mdisable-indexing'
8966     Prevent the compiler from using indexing address modes.  This
8967     avoids some rather obscure problems when compiling MIG generated
8968     code under MACH.
8969
8970`-mno-space-regs'
8971     Generate code that assumes the target has no space registers.
8972     This allows GCC to generate faster indirect calls and use unscaled
8973     index address modes.
8974
8975     Such code is suitable for level 0 PA systems and kernels.
8976
8977`-mfast-indirect-calls'
8978     Generate code that assumes calls never cross space boundaries.
8979     This allows GCC to emit code which performs faster indirect calls.
8980
8981     This option will not work in the presence of shared libraries or
8982     nested functions.
8983
8984`-mfixed-range=REGISTER-RANGE'
8985     Generate code treating the given register range as fixed registers.
8986     A fixed register is one that the register allocator can not use.
8987     This is useful when compiling kernel code.  A register range is
8988     specified as two registers separated by a dash.  Multiple register
8989     ranges can be specified separated by a comma.
8990
8991`-mlong-load-store'
8992     Generate 3-instruction load and store sequences as sometimes
8993     required by the HP-UX 10 linker.  This is equivalent to the `+k'
8994     option to the HP compilers.
8995
8996`-mportable-runtime'
8997     Use the portable calling conventions proposed by HP for ELF
8998     systems.
8999
9000`-mgas'
9001     Enable the use of assembler directives only GAS understands.
9002
9003`-mschedule=CPU-TYPE'
9004     Schedule code according to the constraints for the machine type
9005     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
9006     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
9007     HP-UX system to determine the proper scheduling option for your
9008     machine.  The default scheduling is `8000'.
9009
9010`-mlinker-opt'
9011     Enable the optimization pass in the HP-UX linker.  Note this makes
9012     symbolic debugging impossible.  It also triggers a bug in the
9013     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
9014     messages when linking some programs.
9015
9016`-msoft-float'
9017     Generate output containing library calls for floating point.
9018     *Warning:* the requisite libraries are not available for all HPPA
9019     targets.  Normally the facilities of the machine's usual C
9020     compiler are used, but this cannot be done directly in
9021     cross-compilation.  You must make your own arrangements to provide
9022     suitable library functions for cross-compilation.  The embedded
9023     target `hppa1.1-*-pro' does provide software floating point
9024     support.
9025
9026     `-msoft-float' changes the calling convention in the output file;
9027     therefore, it is only useful if you compile _all_ of a program with
9028     this option.  In particular, you need to compile `libgcc.a', the
9029     library that comes with GCC, with `-msoft-float' in order for this
9030     to work.
9031
9032`-msio'
9033     Generate the predefine, `_SIO', for server IO.  The default is
9034     `-mwsio'.  This generates the predefines, `__hp9000s700',
9035     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
9036     are available under HP-UX and HI-UX.
9037
9038`-mgnu-ld'
9039     Use GNU ld specific options.  This passes `-shared' to ld when
9040     building a shared library.  It is the default when GCC is
9041     configured, explicitly or implicitly, with the GNU linker.  This
9042     option does not have any affect on which ld is called, it only
9043     changes what parameters are passed to that ld.  The ld that is
9044     called is determined by the `--with-ld' configure option, GCC's
9045     program search path, and finally by the user's `PATH'.  The linker
9046     used by GCC can be printed using `which `gcc
9047     -print-prog-name=ld`'.  This option is only available on the 64
9048     bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
9049
9050`-mhp-ld'
9051     Use HP ld specific options.  This passes `-b' to ld when building
9052     a shared library and passes `+Accept TypeMismatch' to ld on all
9053     links.  It is the default when GCC is configured, explicitly or
9054     implicitly, with the HP linker.  This option does not have any
9055     affect on which ld is called, it only changes what parameters are
9056     passed to that ld.  The ld that is called is determined by the
9057     `--with-ld' configure option, GCC's program search path, and
9058     finally by the user's `PATH'.  The linker used by GCC can be
9059     printed using `which `gcc -print-prog-name=ld`'.  This option is
9060     only available on the 64 bit HP-UX GCC, i.e. configured with
9061     `hppa*64*-*-hpux*'.
9062
9063`-mlong-calls'
9064     Generate code that uses long call sequences.  This ensures that a
9065     call is always able to reach linker generated stubs.  The default
9066     is to generate long calls only when the distance from the call
9067     site to the beginning of the function or translation unit, as the
9068     case may be, exceeds a predefined limit set by the branch type
9069     being used.  The limits for normal calls are 7,600,000 and 240,000
9070     bytes, respectively for the PA 2.0 and PA 1.X architectures.
9071     Sibcalls are always limited at 240,000 bytes.
9072
9073     Distances are measured from the beginning of functions when using
9074     the `-ffunction-sections' option, or when using the `-mgas' and
9075     `-mno-portable-runtime' options together under HP-UX with the SOM
9076     linker.
9077
9078     It is normally not desirable to use this option as it will degrade
9079     performance.  However, it may be useful in large applications,
9080     particularly when partial linking is used to build the application.
9081
9082     The types of long calls used depends on the capabilities of the
9083     assembler and linker, and the type of code being generated.  The
9084     impact on systems that support long absolute calls, and long pic
9085     symbol-difference or pc-relative calls should be relatively small.
9086     However, an indirect call is used on 32-bit ELF systems in pic code
9087     and it is quite long.
9088
9089`-munix=UNIX-STD'
9090     Generate compiler predefines and select a startfile for the
9091     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
9092     and `98'.  `93' is supported on all HP-UX versions.  `95' is
9093     available on HP-UX 10.10 and later.  `98' is available on HP-UX
9094     11.11 and later.  The default values are `93' for HP-UX 10.00,
9095     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
9096     later.
9097
9098     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
9099     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
9100     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
9101     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
9102     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
9103     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
9104
9105     It is _important_ to note that this option changes the interfaces
9106     for various library routines.  It also affects the operational
9107     behavior of the C library.  Thus, _extreme_ care is needed in
9108     using this option.
9109
9110     Library code that is intended to operate with more than one UNIX
9111     standard must test, set and restore the variable
9112     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
9113     provide this capability.
9114
9115`-nolibdld'
9116     Suppress the generation of link options to search libdld.sl when
9117     the `-static' option is specified on HP-UX 10 and later.
9118
9119`-static'
9120     The HP-UX implementation of setlocale in libc has a dependency on
9121     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9122     when the `-static' option is specified, special link options are
9123     needed to resolve this dependency.
9124
9125     On HP-UX 10 and later, the GCC driver adds the necessary options to
9126     link with libdld.sl when the `-static' option is specified.  This
9127     causes the resulting binary to be dynamic.  On the 64-bit port,
9128     the linkers generate dynamic binaries by default in any case.  The
9129     `-nolibdld' option can be used to prevent the GCC driver from
9130     adding these link options.
9131
9132`-threads'
9133     Add support for multithreading with the "dce thread" library under
9134     HP-UX.  This option sets flags for both the preprocessor and
9135     linker.
9136
9137
9138File: gcc.info,  Node: i386 and x86-64 Options,  Next: IA-64 Options,  Prev: HPPA Options,  Up: Submodel Options
9139
91403.17.14 Intel 386 and AMD x86-64 Options
9141----------------------------------------
9142
9143These `-m' options are defined for the i386 and x86-64 family of
9144computers:
9145
9146`-mtune=CPU-TYPE'
9147     Tune to CPU-TYPE everything applicable about the generated code,
9148     except for the ABI and the set of available instructions.  The
9149     choices for CPU-TYPE are:
9150    _generic_
9151          Produce code optimized for the most common IA32/AMD64/EM64T
9152          processors.  If you know the CPU on which your code will run,
9153          then you should use the corresponding `-mtune' option instead
9154          of `-mtune=generic'.  But, if you do not know exactly what
9155          CPU users of your application will have, then you should use
9156          this option.
9157
9158          As new processors are deployed in the marketplace, the
9159          behavior of this option will change.  Therefore, if you
9160          upgrade to a newer version of GCC, the code generated option
9161          will change to reflect the processors that were most common
9162          when that version of GCC was released.
9163
9164          There is no `-march=generic' option because `-march'
9165          indicates the instruction set the compiler can use, and there
9166          is no generic instruction set applicable to all processors.
9167          In contrast, `-mtune' indicates the processor (or, in this
9168          case, collection of processors) for which the code is
9169          optimized.
9170
9171    _native_
9172          This selects the CPU to tune for at compilation time by
9173          determining the processor type of the compiling machine.
9174          Using `-mtune=native' will produce code optimized for the
9175          local machine under the constraints of the selected
9176          instruction set.  Using `-march=native' will enable all
9177          instruction subsets supported by the local machine (hence the
9178          result might not run on different machines).
9179
9180    _i386_
9181          Original Intel's i386 CPU.
9182
9183    _i486_
9184          Intel's i486 CPU.  (No scheduling is implemented for this
9185          chip.)
9186
9187    _i586, pentium_
9188          Intel Pentium CPU with no MMX support.
9189
9190    _pentium-mmx_
9191          Intel PentiumMMX CPU based on Pentium core with MMX
9192          instruction set support.
9193
9194    _pentiumpro_
9195          Intel PentiumPro CPU.
9196
9197    _i686_
9198          Same as `generic', but when used as `march' option, PentiumPro
9199          instruction set will be used, so the code will run on all
9200          i686 family chips.
9201
9202    _pentium2_
9203          Intel Pentium2 CPU based on PentiumPro core with MMX
9204          instruction set support.
9205
9206    _pentium3, pentium3m_
9207          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
9208          instruction set support.
9209
9210    _pentium-m_
9211          Low power version of Intel Pentium3 CPU with MMX, SSE and
9212          SSE2 instruction set support.  Used by Centrino notebooks.
9213
9214    _pentium4, pentium4m_
9215          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
9216          support.
9217
9218    _prescott_
9219          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
9220          and SSE3 instruction set support.
9221
9222    _nocona_
9223          Improved version of Intel Pentium4 CPU with 64-bit
9224          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
9225
9226    _k6_
9227          AMD K6 CPU with MMX instruction set support.
9228
9229    _k6-2, k6-3_
9230          Improved versions of AMD K6 CPU with MMX and 3dNOW!
9231          instruction set support.
9232
9233    _athlon, athlon-tbird_
9234          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
9235          prefetch instructions support.
9236
9237    _athlon-4, athlon-xp, athlon-mp_
9238          Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
9239          full SSE instruction set support.
9240
9241    _k8, opteron, athlon64, athlon-fx_
9242          AMD K8 core based CPUs with x86-64 instruction set support.
9243          (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
9244          64-bit instruction set extensions.)
9245
9246    _winchip-c6_
9247          IDT Winchip C6 CPU, dealt in same way as i486 with additional
9248          MMX instruction set support.
9249
9250    _winchip2_
9251          IDT Winchip2 CPU, dealt in same way as i486 with additional
9252          MMX and 3dNOW!  instruction set support.
9253
9254    _c3_
9255          Via C3 CPU with MMX and 3dNOW! instruction set support.  (No
9256          scheduling is implemented for this chip.)
9257
9258    _c3-2_
9259          Via C3-2 CPU with MMX and SSE instruction set support.  (No
9260          scheduling is implemented for this chip.)
9261
9262     While picking a specific CPU-TYPE will schedule things
9263     appropriately for that particular chip, the compiler will not
9264     generate any code that does not run on the i386 without the
9265     `-march=CPU-TYPE' option being used.
9266
9267`-march=CPU-TYPE'
9268     Generate instructions for the machine type CPU-TYPE.  The choices
9269     for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
9270     `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
9271
9272`-mcpu=CPU-TYPE'
9273     A deprecated synonym for `-mtune'.
9274
9275`-m386'
9276`-m486'
9277`-mpentium'
9278`-mpentiumpro'
9279     These options are synonyms for `-mtune=i386', `-mtune=i486',
9280     `-mtune=pentium', and `-mtune=pentiumpro' respectively.  These
9281     synonyms are deprecated.
9282
9283`-mfpmath=UNIT'
9284     Generate floating point arithmetics for selected unit UNIT.  The
9285     choices for UNIT are:
9286
9287    `387'
9288          Use the standard 387 floating point coprocessor present
9289          majority of chips and emulated otherwise.  Code compiled with
9290          this option will run almost everywhere.  The temporary
9291          results are computed in 80bit precision instead of precision
9292          specified by the type resulting in slightly different results
9293          compared to most of other chips.  See `-ffloat-store' for
9294          more detailed description.
9295
9296          This is the default choice for i386 compiler.
9297
9298    `sse'
9299          Use scalar floating point instructions present in the SSE
9300          instruction set.  This instruction set is supported by
9301          Pentium3 and newer chips, in the AMD line by Athlon-4,
9302          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
9303          instruction set supports only single precision arithmetics,
9304          thus the double and extended precision arithmetics is still
9305          done using 387.  Later version, present only in Pentium4 and
9306          the future AMD x86-64 chips supports double precision
9307          arithmetics too.
9308
9309          For the i386 compiler, you need to use `-march=CPU-TYPE',
9310          `-msse' or `-msse2' switches to enable SSE extensions and
9311          make this option effective.  For the x86-64 compiler, these
9312          extensions are enabled by default.
9313
9314          The resulting code should be considerably faster in the
9315          majority of cases and avoid the numerical instability
9316          problems of 387 code, but may break some existing code that
9317          expects temporaries to be 80bit.
9318
9319          This is the default choice for the x86-64 compiler.
9320
9321    `sse,387'
9322          Attempt to utilize both instruction sets at once.  This
9323          effectively double the amount of available registers and on
9324          chips with separate execution units for 387 and SSE the
9325          execution resources too.  Use this option with care, as it is
9326          still experimental, because the GCC register allocator does
9327          not model separate functional units well resulting in
9328          instable performance.
9329
9330`-masm=DIALECT'
9331     Output asm instructions using selected DIALECT.  Supported choices
9332     are `intel' or `att' (the default one).  Darwin does not support
9333     `intel'.
9334
9335`-mieee-fp'
9336`-mno-ieee-fp'
9337     Control whether or not the compiler uses IEEE floating point
9338     comparisons.  These handle correctly the case where the result of a
9339     comparison is unordered.
9340
9341`-msoft-float'
9342     Generate output containing library calls for floating point.
9343     *Warning:* the requisite libraries are not part of GCC.  Normally
9344     the facilities of the machine's usual C compiler are used, but
9345     this can't be done directly in cross-compilation.  You must make
9346     your own arrangements to provide suitable library functions for
9347     cross-compilation.
9348
9349     On machines where a function returns floating point results in the
9350     80387 register stack, some floating point opcodes may be emitted
9351     even if `-msoft-float' is used.
9352
9353`-mno-fp-ret-in-387'
9354     Do not use the FPU registers for return values of functions.
9355
9356     The usual calling convention has functions return values of types
9357     `float' and `double' in an FPU register, even if there is no FPU.
9358     The idea is that the operating system should emulate an FPU.
9359
9360     The option `-mno-fp-ret-in-387' causes such values to be returned
9361     in ordinary CPU registers instead.
9362
9363`-mno-fancy-math-387'
9364     Some 387 emulators do not support the `sin', `cos' and `sqrt'
9365     instructions for the 387.  Specify this option to avoid generating
9366     those instructions.  This option is the default on FreeBSD,
9367     OpenBSD and NetBSD.  This option is overridden when `-march'
9368     indicates that the target cpu will always have an FPU and so the
9369     instruction will not need emulation.  As of revision 2.6.1, these
9370     instructions are not generated unless you also use the
9371     `-funsafe-math-optimizations' switch.
9372
9373`-malign-double'
9374`-mno-align-double'
9375     Control whether GCC aligns `double', `long double', and `long
9376     long' variables on a two word boundary or a one word boundary.
9377     Aligning `double' variables on a two word boundary will produce
9378     code that runs somewhat faster on a `Pentium' at the expense of
9379     more memory.
9380
9381     On x86-64, `-malign-double' is enabled by default.
9382
9383     *Warning:* if you use the `-malign-double' switch, structures
9384     containing the above types will be aligned differently than the
9385     published application binary interface specifications for the 386
9386     and will not be binary compatible with structures in code compiled
9387     without that switch.
9388
9389`-m96bit-long-double'
9390`-m128bit-long-double'
9391     These switches control the size of `long double' type.  The i386
9392     application binary interface specifies the size to be 96 bits, so
9393     `-m96bit-long-double' is the default in 32 bit mode.
9394
9395     Modern architectures (Pentium and newer) would prefer `long double'
9396     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
9397     conforming to the ABI, this would not be possible.  So specifying a
9398     `-m128bit-long-double' will align `long double' to a 16 byte
9399     boundary by padding the `long double' with an additional 32 bit
9400     zero.
9401
9402     In the x86-64 compiler, `-m128bit-long-double' is the default
9403     choice as its ABI specifies that `long double' is to be aligned on
9404     16 byte boundary.
9405
9406     Notice that neither of these options enable any extra precision
9407     over the x87 standard of 80 bits for a `long double'.
9408
9409     *Warning:* if you override the default value for your target ABI,
9410     the structures and arrays containing `long double' variables will
9411     change their size as well as function calling convention for
9412     function taking `long double' will be modified.  Hence they will
9413     not be binary compatible with arrays or structures in code
9414     compiled without that switch.
9415
9416`-mmlarge-data-threshold=NUMBER'
9417     When `-mcmodel=medium' is specified, the data greater than
9418     THRESHOLD are placed in large data section.  This value must be the
9419     same across all object linked into the binary and defaults to
9420     65535.
9421
9422`-msvr3-shlib'
9423`-mno-svr3-shlib'
9424     Control whether GCC places uninitialized local variables into the
9425     `bss' or `data' segments.  `-msvr3-shlib' places them into `bss'.
9426     These options are meaningful only on System V Release 3.
9427
9428`-mrtd'
9429     Use a different function-calling convention, in which functions
9430     that take a fixed number of arguments return with the `ret' NUM
9431     instruction, which pops their arguments while returning.  This
9432     saves one instruction in the caller since there is no need to pop
9433     the arguments there.
9434
9435     You can specify that an individual function is called with this
9436     calling sequence with the function attribute `stdcall'.  You can
9437     also override the `-mrtd' option by using the function attribute
9438     `cdecl'.  *Note Function Attributes::.
9439
9440     *Warning:* this calling convention is incompatible with the one
9441     normally used on Unix, so you cannot use it if you need to call
9442     libraries compiled with the Unix compiler.
9443
9444     Also, you must provide function prototypes for all functions that
9445     take variable numbers of arguments (including `printf'); otherwise
9446     incorrect code will be generated for calls to those functions.
9447
9448     In addition, seriously incorrect code will result if you call a
9449     function with too many arguments.  (Normally, extra arguments are
9450     harmlessly ignored.)
9451
9452`-mregparm=NUM'
9453     Control how many registers are used to pass integer arguments.  By
9454     default, no registers are used to pass arguments, and at most 3
9455     registers can be used.  You can control this behavior for a
9456     specific function by using the function attribute `regparm'.
9457     *Note Function Attributes::.
9458
9459     *Warning:* if you use this switch, and NUM is nonzero, then you
9460     must build all modules with the same value, including any
9461     libraries.  This includes the system libraries and startup modules.
9462
9463`-msseregparm'
9464     Use SSE register passing conventions for float and double arguments
9465     and return values.  You can control this behavior for a specific
9466     function by using the function attribute `sseregparm'.  *Note
9467     Function Attributes::.
9468
9469     *Warning:* if you use this switch then you must build all modules
9470     with the same value, including any libraries.  This includes the
9471     system libraries and startup modules.
9472
9473`-mstackrealign'
9474     Realign the stack at entry.  On the Intel x86, the
9475     `-mstackrealign' option will generate an alternate prologue and
9476     epilogue that realigns the runtime stack.  This supports mixing
9477     legacy codes that keep a 4-byte aligned stack with modern codes
9478     that keep a 16-byte stack for SSE compatibility.  The alternate
9479     prologue and epilogue are slower and bigger than the regular ones,
9480     and the alternate prologue requires an extra scratch register;
9481     this lowers the number of registers available if used in
9482     conjunction with the `regparm' attribute.  The `-mstackrealign'
9483     option is incompatible with the nested function prologue; this is
9484     considered a hard error.  See also the attribute
9485     `force_align_arg_pointer', applicable to individual functions.
9486
9487`-mpreferred-stack-boundary=NUM'
9488     Attempt to keep the stack boundary aligned to a 2 raised to NUM
9489     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
9490     the default is 4 (16 bytes or 128 bits).
9491
9492     On Pentium and PentiumPro, `double' and `long double' values
9493     should be aligned to an 8 byte boundary (see `-malign-double') or
9494     suffer significant run time performance penalties.  On Pentium
9495     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
9496     work properly if it is not 16 byte aligned.
9497
9498     To ensure proper alignment of this values on the stack, the stack
9499     boundary must be as aligned as that required by any value stored
9500     on the stack.  Further, every function must be generated such that
9501     it keeps the stack aligned.  Thus calling a function compiled with
9502     a higher preferred stack boundary from a function compiled with a
9503     lower preferred stack boundary will most likely misalign the
9504     stack.  It is recommended that libraries that use callbacks always
9505     use the default setting.
9506
9507     This extra alignment does consume extra stack space, and generally
9508     increases code size.  Code that is sensitive to stack space usage,
9509     such as embedded systems and operating system kernels, may want to
9510     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
9511
9512`-mmmx'
9513`-mno-mmx'
9514
9515`-msse'
9516`-mno-sse'
9517
9518`-msse2'
9519`-mno-sse2'
9520
9521`-msse3'
9522`-mno-sse3'
9523
9524`-m3dnow'
9525`-mno-3dnow'
9526     These switches enable or disable the use of instructions in the
9527     MMX, SSE, SSE2 or 3DNow! extended instruction sets.  These
9528     extensions are also available as built-in functions: see *Note X86
9529     Built-in Functions::, for details of the functions enabled and
9530     disabled by these switches.
9531
9532     To have SSE/SSE2 instructions generated automatically from
9533     floating-point code (as opposed to 387 instructions), see
9534     `-mfpmath=sse'.
9535
9536     These options will enable GCC to use these extended instructions in
9537     generated code, even without `-mfpmath=sse'.  Applications which
9538     perform runtime CPU detection must compile separate files for each
9539     supported architecture, using the appropriate flags.  In
9540     particular, the file containing the CPU detection code should be
9541     compiled without these options.
9542
9543`-mpush-args'
9544`-mno-push-args'
9545     Use PUSH operations to store outgoing parameters.  This method is
9546     shorter and usually equally fast as method using SUB/MOV
9547     operations and is enabled by default.  In some cases disabling it
9548     may improve performance because of improved scheduling and reduced
9549     dependencies.
9550
9551`-maccumulate-outgoing-args'
9552     If enabled, the maximum amount of space required for outgoing
9553     arguments will be computed in the function prologue.  This is
9554     faster on most modern CPUs because of reduced dependencies,
9555     improved scheduling and reduced stack usage when preferred stack
9556     boundary is not equal to 2.  The drawback is a notable increase in
9557     code size.  This switch implies `-mno-push-args'.
9558
9559`-mthreads'
9560     Support thread-safe exception handling on `Mingw32'.  Code that
9561     relies on thread-safe exception handling must compile and link all
9562     code with the `-mthreads' option.  When compiling, `-mthreads'
9563     defines `-D_MT'; when linking, it links in a special thread helper
9564     library `-lmingwthrd' which cleans up per thread exception
9565     handling data.
9566
9567`-mno-align-stringops'
9568     Do not align destination of inlined string operations.  This
9569     switch reduces code size and improves performance in case the
9570     destination is already aligned, but GCC doesn't know about it.
9571
9572`-minline-all-stringops'
9573     By default GCC inlines string operations only when destination is
9574     known to be aligned at least to 4 byte boundary.  This enables
9575     more inlining, increase code size, but may improve performance of
9576     code that depends on fast memcpy, strlen and memset for short
9577     lengths.
9578
9579`-momit-leaf-frame-pointer'
9580     Don't keep the frame pointer in a register for leaf functions.
9581     This avoids the instructions to save, set up and restore frame
9582     pointers and makes an extra register available in leaf functions.
9583     The option `-fomit-frame-pointer' removes the frame pointer for
9584     all functions which might make debugging harder.
9585
9586`-mtls-direct-seg-refs'
9587`-mno-tls-direct-seg-refs'
9588     Controls whether TLS variables may be accessed with offsets from
9589     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
9590     whether the thread base pointer must be added.  Whether or not this
9591     is legal depends on the operating system, and whether it maps the
9592     segment to cover the entire TLS area.
9593
9594     For systems that use GNU libc, the default is on.
9595
9596 These `-m' switches are supported in addition to the above on AMD
9597x86-64 processors in 64-bit environments.
9598
9599`-m32'
9600`-m64'
9601     Generate code for a 32-bit or 64-bit environment.  The 32-bit
9602     environment sets int, long and pointer to 32 bits and generates
9603     code that runs on any i386 system.  The 64-bit environment sets
9604     int to 32 bits and long and pointer to 64 bits and generates code
9605     for AMD's x86-64 architecture. For darwin only the -m64 option
9606     turns off the `-fno-pic' and `-mdynamic-no-pic' options.
9607
9608`-mno-red-zone'
9609     Do not use a so called red zone for x86-64 code.  The red zone is
9610     mandated by the x86-64 ABI, it is a 128-byte area beyond the
9611     location of the stack pointer that will not be modified by signal
9612     or interrupt handlers and therefore can be used for temporary data
9613     without adjusting the stack pointer.  The flag `-mno-red-zone'
9614     disables this red zone.
9615
9616`-mcmodel=small'
9617     Generate code for the small code model: the program and its
9618     symbols must be linked in the lower 2 GB of the address space.
9619     Pointers are 64 bits.  Programs can be statically or dynamically
9620     linked.  This is the default code model.
9621
9622`-mcmodel=kernel'
9623     Generate code for the kernel code model.  The kernel runs in the
9624     negative 2 GB of the address space.  This model has to be used for
9625     Linux kernel code.
9626
9627`-mcmodel=medium'
9628     Generate code for the medium model: The program is linked in the
9629     lower 2 GB of the address space but symbols can be located
9630     anywhere in the address space.  Programs can be statically or
9631     dynamically linked, but building of shared libraries are not
9632     supported with the medium model.
9633
9634`-mcmodel=large'
9635     Generate code for the large model: This model makes no assumptions
9636     about addresses and sizes of sections.  Currently GCC does not
9637     implement this model.
9638
9639
9640File: gcc.info,  Node: IA-64 Options,  Next: M32C Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
9641
96423.17.15 IA-64 Options
9643---------------------
9644
9645These are the `-m' options defined for the Intel IA-64 architecture.
9646
9647`-mbig-endian'
9648     Generate code for a big endian target.  This is the default for
9649     HP-UX.
9650
9651`-mlittle-endian'
9652     Generate code for a little endian target.  This is the default for
9653     AIX5 and GNU/Linux.
9654
9655`-mgnu-as'
9656`-mno-gnu-as'
9657     Generate (or don't) code for the GNU assembler.  This is the
9658     default.
9659
9660`-mgnu-ld'
9661`-mno-gnu-ld'
9662     Generate (or don't) code for the GNU linker.  This is the default.
9663
9664`-mno-pic'
9665     Generate code that does not use a global pointer register.  The
9666     result is not position independent code, and violates the IA-64
9667     ABI.
9668
9669`-mvolatile-asm-stop'
9670`-mno-volatile-asm-stop'
9671     Generate (or don't) a stop bit immediately before and after
9672     volatile asm statements.
9673
9674`-mregister-names'
9675`-mno-register-names'
9676     Generate (or don't) `in', `loc', and `out' register names for the
9677     stacked registers.  This may make assembler output more readable.
9678
9679`-mno-sdata'
9680`-msdata'
9681     Disable (or enable) optimizations that use the small data section.
9682     This may be useful for working around optimizer bugs.
9683
9684`-mconstant-gp'
9685     Generate code that uses a single constant global pointer value.
9686     This is useful when compiling kernel code.
9687
9688`-mauto-pic'
9689     Generate code that is self-relocatable.  This implies
9690     `-mconstant-gp'.  This is useful when compiling firmware code.
9691
9692`-minline-float-divide-min-latency'
9693     Generate code for inline divides of floating point values using
9694     the minimum latency algorithm.
9695
9696`-minline-float-divide-max-throughput'
9697     Generate code for inline divides of floating point values using
9698     the maximum throughput algorithm.
9699
9700`-minline-int-divide-min-latency'
9701     Generate code for inline divides of integer values using the
9702     minimum latency algorithm.
9703
9704`-minline-int-divide-max-throughput'
9705     Generate code for inline divides of integer values using the
9706     maximum throughput algorithm.
9707
9708`-minline-sqrt-min-latency'
9709     Generate code for inline square roots using the minimum latency
9710     algorithm.
9711
9712`-minline-sqrt-max-throughput'
9713     Generate code for inline square roots using the maximum throughput
9714     algorithm.
9715
9716`-mno-dwarf2-asm'
9717`-mdwarf2-asm'
9718     Don't (or do) generate assembler code for the DWARF2 line number
9719     debugging info.  This may be useful when not using the GNU
9720     assembler.
9721
9722`-mearly-stop-bits'
9723`-mno-early-stop-bits'
9724     Allow stop bits to be placed earlier than immediately preceding the
9725     instruction that triggered the stop bit.  This can improve
9726     instruction scheduling, but does not always do so.
9727
9728`-mfixed-range=REGISTER-RANGE'
9729     Generate code treating the given register range as fixed registers.
9730     A fixed register is one that the register allocator can not use.
9731     This is useful when compiling kernel code.  A register range is
9732     specified as two registers separated by a dash.  Multiple register
9733     ranges can be specified separated by a comma.
9734
9735`-mtls-size=TLS-SIZE'
9736     Specify bit size of immediate TLS offsets.  Valid values are 14,
9737     22, and 64.
9738
9739`-mtune=CPU-TYPE'
9740     Tune the instruction scheduling for a particular CPU, Valid values
9741     are itanium, itanium1, merced, itanium2, and mckinley.
9742
9743`-mt'
9744`-pthread'
9745     Add support for multithreading using the POSIX threads library.
9746     This option sets flags for both the preprocessor and linker.  It
9747     does not affect the thread safety of object code produced by the
9748     compiler or that of libraries supplied with it.  These are HP-UX
9749     specific flags.
9750
9751`-milp32'
9752`-mlp64'
9753     Generate code for a 32-bit or 64-bit environment.  The 32-bit
9754     environment sets int, long and pointer to 32 bits.  The 64-bit
9755     environment sets int to 32 bits and long and pointer to 64 bits.
9756     These are HP-UX specific flags.
9757
9758`-mno-sched-br-data-spec'
9759`-msched-br-data-spec'
9760     (Dis/En)able data speculative scheduling before reload.  This will
9761     result in generation of the ld.a instructions and the
9762     corresponding check instructions (ld.c / chk.a).  The default is
9763     'disable'.
9764
9765`-msched-ar-data-spec'
9766`-mno-sched-ar-data-spec'
9767     (En/Dis)able data speculative scheduling after reload.  This will
9768     result in generation of the ld.a instructions and the
9769     corresponding check instructions (ld.c / chk.a).  The default is
9770     'enable'.
9771
9772`-mno-sched-control-spec'
9773`-msched-control-spec'
9774     (Dis/En)able control speculative scheduling.  This feature is
9775     available only during region scheduling (i.e. before reload).
9776     This will result in generation of the ld.s instructions and the
9777     corresponding check instructions chk.s .  The default is 'disable'.
9778
9779`-msched-br-in-data-spec'
9780`-mno-sched-br-in-data-spec'
9781     (En/Dis)able speculative scheduling of the instructions that are
9782     dependent on the data speculative loads before reload.  This is
9783     effective only with `-msched-br-data-spec' enabled.  The default
9784     is 'enable'.
9785
9786`-msched-ar-in-data-spec'
9787`-mno-sched-ar-in-data-spec'
9788     (En/Dis)able speculative scheduling of the instructions that are
9789     dependent on the data speculative loads after reload.  This is
9790     effective only with `-msched-ar-data-spec' enabled.  The default
9791     is 'enable'.
9792
9793`-msched-in-control-spec'
9794`-mno-sched-in-control-spec'
9795     (En/Dis)able speculative scheduling of the instructions that are
9796     dependent on the control speculative loads.  This is effective
9797     only with `-msched-control-spec' enabled.  The default is 'enable'.
9798
9799`-msched-ldc'
9800`-mno-sched-ldc'
9801     (En/Dis)able use of simple data speculation checks ld.c .  If
9802     disabled, only chk.a instructions will be emitted to check data
9803     speculative loads.  The default is 'enable'.
9804
9805`-mno-sched-control-ldc'
9806`-msched-control-ldc'
9807     (Dis/En)able use of ld.c instructions to check control speculative
9808     loads.  If enabled, in case of control speculative load with no
9809     speculatively scheduled dependent instructions this load will be
9810     emitted as ld.sa and ld.c will be used to check it.  The default
9811     is 'disable'.
9812
9813`-mno-sched-spec-verbose'
9814`-msched-spec-verbose'
9815     (Dis/En)able printing of the information about speculative motions.
9816
9817`-mno-sched-prefer-non-data-spec-insns'
9818`-msched-prefer-non-data-spec-insns'
9819     If enabled, data speculative instructions will be chosen for
9820     schedule only if there are no other choices at the moment.  This
9821     will make the use of the data speculation much more conservative.
9822     The default is 'disable'.
9823
9824`-mno-sched-prefer-non-control-spec-insns'
9825`-msched-prefer-non-control-spec-insns'
9826     If enabled, control speculative instructions will be chosen for
9827     schedule only if there are no other choices at the moment.  This
9828     will make the use of the control speculation much more
9829     conservative.  The default is 'disable'.
9830
9831`-mno-sched-count-spec-in-critical-path'
9832`-msched-count-spec-in-critical-path'
9833     If enabled, speculative dependencies will be considered during
9834     computation of the instructions priorities.  This will make the
9835     use of the speculation a bit more conservative.  The default is
9836     'disable'.
9837
9838
9839
9840File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: IA-64 Options,  Up: Submodel Options
9841
98423.17.16 M32C Options
9843--------------------
9844
9845`-mcpu=NAME'
9846     Select the CPU for which code is generated.  NAME may be one of
9847     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
9848     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
9849     series.
9850
9851`-msim'
9852     Specifies that the program will be run on the simulator.  This
9853     causes an alternate runtime library to be linked in which
9854     supports, for example, file I/O.  You must not use this option
9855     when generating programs that will run on real hardware; you must
9856     provide your own runtime library for whatever I/O functions are
9857     needed.
9858
9859`-memregs=NUMBER'
9860     Specifies the number of memory-based pseudo-registers GCC will use
9861     during code generation.  These pseudo-registers will be used like
9862     real registers, so there is a tradeoff between GCC's ability to
9863     fit the code into available registers, and the performance penalty
9864     of using memory instead of registers.  Note that all modules in a
9865     program must be compiled with the same value for this option.
9866     Because of that, you must not use this option with the default
9867     runtime libraries gcc builds.
9868
9869
9870
9871File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
9872
98733.17.17 M32R/D Options
9874----------------------
9875
9876These `-m' options are defined for Renesas M32R/D architectures:
9877
9878`-m32r2'
9879     Generate code for the M32R/2.
9880
9881`-m32rx'
9882     Generate code for the M32R/X.
9883
9884`-m32r'
9885     Generate code for the M32R.  This is the default.
9886
9887`-mmodel=small'
9888     Assume all objects live in the lower 16MB of memory (so that their
9889     addresses can be loaded with the `ld24' instruction), and assume
9890     all subroutines are reachable with the `bl' instruction.  This is
9891     the default.
9892
9893     The addressability of a particular object can be set with the
9894     `model' attribute.
9895
9896`-mmodel=medium'
9897     Assume objects may be anywhere in the 32-bit address space (the
9898     compiler will generate `seth/add3' instructions to load their
9899     addresses), and assume all subroutines are reachable with the `bl'
9900     instruction.
9901
9902`-mmodel=large'
9903     Assume objects may be anywhere in the 32-bit address space (the
9904     compiler will generate `seth/add3' instructions to load their
9905     addresses), and assume subroutines may not be reachable with the
9906     `bl' instruction (the compiler will generate the much slower
9907     `seth/add3/jl' instruction sequence).
9908
9909`-msdata=none'
9910     Disable use of the small data area.  Variables will be put into
9911     one of `.data', `bss', or `.rodata' (unless the `section'
9912     attribute has been specified).  This is the default.
9913
9914     The small data area consists of sections `.sdata' and `.sbss'.
9915     Objects may be explicitly put in the small data area with the
9916     `section' attribute using one of these sections.
9917
9918`-msdata=sdata'
9919     Put small global and static data in the small data area, but do not
9920     generate special code to reference them.
9921
9922`-msdata=use'
9923     Put small global and static data in the small data area, and
9924     generate special instructions to reference them.
9925
9926`-G NUM'
9927     Put global and static objects less than or equal to NUM bytes into
9928     the small data or bss sections instead of the normal data or bss
9929     sections.  The default value of NUM is 8.  The `-msdata' option
9930     must be set to one of `sdata' or `use' for this option to have any
9931     effect.
9932
9933     All modules should be compiled with the same `-G NUM' value.
9934     Compiling with different values of NUM may or may not work; if it
9935     doesn't the linker will give an error message--incorrect code will
9936     not be generated.
9937
9938`-mdebug'
9939     Makes the M32R specific code in the compiler display some
9940     statistics that might help in debugging programs.
9941
9942`-malign-loops'
9943     Align all loops to a 32-byte boundary.
9944
9945`-mno-align-loops'
9946     Do not enforce a 32-byte alignment for loops.  This is the default.
9947
9948`-missue-rate=NUMBER'
9949     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
9950
9951`-mbranch-cost=NUMBER'
9952     NUMBER can only be 1 or 2.  If it is 1 then branches will be
9953     preferred over conditional code, if it is 2, then the opposite will
9954     apply.
9955
9956`-mflush-trap=NUMBER'
9957     Specifies the trap number to use to flush the cache.  The default
9958     is 12.  Valid numbers are between 0 and 15 inclusive.
9959
9960`-mno-flush-trap'
9961     Specifies that the cache cannot be flushed by using a trap.
9962
9963`-mflush-func=NAME'
9964     Specifies the name of the operating system function to call to
9965     flush the cache.  The default is __flush_cache_, but a function
9966     call will only be used if a trap is not available.
9967
9968`-mno-flush-func'
9969     Indicates that there is no OS function for flushing the cache.
9970
9971
9972
9973File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
9974
99753.17.18 M680x0 Options
9976----------------------
9977
9978These are the `-m' options defined for the 68000 series.  The default
9979values for these options depends on which style of 68000 was selected
9980when the compiler was configured; the defaults for the most common
9981choices are given below.
9982
9983`-m68000'
9984`-mc68000'
9985     Generate output for a 68000.  This is the default when the
9986     compiler is configured for 68000-based systems.
9987
9988     Use this option for microcontrollers with a 68000 or EC000 core,
9989     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
9990
9991`-m68020'
9992`-mc68020'
9993     Generate output for a 68020.  This is the default when the
9994     compiler is configured for 68020-based systems.
9995
9996`-m68881'
9997     Generate output containing 68881 instructions for floating point.
9998     This is the default for most 68020 systems unless `--nfp' was
9999     specified when the compiler was configured.
10000
10001`-m68030'
10002     Generate output for a 68030.  This is the default when the
10003     compiler is configured for 68030-based systems.
10004
10005`-m68040'
10006     Generate output for a 68040.  This is the default when the
10007     compiler is configured for 68040-based systems.
10008
10009     This option inhibits the use of 68881/68882 instructions that have
10010     to be emulated by software on the 68040.  Use this option if your
10011     68040 does not have code to emulate those instructions.
10012
10013`-m68060'
10014     Generate output for a 68060.  This is the default when the
10015     compiler is configured for 68060-based systems.
10016
10017     This option inhibits the use of 68020 and 68881/68882 instructions
10018     that have to be emulated by software on the 68060.  Use this
10019     option if your 68060 does not have code to emulate those
10020     instructions.
10021
10022`-mcpu32'
10023     Generate output for a CPU32.  This is the default when the
10024     compiler is configured for CPU32-based systems.
10025
10026     Use this option for microcontrollers with a CPU32 or CPU32+ core,
10027     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
10028     68341, 68349 and 68360.
10029
10030`-m5200'
10031     Generate output for a 520X "coldfire" family cpu.  This is the
10032     default when the compiler is configured for 520X-based systems.
10033
10034     Use this option for microcontroller with a 5200 core, including
10035     the MCF5202, MCF5203, MCF5204 and MCF5202.
10036
10037`-mcfv4e'
10038     Generate output for a ColdFire V4e family cpu (e.g. 547x/548x).
10039     This includes use of hardware floating point instructions.
10040
10041`-m68020-40'
10042     Generate output for a 68040, without using any of the new
10043     instructions.  This results in code which can run relatively
10044     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10045     generated code does use the 68881 instructions that are emulated
10046     on the 68040.
10047
10048`-m68020-60'
10049     Generate output for a 68060, without using any of the new
10050     instructions.  This results in code which can run relatively
10051     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10052     generated code does use the 68881 instructions that are emulated
10053     on the 68060.
10054
10055`-msoft-float'
10056     Generate output containing library calls for floating point.
10057     *Warning:* the requisite libraries are not available for all m68k
10058     targets.  Normally the facilities of the machine's usual C
10059     compiler are used, but this can't be done directly in
10060     cross-compilation.  You must make your own arrangements to provide
10061     suitable library functions for cross-compilation.  The embedded
10062     targets `m68k-*-aout' and `m68k-*-coff' do provide software
10063     floating point support.
10064
10065`-mshort'
10066     Consider type `int' to be 16 bits wide, like `short int'.
10067     Additionally, parameters passed on the stack are also aligned to a
10068     16-bit boundary even on targets whose API mandates promotion to
10069     32-bit.
10070
10071`-mnobitfield'
10072     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
10073     and `-m5200' options imply `-mnobitfield'.
10074
10075`-mbitfield'
10076     Do use the bit-field instructions.  The `-m68020' option implies
10077     `-mbitfield'.  This is the default if you use a configuration
10078     designed for a 68020.
10079
10080`-mrtd'
10081     Use a different function-calling convention, in which functions
10082     that take a fixed number of arguments return with the `rtd'
10083     instruction, which pops their arguments while returning.  This
10084     saves one instruction in the caller since there is no need to pop
10085     the arguments there.
10086
10087     This calling convention is incompatible with the one normally used
10088     on Unix, so you cannot use it if you need to call libraries
10089     compiled with the Unix compiler.
10090
10091     Also, you must provide function prototypes for all functions that
10092     take variable numbers of arguments (including `printf'); otherwise
10093     incorrect code will be generated for calls to those functions.
10094
10095     In addition, seriously incorrect code will result if you call a
10096     function with too many arguments.  (Normally, extra arguments are
10097     harmlessly ignored.)
10098
10099     The `rtd' instruction is supported by the 68010, 68020, 68030,
10100     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
10101
10102`-malign-int'
10103`-mno-align-int'
10104     Control whether GCC aligns `int', `long', `long long', `float',
10105     `double', and `long double' variables on a 32-bit boundary
10106     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
10107     variables on 32-bit boundaries produces code that runs somewhat
10108     faster on processors with 32-bit busses at the expense of more
10109     memory.
10110
10111     *Warning:* if you use the `-malign-int' switch, GCC will align
10112     structures containing the above types  differently than most
10113     published application binary interface specifications for the m68k.
10114
10115`-mpcrel'
10116     Use the pc-relative addressing mode of the 68000 directly, instead
10117     of using a global offset table.  At present, this option implies
10118     `-fpic', allowing at most a 16-bit offset for pc-relative
10119     addressing.  `-fPIC' is not presently supported with `-mpcrel',
10120     though this could be supported for 68020 and higher processors.
10121
10122`-mno-strict-align'
10123`-mstrict-align'
10124     Do not (do) assume that unaligned memory references will be
10125     handled by the system.
10126
10127`-msep-data'
10128     Generate code that allows the data segment to be located in a
10129     different area of memory from the text segment.  This allows for
10130     execute in place in an environment without virtual memory
10131     management.  This option implies `-fPIC'.
10132
10133`-mno-sep-data'
10134     Generate code that assumes that the data segment follows the text
10135     segment.  This is the default.
10136
10137`-mid-shared-library'
10138     Generate code that supports shared libraries via the library ID
10139     method.  This allows for execute in place and shared libraries in
10140     an environment without virtual memory management.  This option
10141     implies `-fPIC'.
10142
10143`-mno-id-shared-library'
10144     Generate code that doesn't assume ID based shared libraries are
10145     being used.  This is the default.
10146
10147`-mshared-library-id=n'
10148     Specified the identification number of the ID based shared library
10149     being compiled.  Specifying a value of 0 will generate more
10150     compact code, specifying other values will force the allocation of
10151     that number to the current library but is no more space or time
10152     efficient than omitting this option.
10153
10154
10155
10156File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
10157
101583.17.19 M68hc1x Options
10159-----------------------
10160
10161These are the `-m' options defined for the 68hc11 and 68hc12
10162microcontrollers.  The default values for these options depends on
10163which style of microcontroller was selected when the compiler was
10164configured; the defaults for the most common choices are given below.
10165
10166`-m6811'
10167`-m68hc11'
10168     Generate output for a 68HC11.  This is the default when the
10169     compiler is configured for 68HC11-based systems.
10170
10171`-m6812'
10172`-m68hc12'
10173     Generate output for a 68HC12.  This is the default when the
10174     compiler is configured for 68HC12-based systems.
10175
10176`-m68S12'
10177`-m68hcs12'
10178     Generate output for a 68HCS12.
10179
10180`-mauto-incdec'
10181     Enable the use of 68HC12 pre and post auto-increment and
10182     auto-decrement addressing modes.
10183
10184`-minmax'
10185`-nominmax'
10186     Enable the use of 68HC12 min and max instructions.
10187
10188`-mlong-calls'
10189`-mno-long-calls'
10190     Treat all calls as being far away (near).  If calls are assumed to
10191     be far away, the compiler will use the `call' instruction to call
10192     a function and the `rtc' instruction for returning.
10193
10194`-mshort'
10195     Consider type `int' to be 16 bits wide, like `short int'.
10196
10197`-msoft-reg-count=COUNT'
10198     Specify the number of pseudo-soft registers which are used for the
10199     code generation.  The maximum number is 32.  Using more pseudo-soft
10200     register may or may not result in better code depending on the
10201     program.  The default is 4 for 68HC11 and 2 for 68HC12.
10202
10203
10204
10205File: gcc.info,  Node: MCore Options,  Next: MIPS Options,  Prev: M68hc1x Options,  Up: Submodel Options
10206
102073.17.20 MCore Options
10208---------------------
10209
10210These are the `-m' options defined for the Motorola M*Core processors.
10211
10212`-mhardlit'
10213`-mno-hardlit'
10214     Inline constants into the code stream if it can be done in two
10215     instructions or less.
10216
10217`-mdiv'
10218`-mno-div'
10219     Use the divide instruction.  (Enabled by default).
10220
10221`-mrelax-immediate'
10222`-mno-relax-immediate'
10223     Allow arbitrary sized immediates in bit operations.
10224
10225`-mwide-bitfields'
10226`-mno-wide-bitfields'
10227     Always treat bit-fields as int-sized.
10228
10229`-m4byte-functions'
10230`-mno-4byte-functions'
10231     Force all functions to be aligned to a four byte boundary.
10232
10233`-mcallgraph-data'
10234`-mno-callgraph-data'
10235     Emit callgraph information.
10236
10237`-mslow-bytes'
10238`-mno-slow-bytes'
10239     Prefer word access when reading byte quantities.
10240
10241`-mlittle-endian'
10242`-mbig-endian'
10243     Generate code for a little endian target.
10244
10245`-m210'
10246`-m340'
10247     Generate code for the 210 processor.
10248
10249
10250File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MCore Options,  Up: Submodel Options
10251
102523.17.21 MIPS Options
10253--------------------
10254
10255`-EB'
10256     Generate big-endian code.
10257
10258`-EL'
10259     Generate little-endian code.  This is the default for `mips*el-*-*'
10260     configurations.
10261
10262`-march=ARCH'
10263     Generate code that will run on ARCH, which can be the name of a
10264     generic MIPS ISA, or the name of a particular processor.  The ISA
10265     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
10266     `mips32r2', and `mips64'.  The processor names are: `4kc', `4km',
10267     `4kp', `5kc', `5kf', `20kc', `24k', `24kc', `24kf', `24kx', `m4k',
10268     `orion', `r2000', `r3000', `r3900', `r4000', `r4400', `r4600',
10269     `r4650', `r6000', `r8000', `rm7000', `rm9000', `sb1', `sr71000',
10270     `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000',
10271     `vr5400' and `vr5500'.  The special value `from-abi' selects the
10272     most compatible architecture for the selected ABI (that is,
10273     `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs).
10274
10275     In processor names, a final `000' can be abbreviated as `k' (for
10276     example, `-march=r2k').  Prefixes are optional, and `vr' may be
10277     written `r'.
10278
10279     GCC defines two macros based on the value of this option.  The
10280     first is `_MIPS_ARCH', which gives the name of target
10281     architecture, as a string.  The second has the form
10282     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
10283     `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
10284     to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
10285
10286     Note that the `_MIPS_ARCH' macro uses the processor names given
10287     above.  In other words, it will have the full prefix and will not
10288     abbreviate `000' as `k'.  In the case of `from-abi', the macro
10289     names the resolved architecture (either `"mips1"' or `"mips3"').
10290     It names the default architecture when no `-march' option is given.
10291
10292`-mtune=ARCH'
10293     Optimize for ARCH.  Among other things, this option controls the
10294     way instructions are scheduled, and the perceived cost of
10295     arithmetic operations.  The list of ARCH values is the same as for
10296     `-march'.
10297
10298     When this option is not used, GCC will optimize for the processor
10299     specified by `-march'.  By using `-march' and `-mtune' together,
10300     it is possible to generate code that will run on a family of
10301     processors, but optimize the code for one particular member of
10302     that family.
10303
10304     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
10305     which work in the same way as the `-march' ones described above.
10306
10307`-mips1'
10308     Equivalent to `-march=mips1'.
10309
10310`-mips2'
10311     Equivalent to `-march=mips2'.
10312
10313`-mips3'
10314     Equivalent to `-march=mips3'.
10315
10316`-mips4'
10317     Equivalent to `-march=mips4'.
10318
10319`-mips32'
10320     Equivalent to `-march=mips32'.
10321
10322`-mips32r2'
10323     Equivalent to `-march=mips32r2'.
10324
10325`-mips64'
10326     Equivalent to `-march=mips64'.
10327
10328`-mips16'
10329`-mno-mips16'
10330     Generate (do not generate) MIPS16 code.  If GCC is targetting a
10331     MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
10332
10333`-mabi=32'
10334`-mabi=o64'
10335`-mabi=n32'
10336`-mabi=64'
10337`-mabi=eabi'
10338     Generate code for the given ABI.
10339
10340     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
10341     generates 64-bit code when you select a 64-bit architecture, but
10342     you can use `-mgp32' to get 32-bit code instead.
10343
10344     For information about the O64 ABI, see
10345     `http://gcc.gnu.org/projects/mipso64-abi.html'.
10346
10347`-mabicalls'
10348`-mno-abicalls'
10349     Generate (do not generate) code that is suitable for SVR4-style
10350     dynamic objects.  `-mabicalls' is the default for SVR4-based
10351     systems.
10352
10353`-mshared'
10354`-mno-shared'
10355     Generate (do not generate) code that is fully position-independent,
10356     and that can therefore be linked into shared libraries.  This
10357     option only affects `-mabicalls'.
10358
10359     All `-mabicalls' code has traditionally been position-independent,
10360     regardless of options like `-fPIC' and `-fpic'.  However, as an
10361     extension, the GNU toolchain allows executables to use absolute
10362     accesses for locally-binding symbols.  It can also use shorter GP
10363     initialization sequences and generate direct calls to
10364     locally-defined functions.  This mode is selected by `-mno-shared'.
10365
10366     `-mno-shared' depends on binutils 2.16 or higher and generates
10367     objects that can only be linked by the GNU linker.  However, the
10368     option does not affect the ABI of the final executable; it only
10369     affects the ABI of relocatable objects.  Using `-mno-shared' will
10370     generally make executables both smaller and quicker.
10371
10372     `-mshared' is the default.
10373
10374`-mxgot'
10375`-mno-xgot'
10376     Lift (do not lift) the usual restrictions on the size of the global
10377     offset table.
10378
10379     GCC normally uses a single instruction to load values from the GOT.
10380     While this is relatively efficient, it will only work if the GOT
10381     is smaller than about 64k.  Anything larger will cause the linker
10382     to report an error such as:
10383
10384          relocation truncated to fit: R_MIPS_GOT16 foobar
10385
10386     If this happens, you should recompile your code with `-mxgot'.  It
10387     should then work with very large GOTs, although it will also be
10388     less efficient, since it will take three instructions to fetch the
10389     value of a global symbol.
10390
10391     Note that some linkers can create multiple GOTs.  If you have such
10392     a linker, you should only need to use `-mxgot' when a single object
10393     file accesses more than 64k's worth of GOT entries.  Very few do.
10394
10395     These options have no effect unless GCC is generating position
10396     independent code.
10397
10398`-mgp32'
10399     Assume that general-purpose registers are 32 bits wide.
10400
10401`-mgp64'
10402     Assume that general-purpose registers are 64 bits wide.
10403
10404`-mfp32'
10405     Assume that floating-point registers are 32 bits wide.
10406
10407`-mfp64'
10408     Assume that floating-point registers are 64 bits wide.
10409
10410`-mhard-float'
10411     Use floating-point coprocessor instructions.
10412
10413`-msoft-float'
10414     Do not use floating-point coprocessor instructions.  Implement
10415     floating-point calculations using library calls instead.
10416
10417`-msingle-float'
10418     Assume that the floating-point coprocessor only supports
10419     single-precision operations.
10420
10421`-mdouble-float'
10422     Assume that the floating-point coprocessor supports
10423     double-precision operations.  This is the default.
10424
10425`-mdsp'
10426`-mno-dsp'
10427     Use (do not use) the MIPS DSP ASE.  *Note MIPS DSP Built-in
10428     Functions::.
10429
10430`-mpaired-single'
10431`-mno-paired-single'
10432     Use (do not use) paired-single floating-point instructions.  *Note
10433     MIPS Paired-Single Support::.  This option can only be used when
10434     generating 64-bit code and requires hardware floating-point
10435     support to be enabled.
10436
10437`-mips3d'
10438`-mno-mips3d'
10439     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
10440     Functions::.  The option `-mips3d' implies `-mpaired-single'.
10441
10442`-mlong64'
10443     Force `long' types to be 64 bits wide.  See `-mlong32' for an
10444     explanation of the default and the way that the pointer size is
10445     determined.
10446
10447`-mlong32'
10448     Force `long', `int', and pointer types to be 32 bits wide.
10449
10450     The default size of `int's, `long's and pointers depends on the
10451     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
10452     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
10453     `long's.  Pointers are the same size as `long's, or the same size
10454     as integer registers, whichever is smaller.
10455
10456`-msym32'
10457`-mno-sym32'
10458     Assume (do not assume) that all symbols have 32-bit values,
10459     regardless of the selected ABI.  This option is useful in
10460     combination with `-mabi=64' and `-mno-abicalls' because it allows
10461     GCC to generate shorter and faster references to symbolic
10462     addresses.
10463
10464`-G NUM'
10465     Put global and static items less than or equal to NUM bytes into
10466     the small data or bss section instead of the normal data or bss
10467     section.  This allows the data to be accessed using a single
10468     instruction.
10469
10470     All modules should be compiled with the same `-G NUM' value.
10471
10472`-membedded-data'
10473`-mno-embedded-data'
10474     Allocate variables to the read-only data section first if
10475     possible, then next in the small data section if possible,
10476     otherwise in data.  This gives slightly slower code than the
10477     default, but reduces the amount of RAM required when executing,
10478     and thus may be preferred for some embedded systems.
10479
10480`-muninit-const-in-rodata'
10481`-mno-uninit-const-in-rodata'
10482     Put uninitialized `const' variables in the read-only data section.
10483     This option is only meaningful in conjunction with
10484     `-membedded-data'.
10485
10486`-msplit-addresses'
10487`-mno-split-addresses'
10488     Enable (disable) use of the `%hi()' and `%lo()' assembler
10489     relocation operators.  This option has been superseded by
10490     `-mexplicit-relocs' but is retained for backwards compatibility.
10491
10492`-mexplicit-relocs'
10493`-mno-explicit-relocs'
10494     Use (do not use) assembler relocation operators when dealing with
10495     symbolic addresses.  The alternative, selected by
10496     `-mno-explicit-relocs', is to use assembler macros instead.
10497
10498     `-mexplicit-relocs' is the default if GCC was configured to use an
10499     assembler that supports relocation operators.
10500
10501`-mcheck-zero-division'
10502`-mno-check-zero-division'
10503     Trap (do not trap) on integer division by zero.  The default is
10504     `-mcheck-zero-division'.
10505
10506`-mdivide-traps'
10507`-mdivide-breaks'
10508     MIPS systems check for division by zero by generating either a
10509     conditional trap or a break instruction.  Using traps results in
10510     smaller code, but is only supported on MIPS II and later.  Also,
10511     some versions of the Linux kernel have a bug that prevents trap
10512     from generating the proper signal (`SIGFPE').  Use
10513     `-mdivide-traps' to allow conditional traps on architectures that
10514     support them and `-mdivide-breaks' to force the use of breaks.
10515
10516     The default is usually `-mdivide-traps', but this can be
10517     overridden at configure time using `--with-divide=breaks'.
10518     Divide-by-zero checks can be completely disabled using
10519     `-mno-check-zero-division'.
10520
10521`-mmemcpy'
10522`-mno-memcpy'
10523     Force (do not force) the use of `memcpy()' for non-trivial block
10524     moves.  The default is `-mno-memcpy', which allows GCC to inline
10525     most constant-sized copies.
10526
10527`-mlong-calls'
10528`-mno-long-calls'
10529     Disable (do not disable) use of the `jal' instruction.  Calling
10530     functions using `jal' is more efficient but requires the caller
10531     and callee to be in the same 256 megabyte segment.
10532
10533     This option has no effect on abicalls code.  The default is
10534     `-mno-long-calls'.
10535
10536`-mmad'
10537`-mno-mad'
10538     Enable (disable) use of the `mad', `madu' and `mul' instructions,
10539     as provided by the R4650 ISA.
10540
10541`-mfused-madd'
10542`-mno-fused-madd'
10543     Enable (disable) use of the floating point multiply-accumulate
10544     instructions, when they are available.  The default is
10545     `-mfused-madd'.
10546
10547     When multiply-accumulate instructions are used, the intermediate
10548     product is calculated to infinite precision and is not subject to
10549     the FCSR Flush to Zero bit.  This may be undesirable in some
10550     circumstances.
10551
10552`-nocpp'
10553     Tell the MIPS assembler to not run its preprocessor over user
10554     assembler files (with a `.s' suffix) when assembling them.
10555
10556`-mfix-r4000'
10557`-mno-fix-r4000'
10558     Work around certain R4000 CPU errata:
10559        - A double-word or a variable shift may give an incorrect
10560          result if executed immediately after starting an integer
10561          division.
10562
10563        - A double-word or a variable shift may give an incorrect
10564          result if executed while an integer multiplication is in
10565          progress.
10566
10567        - An integer division may give an incorrect result if started
10568          in a delay slot of a taken branch or a jump.
10569
10570`-mfix-r4400'
10571`-mno-fix-r4400'
10572     Work around certain R4400 CPU errata:
10573        - A double-word or a variable shift may give an incorrect
10574          result if executed immediately after starting an integer
10575          division.
10576
10577`-mfix-vr4120'
10578`-mno-fix-vr4120'
10579     Work around certain VR4120 errata:
10580        - `dmultu' does not always produce the correct result.
10581
10582        - `div' and `ddiv' do not always produce the correct result if
10583          one of the operands is negative.
10584     The workarounds for the division errata rely on special functions
10585     in `libgcc.a'.  At present, these functions are only provided by
10586     the `mips64vr*-elf' configurations.
10587
10588     Other VR4120 errata require a nop to be inserted between certain
10589     pairs of instructions.  These errata are handled by the assembler,
10590     not by GCC itself.
10591
10592`-mfix-vr4130'
10593     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
10594     implemented by the assembler rather than by GCC, although GCC will
10595     avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
10596     `dmacc' and `dmacchi' instructions are available instead.
10597
10598`-mfix-sb1'
10599`-mno-fix-sb1'
10600     Work around certain SB-1 CPU core errata.  (This flag currently
10601     works around the SB-1 revision 2 "F1" and "F2" floating point
10602     errata.)
10603
10604`-mflush-func=FUNC'
10605`-mno-flush-func'
10606     Specifies the function to call to flush the I and D caches, or to
10607     not call any such function.  If called, the function must take the
10608     same arguments as the common `_flush_func()', that is, the address
10609     of the memory range for which the cache is being flushed, the size
10610     of the memory range, and the number 3 (to flush both caches).  The
10611     default depends on the target GCC was configured for, but commonly
10612     is either `_flush_func' or `__cpu_flush'.
10613
10614`-mbranch-likely'
10615`-mno-branch-likely'
10616     Enable or disable use of Branch Likely instructions, regardless of
10617     the default for the selected architecture.  By default, Branch
10618     Likely instructions may be generated if they are supported by the
10619     selected architecture.  An exception is for the MIPS32 and MIPS64
10620     architectures and processors which implement those architectures;
10621     for those, Branch Likely instructions will not be generated by
10622     default because the MIPS32 and MIPS64 architectures specifically
10623     deprecate their use.
10624
10625`-mfp-exceptions'
10626`-mno-fp-exceptions'
10627     Specifies whether FP exceptions are enabled.  This affects how we
10628     schedule FP instructions for some processors.  The default is that
10629     FP exceptions are enabled.
10630
10631     For instance, on the SB-1, if FP exceptions are disabled, and we
10632     are emitting 64-bit code, then we can use both FP pipes.
10633     Otherwise, we can only use one FP pipe.
10634
10635`-mvr4130-align'
10636`-mno-vr4130-align'
10637     The VR4130 pipeline is two-way superscalar, but can only issue two
10638     instructions together if the first one is 8-byte aligned.  When
10639     this option is enabled, GCC will align pairs of instructions that
10640     it thinks should execute in parallel.
10641
10642     This option only has an effect when optimizing for the VR4130.  It
10643     normally makes code faster, but at the expense of making it bigger.
10644     It is enabled by default at optimization level `-O3'.
10645
10646
10647File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
10648
106493.17.22 MMIX Options
10650--------------------
10651
10652These options are defined for the MMIX:
10653
10654`-mlibfuncs'
10655`-mno-libfuncs'
10656     Specify that intrinsic library functions are being compiled,
10657     passing all values in registers, no matter the size.
10658
10659`-mepsilon'
10660`-mno-epsilon'
10661     Generate floating-point comparison instructions that compare with
10662     respect to the `rE' epsilon register.
10663
10664`-mabi=mmixware'
10665`-mabi=gnu'
10666     Generate code that passes function parameters and return values
10667     that (in the called function) are seen as registers `$0' and up,
10668     as opposed to the GNU ABI which uses global registers `$231' and
10669     up.
10670
10671`-mzero-extend'
10672`-mno-zero-extend'
10673     When reading data from memory in sizes shorter than 64 bits, use
10674     (do not use) zero-extending load instructions by default, rather
10675     than sign-extending ones.
10676
10677`-mknuthdiv'
10678`-mno-knuthdiv'
10679     Make the result of a division yielding a remainder have the same
10680     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
10681     of the remainder follows the sign of the dividend.  Both methods
10682     are arithmetically valid, the latter being almost exclusively used.
10683
10684`-mtoplevel-symbols'
10685`-mno-toplevel-symbols'
10686     Prepend (do not prepend) a `:' to all global symbols, so the
10687     assembly code can be used with the `PREFIX' assembly directive.
10688
10689`-melf'
10690     Generate an executable in the ELF format, rather than the default
10691     `mmo' format used by the `mmix' simulator.
10692
10693`-mbranch-predict'
10694`-mno-branch-predict'
10695     Use (do not use) the probable-branch instructions, when static
10696     branch prediction indicates a probable branch.
10697
10698`-mbase-addresses'
10699`-mno-base-addresses'
10700     Generate (do not generate) code that uses _base addresses_.  Using
10701     a base address automatically generates a request (handled by the
10702     assembler and the linker) for a constant to be set up in a global
10703     register.  The register is used for one or more base address
10704     requests within the range 0 to 255 from the value held in the
10705     register.  The generally leads to short and fast code, but the
10706     number of different data items that can be addressed is limited.
10707     This means that a program that uses lots of static data may
10708     require `-mno-base-addresses'.
10709
10710`-msingle-exit'
10711`-mno-single-exit'
10712     Force (do not force) generated code to have a single exit point in
10713     each function.
10714
10715
10716File: gcc.info,  Node: MN10300 Options,  Next: MT Options,  Prev: MMIX Options,  Up: Submodel Options
10717
107183.17.23 MN10300 Options
10719-----------------------
10720
10721These `-m' options are defined for Matsushita MN10300 architectures:
10722
10723`-mmult-bug'
10724     Generate code to avoid bugs in the multiply instructions for the
10725     MN10300 processors.  This is the default.
10726
10727`-mno-mult-bug'
10728     Do not generate code to avoid bugs in the multiply instructions
10729     for the MN10300 processors.
10730
10731`-mam33'
10732     Generate code which uses features specific to the AM33 processor.
10733
10734`-mno-am33'
10735     Do not generate code which uses features specific to the AM33
10736     processor.  This is the default.
10737
10738`-mreturn-pointer-on-d0'
10739     When generating a function which returns a pointer, return the
10740     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
10741     only in a0, and attempts to call such functions without a prototype
10742     would result in errors.  Note that this option is on by default;
10743     use `-mno-return-pointer-on-d0' to disable it.
10744
10745`-mno-crt0'
10746     Do not link in the C run-time initialization object file.
10747
10748`-mrelax'
10749     Indicate to the linker that it should perform a relaxation
10750     optimization pass to shorten branches, calls and absolute memory
10751     addresses.  This option only has an effect when used on the
10752     command line for the final link step.
10753
10754     This option makes symbolic debugging impossible.
10755
10756
10757File: gcc.info,  Node: MT Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
10758
107593.17.24 MT Options
10760------------------
10761
10762These `-m' options are defined for Morpho MT architectures:
10763
10764`-march=CPU-TYPE'
10765     Generate code that will run on CPU-TYPE, which is the name of a
10766     system representing a certain processor type.  Possible values for
10767     CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'.
10768
10769     When this option is not used, the default is `-march=ms1-16-002'.
10770
10771`-mbacc'
10772     Use byte loads and stores when generating code.
10773
10774`-mno-bacc'
10775     Do not use byte loads and stores when generating code.
10776
10777`-msim'
10778     Use simulator runtime
10779
10780`-mno-crt0'
10781     Do not link in the C run-time initialization object file `crti.o'.
10782     Other run-time initialization and termination files such as
10783     `startup.o' and `exit.o' are still included on the linker command
10784     line.
10785
10786
10787
10788File: gcc.info,  Node: PDP-11 Options,  Next: PowerPC Options,  Prev: MT Options,  Up: Submodel Options
10789
107903.17.25 PDP-11 Options
10791----------------------
10792
10793These options are defined for the PDP-11:
10794
10795`-mfpu'
10796     Use hardware FPP floating point.  This is the default.  (FIS
10797     floating point on the PDP-11/40 is not supported.)
10798
10799`-msoft-float'
10800     Do not use hardware floating point.
10801
10802`-mac0'
10803     Return floating-point results in ac0 (fr0 in Unix assembler
10804     syntax).
10805
10806`-mno-ac0'
10807     Return floating-point results in memory.  This is the default.
10808
10809`-m40'
10810     Generate code for a PDP-11/40.
10811
10812`-m45'
10813     Generate code for a PDP-11/45.  This is the default.
10814
10815`-m10'
10816     Generate code for a PDP-11/10.
10817
10818`-mbcopy-builtin'
10819     Use inline `movmemhi' patterns for copying memory.  This is the
10820     default.
10821
10822`-mbcopy'
10823     Do not use inline `movmemhi' patterns for copying memory.
10824
10825`-mint16'
10826`-mno-int32'
10827     Use 16-bit `int'.  This is the default.
10828
10829`-mint32'
10830`-mno-int16'
10831     Use 32-bit `int'.
10832
10833`-mfloat64'
10834`-mno-float32'
10835     Use 64-bit `float'.  This is the default.
10836
10837`-mfloat32'
10838`-mno-float64'
10839     Use 32-bit `float'.
10840
10841`-mabshi'
10842     Use `abshi2' pattern.  This is the default.
10843
10844`-mno-abshi'
10845     Do not use `abshi2' pattern.
10846
10847`-mbranch-expensive'
10848     Pretend that branches are expensive.  This is for experimenting
10849     with code generation only.
10850
10851`-mbranch-cheap'
10852     Do not pretend that branches are expensive.  This is the default.
10853
10854`-msplit'
10855     Generate code for a system with split I&D.
10856
10857`-mno-split'
10858     Generate code for a system without split I&D.  This is the default.
10859
10860`-munix-asm'
10861     Use Unix assembler syntax.  This is the default when configured for
10862     `pdp11-*-bsd'.
10863
10864`-mdec-asm'
10865     Use DEC assembler syntax.  This is the default when configured for
10866     any PDP-11 target other than `pdp11-*-bsd'.
10867
10868
10869File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
10870
108713.17.26 PowerPC Options
10872-----------------------
10873
10874These are listed under *Note RS/6000 and PowerPC Options::.
10875
10876
10877File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: S/390 and zSeries Options,  Prev: PowerPC Options,  Up: Submodel Options
10878
108793.17.27 IBM RS/6000 and PowerPC Options
10880---------------------------------------
10881
10882These `-m' options are defined for the IBM RS/6000 and PowerPC:
10883`-mpower'
10884`-mno-power'
10885`-mpower2'
10886`-mno-power2'
10887`-mpowerpc'
10888`-mno-powerpc'
10889`-mpowerpc-gpopt'
10890`-mno-powerpc-gpopt'
10891`-mpowerpc-gfxopt'
10892`-mno-powerpc-gfxopt'
10893`-mpowerpc64'
10894`-mno-powerpc64'
10895`-mmfcrf'
10896`-mno-mfcrf'
10897`-mpopcntb'
10898`-mno-popcntb'
10899`-mfprnd'
10900`-mno-fprnd'
10901     GCC supports two related instruction set architectures for the
10902     RS/6000 and PowerPC.  The "POWER" instruction set are those
10903     instructions supported by the `rios' chip set used in the original
10904     RS/6000 systems and the "PowerPC" instruction set is the
10905     architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
10906     microprocessors, and the IBM 4xx, 6xx, and follow-on
10907     microprocessors.
10908
10909     Neither architecture is a subset of the other.  However there is a
10910     large common subset of instructions supported by both.  An MQ
10911     register is included in processors supporting the POWER
10912     architecture.
10913
10914     You use these options to specify which instructions are available
10915     on the processor you are using.  The default value of these
10916     options is determined when configuring GCC.  Specifying the
10917     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
10918     recommend you use the `-mcpu=CPU_TYPE' option rather than the
10919     options listed above.
10920
10921     The `-mpower' option allows GCC to generate instructions that are
10922     found only in the POWER architecture and to use the MQ register.
10923     Specifying `-mpower2' implies `-power' and also allows GCC to
10924     generate instructions that are present in the POWER2 architecture
10925     but not the original POWER architecture.
10926
10927     The `-mpowerpc' option allows GCC to generate instructions that
10928     are found only in the 32-bit subset of the PowerPC architecture.
10929     Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
10930     GCC to use the optional PowerPC architecture instructions in the
10931     General Purpose group, including floating-point square root.
10932     Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
10933     GCC to use the optional PowerPC architecture instructions in the
10934     Graphics group, including floating-point select.
10935
10936     The `-mmfcrf' option allows GCC to generate the move from
10937     condition register field instruction implemented on the POWER4
10938     processor and other processors that support the PowerPC V2.01
10939     architecture.  The `-mpopcntb' option allows GCC to generate the
10940     popcount and double precision FP reciprocal estimate instruction
10941     implemented on the POWER5 processor and other processors that
10942     support the PowerPC V2.02 architecture.  The `-mfprnd' option
10943     allows GCC to generate the FP round to integer instructions
10944     implemented on the POWER5+ processor and other processors that
10945     support the PowerPC V2.03 architecture.
10946
10947     The `-mpowerpc64' option allows GCC to generate the additional
10948     64-bit instructions that are found in the full PowerPC64
10949     architecture and to treat GPRs as 64-bit, doubleword quantities.
10950     GCC defaults to `-mno-powerpc64'.
10951
10952     If you specify both `-mno-power' and `-mno-powerpc', GCC will use
10953     only the instructions in the common subset of both architectures
10954     plus some special AIX common-mode calls, and will not use the MQ
10955     register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
10956     to use any instruction from either architecture and to allow use
10957     of the MQ register; specify this for the Motorola MPC601.
10958
10959`-mnew-mnemonics'
10960`-mold-mnemonics'
10961     Select which mnemonics to use in the generated assembler code.
10962     With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
10963     for the PowerPC architecture.  With `-mold-mnemonics' it uses the
10964     assembler mnemonics defined for the POWER architecture.
10965     Instructions defined in only one architecture have only one
10966     mnemonic; GCC uses that mnemonic irrespective of which of these
10967     options is specified.
10968
10969     GCC defaults to the mnemonics appropriate for the architecture in
10970     use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
10971     these option.  Unless you are building a cross-compiler, you
10972     should normally not specify either `-mnew-mnemonics' or
10973     `-mold-mnemonics', but should instead accept the default.
10974
10975`-mcpu=CPU_TYPE'
10976     Set architecture type, register usage, choice of mnemonics, and
10977     instruction scheduling parameters for machine type CPU_TYPE.
10978     Supported values for CPU_TYPE are `401', `403', `405', `405fp',
10979     `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e',
10980     `620', `630', `740', `7400', `7450', `750', `801', `821', `823',
10981     `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power',
10982     `power2', `power3', `power4', `power5', `power5+', `power6',
10983     `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc',
10984     and `rs64'.
10985
10986     `-mcpu=common' selects a completely generic processor.  Code
10987     generated under this option will run on any POWER or PowerPC
10988     processor.  GCC will use only the instructions in the common
10989     subset of both architectures, and will not use the MQ register.
10990     GCC assumes a generic processor model for scheduling purposes.
10991
10992     `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
10993     `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
10994     PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
10995     types, with an appropriate, generic processor model assumed for
10996     scheduling purposes.
10997
10998     The other options specify a specific processor.  Code generated
10999     under those options will run best on that processor, and may not
11000     run at all on others.
11001
11002     The `-mcpu' options automatically enable or disable the following
11003     options: `-maltivec', `-mfprnd', `-mhard-float', `-mmfcrf',
11004     `-mmultiple', `-mnew-mnemonics', `-mpopcntb', `-mpower',
11005     `-mpower2', `-mpowerpc64', `-mpowerpc-gpopt', `-mpowerpc-gfxopt',
11006     `-mstring', `-mmulhw', `-mdlmzb'.  The particular options set for
11007     any particular CPU will vary between compiler versions, depending
11008     on what setting seems to produce optimal code for that CPU; it
11009     doesn't necessarily reflect the actual hardware's capabilities.  If
11010     you wish to set an individual option to a particular value, you may
11011     specify it after the `-mcpu' option, like `-mcpu=970 -mno-altivec'.
11012
11013     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
11014     or disabled by the `-mcpu' option at present because AIX does not
11015     have full support for these options.  You may still enable or
11016     disable them individually if you're sure it'll work in your
11017     environment.
11018
11019`-mtune=CPU_TYPE'
11020     Set the instruction scheduling parameters for machine type
11021     CPU_TYPE, but do not set the architecture type, register usage, or
11022     choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
11023     for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
11024     specified, the code generated will use the architecture,
11025     registers, and mnemonics set by `-mcpu', but the scheduling
11026     parameters set by `-mtune'.
11027
11028`-mswdiv'
11029`-mno-swdiv'
11030     Generate code to compute division as reciprocal estimate and
11031     iterative refinement, creating opportunities for increased
11032     throughput.  This feature requires: optional PowerPC Graphics
11033     instruction set for single precision and FRE instruction for
11034     double precision, assuming divides cannot generate user-visible
11035     traps, and the domain values not include Infinities, denormals or
11036     zero denominator.
11037
11038`-maltivec'
11039`-mno-altivec'
11040     Generate code that uses (does not use) AltiVec instructions, and
11041     also enable the use of built-in functions that allow more direct
11042     access to the AltiVec instruction set.  You may also need to set
11043     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
11044     enhancements.
11045
11046`-mvrsave'
11047
11048`-mno-vrsave'
11049     Generate VRSAVE instructions when generating AltiVec code.
11050
11051`-msecure-plt'
11052     Generate code that allows ld and ld.so to build executables and
11053     shared libraries with non-exec .plt and .got sections.  This is a
11054     PowerPC 32-bit SYSV ABI option.
11055
11056`-mbss-plt'
11057     Generate code that uses a BSS .plt section that ld.so fills in, and
11058     requires .plt and .got sections that are both writable and
11059     executable.  This is a PowerPC 32-bit SYSV ABI option.
11060
11061`-misel'
11062`-mno-isel'
11063     This switch enables or disables the generation of ISEL
11064     instructions.
11065
11066`-misel=YES/NO'
11067     This switch has been deprecated.  Use `-misel' and `-mno-isel'
11068     instead.
11069
11070`-mspe'
11071`-mno-spe'
11072     This switch enables or disables the generation of SPE simd
11073     instructions.
11074
11075`-mspe=YES/NO'
11076     This option has been deprecated.  Use `-mspe' and `-mno-spe'
11077     instead.
11078
11079`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
11080`-mfloat-gprs'
11081     This switch enables or disables the generation of floating point
11082     operations on the general purpose registers for architectures that
11083     support it.
11084
11085     The argument YES or SINGLE enables the use of single-precision
11086     floating point operations.
11087
11088     The argument DOUBLE enables the use of single and double-precision
11089     floating point operations.
11090
11091     The argument NO disables floating point operations on the general
11092     purpose registers.
11093
11094     This option is currently only available on the MPC854x.
11095
11096`-m32'
11097`-m64'
11098     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
11099     targets (including GNU/Linux).  The 32-bit environment sets int,
11100     long and pointer to 32 bits and generates code that runs on any
11101     PowerPC variant.  The 64-bit environment sets int to 32 bits and
11102     long and pointer to 64 bits, and generates code for PowerPC64, as
11103     for `-mpowerpc64'.
11104
11105`-mfull-toc'
11106`-mno-fp-in-toc'
11107`-mno-sum-in-toc'
11108`-mminimal-toc'
11109     Modify generation of the TOC (Table Of Contents), which is created
11110     for every executable file.  The `-mfull-toc' option is selected by
11111     default.  In that case, GCC will allocate at least one TOC entry
11112     for each unique non-automatic variable reference in your program.
11113     GCC will also place floating-point constants in the TOC.  However,
11114     only 16,384 entries are available in the TOC.
11115
11116     If you receive a linker error message that saying you have
11117     overflowed the available TOC space, you can reduce the amount of
11118     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
11119     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
11120     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
11121     code to calculate the sum of an address and a constant at run-time
11122     instead of putting that sum into the TOC.  You may specify one or
11123     both of these options.  Each causes GCC to produce very slightly
11124     slower and larger code at the expense of conserving TOC space.
11125
11126     If you still run out of space in the TOC even when you specify
11127     both of these options, specify `-mminimal-toc' instead.  This
11128     option causes GCC to make only one TOC entry for every file.  When
11129     you specify this option, GCC will produce code that is slower and
11130     larger but which uses extremely little TOC space.  You may wish to
11131     use this option only on files that contain less frequently
11132     executed code.
11133
11134`-maix64'
11135`-maix32'
11136     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
11137     64-bit `long' type, and the infrastructure needed to support them.
11138     Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
11139     `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
11140     GCC defaults to `-maix32'.
11141
11142`-mxl-compat'
11143`-mno-xl-compat'
11144     Produce code that conforms more closely to IBM XL compiler
11145     semantics when using AIX-compatible ABI.  Pass floating-point
11146     arguments to prototyped functions beyond the register save area
11147     (RSA) on the stack in addition to argument FPRs.  Do not assume
11148     that most significant double in 128-bit long double value is
11149     properly rounded when comparing values and converting to double.
11150     Use XL symbol names for long double support routines.
11151
11152     The AIX calling convention was extended but not initially
11153     documented to handle an obscure K&R C case of calling a function
11154     that takes the address of its arguments with fewer arguments than
11155     declared.  IBM XL compilers access floating point arguments which
11156     do not fit in the RSA from the stack when a subroutine is compiled
11157     without optimization.  Because always storing floating-point
11158     arguments on the stack is inefficient and rarely needed, this
11159     option is not enabled by default and only is necessary when
11160     calling subroutines compiled by IBM XL compilers without
11161     optimization.
11162
11163`-mpe'
11164     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
11165     application written to use message passing with special startup
11166     code to enable the application to run.  The system must have PE
11167     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
11168     `specs' file must be overridden with the `-specs=' option to
11169     specify the appropriate directory location.  The Parallel
11170     Environment does not support threads, so the `-mpe' option and the
11171     `-pthread' option are incompatible.
11172
11173`-malign-natural'
11174`-malign-power'
11175     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
11176     `-malign-natural' overrides the ABI-defined alignment of larger
11177     types, such as floating-point doubles, on their natural size-based
11178     boundary.  The option `-malign-power' instructs GCC to follow the
11179     ABI-specified alignment rules.  GCC defaults to the standard
11180     alignment defined in the ABI.
11181
11182     On 64-bit Darwin, natural alignment is the default, and
11183     `-malign-power' is not supported.
11184
11185`-msoft-float'
11186`-mhard-float'
11187     Generate code that does not use (uses) the floating-point register
11188     set.  Software floating point emulation is provided if you use the
11189     `-msoft-float' option, and pass the option to GCC when linking.
11190
11191`-mmultiple'
11192`-mno-multiple'
11193     Generate code that uses (does not use) the load multiple word
11194     instructions and the store multiple word instructions.  These
11195     instructions are generated by default on POWER systems, and not
11196     generated on PowerPC systems.  Do not use `-mmultiple' on little
11197     endian PowerPC systems, since those instructions do not work when
11198     the processor is in little endian mode.  The exceptions are PPC740
11199     and PPC750 which permit the instructions usage in little endian
11200     mode.
11201
11202`-mstring'
11203`-mno-string'
11204     Generate code that uses (does not use) the load string instructions
11205     and the store string word instructions to save multiple registers
11206     and do small block moves.  These instructions are generated by
11207     default on POWER systems, and not generated on PowerPC systems.
11208     Do not use `-mstring' on little endian PowerPC systems, since those
11209     instructions do not work when the processor is in little endian
11210     mode.  The exceptions are PPC740 and PPC750 which permit the
11211     instructions usage in little endian mode.
11212
11213`-mupdate'
11214`-mno-update'
11215     Generate code that uses (does not use) the load or store
11216     instructions that update the base register to the address of the
11217     calculated memory location.  These instructions are generated by
11218     default.  If you use `-mno-update', there is a small window
11219     between the time that the stack pointer is updated and the address
11220     of the previous frame is stored, which means code that walks the
11221     stack frame across interrupts or signals may get corrupted data.
11222
11223`-mfused-madd'
11224`-mno-fused-madd'
11225     Generate code that uses (does not use) the floating point multiply
11226     and accumulate instructions.  These instructions are generated by
11227     default if hardware floating is used.
11228
11229`-mmulhw'
11230`-mno-mulhw'
11231     Generate code that uses (does not use) the half-word multiply and
11232     multiply-accumulate instructions on the IBM 405 and 440 processors.
11233     These instructions are generated by default when targetting those
11234     processors.
11235
11236`-mdlmzb'
11237`-mno-dlmzb'
11238     Generate code that uses (does not use) the string-search `dlmzb'
11239     instruction on the IBM 405 and 440 processors.  This instruction is
11240     generated by default when targetting those processors.
11241
11242`-mno-bit-align'
11243`-mbit-align'
11244     On System V.4 and embedded PowerPC systems do not (do) force
11245     structures and unions that contain bit-fields to be aligned to the
11246     base type of the bit-field.
11247
11248     For example, by default a structure containing nothing but 8
11249     `unsigned' bit-fields of length 1 would be aligned to a 4 byte
11250     boundary and have a size of 4 bytes.  By using `-mno-bit-align',
11251     the structure would be aligned to a 1 byte boundary and be one
11252     byte in size.
11253
11254`-mno-strict-align'
11255`-mstrict-align'
11256     On System V.4 and embedded PowerPC systems do not (do) assume that
11257     unaligned memory references will be handled by the system.
11258
11259`-mrelocatable'
11260`-mno-relocatable'
11261     On embedded PowerPC systems generate code that allows (does not
11262     allow) the program to be relocated to a different address at
11263     runtime.  If you use `-mrelocatable' on any module, all objects
11264     linked together must be compiled with `-mrelocatable' or
11265     `-mrelocatable-lib'.
11266
11267`-mrelocatable-lib'
11268`-mno-relocatable-lib'
11269     On embedded PowerPC systems generate code that allows (does not
11270     allow) the program to be relocated to a different address at
11271     runtime.  Modules compiled with `-mrelocatable-lib' can be linked
11272     with either modules compiled without `-mrelocatable' and
11273     `-mrelocatable-lib' or with modules compiled with the
11274     `-mrelocatable' options.
11275
11276`-mno-toc'
11277`-mtoc'
11278     On System V.4 and embedded PowerPC systems do not (do) assume that
11279     register 2 contains a pointer to a global area pointing to the
11280     addresses used in the program.
11281
11282`-mlittle'
11283`-mlittle-endian'
11284     On System V.4 and embedded PowerPC systems compile code for the
11285     processor in little endian mode.  The `-mlittle-endian' option is
11286     the same as `-mlittle'.
11287
11288`-mbig'
11289`-mbig-endian'
11290     On System V.4 and embedded PowerPC systems compile code for the
11291     processor in big endian mode.  The `-mbig-endian' option is the
11292     same as `-mbig'.
11293
11294`-mdynamic-no-pic'
11295     On Darwin and Mac OS X systems, compile code so that it is not
11296     relocatable, but that its external references are relocatable.  The
11297     resulting code is suitable for applications, but not shared
11298     libraries.
11299
11300`-mprioritize-restricted-insns=PRIORITY'
11301     This option controls the priority that is assigned to
11302     dispatch-slot restricted instructions during the second scheduling
11303     pass.  The argument PRIORITY takes the value 0/1/2 to assign
11304     NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
11305     instructions.
11306
11307`-msched-costly-dep=DEPENDENCE_TYPE'
11308     This option controls which dependences are considered costly by
11309     the target during instruction scheduling.  The argument
11310     DEPENDENCE_TYPE takes one of the following values: NO: no
11311     dependence is costly, ALL: all dependences are costly,
11312     TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
11313     STORE_TO_LOAD: any dependence from store to load is costly,
11314     NUMBER: any dependence which latency >= NUMBER is costly.
11315
11316`-minsert-sched-nops=SCHEME'
11317     This option controls which nop insertion scheme will be used during
11318     the second scheduling pass.  The argument SCHEME takes one of the
11319     following values: NO: Don't insert nops.  PAD: Pad with nops any
11320     dispatch group which has vacant issue slots, according to the
11321     scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
11322     dependent insns into separate groups.  Insert exactly as many nops
11323     as needed to force an insn to a new group, according to the
11324     estimated processor grouping.  NUMBER: Insert nops to force costly
11325     dependent insns into separate groups.  Insert NUMBER nops to force
11326     an insn to a new group.
11327
11328`-mcall-sysv'
11329     On System V.4 and embedded PowerPC systems compile code using
11330     calling conventions that adheres to the March 1995 draft of the
11331     System V Application Binary Interface, PowerPC processor
11332     supplement.  This is the default unless you configured GCC using
11333     `powerpc-*-eabiaix'.
11334
11335`-mcall-sysv-eabi'
11336     Specify both `-mcall-sysv' and `-meabi' options.
11337
11338`-mcall-sysv-noeabi'
11339     Specify both `-mcall-sysv' and `-mno-eabi' options.
11340
11341`-mcall-solaris'
11342     On System V.4 and embedded PowerPC systems compile code for the
11343     Solaris operating system.
11344
11345`-mcall-linux'
11346     On System V.4 and embedded PowerPC systems compile code for the
11347     Linux-based GNU system.
11348
11349`-mcall-gnu'
11350     On System V.4 and embedded PowerPC systems compile code for the
11351     Hurd-based GNU system.
11352
11353`-mcall-netbsd'
11354     On System V.4 and embedded PowerPC systems compile code for the
11355     NetBSD operating system.
11356
11357`-maix-struct-return'
11358     Return all structures in memory (as specified by the AIX ABI).
11359
11360`-msvr4-struct-return'
11361     Return structures smaller than 8 bytes in registers (as specified
11362     by the SVR4 ABI).
11363
11364`-mabi=ABI-TYPE'
11365     Extend the current ABI with a particular extension, or remove such
11366     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
11367     IBMLONGDOUBLE, IEEELONGDOUBLE.
11368
11369`-mabi=spe'
11370     Extend the current ABI with SPE ABI extensions.  This does not
11371     change the default ABI, instead it adds the SPE ABI extensions to
11372     the current ABI.
11373
11374`-mabi=no-spe'
11375     Disable Booke SPE ABI extensions for the current ABI.
11376
11377`-mabi=ibmlongdouble'
11378     Change the current ABI to use IBM extended precision long double.
11379     This is a PowerPC 32-bit SYSV ABI option.
11380
11381`-mabi=ieeelongdouble'
11382     Change the current ABI to use IEEE extended precision long double.
11383     This is a PowerPC 32-bit Linux ABI option.
11384
11385`-mprototype'
11386`-mno-prototype'
11387     On System V.4 and embedded PowerPC systems assume that all calls to
11388     variable argument functions are properly prototyped.  Otherwise,
11389     the compiler must insert an instruction before every non
11390     prototyped call to set or clear bit 6 of the condition code
11391     register (CR) to indicate whether floating point values were
11392     passed in the floating point registers in case the function takes
11393     a variable arguments.  With `-mprototype', only calls to
11394     prototyped variable argument functions will set or clear the bit.
11395
11396`-msim'
11397     On embedded PowerPC systems, assume that the startup module is
11398     called `sim-crt0.o' and that the standard C libraries are
11399     `libsim.a' and `libc.a'.  This is the default for
11400     `powerpc-*-eabisim'.  configurations.
11401
11402`-mmvme'
11403     On embedded PowerPC systems, assume that the startup module is
11404     called `crt0.o' and the standard C libraries are `libmvme.a' and
11405     `libc.a'.
11406
11407`-mads'
11408     On embedded PowerPC systems, assume that the startup module is
11409     called `crt0.o' and the standard C libraries are `libads.a' and
11410     `libc.a'.
11411
11412`-myellowknife'
11413     On embedded PowerPC systems, assume that the startup module is
11414     called `crt0.o' and the standard C libraries are `libyk.a' and
11415     `libc.a'.
11416
11417`-mvxworks'
11418     On System V.4 and embedded PowerPC systems, specify that you are
11419     compiling for a VxWorks system.
11420
11421`-mwindiss'
11422     Specify that you are compiling for the WindISS simulation
11423     environment.
11424
11425`-memb'
11426     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
11427     header to indicate that `eabi' extended relocations are used.
11428
11429`-meabi'
11430`-mno-eabi'
11431     On System V.4 and embedded PowerPC systems do (do not) adhere to
11432     the Embedded Applications Binary Interface (eabi) which is a set of
11433     modifications to the System V.4 specifications.  Selecting `-meabi'
11434     means that the stack is aligned to an 8 byte boundary, a function
11435     `__eabi' is called to from `main' to set up the eabi environment,
11436     and the `-msdata' option can use both `r2' and `r13' to point to
11437     two separate small data areas.  Selecting `-mno-eabi' means that
11438     the stack is aligned to a 16 byte boundary, do not call an
11439     initialization function from `main', and the `-msdata' option will
11440     only use `r13' to point to a single small data area.  The `-meabi'
11441     option is on by default if you configured GCC using one of the
11442     `powerpc*-*-eabi*' options.
11443
11444`-msdata=eabi'
11445     On System V.4 and embedded PowerPC systems, put small initialized
11446     `const' global and static data in the `.sdata2' section, which is
11447     pointed to by register `r2'.  Put small initialized non-`const'
11448     global and static data in the `.sdata' section, which is pointed
11449     to by register `r13'.  Put small uninitialized global and static
11450     data in the `.sbss' section, which is adjacent to the `.sdata'
11451     section.  The `-msdata=eabi' option is incompatible with the
11452     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
11453     `-memb' option.
11454
11455`-msdata=sysv'
11456     On System V.4 and embedded PowerPC systems, put small global and
11457     static data in the `.sdata' section, which is pointed to by
11458     register `r13'.  Put small uninitialized global and static data in
11459     the `.sbss' section, which is adjacent to the `.sdata' section.
11460     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
11461     option.
11462
11463`-msdata=default'
11464`-msdata'
11465     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
11466     compile code the same as `-msdata=eabi', otherwise compile code the
11467     same as `-msdata=sysv'.
11468
11469`-msdata-data'
11470     On System V.4 and embedded PowerPC systems, put small global data
11471     in the `.sdata' section.  Put small uninitialized global data in
11472     the `.sbss' section.  Do not use register `r13' to address small
11473     data however.  This is the default behavior unless other `-msdata'
11474     options are used.
11475
11476`-msdata=none'
11477`-mno-sdata'
11478     On embedded PowerPC systems, put all initialized global and static
11479     data in the `.data' section, and all uninitialized data in the
11480     `.bss' section.
11481
11482`-G NUM'
11483     On embedded PowerPC systems, put global and static items less than
11484     or equal to NUM bytes into the small data or bss sections instead
11485     of the normal data or bss section.  By default, NUM is 8.  The `-G
11486     NUM' switch is also passed to the linker.  All modules should be
11487     compiled with the same `-G NUM' value.
11488
11489`-mregnames'
11490`-mno-regnames'
11491     On System V.4 and embedded PowerPC systems do (do not) emit
11492     register names in the assembly language output using symbolic
11493     forms.
11494
11495`-mlongcall'
11496`-mno-longcall'
11497     By default assume that all calls are far away so that a longer more
11498     expensive calling sequence is required.  This is required for calls
11499     further than 32 megabytes (33,554,432 bytes) from the current
11500     location.  A short call will be generated if the compiler knows
11501     the call cannot be that far away.  This setting can be overridden
11502     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
11503
11504     Some linkers are capable of detecting out-of-range calls and
11505     generating glue code on the fly.  On these systems, long calls are
11506     unnecessary and generate slower code.  As of this writing, the AIX
11507     linker can do this, as can the GNU linker for PowerPC/64.  It is
11508     planned to add this feature to the GNU linker for 32-bit PowerPC
11509     systems as well.
11510
11511     On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
11512     callee, L42", plus a "branch island" (glue code).  The two target
11513     addresses represent the callee and the "branch island".  The
11514     Darwin/PPC linker will prefer the first address and generate a "bl
11515     callee" if the PPC "bl" instruction will reach the callee directly;
11516     otherwise, the linker will generate "bl L42" to call the "branch
11517     island".  The "branch island" is appended to the body of the
11518     calling function; it computes the full 32-bit address of the callee
11519     and jumps to it.
11520
11521     On Mach-O (Darwin) systems, this option directs the compiler emit
11522     to the glue for every direct call, and the Darwin linker decides
11523     whether to use or discard it.
11524
11525     In the future, we may cause GCC to ignore all longcall
11526     specifications when the linker is known to generate glue.
11527
11528`-pthread'
11529     Adds support for multithreading with the "pthreads" library.  This
11530     option sets flags for both the preprocessor and linker.
11531
11532
11533
11534File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
11535
115363.17.28 S/390 and zSeries Options
11537---------------------------------
11538
11539These are the `-m' options defined for the S/390 and zSeries
11540architecture.
11541
11542`-mhard-float'
11543`-msoft-float'
11544     Use (do not use) the hardware floating-point instructions and
11545     registers for floating-point operations.  When `-msoft-float' is
11546     specified, functions in `libgcc.a' will be used to perform
11547     floating-point operations.  When `-mhard-float' is specified, the
11548     compiler generates IEEE floating-point instructions.  This is the
11549     default.
11550
11551`-mlong-double-64'
11552`-mlong-double-128'
11553     These switches control the size of `long double' type. A size of
11554     64bit makes the `long double' type equivalent to the `double'
11555     type. This is the default.
11556
11557`-mbackchain'
11558`-mno-backchain'
11559     Store (do not store) the address of the caller's frame as
11560     backchain pointer into the callee's stack frame.  A backchain may
11561     be needed to allow debugging using tools that do not understand
11562     DWARF-2 call frame information.  When `-mno-packed-stack' is in
11563     effect, the backchain pointer is stored at the bottom of the stack
11564     frame; when `-mpacked-stack' is in effect, the backchain is placed
11565     into the topmost word of the 96/160 byte register save area.
11566
11567     In general, code compiled with `-mbackchain' is call-compatible
11568     with code compiled with `-mmo-backchain'; however, use of the
11569     backchain for debugging purposes usually requires that the whole
11570     binary is built with `-mbackchain'.  Note that the combination of
11571     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
11572     supported.  In order to build a linux kernel use `-msoft-float'.
11573
11574     The default is to not maintain the backchain.
11575
11576`-mpacked-stack'
11577
11578`-mno-packed-stack'
11579     Use (do not use) the packed stack layout.  When
11580     `-mno-packed-stack' is specified, the compiler uses the all fields
11581     of the 96/160 byte register save area only for their default
11582     purpose; unused fields still take up stack space.  When
11583     `-mpacked-stack' is specified, register save slots are densely
11584     packed at the top of the register save area; unused space is
11585     reused for other purposes, allowing for more efficient use of the
11586     available stack space.  However, when `-mbackchain' is also in
11587     effect, the topmost word of the save area is always used to store
11588     the backchain, and the return address register is always saved two
11589     words below the backchain.
11590
11591     As long as the stack frame backchain is not used, code generated
11592     with `-mpacked-stack' is call-compatible with code generated with
11593     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
11594     for S/390 or zSeries generated code that uses the stack frame
11595     backchain at run time, not just for debugging purposes.  Such code
11596     is not call-compatible with code compiled with `-mpacked-stack'.
11597     Also, note that the combination of `-mbackchain', `-mpacked-stack'
11598     and `-mhard-float' is not supported.  In order to build a linux
11599     kernel use `-msoft-float'.
11600
11601     The default is to not use the packed stack layout.
11602
11603`-msmall-exec'
11604`-mno-small-exec'
11605     Generate (or do not generate) code using the `bras' instruction to
11606     do subroutine calls.  This only works reliably if the total
11607     executable size does not exceed 64k.  The default is to use the
11608     `basr' instruction instead, which does not have this limitation.
11609
11610`-m64'
11611`-m31'
11612     When `-m31' is specified, generate code compliant to the GNU/Linux
11613     for S/390 ABI.  When `-m64' is specified, generate code compliant
11614     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
11615     to generate 64-bit instructions.  For the `s390' targets, the
11616     default is `-m31', while the `s390x' targets default to `-m64'.
11617
11618`-mzarch'
11619`-mesa'
11620     When `-mzarch' is specified, generate code using the instructions
11621     available on z/Architecture.  When `-mesa' is specified, generate
11622     code using the instructions available on ESA/390.  Note that
11623     `-mesa' is not possible with `-m64'.  When generating code
11624     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
11625     When generating code compliant to the GNU/Linux for zSeries ABI,
11626     the default is `-mzarch'.
11627
11628`-mmvcle'
11629`-mno-mvcle'
11630     Generate (or do not generate) code using the `mvcle' instruction
11631     to perform block moves.  When `-mno-mvcle' is specified, use a
11632     `mvc' loop instead.  This is the default unless optimizing for
11633     size.
11634
11635`-mdebug'
11636`-mno-debug'
11637     Print (or do not print) additional debug information when
11638     compiling.  The default is to not print debug information.
11639
11640`-march=CPU-TYPE'
11641     Generate code that will run on CPU-TYPE, which is the name of a
11642     system representing a certain processor type.  Possible values for
11643     CPU-TYPE are `g5', `g6', `z900', and `z990'.  When generating code
11644     using the instructions available on z/Architecture, the default is
11645     `-march=z900'.  Otherwise, the default is `-march=g5'.
11646
11647`-mtune=CPU-TYPE'
11648     Tune to CPU-TYPE everything applicable about the generated code,
11649     except for the ABI and the set of available instructions.  The
11650     list of CPU-TYPE values is the same as for `-march'.  The default
11651     is the value used for `-march'.
11652
11653`-mtpf-trace'
11654`-mno-tpf-trace'
11655     Generate code that adds (does not add) in TPF OS specific branches
11656     to trace routines in the operating system.  This option is off by
11657     default, even when compiling for the TPF OS.
11658
11659`-mfused-madd'
11660`-mno-fused-madd'
11661     Generate code that uses (does not use) the floating point multiply
11662     and accumulate instructions.  These instructions are generated by
11663     default if hardware floating point is used.
11664
11665`-mwarn-framesize=FRAMESIZE'
11666     Emit a warning if the current function exceeds the given frame
11667     size.  Because this is a compile time check it doesn't need to be
11668     a real problem when the program runs.  It is intended to identify
11669     functions which most probably cause a stack overflow.  It is
11670     useful to be used in an environment with limited stack size e.g.
11671     the linux kernel.
11672
11673`-mwarn-dynamicstack'
11674     Emit a warning if the function calls alloca or uses dynamically
11675     sized arrays.  This is generally a bad idea with a limited stack
11676     size.
11677
11678`-mstack-guard=STACK-GUARD'
11679
11680`-mstack-size=STACK-SIZE'
11681     These arguments always have to be used in conjunction.  If they
11682     are present the s390 back end emits additional instructions in the
11683     function prologue which trigger a trap if the stack size is
11684     STACK-GUARD bytes above the STACK-SIZE (remember that the stack on
11685     s390 grows downward).  These options are intended to be used to
11686     help debugging stack overflow problems.  The additionally emitted
11687     code causes only little overhead and hence can also be used in
11688     production like systems without greater performance degradation.
11689     The given values have to be exact powers of 2 and STACK-SIZE has
11690     to be greater than STACK-GUARD without exceeding 64k.  In order to
11691     be efficient the extra code makes the assumption that the stack
11692     starts at an address aligned to the value given by STACK-SIZE.
11693
11694
11695File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
11696
116973.17.29 Score Options
11698---------------------
11699
11700These options are defined for Score implementations:
11701
11702`-meb'
11703     Compile code for big endian mode.  This is the default.
11704
11705`-mel'
11706     Compile code for little endian mode.
11707
11708`-mnhwloop'
11709     Disable generate bcnz instruction.
11710
11711`-muls'
11712     Enable generate unaligned load and store instruction.
11713
11714`-mmac'
11715     Enable the use of multiply-accumulate instructions. Disabled by
11716     default.
11717
11718`-mscore5'
11719     Specify the SCORE5 as the target architecture.
11720
11721`-mscore5u'
11722     Specify the SCORE5U of the target architecture.
11723
11724`-mscore7'
11725     Specify the SCORE7 as the target architecture. This is the default.
11726
11727`-mscore7d'
11728     Specify the SCORE7D as the target architecture.
11729
11730
11731File: gcc.info,  Node: SH Options,  Next: SPARC Options,  Prev: Score Options,  Up: Submodel Options
11732
117333.17.30 SH Options
11734------------------
11735
11736These `-m' options are defined for the SH implementations:
11737
11738`-m1'
11739     Generate code for the SH1.
11740
11741`-m2'
11742     Generate code for the SH2.
11743
11744`-m2e'
11745     Generate code for the SH2e.
11746
11747`-m3'
11748     Generate code for the SH3.
11749
11750`-m3e'
11751     Generate code for the SH3e.
11752
11753`-m4-nofpu'
11754     Generate code for the SH4 without a floating-point unit.
11755
11756`-m4-single-only'
11757     Generate code for the SH4 with a floating-point unit that only
11758     supports single-precision arithmetic.
11759
11760`-m4-single'
11761     Generate code for the SH4 assuming the floating-point unit is in
11762     single-precision mode by default.
11763
11764`-m4'
11765     Generate code for the SH4.
11766
11767`-m4a-nofpu'
11768     Generate code for the SH4al-dsp, or for a SH4a in such a way that
11769     the floating-point unit is not used.
11770
11771`-m4a-single-only'
11772     Generate code for the SH4a, in such a way that no double-precision
11773     floating point operations are used.
11774
11775`-m4a-single'
11776     Generate code for the SH4a assuming the floating-point unit is in
11777     single-precision mode by default.
11778
11779`-m4a'
11780     Generate code for the SH4a.
11781
11782`-m4al'
11783     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
11784     the assembler.  GCC doesn't generate any DSP instructions at the
11785     moment.
11786
11787`-mb'
11788     Compile code for the processor in big endian mode.
11789
11790`-ml'
11791     Compile code for the processor in little endian mode.
11792
11793`-mdalign'
11794     Align doubles at 64-bit boundaries.  Note that this changes the
11795     calling conventions, and thus some functions from the standard C
11796     library will not work unless you recompile it first with
11797     `-mdalign'.
11798
11799`-mrelax'
11800     Shorten some address references at link time, when possible; uses
11801     the linker option `-relax'.
11802
11803`-mbigtable'
11804     Use 32-bit offsets in `switch' tables.  The default is to use
11805     16-bit offsets.
11806
11807`-mfmovd'
11808     Enable the use of the instruction `fmovd'.
11809
11810`-mhitachi'
11811     Comply with the calling conventions defined by Renesas.
11812
11813`-mrenesas'
11814     Comply with the calling conventions defined by Renesas.
11815
11816`-mno-renesas'
11817     Comply with the calling conventions defined for GCC before the
11818     Renesas conventions were available.  This option is the default
11819     for all targets of the SH toolchain except for `sh-symbianelf'.
11820
11821`-mnomacsave'
11822     Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
11823     given.
11824
11825`-mieee'
11826     Increase IEEE-compliance of floating-point code.  At the moment,
11827     this is equivalent to `-fno-finite-math-only'.  When generating 16
11828     bit SH opcodes, getting IEEE-conforming results for comparisons of
11829     NANs / infinities incurs extra overhead in every floating point
11830     comparison, therefore the default is set to `-ffinite-math-only'.
11831
11832`-misize'
11833     Dump instruction size and location in the assembly code.
11834
11835`-mpadstruct'
11836     This option is deprecated.  It pads structures to multiple of 4
11837     bytes, which is incompatible with the SH ABI.
11838
11839`-mspace'
11840     Optimize for space instead of speed.  Implied by `-Os'.
11841
11842`-mprefergot'
11843     When generating position-independent code, emit function calls
11844     using the Global Offset Table instead of the Procedure Linkage
11845     Table.
11846
11847`-musermode'
11848     Generate a library function call to invalidate instruction cache
11849     entries, after fixing up a trampoline.  This library function call
11850     doesn't assume it can write to the whole memory address space.
11851     This is the default when the target is `sh-*-linux*'.
11852
11853`-multcost=NUMBER'
11854     Set the cost to assume for a multiply insn.
11855
11856`-mdiv=STRATEGY'
11857     Set the division strategy to use for SHmedia code.  STRATEGY must
11858     be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
11859     inv:call, inv:call2, inv:fp .  "fp" performs the operation in
11860     floating point.  This has a very high latency, but needs only a
11861     few instructions, so it might be a good choice if your code has
11862     enough easily exploitable ILP to allow the compiler to schedule
11863     the floating point instructions together with other instructions.
11864     Division by zero causes a floating point exception.  "inv" uses
11865     integer operations to calculate the inverse of the divisor, and
11866     then multiplies the dividend with the inverse.  This strategy
11867     allows cse and hoisting of the inverse calculation.  Division by
11868     zero calculates an unspecified result, but does not trap.
11869     "inv:minlat" is a variant of "inv" where if no cse / hoisting
11870     opportunities have been found, or if the entire operation has been
11871     hoisted to the same place, the last stages of the inverse
11872     calculation are intertwined with the final multiply to reduce the
11873     overall latency, at the expense of using a few more instructions,
11874     and thus offering fewer scheduling opportunities with other code.
11875     "call" calls a library function that usually implements the
11876     inv:minlat strategy.  This gives high code density for
11877     m5-*media-nofpu compilations.  "call2" uses a different entry
11878     point of the same library function, where it assumes that a
11879     pointer to a lookup table has already been set up, which exposes
11880     the pointer load to cse / code hoisting optimizations.
11881     "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
11882     for initial code generation, but if the code stays unoptimized,
11883     revert to the "call", "call2", or "fp" strategies, respectively.
11884     Note that the potentially-trapping side effect of division by zero
11885     is carried by a separate instruction, so it is possible that all
11886     the integer instructions are hoisted out, but the marker for the
11887     side effect stays where it is.  A recombination to fp operations
11888     or a call is not possible in that case.  "inv20u" and "inv20l" are
11889     variants of the "inv:minlat" strategy.  In the case that the
11890     inverse calculation was nor separated from the multiply, they speed
11891     up division where the dividend fits into 20 bits (plus sign where
11892     applicable), by inserting a test to skip a number of operations in
11893     this case; this test slows down the case of larger dividends.
11894     inv20u assumes the case of a such a small dividend to be unlikely,
11895     and inv20l assumes it to be likely.
11896
11897`-mdivsi3_libfunc=NAME'
11898     Set the name of the library function used for 32 bit signed
11899     division to NAME.  This only affect the name used in the call and
11900     inv:call division strategies, and the compiler will still expect
11901     the same sets of input/output/clobbered registers as if this
11902     option was not present.
11903
11904`-madjust-unroll'
11905     Throttle unrolling to avoid thrashing target registers.  This
11906     option only has an effect if the gcc code base supports the
11907     TARGET_ADJUST_UNROLL_MAX target hook.
11908
11909`-mindexed-addressing'
11910     Enable the use of the indexed addressing mode for
11911     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
11912     implement 32 bit wrap-around semantics for the indexed addressing
11913     mode.  The architecture allows the implementation of processors
11914     with 64 bit MMU, which the OS could use to get 32 bit addressing,
11915     but since no current hardware implementation supports this or any
11916     other way to make the indexed addressing mode safe to use in the
11917     32 bit ABI, the default is -mno-indexed-addressing.
11918
11919`-mgettrcost=NUMBER'
11920     Set the cost assumed for the gettr instruction to NUMBER.  The
11921     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
11922
11923`-mpt-fixed'
11924     Assume pt* instructions won't trap.  This will generally generate
11925     better scheduled code, but is unsafe on current hardware.  The
11926     current architecture definition says that ptabs and ptrel trap
11927     when the target anded with 3 is 3.  This has the unintentional
11928     effect of making it unsafe to schedule ptabs / ptrel before a
11929     branch, or hoist it out of a loop.  For example,
11930     __do_global_ctors, a part of libgcc that runs constructors at
11931     program startup, calls functions in a list which is delimited by
11932     -1.  With the -mpt-fixed option, the ptabs will be done before
11933     testing against -1.  That means that all the constructors will be
11934     run a bit quicker, but when the loop comes to the end of the list,
11935     the program crashes because ptabs loads -1 into a target register.
11936     Since this option is unsafe for any hardware implementing the
11937     current architecture specification, the default is -mno-pt-fixed.
11938     Unless the user specifies a specific cost with `-mgettrcost',
11939     -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
11940     allocation using target registers for storing ordinary integers.
11941
11942`-minvalid-symbols'
11943     Assume symbols might be invalid.  Ordinary function symbols
11944     generated by the compiler will always be valid to load with
11945     movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
11946     linker tricks it is possible to generate symbols that will cause
11947     ptabs / ptrel to trap.  This option is only meaningful when
11948     `-mno-pt-fixed' is in effect.  It will then prevent
11949     cross-basic-block cse, hoisting and most scheduling of symbol
11950     loads.  The default is `-mno-invalid-symbols'.
11951
11952
11953File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: SH Options,  Up: Submodel Options
11954
119553.17.31 SPARC Options
11956---------------------
11957
11958These `-m' options are supported on the SPARC:
11959
11960`-mno-app-regs'
11961`-mapp-regs'
11962     Specify `-mapp-regs' to generate output using the global registers
11963     2 through 4, which the SPARC SVR4 ABI reserves for applications.
11964     This is the default.
11965
11966     To be fully SVR4 ABI compliant at the cost of some performance
11967     loss, specify `-mno-app-regs'.  You should compile libraries and
11968     system software with this option.
11969
11970`-mfpu'
11971`-mhard-float'
11972     Generate output containing floating point instructions.  This is
11973     the default.
11974
11975`-mno-fpu'
11976`-msoft-float'
11977     Generate output containing library calls for floating point.
11978     *Warning:* the requisite libraries are not available for all SPARC
11979     targets.  Normally the facilities of the machine's usual C
11980     compiler are used, but this cannot be done directly in
11981     cross-compilation.  You must make your own arrangements to provide
11982     suitable library functions for cross-compilation.  The embedded
11983     targets `sparc-*-aout' and `sparclite-*-*' do provide software
11984     floating point support.
11985
11986     `-msoft-float' changes the calling convention in the output file;
11987     therefore, it is only useful if you compile _all_ of a program with
11988     this option.  In particular, you need to compile `libgcc.a', the
11989     library that comes with GCC, with `-msoft-float' in order for this
11990     to work.
11991
11992`-mhard-quad-float'
11993     Generate output containing quad-word (long double) floating point
11994     instructions.
11995
11996`-msoft-quad-float'
11997     Generate output containing library calls for quad-word (long
11998     double) floating point instructions.  The functions called are
11999     those specified in the SPARC ABI.  This is the default.
12000
12001     As of this writing, there are no SPARC implementations that have
12002     hardware support for the quad-word floating point instructions.
12003     They all invoke a trap handler for one of these instructions, and
12004     then the trap handler emulates the effect of the instruction.
12005     Because of the trap handler overhead, this is much slower than
12006     calling the ABI library routines.  Thus the `-msoft-quad-float'
12007     option is the default.
12008
12009`-mno-unaligned-doubles'
12010`-munaligned-doubles'
12011     Assume that doubles have 8 byte alignment.  This is the default.
12012
12013     With `-munaligned-doubles', GCC assumes that doubles have 8 byte
12014     alignment only if they are contained in another type, or if they
12015     have an absolute address.  Otherwise, it assumes they have 4 byte
12016     alignment.  Specifying this option avoids some rare compatibility
12017     problems with code generated by other compilers.  It is not the
12018     default because it results in a performance loss, especially for
12019     floating point code.
12020
12021`-mno-faster-structs'
12022`-mfaster-structs'
12023     With `-mfaster-structs', the compiler assumes that structures
12024     should have 8 byte alignment.  This enables the use of pairs of
12025     `ldd' and `std' instructions for copies in structure assignment,
12026     in place of twice as many `ld' and `st' pairs.  However, the use
12027     of this changed alignment directly violates the SPARC ABI.  Thus,
12028     it's intended only for use on targets where the developer
12029     acknowledges that their resulting code will not be directly in
12030     line with the rules of the ABI.
12031
12032`-mimpure-text'
12033     `-mimpure-text', used in addition to `-shared', tells the compiler
12034     to not pass `-z text' to the linker when linking a shared object.
12035     Using this option, you can link position-dependent code into a
12036     shared object.
12037
12038     `-mimpure-text' suppresses the "relocations remain against
12039     allocatable but non-writable sections" linker error message.
12040     However, the necessary relocations will trigger copy-on-write, and
12041     the shared object is not actually shared across processes.
12042     Instead of using `-mimpure-text', you should compile all source
12043     code with `-fpic' or `-fPIC'.
12044
12045     This option is only available on SunOS and Solaris.
12046
12047`-mcpu=CPU_TYPE'
12048     Set the instruction set, register set, and instruction scheduling
12049     parameters for machine type CPU_TYPE.  Supported values for
12050     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
12051     `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
12052     `tsc701', `v9', `ultrasparc', `ultrasparc3', and `niagara'.
12053
12054     Default instruction scheduling parameters are used for values that
12055     select an architecture and not an implementation.  These are `v7',
12056     `v8', `sparclite', `sparclet', `v9'.
12057
12058     Here is a list of each supported architecture and their supported
12059     implementations.
12060
12061              v7:             cypress
12062              v8:             supersparc, hypersparc
12063              sparclite:      f930, f934, sparclite86x
12064              sparclet:       tsc701
12065              v9:             ultrasparc, ultrasparc3, niagara
12066
12067     By default (unless configured otherwise), GCC generates code for
12068     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
12069     the compiler additionally optimizes it for the Cypress CY7C602
12070     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
12071     also appropriate for the older SPARCStation 1, 2, IPX etc.
12072
12073     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
12074     architecture.  The only difference from V7 code is that the
12075     compiler emits the integer multiply and integer divide
12076     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
12077     `-mcpu=supersparc', the compiler additionally optimizes it for the
12078     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
12079     series.
12080
12081     With `-mcpu=sparclite', GCC generates code for the SPARClite
12082     variant of the SPARC architecture.  This adds the integer
12083     multiply, integer divide step and scan (`ffs') instructions which
12084     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
12085     compiler additionally optimizes it for the Fujitsu MB86930 chip,
12086     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
12087     the compiler additionally optimizes it for the Fujitsu MB86934
12088     chip, which is the more recent SPARClite with FPU.
12089
12090     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
12091     of the SPARC architecture.  This adds the integer multiply,
12092     multiply/accumulate, integer divide step and scan (`ffs')
12093     instructions which exist in SPARClet but not in SPARC-V7.  With
12094     `-mcpu=tsc701', the compiler additionally optimizes it for the
12095     TEMIC SPARClet chip.
12096
12097     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
12098     architecture.  This adds 64-bit integer and floating-point move
12099     instructions, 3 additional floating-point condition code registers
12100     and conditional move instructions.  With `-mcpu=ultrasparc', the
12101     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
12102     chips.  With `-mcpu=ultrasparc3', the compiler additionally
12103     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
12104     chips.  With `-mcpu=niagara', the compiler additionally optimizes
12105     it for Sun UltraSPARC T1 chips.
12106
12107`-mtune=CPU_TYPE'
12108     Set the instruction scheduling parameters for machine type
12109     CPU_TYPE, but do not set the instruction set or register set that
12110     the option `-mcpu=CPU_TYPE' would.
12111
12112     The same values for `-mcpu=CPU_TYPE' can be used for
12113     `-mtune=CPU_TYPE', but the only useful values are those that
12114     select a particular cpu implementation.  Those are `cypress',
12115     `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
12116     `tsc701', `ultrasparc', `ultrasparc3', and `niagara'.
12117
12118`-mv8plus'
12119`-mno-v8plus'
12120     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
12121     difference from the V8 ABI is that the global and out registers are
12122     considered 64-bit wide.  This is enabled by default on Solaris in
12123     32-bit mode for all SPARC-V9 processors.
12124
12125`-mvis'
12126`-mno-vis'
12127     With `-mvis', GCC generates code that takes advantage of the
12128     UltraSPARC Visual Instruction Set extensions.  The default is
12129     `-mno-vis'.
12130
12131 These `-m' options are supported in addition to the above on SPARC-V9
12132processors in 64-bit environments:
12133
12134`-mlittle-endian'
12135     Generate code for a processor running in little-endian mode.  It
12136     is only available for a few configurations and most notably not on
12137     Solaris and Linux.
12138
12139`-m32'
12140`-m64'
12141     Generate code for a 32-bit or 64-bit environment.  The 32-bit
12142     environment sets int, long and pointer to 32 bits.  The 64-bit
12143     environment sets int to 32 bits and long and pointer to 64 bits.
12144
12145`-mcmodel=medlow'
12146     Generate code for the Medium/Low code model: 64-bit addresses,
12147     programs must be linked in the low 32 bits of memory.  Programs
12148     can be statically or dynamically linked.
12149
12150`-mcmodel=medmid'
12151     Generate code for the Medium/Middle code model: 64-bit addresses,
12152     programs must be linked in the low 44 bits of memory, the text and
12153     data segments must be less than 2GB in size and the data segment
12154     must be located within 2GB of the text segment.
12155
12156`-mcmodel=medany'
12157     Generate code for the Medium/Anywhere code model: 64-bit
12158     addresses, programs may be linked anywhere in memory, the text and
12159     data segments must be less than 2GB in size and the data segment
12160     must be located within 2GB of the text segment.
12161
12162`-mcmodel=embmedany'
12163     Generate code for the Medium/Anywhere code model for embedded
12164     systems: 64-bit addresses, the text and data segments must be less
12165     than 2GB in size, both starting anywhere in memory (determined at
12166     link time).  The global register %g4 points to the base of the
12167     data segment.  Programs are statically linked and PIC is not
12168     supported.
12169
12170`-mstack-bias'
12171`-mno-stack-bias'
12172     With `-mstack-bias', GCC assumes that the stack pointer, and frame
12173     pointer if present, are offset by -2047 which must be added back
12174     when making stack frame references.  This is the default in 64-bit
12175     mode.  Otherwise, assume no such offset is present.
12176
12177 These switches are supported in addition to the above on Solaris:
12178
12179`-threads'
12180     Add support for multithreading using the Solaris threads library.
12181     This option sets flags for both the preprocessor and linker.  This
12182     option does not affect the thread safety of object code produced
12183     by the compiler or that of libraries supplied with it.
12184
12185`-pthreads'
12186     Add support for multithreading using the POSIX threads library.
12187     This option sets flags for both the preprocessor and linker.  This
12188     option does not affect the thread safety of object code produced
12189     by the compiler or that of libraries supplied with it.
12190
12191`-pthread'
12192     This is a synonym for `-pthreads'.
12193
12194
12195File: gcc.info,  Node: System V Options,  Next: TMS320C3x/C4x Options,  Prev: SPARC Options,  Up: Submodel Options
12196
121973.17.32 Options for System V
12198----------------------------
12199
12200These additional options are available on System V Release 4 for
12201compatibility with other compilers on those systems:
12202
12203`-G'
12204     Create a shared object.  It is recommended that `-symbolic' or
12205     `-shared' be used instead.
12206
12207`-Qy'
12208     Identify the versions of each tool used by the compiler, in a
12209     `.ident' assembler directive in the output.
12210
12211`-Qn'
12212     Refrain from adding `.ident' directives to the output file (this is
12213     the default).
12214
12215`-YP,DIRS'
12216     Search the directories DIRS, and no others, for libraries
12217     specified with `-l'.
12218
12219`-Ym,DIR'
12220     Look in the directory DIR to find the M4 preprocessor.  The
12221     assembler uses this option.
12222
12223
12224File: gcc.info,  Node: TMS320C3x/C4x Options,  Next: V850 Options,  Prev: System V Options,  Up: Submodel Options
12225
122263.17.33 TMS320C3x/C4x Options
12227-----------------------------
12228
12229These `-m' options are defined for TMS320C3x/C4x implementations:
12230
12231`-mcpu=CPU_TYPE'
12232     Set the instruction set, register set, and instruction scheduling
12233     parameters for machine type CPU_TYPE.  Supported values for
12234     CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'.  The default
12235     is `c40' to generate code for the TMS320C40.
12236
12237`-mbig-memory'
12238`-mbig'
12239`-msmall-memory'
12240`-msmall'
12241     Generates code for the big or small memory model.  The small memory
12242     model assumed that all data fits into one 64K word page.  At
12243     run-time the data page (DP) register must be set to point to the
12244     64K page containing the .bss and .data program sections.  The big
12245     memory model is the default and requires reloading of the DP
12246     register for every direct memory access.
12247
12248`-mbk'
12249`-mno-bk'
12250     Allow (disallow) allocation of general integer operands into the
12251     block count register BK.
12252
12253`-mdb'
12254`-mno-db'
12255     Enable (disable) generation of code using decrement and branch,
12256     DBcond(D), instructions.  This is enabled by default for the C4x.
12257     To be on the safe side, this is disabled for the C3x, since the
12258     maximum iteration count on the C3x is 2^23 + 1 (but who iterates
12259     loops more than 2^23 times on the C3x?).  Note that GCC will try
12260     to reverse a loop so that it can utilize the decrement and branch
12261     instruction, but will give up if there is more than one memory
12262     reference in the loop.  Thus a loop where the loop counter is
12263     decremented can generate slightly more efficient code, in cases
12264     where the RPTB instruction cannot be utilized.
12265
12266`-mdp-isr-reload'
12267`-mparanoid'
12268     Force the DP register to be saved on entry to an interrupt service
12269     routine (ISR), reloaded to point to the data section, and restored
12270     on exit from the ISR.  This should not be required unless someone
12271     has violated the small memory model by modifying the DP register,
12272     say within an object library.
12273
12274`-mmpyi'
12275`-mno-mpyi'
12276     For the C3x use the 24-bit MPYI instruction for integer multiplies
12277     instead of a library call to guarantee 32-bit results.  Note that
12278     if one of the operands is a constant, then the multiplication will
12279     be performed using shifts and adds.  If the `-mmpyi' option is not
12280     specified for the C3x, then squaring operations are performed
12281     inline instead of a library call.
12282
12283`-mfast-fix'
12284`-mno-fast-fix'
12285     The C3x/C4x FIX instruction to convert a floating point value to an
12286     integer value chooses the nearest integer less than or equal to the
12287     floating point value rather than to the nearest integer.  Thus if
12288     the floating point number is negative, the result will be
12289     incorrectly truncated an additional code is necessary to detect
12290     and correct this case.  This option can be used to disable
12291     generation of the additional code required to correct the result.
12292
12293`-mrptb'
12294`-mno-rptb'
12295     Enable (disable) generation of repeat block sequences using the
12296     RPTB instruction for zero overhead looping.  The RPTB construct is
12297     only used for innermost loops that do not call functions or jump
12298     across the loop boundaries.  There is no advantage having nested
12299     RPTB loops due to the overhead required to save and restore the
12300     RC, RS, and RE registers.  This is enabled by default with `-O2'.
12301
12302`-mrpts=COUNT'
12303`-mno-rpts'
12304     Enable (disable) the use of the single instruction repeat
12305     instruction RPTS.  If a repeat block contains a single
12306     instruction, and the loop count can be guaranteed to be less than
12307     the value COUNT, GCC will emit a RPTS instruction instead of a
12308     RPTB.  If no value is specified, then a RPTS will be emitted even
12309     if the loop count cannot be determined at compile time.  Note that
12310     the repeated instruction following RPTS does not have to be
12311     reloaded from memory each iteration, thus freeing up the CPU buses
12312     for operands.  However, since interrupts are blocked by this
12313     instruction, it is disabled by default.
12314
12315`-mloop-unsigned'
12316`-mno-loop-unsigned'
12317     The maximum iteration count when using RPTS and RPTB (and DB on
12318     the C40) is 2^31 + 1 since these instructions test if the
12319     iteration count is negative to terminate the loop.  If the
12320     iteration count is unsigned there is a possibility than the 2^31 +
12321     1 maximum iteration count may be exceeded.  This switch allows an
12322     unsigned iteration count.
12323
12324`-mti'
12325     Try to emit an assembler syntax that the TI assembler (asm30) is
12326     happy with.  This also enforces compatibility with the API
12327     employed by the TI C3x C compiler.  For example, long doubles are
12328     passed as structures rather than in floating point registers.
12329
12330`-mregparm'
12331`-mmemparm'
12332     Generate code that uses registers (stack) for passing arguments to
12333     functions.  By default, arguments are passed in registers where
12334     possible rather than by pushing arguments on to the stack.
12335
12336`-mparallel-insns'
12337`-mno-parallel-insns'
12338     Allow the generation of parallel instructions.  This is enabled by
12339     default with `-O2'.
12340
12341`-mparallel-mpy'
12342`-mno-parallel-mpy'
12343     Allow the generation of MPY||ADD and MPY||SUB parallel
12344     instructions, provided `-mparallel-insns' is also specified.
12345     These instructions have tight register constraints which can
12346     pessimize the code generation of large functions.
12347
12348
12349
12350File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TMS320C3x/C4x Options,  Up: Submodel Options
12351
123523.17.34 V850 Options
12353--------------------
12354
12355These `-m' options are defined for V850 implementations:
12356
12357`-mlong-calls'
12358`-mno-long-calls'
12359     Treat all calls as being far away (near).  If calls are assumed to
12360     be far away, the compiler will always load the functions address
12361     up into a register, and call indirect through the pointer.
12362
12363`-mno-ep'
12364`-mep'
12365     Do not optimize (do optimize) basic blocks that use the same index
12366     pointer 4 or more times to copy pointer into the `ep' register, and
12367     use the shorter `sld' and `sst' instructions.  The `-mep' option
12368     is on by default if you optimize.
12369
12370`-mno-prolog-function'
12371`-mprolog-function'
12372     Do not use (do use) external functions to save and restore
12373     registers at the prologue and epilogue of a function.  The
12374     external functions are slower, but use less code space if more
12375     than one function saves the same number of registers.  The
12376     `-mprolog-function' option is on by default if you optimize.
12377
12378`-mspace'
12379     Try to make the code as small as possible.  At present, this just
12380     turns on the `-mep' and `-mprolog-function' options.
12381
12382`-mtda=N'
12383     Put static or global variables whose size is N bytes or less into
12384     the tiny data area that register `ep' points to.  The tiny data
12385     area can hold up to 256 bytes in total (128 bytes for byte
12386     references).
12387
12388`-msda=N'
12389     Put static or global variables whose size is N bytes or less into
12390     the small data area that register `gp' points to.  The small data
12391     area can hold up to 64 kilobytes.
12392
12393`-mzda=N'
12394     Put static or global variables whose size is N bytes or less into
12395     the first 32 kilobytes of memory.
12396
12397`-mv850'
12398     Specify that the target processor is the V850.
12399
12400`-mbig-switch'
12401     Generate code suitable for big switch tables.  Use this option
12402     only if the assembler/linker complain about out of range branches
12403     within a switch table.
12404
12405`-mapp-regs'
12406     This option will cause r2 and r5 to be used in the code generated
12407     by the compiler.  This setting is the default.
12408
12409`-mno-app-regs'
12410     This option will cause r2 and r5 to be treated as fixed registers.
12411
12412`-mv850e1'
12413     Specify that the target processor is the V850E1.  The preprocessor
12414     constants `__v850e1__' and `__v850e__' will be defined if this
12415     option is used.
12416
12417`-mv850e'
12418     Specify that the target processor is the V850E.  The preprocessor
12419     constant `__v850e__' will be defined if this option is used.
12420
12421     If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
12422     a default target processor will be chosen and the relevant
12423     `__v850*__' preprocessor constant will be defined.
12424
12425     The preprocessor constants `__v850' and `__v851__' are always
12426     defined, regardless of which processor variant is the target.
12427
12428`-mdisable-callt'
12429     This option will suppress generation of the CALLT instruction for
12430     the v850e and v850e1 flavors of the v850 architecture.  The
12431     default is `-mno-disable-callt' which allows the CALLT instruction
12432     to be used.
12433
12434
12435
12436File: gcc.info,  Node: VAX Options,  Next: x86-64 Options,  Prev: V850 Options,  Up: Submodel Options
12437
124383.17.35 VAX Options
12439-------------------
12440
12441These `-m' options are defined for the VAX:
12442
12443`-munix'
12444     Do not output certain jump instructions (`aobleq' and so on) that
12445     the Unix assembler for the VAX cannot handle across long ranges.
12446
12447`-mgnu'
12448     Do output those jump instructions, on the assumption that you will
12449     assemble with the GNU assembler.
12450
12451`-mg'
12452     Output code for g-format floating point numbers instead of
12453     d-format.
12454
12455
12456File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VAX Options,  Up: Submodel Options
12457
124583.17.36 x86-64 Options
12459----------------------
12460
12461These are listed under *Note i386 and x86-64 Options::.
12462
12463
12464File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
12465
124663.17.37 Xstormy16 Options
12467-------------------------
12468
12469These options are defined for Xstormy16:
12470
12471`-msim'
12472     Choose startup files and linker script suitable for the simulator.
12473
12474
12475File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
12476
124773.17.38 Xtensa Options
12478----------------------
12479
12480These options are supported for Xtensa targets:
12481
12482`-mconst16'
12483`-mno-const16'
12484     Enable or disable use of `CONST16' instructions for loading
12485     constant values.  The `CONST16' instruction is currently not a
12486     standard option from Tensilica.  When enabled, `CONST16'
12487     instructions are always used in place of the standard `L32R'
12488     instructions.  The use of `CONST16' is enabled by default only if
12489     the `L32R' instruction is not available.
12490
12491`-mfused-madd'
12492`-mno-fused-madd'
12493     Enable or disable use of fused multiply/add and multiply/subtract
12494     instructions in the floating-point option.  This has no effect if
12495     the floating-point option is not also enabled.  Disabling fused
12496     multiply/add and multiply/subtract instructions forces the
12497     compiler to use separate instructions for the multiply and
12498     add/subtract operations.  This may be desirable in some cases
12499     where strict IEEE 754-compliant results are required: the fused
12500     multiply add/subtract instructions do not round the intermediate
12501     result, thereby producing results with _more_ bits of precision
12502     than specified by the IEEE standard.  Disabling fused multiply
12503     add/subtract instructions also ensures that the program output is
12504     not sensitive to the compiler's ability to combine multiply and
12505     add/subtract operations.
12506
12507`-mtext-section-literals'
12508`-mno-text-section-literals'
12509     Control the treatment of literal pools.  The default is
12510     `-mno-text-section-literals', which places literals in a separate
12511     section in the output file.  This allows the literal pool to be
12512     placed in a data RAM/ROM, and it also allows the linker to combine
12513     literal pools from separate object files to remove redundant
12514     literals and improve code size.  With `-mtext-section-literals',
12515     the literals are interspersed in the text section in order to keep
12516     them as close as possible to their references.  This may be
12517     necessary for large assembly files.
12518
12519`-mtarget-align'
12520`-mno-target-align'
12521     When this option is enabled, GCC instructs the assembler to
12522     automatically align instructions to reduce branch penalties at the
12523     expense of some code density.  The assembler attempts to widen
12524     density instructions to align branch targets and the instructions
12525     following call instructions.  If there are not enough preceding
12526     safe density instructions to align a target, no widening will be
12527     performed.  The default is `-mtarget-align'.  These options do not
12528     affect the treatment of auto-aligned instructions like `LOOP',
12529     which the assembler will always align, either by widening density
12530     instructions or by inserting no-op instructions.
12531
12532`-mlongcalls'
12533`-mno-longcalls'
12534     When this option is enabled, GCC instructs the assembler to
12535     translate direct calls to indirect calls unless it can determine
12536     that the target of a direct call is in the range allowed by the
12537     call instruction.  This translation typically occurs for calls to
12538     functions in other source files.  Specifically, the assembler
12539     translates a direct `CALL' instruction into an `L32R' followed by
12540     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
12541     option should be used in programs where the call target can
12542     potentially be out of range.  This option is implemented in the
12543     assembler, not the compiler, so the assembly code generated by GCC
12544     will still show direct call instructions--look at the disassembled
12545     object code to see the actual instructions.  Note that the
12546     assembler will use an indirect call for every cross-file call, not
12547     just those that really will be out of range.
12548
12549
12550File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
12551
125523.17.39 zSeries Options
12553-----------------------
12554
12555These are listed under *Note S/390 and zSeries Options::.
12556
12557
12558File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
12559
125603.18 Options for Code Generation Conventions
12561============================================
12562
12563These machine-independent options control the interface conventions
12564used in code generation.
12565
12566 Most of them have both positive and negative forms; the negative form
12567of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
12568forms is listed--the one which is not the default.  You can figure out
12569the other form by either removing `no-' or adding it.
12570
12571`-fbounds-check'
12572     For front-ends that support it, generate additional code to check
12573     that indices used to access arrays are within the declared range.
12574     This is currently only supported by the Java and Fortran
12575     front-ends, where this option defaults to true and false
12576     respectively.
12577
12578`-ftrapv'
12579     This option generates traps for signed overflow on addition,
12580     subtraction, multiplication operations.
12581
12582`-fwrapv'
12583     This option instructs the compiler to assume that signed arithmetic
12584     overflow of addition, subtraction and multiplication wraps around
12585     using twos-complement representation.  This flag enables some
12586     optimizations and disables others.  This option is enabled by
12587     default for the Java front-end, as required by the Java language
12588     specification.
12589
12590`-fexceptions'
12591     Enable exception handling.  Generates extra code needed to
12592     propagate exceptions.  For some targets, this implies GCC will
12593     generate frame unwind information for all functions, which can
12594     produce significant data size overhead, although it does not
12595     affect execution.  If you do not specify this option, GCC will
12596     enable it by default for languages like C++ which normally require
12597     exception handling, and disable it for languages like C that do
12598     not normally require it.  However, you may need to enable this
12599     option when compiling C code that needs to interoperate properly
12600     with exception handlers written in C++.  You may also wish to
12601     disable this option if you are compiling older C++ programs that
12602     don't use exception handling.
12603
12604`-fnon-call-exceptions'
12605     Generate code that allows trapping instructions to throw
12606     exceptions.  Note that this requires platform-specific runtime
12607     support that does not exist everywhere.  Moreover, it only allows
12608     _trapping_ instructions to throw exceptions, i.e. memory
12609     references or floating point instructions.  It does not allow
12610     exceptions to be thrown from arbitrary signal handlers such as
12611     `SIGALRM'.
12612
12613`-funwind-tables'
12614     Similar to `-fexceptions', except that it will just generate any
12615     needed static data, but will not affect the generated code in any
12616     other way.  You will normally not enable this option; instead, a
12617     language processor that needs this handling would enable it on
12618     your behalf.
12619
12620`-fasynchronous-unwind-tables'
12621     Generate unwind table in dwarf2 format, if supported by target
12622     machine.  The table is exact at each instruction boundary, so it
12623     can be used for stack unwinding from asynchronous events (such as
12624     debugger or garbage collector).
12625
12626`-fpcc-struct-return'
12627     Return "short" `struct' and `union' values in memory like longer
12628     ones, rather than in registers.  This convention is less
12629     efficient, but it has the advantage of allowing intercallability
12630     between GCC-compiled files and files compiled with other
12631     compilers, particularly the Portable C Compiler (pcc).
12632
12633     The precise convention for returning structures in memory depends
12634     on the target configuration macros.
12635
12636     Short structures and unions are those whose size and alignment
12637     match that of some integer type.
12638
12639     *Warning:* code compiled with the `-fpcc-struct-return' switch is
12640     not binary compatible with code compiled with the
12641     `-freg-struct-return' switch.  Use it to conform to a non-default
12642     application binary interface.
12643
12644`-freg-struct-return'
12645     Return `struct' and `union' values in registers when possible.
12646     This is more efficient for small structures than
12647     `-fpcc-struct-return'.
12648
12649     If you specify neither `-fpcc-struct-return' nor
12650     `-freg-struct-return', GCC defaults to whichever convention is
12651     standard for the target.  If there is no standard convention, GCC
12652     defaults to `-fpcc-struct-return', except on targets where GCC is
12653     the principal compiler.  In those cases, we can choose the
12654     standard, and we chose the more efficient register return
12655     alternative.
12656
12657     *Warning:* code compiled with the `-freg-struct-return' switch is
12658     not binary compatible with code compiled with the
12659     `-fpcc-struct-return' switch.  Use it to conform to a non-default
12660     application binary interface.
12661
12662`-fshort-enums'
12663     Allocate to an `enum' type only as many bytes as it needs for the
12664     declared range of possible values.  Specifically, the `enum' type
12665     will be equivalent to the smallest integer type which has enough
12666     room.
12667
12668     *Warning:* the `-fshort-enums' switch causes GCC to generate code
12669     that is not binary compatible with code generated without that
12670     switch.  Use it to conform to a non-default application binary
12671     interface.
12672
12673`-fshort-double'
12674     Use the same size for `double' as for `float'.
12675
12676     *Warning:* the `-fshort-double' switch causes GCC to generate code
12677     that is not binary compatible with code generated without that
12678     switch.  Use it to conform to a non-default application binary
12679     interface.
12680
12681`-fshort-wchar'
12682     Override the underlying type for `wchar_t' to be `short unsigned
12683     int' instead of the default for the target.  This option is useful
12684     for building programs to run under WINE.
12685
12686     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
12687     that is not binary compatible with code generated without that
12688     switch.  Use it to conform to a non-default application binary
12689     interface.
12690
12691`-fno-common'
12692     In C, allocate even uninitialized global variables in the data
12693     section of the object file, rather than generating them as common
12694     blocks.  This has the effect that if the same variable is declared
12695     (without `extern') in two different compilations, you will get an
12696     error when you link them.  The only reason this might be useful is
12697     if you wish to verify that the program will work on other systems
12698     which always work this way.
12699
12700`-fno-ident'
12701     Ignore the `#ident' directive.
12702
12703`-finhibit-size-directive'
12704     Don't output a `.size' assembler directive, or anything else that
12705     would cause trouble if the function is split in the middle, and the
12706     two halves are placed at locations far apart in memory.  This
12707     option is used when compiling `crtstuff.c'; you should not need to
12708     use it for anything else.
12709
12710`-fverbose-asm'
12711     Put extra commentary information in the generated assembly code to
12712     make it more readable.  This option is generally only of use to
12713     those who actually need to read the generated assembly code
12714     (perhaps while debugging the compiler itself).
12715
12716     `-fno-verbose-asm', the default, causes the extra information to
12717     be omitted and is useful when comparing two assembler files.
12718
12719`-fpic'
12720     Generate position-independent code (PIC) suitable for use in a
12721     shared library, if supported for the target machine.  Such code
12722     accesses all constant addresses through a global offset table
12723     (GOT).  The dynamic loader resolves the GOT entries when the
12724     program starts (the dynamic loader is not part of GCC; it is part
12725     of the operating system).  If the GOT size for the linked
12726     executable exceeds a machine-specific maximum size, you get an
12727     error message from the linker indicating that `-fpic' does not
12728     work; in that case, recompile with `-fPIC' instead.  (These
12729     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
12730     386 has no such limit.)
12731
12732     Position-independent code requires special support, and therefore
12733     works only on certain machines.  For the 386, GCC supports PIC for
12734     System V but not for the Sun 386i.  Code generated for the IBM
12735     RS/6000 is always position-independent.
12736
12737     When this flag is set, the macros `__pic__' and `__PIC__' are
12738     defined to 1.
12739
12740`-fPIC'
12741     If supported for the target machine, emit position-independent
12742     code, suitable for dynamic linking and avoiding any limit on the
12743     size of the global offset table.  This option makes a difference
12744     on the m68k, PowerPC and SPARC.
12745
12746     Position-independent code requires special support, and therefore
12747     works only on certain machines.
12748
12749     When this flag is set, the macros `__pic__' and `__PIC__' are
12750     defined to 2.
12751
12752`-fpie'
12753`-fPIE'
12754     These options are similar to `-fpic' and `-fPIC', but generated
12755     position independent code can be only linked into executables.
12756     Usually these options are used when `-pie' GCC option will be used
12757     during linking.
12758
12759`-fno-jump-tables'
12760     Do not use jump tables for switch statements even where it would be
12761     more efficient than other code generation strategies.  This option
12762     is of use in conjunction with `-fpic' or `-fPIC' for building code
12763     which forms part of a dynamic linker and cannot reference the
12764     address of a jump table.  On some targets, jump tables do not
12765     require a GOT and this option is not needed.
12766
12767`-ffixed-REG'
12768     Treat the register named REG as a fixed register; generated code
12769     should never refer to it (except perhaps as a stack pointer, frame
12770     pointer or in some other fixed role).
12771
12772     REG must be the name of a register.  The register names accepted
12773     are machine-specific and are defined in the `REGISTER_NAMES' macro
12774     in the machine description macro file.
12775
12776     This flag does not have a negative form, because it specifies a
12777     three-way choice.
12778
12779`-fcall-used-REG'
12780     Treat the register named REG as an allocable register that is
12781     clobbered by function calls.  It may be allocated for temporaries
12782     or variables that do not live across a call.  Functions compiled
12783     this way will not save and restore the register REG.
12784
12785     It is an error to used this flag with the frame pointer or stack
12786     pointer.  Use of this flag for other registers that have fixed
12787     pervasive roles in the machine's execution model will produce
12788     disastrous results.
12789
12790     This flag does not have a negative form, because it specifies a
12791     three-way choice.
12792
12793`-fcall-saved-REG'
12794     Treat the register named REG as an allocable register saved by
12795     functions.  It may be allocated even for temporaries or variables
12796     that live across a call.  Functions compiled this way will save
12797     and restore the register REG if they use it.
12798
12799     It is an error to used this flag with the frame pointer or stack
12800     pointer.  Use of this flag for other registers that have fixed
12801     pervasive roles in the machine's execution model will produce
12802     disastrous results.
12803
12804     A different sort of disaster will result from the use of this flag
12805     for a register in which function values may be returned.
12806
12807     This flag does not have a negative form, because it specifies a
12808     three-way choice.
12809
12810`-fpack-struct[=N]'
12811     Without a value specified, pack all structure members together
12812     without holes.  When a value is specified (which must be a small
12813     power of two), pack structure members according to this value,
12814     representing the maximum alignment (that is, objects with default
12815     alignment requirements larger than this will be output potentially
12816     unaligned at the next fitting location.
12817
12818     *Warning:* the `-fpack-struct' switch causes GCC to generate code
12819     that is not binary compatible with code generated without that
12820     switch.  Additionally, it makes the code suboptimal.  Use it to
12821     conform to a non-default application binary interface.
12822
12823`-finstrument-functions'
12824     Generate instrumentation calls for entry and exit to functions.
12825     Just after function entry and just before function exit, the
12826     following profiling functions will be called with the address of
12827     the current function and its call site.  (On some platforms,
12828     `__builtin_return_address' does not work beyond the current
12829     function, so the call site information may not be available to the
12830     profiling functions otherwise.)
12831
12832          void __cyg_profile_func_enter (void *this_fn,
12833                                         void *call_site);
12834          void __cyg_profile_func_exit  (void *this_fn,
12835                                         void *call_site);
12836
12837     The first argument is the address of the start of the current
12838     function, which may be looked up exactly in the symbol table.
12839
12840     This instrumentation is also done for functions expanded inline in
12841     other functions.  The profiling calls will indicate where,
12842     conceptually, the inline function is entered and exited.  This
12843     means that addressable versions of such functions must be
12844     available.  If all your uses of a function are expanded inline,
12845     this may mean an additional expansion of code size.  If you use
12846     `extern inline' in your C code, an addressable version of such
12847     functions must be provided.  (This is normally the case anyways,
12848     but if you get lucky and the optimizer always expands the
12849     functions inline, you might have gotten away without providing
12850     static copies.)
12851
12852     A function may be given the attribute `no_instrument_function', in
12853     which case this instrumentation will not be done.  This can be
12854     used, for example, for the profiling functions listed above,
12855     high-priority interrupt routines, and any functions from which the
12856     profiling functions cannot safely be called (perhaps signal
12857     handlers, if the profiling routines generate output or allocate
12858     memory).
12859
12860`-fstack-check'
12861     Generate code to verify that you do not go beyond the boundary of
12862     the stack.  You should specify this flag if you are running in an
12863     environment with multiple threads, but only rarely need to specify
12864     it in a single-threaded environment since stack overflow is
12865     automatically detected on nearly all systems if there is only one
12866     stack.
12867
12868     Note that this switch does not actually cause checking to be done;
12869     the operating system must do that.  The switch causes generation
12870     of code to ensure that the operating system sees the stack being
12871     extended.
12872
12873`-fstack-limit-register=REG'
12874`-fstack-limit-symbol=SYM'
12875`-fno-stack-limit'
12876     Generate code to ensure that the stack does not grow beyond a
12877     certain value, either the value of a register or the address of a
12878     symbol.  If the stack would grow beyond the value, a signal is
12879     raised.  For most targets, the signal is raised before the stack
12880     overruns the boundary, so it is possible to catch the signal
12881     without taking special precautions.
12882
12883     For instance, if the stack starts at absolute address `0x80000000'
12884     and grows downwards, you can use the flags
12885     `-fstack-limit-symbol=__stack_limit' and
12886     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
12887     of 128KB.  Note that this may only work with the GNU linker.
12888
12889`-fargument-alias'
12890`-fargument-noalias'
12891`-fargument-noalias-global'
12892`-fargument-noalias-anything'
12893     Specify the possible relationships among parameters and between
12894     parameters and global data.
12895
12896     `-fargument-alias' specifies that arguments (parameters) may alias
12897     each other and may alias global storage.
12898     `-fargument-noalias' specifies that arguments do not alias each
12899     other, but may alias global storage.
12900     `-fargument-noalias-global' specifies that arguments do not alias
12901     each other and do not alias global storage.
12902     `-fargument-noalias-anything' specifies that arguments do not
12903     alias any other storage.
12904
12905     Each language will automatically use whatever option is required by
12906     the language standard.  You should not need to use these options
12907     yourself.
12908
12909`-fleading-underscore'
12910     This option and its counterpart, `-fno-leading-underscore',
12911     forcibly change the way C symbols are represented in the object
12912     file.  One use is to help link with legacy assembly code.
12913
12914     *Warning:* the `-fleading-underscore' switch causes GCC to
12915     generate code that is not binary compatible with code generated
12916     without that switch.  Use it to conform to a non-default
12917     application binary interface.  Not all targets provide complete
12918     support for this switch.
12919
12920`-ftls-model=MODEL'
12921     Alter the thread-local storage model to be used (*note
12922     Thread-Local::).  The MODEL argument should be one of
12923     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
12924
12925     The default without `-fpic' is `initial-exec'; with `-fpic' the
12926     default is `global-dynamic'.
12927
12928`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
12929     Set the default ELF image symbol visibility to the specified
12930     option--all symbols will be marked with this unless overridden
12931     within the code.  Using this feature can very substantially
12932     improve linking and load times of shared object libraries, produce
12933     more optimized code, provide near-perfect API export and prevent
12934     symbol clashes.  It is *strongly* recommended that you use this in
12935     any shared objects you distribute.
12936
12937     Despite the nomenclature, `default' always means public ie;
12938     available to be linked against from outside the shared object.
12939     `protected' and `internal' are pretty useless in real-world usage
12940     so the only other commonly used option will be `hidden'.  The
12941     default if `-fvisibility' isn't specified is `default', i.e., make
12942     every symbol public--this causes the same behavior as previous
12943     versions of GCC.
12944
12945     A good explanation of the benefits offered by ensuring ELF symbols
12946     have the correct visibility is given by "How To Write Shared
12947     Libraries" by Ulrich Drepper (which can be found at
12948     `http://people.redhat.com/~drepper/')--however a superior solution
12949     made possible by this option to marking things hidden when the
12950     default is public is to make the default hidden and mark things
12951     public.  This is the norm with DLL's on Windows and with
12952     `-fvisibility=hidden' and `__attribute__
12953     ((visibility("default")))' instead of `__declspec(dllexport)' you
12954     get almost identical semantics with identical syntax.  This is a
12955     great boon to those working with cross-platform projects.
12956
12957     For those adding visibility support to existing code, you may find
12958     `#pragma GCC visibility' of use.  This works by you enclosing the
12959     declarations you wish to set visibility for with (for example)
12960     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
12961     pop'.  Bear in mind that symbol visibility should be viewed *as
12962     part of the API interface contract* and thus all new code should
12963     always specify visibility when it is not the default ie;
12964     declarations only for use within the local DSO should *always* be
12965     marked explicitly as hidden as so to avoid PLT indirection
12966     overheads--making this abundantly clear also aids readability and
12967     self-documentation of the code.  Note that due to ISO C++
12968     specification requirements, operator new and operator delete must
12969     always be of default visibility.
12970
12971     Be aware that headers from outside your project, in particular
12972     system headers and headers from any other library you use, may not
12973     be expecting to be compiled with visibility other than the
12974     default.  You may need to explicitly say `#pragma GCC visibility
12975     push(default)' before including any such headers.
12976
12977     `extern' declarations are not affected by `-fvisibility', so a lot
12978     of code can be recompiled with `-fvisibility=hidden' with no
12979     modifications.  However, this means that calls to `extern'
12980     functions with no explicit visibility will use the PLT, so it is
12981     more effective to use `__attribute ((visibility))' and/or `#pragma
12982     GCC visibility' to tell the compiler which `extern' declarations
12983     should be treated as hidden.
12984
12985     Note that `-fvisibility' does affect C++ vague linkage entities.
12986     This means that, for instance, an exception class that will be
12987     thrown between DSOs must be explicitly marked with default
12988     visibility so that the `type_info' nodes will be unified between
12989     the DSOs.
12990
12991     An overview of these techniques, their benefits and how to use them
12992     is at `http://gcc.gnu.org/wiki/Visibility'.
12993
12994
12995
12996File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
12997
129983.19 Environment Variables Affecting GCC
12999========================================
13000
13001This section describes several environment variables that affect how GCC
13002operates.  Some of them work by specifying directories or prefixes to
13003use when searching for various kinds of files.  Some are used to
13004specify other aspects of the compilation environment.
13005
13006 Note that you can also specify places to search using options such as
13007`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
13008over places specified using environment variables, which in turn take
13009precedence over those specified by the configuration of GCC.  *Note
13010Controlling the Compilation Driver `gcc': (gccint)Driver.
13011
13012`LANG'
13013`LC_CTYPE'
13014`LC_MESSAGES'
13015`LC_ALL'
13016     These environment variables control the way that GCC uses
13017     localization information that allow GCC to work with different
13018     national conventions.  GCC inspects the locale categories
13019     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
13020     These locale categories can be set to any value supported by your
13021     installation.  A typical value is `en_GB.UTF-8' for English in the
13022     United Kingdom encoded in UTF-8.
13023
13024     The `LC_CTYPE' environment variable specifies character
13025     classification.  GCC uses it to determine the character boundaries
13026     in a string; this is needed for some multibyte encodings that
13027     contain quote and escape characters that would otherwise be
13028     interpreted as a string end or escape.
13029
13030     The `LC_MESSAGES' environment variable specifies the language to
13031     use in diagnostic messages.
13032
13033     If the `LC_ALL' environment variable is set, it overrides the value
13034     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
13035     `LC_MESSAGES' default to the value of the `LANG' environment
13036     variable.  If none of these variables are set, GCC defaults to
13037     traditional C English behavior.
13038
13039`TMPDIR'
13040     If `TMPDIR' is set, it specifies the directory to use for temporary
13041     files.  GCC uses temporary files to hold the output of one stage of
13042     compilation which is to be used as input to the next stage: for
13043     example, the output of the preprocessor, which is the input to the
13044     compiler proper.
13045
13046`GCC_EXEC_PREFIX'
13047     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
13048     names of the subprograms executed by the compiler.  No slash is
13049     added when this prefix is combined with the name of a subprogram,
13050     but you can specify a prefix that ends with a slash if you wish.
13051
13052     If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
13053     appropriate prefix to use based on the pathname it was invoked
13054     with.
13055
13056     If GCC cannot find the subprogram using the specified prefix, it
13057     tries looking in the usual places for the subprogram.
13058
13059     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
13060     PREFIX is the value of `prefix' when you ran the `configure'
13061     script.
13062
13063     Other prefixes specified with `-B' take precedence over this
13064     prefix.
13065
13066     This prefix is also used for finding files such as `crt0.o' that
13067     are used for linking.
13068
13069     In addition, the prefix is used in an unusual way in finding the
13070     directories to search for header files.  For each of the standard
13071     directories whose name normally begins with `/usr/local/lib/gcc'
13072     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
13073     replacing that beginning with the specified prefix to produce an
13074     alternate directory name.  Thus, with `-Bfoo/', GCC will search
13075     `foo/bar' where it would normally search `/usr/local/lib/bar'.
13076     These alternate directories are searched first; the standard
13077     directories come next.
13078
13079`COMPILER_PATH'
13080     The value of `COMPILER_PATH' is a colon-separated list of
13081     directories, much like `PATH'.  GCC tries the directories thus
13082     specified when searching for subprograms, if it can't find the
13083     subprograms using `GCC_EXEC_PREFIX'.
13084
13085`LIBRARY_PATH'
13086     The value of `LIBRARY_PATH' is a colon-separated list of
13087     directories, much like `PATH'.  When configured as a native
13088     compiler, GCC tries the directories thus specified when searching
13089     for special linker files, if it can't find them using
13090     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
13091     when searching for ordinary libraries for the `-l' option (but
13092     directories specified with `-L' come first).
13093
13094`LANG'
13095     This variable is used to pass locale information to the compiler.
13096     One way in which this information is used is to determine the
13097     character set to be used when character literals, string literals
13098     and comments are parsed in C and C++.  When the compiler is
13099     configured to allow multibyte characters, the following values for
13100     `LANG' are recognized:
13101
13102    `C-JIS'
13103          Recognize JIS characters.
13104
13105    `C-SJIS'
13106          Recognize SJIS characters.
13107
13108    `C-EUCJP'
13109          Recognize EUCJP characters.
13110
13111     If `LANG' is not defined, or if it has some other value, then the
13112     compiler will use mblen and mbtowc as defined by the default
13113     locale to recognize and translate multibyte characters.
13114
13115Some additional environments variables affect the behavior of the
13116preprocessor.
13117
13118`CPATH'
13119`C_INCLUDE_PATH'
13120`CPLUS_INCLUDE_PATH'
13121`OBJC_INCLUDE_PATH'
13122     Each variable's value is a list of directories separated by a
13123     special character, much like `PATH', in which to look for header
13124     files.  The special character, `PATH_SEPARATOR', is
13125     target-dependent and determined at GCC build time.  For Microsoft
13126     Windows-based targets it is a semicolon, and for almost all other
13127     targets it is a colon.
13128
13129     `CPATH' specifies a list of directories to be searched as if
13130     specified with `-I', but after any paths given with `-I' options
13131     on the command line.  This environment variable is used regardless
13132     of which language is being preprocessed.
13133
13134     The remaining environment variables apply only when preprocessing
13135     the particular language indicated.  Each specifies a list of
13136     directories to be searched as if specified with `-isystem', but
13137     after any paths given with `-isystem' options on the command line.
13138
13139     In all these variables, an empty element instructs the compiler to
13140     search its current working directory.  Empty elements can appear
13141     at the beginning or end of a path.  For instance, if the value of
13142     `CPATH' is `:/special/include', that has the same effect as
13143     `-I. -I/special/include'.
13144
13145`DEPENDENCIES_OUTPUT'
13146     If this variable is set, its value specifies how to output
13147     dependencies for Make based on the non-system header files
13148     processed by the compiler.  System header files are ignored in the
13149     dependency output.
13150
13151     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
13152     which case the Make rules are written to that file, guessing the
13153     target name from the source file name.  Or the value can have the
13154     form `FILE TARGET', in which case the rules are written to file
13155     FILE using TARGET as the target name.
13156
13157     In other words, this environment variable is equivalent to
13158     combining the options `-MM' and `-MF' (*note Preprocessor
13159     Options::), with an optional `-MT' switch too.
13160
13161`SUNPRO_DEPENDENCIES'
13162     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
13163     except that system header files are not ignored, so it implies
13164     `-M' rather than `-MM'.  However, the dependence on the main input
13165     file is omitted.  *Note Preprocessor Options::.
13166
13167
13168File: gcc.info,  Node: Precompiled Headers,  Next: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
13169
131703.20 Using Precompiled Headers
13171==============================
13172
13173Often large projects have many header files that are included in every
13174source file.  The time the compiler takes to process these header files
13175over and over again can account for nearly all of the time required to
13176build the project.  To make builds faster, GCC allows users to
13177`precompile' a header file; then, if builds can use the precompiled
13178header file they will be much faster.
13179
13180 To create a precompiled header file, simply compile it as you would any
13181other file, if necessary using the `-x' option to make the driver treat
13182it as a C or C++ header file.  You will probably want to use a tool
13183like `make' to keep the precompiled header up-to-date when the headers
13184it contains change.
13185
13186 A precompiled header file will be searched for when `#include' is seen
13187in the compilation.  As it searches for the included file (*note Search
13188Path: (cpp)Search Path.) the compiler looks for a precompiled header in
13189each directory just before it looks for the include file in that
13190directory.  The name searched for is the name specified in the
13191`#include' with `.gch' appended.  If the precompiled header file can't
13192be used, it is ignored.
13193
13194 For instance, if you have `#include "all.h"', and you have `all.h.gch'
13195in the same directory as `all.h', then the precompiled header file will
13196be used if possible, and the original header will be used otherwise.
13197
13198 Alternatively, you might decide to put the precompiled header file in a
13199directory and use `-I' to ensure that directory is searched before (or
13200instead of) the directory containing the original header.  Then, if you
13201want to check that the precompiled header file is always used, you can
13202put a file of the same name as the original header in this directory
13203containing an `#error' command.
13204
13205 This also works with `-include'.  So yet another way to use
13206precompiled headers, good for projects not designed with precompiled
13207header files in mind, is to simply take most of the header files used by
13208a project, include them from another header file, precompile that header
13209file, and `-include' the precompiled header.  If the header files have
13210guards against multiple inclusion, they will be skipped because they've
13211already been included (in the precompiled header).
13212
13213 If you need to precompile the same header file for different
13214languages, targets, or compiler options, you can instead make a
13215_directory_ named like `all.h.gch', and put each precompiled header in
13216the directory, perhaps using `-o'.  It doesn't matter what you call the
13217files in the directory, every precompiled header in the directory will
13218be considered.  The first precompiled header encountered in the
13219directory that is valid for this compilation will be used; they're
13220searched in no particular order.
13221
13222 There are many other possibilities, limited only by your imagination,
13223good sense, and the constraints of your build system.
13224
13225 A precompiled header file can be used only when these conditions apply:
13226
13227   * Only one precompiled header can be used in a particular
13228     compilation.
13229
13230   * A precompiled header can't be used once the first C token is seen.
13231     You can have preprocessor directives before a precompiled header;
13232     you can even include a precompiled header from inside another
13233     header, so long as there are no C tokens before the `#include'.
13234
13235   * The precompiled header file must be produced for the same language
13236     as the current compilation.  You can't use a C precompiled header
13237     for a C++ compilation.
13238
13239   * The precompiled header file must have been produced by the same
13240     compiler binary as the current compilation is using.
13241
13242   * Any macros defined before the precompiled header is included must
13243     either be defined in the same way as when the precompiled header
13244     was generated, or must not affect the precompiled header, which
13245     usually means that they don't appear in the precompiled header at
13246     all.
13247
13248     The `-D' option is one way to define a macro before a precompiled
13249     header is included; using a `#define' can also do it.  There are
13250     also some options that define macros implicitly, like `-O' and
13251     `-Wdeprecated'; the same rule applies to macros defined this way.
13252
13253   * If debugging information is output when using the precompiled
13254     header, using `-g' or similar, the same kind of debugging
13255     information must have been output when building the precompiled
13256     header.  However, a precompiled header built using `-g' can be
13257     used in a compilation when no debugging information is being
13258     output.
13259
13260   * The same `-m' options must generally be used when building and
13261     using the precompiled header.  *Note Submodel Options::, for any
13262     cases where this rule is relaxed.
13263
13264   * Each of the following options must be the same when building and
13265     using the precompiled header:
13266
13267          -fexceptions -funit-at-a-time
13268
13269   * Some other command-line options starting with `-f', `-p', or `-O'
13270     must be defined in the same way as when the precompiled header was
13271     generated.  At present, it's not clear which options are safe to
13272     change and which are not; the safest choice is to use exactly the
13273     same options when generating and using the precompiled header.
13274     The following are known to be safe:
13275
13276          -fmessage-length= -fpreprocessed
13277          -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
13278          -fsched-verbose=<number> -fschedule-insns -fvisibility=
13279          -pedantic-errors
13280
13281
13282 For all of these except the last, the compiler will automatically
13283ignore the precompiled header if the conditions aren't met.  If you
13284find an option combination that doesn't work and doesn't cause the
13285precompiled header to be ignored, please consider filing a bug report,
13286see *Note Bugs::.
13287
13288 If you do use differing options when generating and using the
13289precompiled header, the actual behavior will be a mixture of the
13290behavior for the options.  For instance, if you use `-g' to generate
13291the precompiled header but not when using it, you may or may not get
13292debugging information for routines in the precompiled header.
13293
13294
13295File: gcc.info,  Node: Running Protoize,  Prev: Precompiled Headers,  Up: Invoking GCC
13296
132973.21 Running Protoize
13298=====================
13299
13300The program `protoize' is an optional part of GCC.  You can use it to
13301add prototypes to a program, thus converting the program to ISO C in
13302one respect.  The companion program `unprotoize' does the reverse: it
13303removes argument types from any prototypes that are found.
13304
13305 When you run these programs, you must specify a set of source files as
13306command line arguments.  The conversion programs start out by compiling
13307these files to see what functions they define.  The information gathered
13308about a file FOO is saved in a file named `FOO.X'.
13309
13310 After scanning comes actual conversion.  The specified files are all
13311eligible to be converted; any files they include (whether sources or
13312just headers) are eligible as well.
13313
13314 But not all the eligible files are converted.  By default, `protoize'
13315and `unprotoize' convert only source and header files in the current
13316directory.  You can specify additional directories whose files should
13317be converted with the `-d DIRECTORY' option.  You can also specify
13318particular files to exclude with the `-x FILE' option.  A file is
13319converted if it is eligible, its directory name matches one of the
13320specified directory names, and its name within the directory has not
13321been excluded.
13322
13323 Basic conversion with `protoize' consists of rewriting most function
13324definitions and function declarations to specify the types of the
13325arguments.  The only ones not rewritten are those for varargs functions.
13326
13327 `protoize' optionally inserts prototype declarations at the beginning
13328of the source file, to make them available for any calls that precede
13329the function's definition.  Or it can insert prototype declarations
13330with block scope in the blocks where undeclared functions are called.
13331
13332 Basic conversion with `unprotoize' consists of rewriting most function
13333declarations to remove any argument types, and rewriting function
13334definitions to the old-style pre-ISO form.
13335
13336 Both conversion programs print a warning for any function declaration
13337or definition that they can't convert.  You can suppress these warnings
13338with `-q'.
13339
13340 The output from `protoize' or `unprotoize' replaces the original
13341source file.  The original file is renamed to a name ending with
13342`.save' (for DOS, the saved filename ends in `.sav' without the
13343original `.c' suffix).  If the `.save' (`.sav' for DOS) file already
13344exists, then the source file is simply discarded.
13345
13346 `protoize' and `unprotoize' both depend on GCC itself to scan the
13347program and collect information about the functions it uses.  So
13348neither of these programs will work until GCC is installed.
13349
13350 Here is a table of the options you can use with `protoize' and
13351`unprotoize'.  Each option works with both programs unless otherwise
13352stated.
13353
13354`-B DIRECTORY'
13355     Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
13356     usual directory (normally `/usr/local/lib').  This file contains
13357     prototype information about standard system functions.  This option
13358     applies only to `protoize'.
13359
13360`-c COMPILATION-OPTIONS'
13361     Use COMPILATION-OPTIONS as the options when running `gcc' to
13362     produce the `.X' files.  The special option `-aux-info' is always
13363     passed in addition, to tell `gcc' to write a `.X' file.
13364
13365     Note that the compilation options must be given as a single
13366     argument to `protoize' or `unprotoize'.  If you want to specify
13367     several `gcc' options, you must quote the entire set of
13368     compilation options to make them a single word in the shell.
13369
13370     There are certain `gcc' arguments that you cannot use, because they
13371     would produce the wrong kind of output.  These include `-g', `-O',
13372     `-c', `-S', and `-o' If you include these in the
13373     COMPILATION-OPTIONS, they are ignored.
13374
13375`-C'
13376     Rename files to end in `.C' (`.cc' for DOS-based file systems)
13377     instead of `.c'.  This is convenient if you are converting a C
13378     program to C++.  This option applies only to `protoize'.
13379
13380`-g'
13381     Add explicit global declarations.  This means inserting explicit
13382     declarations at the beginning of each source file for each function
13383     that is called in the file and was not declared.  These
13384     declarations precede the first function definition that contains a
13385     call to an undeclared function.  This option applies only to
13386     `protoize'.
13387
13388`-i STRING'
13389     Indent old-style parameter declarations with the string STRING.
13390     This option applies only to `protoize'.
13391
13392     `unprotoize' converts prototyped function definitions to old-style
13393     function definitions, where the arguments are declared between the
13394     argument list and the initial `{'.  By default, `unprotoize' uses
13395     five spaces as the indentation.  If you want to indent with just
13396     one space instead, use `-i " "'.
13397
13398`-k'
13399     Keep the `.X' files.  Normally, they are deleted after conversion
13400     is finished.
13401
13402`-l'
13403     Add explicit local declarations.  `protoize' with `-l' inserts a
13404     prototype declaration for each function in each block which calls
13405     the function without any declaration.  This option applies only to
13406     `protoize'.
13407
13408`-n'
13409     Make no real changes.  This mode just prints information about the
13410     conversions that would have been done without `-n'.
13411
13412`-N'
13413     Make no `.save' files.  The original files are simply deleted.
13414     Use this option with caution.
13415
13416`-p PROGRAM'
13417     Use the program PROGRAM as the compiler.  Normally, the name `gcc'
13418     is used.
13419
13420`-q'
13421     Work quietly.  Most warnings are suppressed.
13422
13423`-v'
13424     Print the version number, just like `-v' for `gcc'.
13425
13426 If you need special compiler options to compile one of your program's
13427source files, then you should generate that file's `.X' file specially,
13428by running `gcc' on that source file with the appropriate options and
13429the option `-aux-info'.  Then run `protoize' on the entire set of
13430files.  `protoize' will use the existing `.X' file because it is newer
13431than the source file.  For example:
13432
13433     gcc -Dfoo=bar file1.c -aux-info file1.X
13434     protoize *.c
13435
13436You need to include the special files along with the rest in the
13437`protoize' command, even though their `.X' files already exist, because
13438otherwise they won't get converted.
13439
13440 *Note Protoize Caveats::, for more information on how to use
13441`protoize' successfully.
13442
13443
13444File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
13445
134464 C Implementation-defined behavior
13447***********************************
13448
13449A conforming implementation of ISO C is required to document its choice
13450of behavior in each of the areas that are designated "implementation
13451defined".  The following lists all such areas, along with the section
13452numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
13453Some areas are only implementation-defined in one version of the
13454standard.
13455
13456 Some choices depend on the externally determined ABI for the platform
13457(including standard character encodings) which GCC follows; these are
13458listed as "determined by ABI" below.  *Note Binary Compatibility:
13459Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
13460are documented in the preprocessor manual.  *Note
13461Implementation-defined behavior: (cpp)Implementation-defined behavior.
13462Some choices are made by the library and operating system (or other
13463environment when compiling for a freestanding environment); refer to
13464their documentation for details.
13465
13466* Menu:
13467
13468* Translation implementation::
13469* Environment implementation::
13470* Identifiers implementation::
13471* Characters implementation::
13472* Integers implementation::
13473* Floating point implementation::
13474* Arrays and pointers implementation::
13475* Hints implementation::
13476* Structures unions enumerations and bit-fields implementation::
13477* Qualifiers implementation::
13478* Declarators implementation::
13479* Statements implementation::
13480* Preprocessing directives implementation::
13481* Library functions implementation::
13482* Architecture implementation::
13483* Locale-specific behavior implementation::
13484
13485
13486File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
13487
134884.1 Translation
13489===============
13490
13491   * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
13492     5.1.1.3).'
13493
13494     Diagnostics consist of all the output sent to stderr by GCC.
13495
13496   * `Whether each nonempty sequence of white-space characters other
13497     than new-line is retained or replaced by one space character in
13498     translation phase 3 (C90 and C99 5.1.1.2).'
13499
13500     *Note Implementation-defined behavior: (cpp)Implementation-defined
13501     behavior.
13502
13503
13504
13505File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
13506
135074.2 Environment
13508===============
13509
13510The behavior of most of these points are dependent on the implementation
13511of the C library, and are not defined by GCC itself.
13512
13513   * `The mapping between physical source file multibyte characters and
13514     the source character set in translation phase 1 (C90 and C99
13515     5.1.1.2).'
13516
13517     *Note Implementation-defined behavior: (cpp)Implementation-defined
13518     behavior.
13519
13520
13521
13522File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
13523
135244.3 Identifiers
13525===============
13526
13527   * `Which additional multibyte characters may appear in identifiers
13528     and their correspondence to universal character names (C99 6.4.2).'
13529
13530     *Note Implementation-defined behavior: (cpp)Implementation-defined
13531     behavior.
13532
13533   * `The number of significant initial characters in an identifier
13534     (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
13535
13536     For internal names, all characters are significant.  For external
13537     names, the number of significant characters are defined by the
13538     linker; for almost all targets, all characters are significant.
13539
13540   * `Whether case distinctions are significant in an identifier with
13541     external linkage (C90 6.1.2).'
13542
13543     This is a property of the linker.  C99 requires that case
13544     distinctions are always significant in identifiers with external
13545     linkage and systems without this property are not supported by GCC.
13546
13547
13548
13549File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
13550
135514.4 Characters
13552==============
13553
13554   * `The number of bits in a byte (C90 3.4, C99 3.6).'
13555
13556     Determined by ABI.
13557
13558   * `The values of the members of the execution character set (C90 and
13559     C99 5.2.1).'
13560
13561     Determined by ABI.
13562
13563   * `The unique value of the member of the execution character set
13564     produced for each of the standard alphabetic escape sequences (C90
13565     and C99 5.2.2).'
13566
13567     Determined by ABI.
13568
13569   * `The value of a `char' object into which has been stored any
13570     character other than a member of the basic execution character set
13571     (C90 6.1.2.5, C99 6.2.5).'
13572
13573     Determined by ABI.
13574
13575   * `Which of `signed char' or `unsigned char' has the same range,
13576     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
13577     6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
13578
13579     Determined by ABI.  The options `-funsigned-char' and
13580     `-fsigned-char' change the default.  *Note Options Controlling C
13581     Dialect: C Dialect Options.
13582
13583   * `The mapping of members of the source character set (in character
13584     constants and string literals) to members of the execution
13585     character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
13586
13587     Determined by ABI.
13588
13589   * `The value of an integer character constant containing more than
13590     one character or containing a character or escape sequence that
13591     does not map to a single-byte execution character (C90 6.1.3.4,
13592     C99 6.4.4.4).'
13593
13594     *Note Implementation-defined behavior: (cpp)Implementation-defined
13595     behavior.
13596
13597   * `The value of a wide character constant containing more than one
13598     multibyte character, or containing a multibyte character or escape
13599     sequence not represented in the extended execution character set
13600     (C90 6.1.3.4, C99 6.4.4.4).'
13601
13602     *Note Implementation-defined behavior: (cpp)Implementation-defined
13603     behavior.
13604
13605   * `The current locale used to convert a wide character constant
13606     consisting of a single multibyte character that maps to a member
13607     of the extended execution character set into a corresponding wide
13608     character code (C90 6.1.3.4, C99 6.4.4.4).'
13609
13610     *Note Implementation-defined behavior: (cpp)Implementation-defined
13611     behavior.
13612
13613   * `The current locale used to convert a wide string literal into
13614     corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
13615
13616     *Note Implementation-defined behavior: (cpp)Implementation-defined
13617     behavior.
13618
13619   * `The value of a string literal containing a multibyte character or
13620     escape sequence not represented in the execution character set
13621     (C90 6.1.4, C99 6.4.5).'
13622
13623     *Note Implementation-defined behavior: (cpp)Implementation-defined
13624     behavior.
13625
13626
13627File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
13628
136294.5 Integers
13630============
13631
13632   * `Any extended integer types that exist in the implementation (C99
13633     6.2.5).'
13634
13635     GCC does not support any extended integer types.
13636
13637   * `Whether signed integer types are represented using sign and
13638     magnitude, two's complement, or one's complement, and whether the
13639     extraordinary value is a trap representation or an ordinary value
13640     (C99 6.2.6.2).'
13641
13642     GCC supports only two's complement integer types, and all bit
13643     patterns are ordinary values.
13644
13645   * `The rank of any extended integer type relative to another extended
13646     integer type with the same precision (C99 6.3.1.1).'
13647
13648     GCC does not support any extended integer types.
13649
13650   * `The result of, or the signal raised by, converting an integer to a
13651     signed integer type when the value cannot be represented in an
13652     object of that type (C90 6.2.1.2, C99 6.3.1.3).'
13653
13654     For conversion to a type of width N, the value is reduced modulo
13655     2^N to be within range of the type; no signal is raised.
13656
13657   * `The results of some bitwise operations on signed integers (C90
13658     6.3, C99 6.5).'
13659
13660     Bitwise operators act on the representation of the value including
13661     both the sign and value bits, where the sign bit is considered
13662     immediately above the highest-value value bit.  Signed `>>' acts
13663     on negative numbers by sign extension.
13664
13665     GCC does not use the latitude given in C99 only to treat certain
13666     aspects of signed `<<' as undefined, but this is subject to change.
13667
13668   * `The sign of the remainder on integer division (C90 6.3.5).'
13669
13670     GCC always follows the C99 requirement that the result of division
13671     is truncated towards zero.
13672
13673
13674
13675File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
13676
136774.6 Floating point
13678==================
13679
13680   * `The accuracy of the floating-point operations and of the library
13681     functions in `<math.h>' and `<complex.h>' that return
13682     floating-point results (C90 and C99 5.2.4.2.2).'
13683
13684     The accuracy is unknown.
13685
13686   * `The rounding behaviors characterized by non-standard values of
13687     `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
13688
13689     GCC does not use such values.
13690
13691   * `The evaluation methods characterized by non-standard negative
13692     values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
13693
13694     GCC does not use such values.
13695
13696   * `The direction of rounding when an integer is converted to a
13697     floating-point number that cannot exactly represent the original
13698     value (C90 6.2.1.3, C99 6.3.1.4).'
13699
13700     C99 Annex F is followed.
13701
13702   * `The direction of rounding when a floating-point number is
13703     converted to a narrower floating-point number (C90 6.2.1.4, C99
13704     6.3.1.5).'
13705
13706     C99 Annex F is followed.
13707
13708   * `How the nearest representable value or the larger or smaller
13709     representable value immediately adjacent to the nearest
13710     representable value is chosen for certain floating constants (C90
13711     6.1.3.1, C99 6.4.4.2).'
13712
13713     C99 Annex F is followed.
13714
13715   * `Whether and how floating expressions are contracted when not
13716     disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
13717
13718     Expressions are currently only contracted if
13719     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
13720     subject to change.
13721
13722   * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
13723
13724     This pragma is not implemented, but the default is to "off" unless
13725     `-frounding-math' is used in which case it is "on".
13726
13727   * `Additional floating-point exceptions, rounding modes,
13728     environments, and classifications, and their macro names (C99 7.6,
13729     C99 7.12).'
13730
13731     This is dependent on the implementation of the C library, and is
13732     not defined by GCC itself.
13733
13734   * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
13735
13736     This pragma is not implemented.  Expressions are currently only
13737     contracted if `-funsafe-math-optimizations' or `-ffast-math' are
13738     used.  This is subject to change.
13739
13740   * `Whether the "inexact" floating-point exception can be raised when
13741     the rounded result actually does equal the mathematical result in
13742     an IEC 60559 conformant implementation (C99 F.9).'
13743
13744     This is dependent on the implementation of the C library, and is
13745     not defined by GCC itself.
13746
13747   * `Whether the "underflow" (and "inexact") floating-point exception
13748     can be raised when a result is tiny but not inexact in an IEC
13749     60559 conformant implementation (C99 F.9).'
13750
13751     This is dependent on the implementation of the C library, and is
13752     not defined by GCC itself.
13753
13754
13755
13756File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
13757
137584.7 Arrays and pointers
13759=======================
13760
13761   * `The result of converting a pointer to an integer or vice versa
13762     (C90 6.3.4, C99 6.3.2.3).'
13763
13764     A cast from pointer to integer discards most-significant bits if
13765     the pointer representation is larger than the integer type,
13766     sign-extends(1) if the pointer representation is smaller than the
13767     integer type, otherwise the bits are unchanged.
13768
13769     A cast from integer to pointer discards most-significant bits if
13770     the pointer representation is smaller than the integer type,
13771     extends according to the signedness of the integer type if the
13772     pointer representation is larger than the integer type, otherwise
13773     the bits are unchanged.
13774
13775     When casting from pointer to integer and back again, the resulting
13776     pointer must reference the same object as the original pointer,
13777     otherwise the behavior is undefined.  That is, one may not use
13778     integer arithmetic to avoid the undefined behavior of pointer
13779     arithmetic as proscribed in C99 6.5.6/8.
13780
13781   * `The size of the result of subtracting two pointers to elements of
13782     the same array (C90 6.3.6, C99 6.5.6).'
13783
13784     The value is as specified in the standard and the type is
13785     determined by the ABI.
13786
13787
13788 ---------- Footnotes ----------
13789
13790 (1) Future versions of GCC may zero-extend, or use a target-defined
13791`ptr_extend' pattern.  Do not rely on sign extension.
13792
13793
13794File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
13795
137964.8 Hints
13797=========
13798
13799   * `The extent to which suggestions made by using the `register'
13800     storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
13801
13802     The `register' specifier affects code generation only in these
13803     ways:
13804
13805        * When used as part of the register variable extension, see
13806          *Note Explicit Reg Vars::.
13807
13808        * When `-O0' is in use, the compiler allocates distinct stack
13809          memory for all variables that do not have the `register'
13810          storage-class specifier; if `register' is specified, the
13811          variable may have a shorter lifespan than the code would
13812          indicate and may never be placed in memory.
13813
13814        * On some rare x86 targets, `setjmp' doesn't save the registers
13815          in all circumstances.  In those cases, GCC doesn't allocate
13816          any variables in registers unless they are marked `register'.
13817
13818
13819   * `The extent to which suggestions made by using the inline function
13820     specifier are effective (C99 6.7.4).'
13821
13822     GCC will not inline any functions if the `-fno-inline' option is
13823     used or if `-O0' is used.  Otherwise, GCC may still be unable to
13824     inline a function for many reasons; the `-Winline' option may be
13825     used to determine if a function has not been inlined and why not.
13826
13827
13828
13829File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
13830
138314.9 Structures, unions, enumerations, and bit-fields
13832====================================================
13833
13834   * `A member of a union object is accessed using a member of a
13835     different type (C90 6.3.2.3).'
13836
13837     The relevant bytes of the representation of the object are treated
13838     as an object of the type used for the access.  This may be a trap
13839     representation.
13840
13841   * `Whether a "plain" `int' bit-field is treated as a `signed int'
13842     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
13843     6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
13844
13845     By default it is treated as `signed int' but this may be changed
13846     by the `-funsigned-bitfields' option.
13847
13848   * `Allowable bit-field types other than `_Bool', `signed int', and
13849     `unsigned int' (C99 6.7.2.1).'
13850
13851     No other types are permitted in strictly conforming mode.
13852
13853   * `Whether a bit-field can straddle a storage-unit boundary (C90
13854     6.5.2.1, C99 6.7.2.1).'
13855
13856     Determined by ABI.
13857
13858   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
13859     C99 6.7.2.1).'
13860
13861     Determined by ABI.
13862
13863   * `The alignment of non-bit-field members of structures (C90
13864     6.5.2.1, C99 6.7.2.1).'
13865
13866     Determined by ABI.
13867
13868   * `The integer type compatible with each enumerated type (C90
13869     6.5.2.2, C99 6.7.2.2).'
13870
13871     Normally, the type is `unsigned int' if there are no negative
13872     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
13873     specified, then if there are negative values it is the first of
13874     `signed char', `short' and `int' that can represent all the
13875     values, otherwise it is the first of `unsigned char', `unsigned
13876     short' and `unsigned int' that can represent all the values.
13877
13878     On some targets, `-fshort-enums' is the default; this is
13879     determined by the ABI.
13880
13881
13882
13883File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
13884
138854.10 Qualifiers
13886===============
13887
13888   * `What constitutes an access to an object that has
13889     volatile-qualified type (C90 6.5.3, C99 6.7.3).'
13890
13891     Such an object is normally accessed by pointers and used for
13892     accessing hardware.  In most expressions, it is intuitively
13893     obvious what is a read and what is a write.  For example
13894
13895          volatile int *dst = SOMEVALUE;
13896          volatile int *src = SOMEOTHERVALUE;
13897          *dst = *src;
13898
13899     will cause a read of the volatile object pointed to by SRC and
13900     store the value into the volatile object pointed to by DST.  There
13901     is no guarantee that these reads and writes are atomic, especially
13902     for objects larger than `int'.
13903
13904     However, if the volatile storage is not being modified, and the
13905     value of the volatile storage is not used, then the situation is
13906     less obvious.  For example
13907
13908          volatile int *src = SOMEVALUE;
13909          *src;
13910
13911     According to the C standard, such an expression is an rvalue whose
13912     type is the unqualified version of its original type, i.e. `int'.
13913     Whether GCC interprets this as a read of the volatile object being
13914     pointed to or only as a request to evaluate the expression for its
13915     side-effects depends on this type.
13916
13917     If it is a scalar type, or on most targets an aggregate type whose
13918     only member object is of a scalar type, or a union type whose
13919     member objects are of scalar types, the expression is interpreted
13920     by GCC as a read of the volatile object; in the other cases, the
13921     expression is only evaluated for its side-effects.
13922
13923
13924
13925File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
13926
139274.11 Declarators
13928================
13929
13930   * `The maximum number of declarators that may modify an arithmetic,
13931     structure or union type (C90 6.5.4).'
13932
13933     GCC is only limited by available memory.
13934
13935
13936
13937File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
13938
139394.12 Statements
13940===============
13941
13942   * `The maximum number of `case' values in a `switch' statement (C90
13943     6.6.4.2).'
13944
13945     GCC is only limited by available memory.
13946
13947
13948
13949File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
13950
139514.13 Preprocessing directives
13952=============================
13953
13954*Note Implementation-defined behavior: (cpp)Implementation-defined
13955behavior, for details of these aspects of implementation-defined
13956behavior.
13957
13958   * `How sequences in both forms of header names are mapped to headers
13959     or external source file names (C90 6.1.7, C99 6.4.7).'
13960
13961   * `Whether the value of a character constant in a constant expression
13962     that controls conditional inclusion matches the value of the same
13963     character constant in the execution character set (C90 6.8.1, C99
13964     6.10.1).'
13965
13966   * `Whether the value of a single-character character constant in a
13967     constant expression that controls conditional inclusion may have a
13968     negative value (C90 6.8.1, C99 6.10.1).'
13969
13970   * `The places that are searched for an included `<>' delimited
13971     header, and how the places are specified or the header is
13972     identified (C90 6.8.2, C99 6.10.2).'
13973
13974   * `How the named source file is searched for in an included `""'
13975     delimited header (C90 6.8.2, C99 6.10.2).'
13976
13977   * `The method by which preprocessing tokens (possibly resulting from
13978     macro expansion) in a `#include' directive are combined into a
13979     header name (C90 6.8.2, C99 6.10.2).'
13980
13981   * `The nesting limit for `#include' processing (C90 6.8.2, C99
13982     6.10.2).'
13983
13984   * `Whether the `#' operator inserts a `\' character before the `\'
13985     character that begins a universal character name in a character
13986     constant or string literal (C99 6.10.3.2).'
13987
13988   * `The behavior on each recognized non-`STDC #pragma' directive (C90
13989     6.8.6, C99 6.10.6).'
13990
13991     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
13992     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
13993     details of target-specific pragmas.
13994
13995   * `The definitions for `__DATE__' and `__TIME__' when respectively,
13996     the date and time of translation are not available (C90 6.8.8, C99
13997     6.10.8).'
13998
13999
14000
14001File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
14002
140034.14 Library functions
14004======================
14005
14006The behavior of most of these points are dependent on the implementation
14007of the C library, and are not defined by GCC itself.
14008
14009   * `The null pointer constant to which the macro `NULL' expands (C90
14010     7.1.6, C99 7.17).'
14011
14012     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
14013     provide the other headers which define `NULL' and some library
14014     implementations may use other definitions in those headers.
14015
14016
14017
14018File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
14019
140204.15 Architecture
14021=================
14022
14023   * `The values or expressions assigned to the macros specified in the
14024     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
14025     5.2.4.2, C99 7.18.2, C99 7.18.3).'
14026
14027     Determined by ABI.
14028
14029   * `The number, order, and encoding of bytes in any object (when not
14030     explicitly specified in this International Standard) (C99
14031     6.2.6.1).'
14032
14033     Determined by ABI.
14034
14035   * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
14036     C99 6.5.3.4).'
14037
14038     Determined by ABI.
14039
14040
14041
14042File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
14043
140444.16 Locale-specific behavior
14045=============================
14046
14047The behavior of these points are dependent on the implementation of the
14048C library, and are not defined by GCC itself.
14049
14050
14051File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C Implementation,  Up: Top
14052
140535 Extensions to the C Language Family
14054*************************************
14055
14056GNU C provides several language features not found in ISO standard C.
14057(The `-pedantic' option directs GCC to print a warning message if any
14058of these features is used.)  To test for the availability of these
14059features in conditional compilation, check for a predefined macro
14060`__GNUC__', which is always defined under GCC.
14061
14062 These extensions are available in C and Objective-C.  Most of them are
14063also available in C++.  *Note Extensions to the C++ Language: C++
14064Extensions, for extensions that apply _only_ to C++.
14065
14066 Some features that are in ISO C99 but not C89 or C++ are also, as
14067extensions, accepted by GCC in C89 mode and in C++.
14068
14069* Menu:
14070
14071* Statement Exprs::     Putting statements and declarations inside expressions.
14072* Local Labels::        Labels local to a block.
14073* Labels as Values::    Getting pointers to labels, and computed gotos.
14074* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
14075* Constructing Calls::	Dispatching a call to another function.
14076* Typeof::              `typeof': referring to the type of an expression.
14077* Conditionals::        Omitting the middle operand of a `?:' expression.
14078* Long Long::		Double-word integers---`long long int'.
14079* Complex::             Data types for complex numbers.
14080* Decimal Float::       Decimal Floating Types.
14081* Hex Floats::          Hexadecimal floating-point constants.
14082* Zero Length::         Zero-length arrays.
14083* Variable Length::     Arrays whose length is computed at run time.
14084* Empty Structures::    Structures with no members.
14085* Variadic Macros::	Macros with a variable number of arguments.
14086* Escaped Newlines::    Slightly looser rules for escaped newlines.
14087* Subscripting::        Any array can be subscripted, even if not an lvalue.
14088* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
14089* Initializers::        Non-constant initializers.
14090* Compound Literals::   Compound literals give structures, unions
14091                         or arrays as values.
14092* Designated Inits::	Labeling elements of initializers.
14093* Cast to Union::       Casting to union type from any member of the union.
14094* Case Ranges::		`case 1 ... 9' and such.
14095* Mixed Declarations::	Mixing declarations and code.
14096* Function Attributes:: Declaring that functions have no side effects,
14097                         or that they can never return.
14098* Attribute Syntax::    Formal syntax for attributes.
14099* Function Prototypes:: Prototype declarations and old-style definitions.
14100* C++ Comments::        C++ comments are recognized.
14101* Dollar Signs::        Dollar sign is allowed in identifiers.
14102* Character Escapes::   `\e' stands for the character <ESC>.
14103* Variable Attributes::	Specifying attributes of variables.
14104* Type Attributes::	Specifying attributes of types.
14105* Alignment::           Inquiring about the alignment of a type or variable.
14106* Inline::              Defining inline functions (as fast as macros).
14107* Extended Asm::        Assembler instructions with C expressions as operands.
14108                         (With them you can define ``built-in'' functions.)
14109* Constraints::         Constraints for asm operands
14110* Asm Labels::          Specifying the assembler name to use for a C symbol.
14111* Explicit Reg Vars::   Defining variables residing in specified registers.
14112* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
14113* Incomplete Enums::    `enum foo;', with details to follow.
14114* Function Names::	Printable strings which are the name of the current
14115			 function.
14116* Return Address::      Getting the return or frame address of a function.
14117* Vector Extensions::   Using vector instructions through built-in functions.
14118* Offsetof::            Special syntax for implementing `offsetof'.
14119* Atomic Builtins::	Built-in functions for atomic memory access.
14120* Object Size Checking:: Built-in functions for limited buffer overflow
14121                        checking.
14122* Other Builtins::      Other built-in functions.
14123* Target Builtins::     Built-in functions specific to particular targets.
14124* Target Format Checks:: Format checks specific to particular targets.
14125* Pragmas::             Pragmas accepted by GCC.
14126* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
14127* Thread-Local::        Per-thread variables.
14128
14129
14130File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
14131
141325.1 Statements and Declarations in Expressions
14133==============================================
14134
14135A compound statement enclosed in parentheses may appear as an expression
14136in GNU C.  This allows you to use loops, switches, and local variables
14137within an expression.
14138
14139 Recall that a compound statement is a sequence of statements surrounded
14140by braces; in this construct, parentheses go around the braces.  For
14141example:
14142
14143     ({ int y = foo (); int z;
14144        if (y > 0) z = y;
14145        else z = - y;
14146        z; })
14147
14148is a valid (though slightly more complex than necessary) expression for
14149the absolute value of `foo ()'.
14150
14151 The last thing in the compound statement should be an expression
14152followed by a semicolon; the value of this subexpression serves as the
14153value of the entire construct.  (If you use some other kind of statement
14154last within the braces, the construct has type `void', and thus
14155effectively no value.)
14156
14157 This feature is especially useful in making macro definitions "safe"
14158(so that they evaluate each operand exactly once).  For example, the
14159"maximum" function is commonly defined as a macro in standard C as
14160follows:
14161
14162     #define max(a,b) ((a) > (b) ? (a) : (b))
14163
14164But this definition computes either A or B twice, with bad results if
14165the operand has side effects.  In GNU C, if you know the type of the
14166operands (here taken as `int'), you can define the macro safely as
14167follows:
14168
14169     #define maxint(a,b) \
14170       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
14171
14172 Embedded statements are not allowed in constant expressions, such as
14173the value of an enumeration constant, the width of a bit-field, or the
14174initial value of a static variable.
14175
14176 If you don't know the type of the operand, you can still do this, but
14177you must use `typeof' (*note Typeof::).
14178
14179 In G++, the result value of a statement expression undergoes array and
14180function pointer decay, and is returned by value to the enclosing
14181expression.  For instance, if `A' is a class, then
14182
14183             A a;
14184
14185             ({a;}).Foo ()
14186
14187will construct a temporary `A' object to hold the result of the
14188statement expression, and that will be used to invoke `Foo'.  Therefore
14189the `this' pointer observed by `Foo' will not be the address of `a'.
14190
14191 Any temporaries created within a statement within a statement
14192expression will be destroyed at the statement's end.  This makes
14193statement expressions inside macros slightly different from function
14194calls.  In the latter case temporaries introduced during argument
14195evaluation will be destroyed at the end of the statement that includes
14196the function call.  In the statement expression case they will be
14197destroyed during the statement expression.  For instance,
14198
14199     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
14200     template<typename T> T function(T a) { T b = a; return b + 3; }
14201
14202     void foo ()
14203     {
14204       macro (X ());
14205       function (X ());
14206     }
14207
14208will have different places where temporaries are destroyed.  For the
14209`macro' case, the temporary `X' will be destroyed just after the
14210initialization of `b'.  In the `function' case that temporary will be
14211destroyed when the function returns.
14212
14213 These considerations mean that it is probably a bad idea to use
14214statement-expressions of this form in header files that are designed to
14215work with C++.  (Note that some versions of the GNU C Library contained
14216header files using statement-expression that lead to precisely this
14217bug.)
14218
14219 Jumping into a statement expression with `goto' or using a `switch'
14220statement outside the statement expression with a `case' or `default'
14221label inside the statement expression is not permitted.  Jumping into a
14222statement expression with a computed `goto' (*note Labels as Values::)
14223yields undefined behavior.  Jumping out of a statement expression is
14224permitted, but if the statement expression is part of a larger
14225expression then it is unspecified which other subexpressions of that
14226expression have been evaluated except where the language definition
14227requires certain subexpressions to be evaluated before or after the
14228statement expression.  In any case, as with a function call the
14229evaluation of a statement expression is not interleaved with the
14230evaluation of other parts of the containing expression.  For example,
14231
14232       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
14233
14234will call `foo' and `bar1' and will not call `baz' but may or may not
14235call `bar2'.  If `bar2' is called, it will be called after `foo' and
14236before `bar1'
14237
14238
14239File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
14240
142415.2 Locally Declared Labels
14242===========================
14243
14244GCC allows you to declare "local labels" in any nested block scope.  A
14245local label is just like an ordinary label, but you can only reference
14246it (with a `goto' statement, or by taking its address) within the block
14247in which it was declared.
14248
14249 A local label declaration looks like this:
14250
14251     __label__ LABEL;
14252
14253or
14254
14255     __label__ LABEL1, LABEL2, /* ... */;
14256
14257 Local label declarations must come at the beginning of the block,
14258before any ordinary declarations or statements.
14259
14260 The label declaration defines the label _name_, but does not define
14261the label itself.  You must do this in the usual way, with `LABEL:',
14262within the statements of the statement expression.
14263
14264 The local label feature is useful for complex macros.  If a macro
14265contains nested loops, a `goto' can be useful for breaking out of them.
14266However, an ordinary label whose scope is the whole function cannot be
14267used: if the macro can be expanded several times in one function, the
14268label will be multiply defined in that function.  A local label avoids
14269this problem.  For example:
14270
14271     #define SEARCH(value, array, target)              \
14272     do {                                              \
14273       __label__ found;                                \
14274       typeof (target) _SEARCH_target = (target);      \
14275       typeof (*(array)) *_SEARCH_array = (array);     \
14276       int i, j;                                       \
14277       int value;                                      \
14278       for (i = 0; i < max; i++)                       \
14279         for (j = 0; j < max; j++)                     \
14280           if (_SEARCH_array[i][j] == _SEARCH_target)  \
14281             { (value) = i; goto found; }              \
14282       (value) = -1;                                   \
14283      found:;                                          \
14284     } while (0)
14285
14286 This could also be written using a statement-expression:
14287
14288     #define SEARCH(array, target)                     \
14289     ({                                                \
14290       __label__ found;                                \
14291       typeof (target) _SEARCH_target = (target);      \
14292       typeof (*(array)) *_SEARCH_array = (array);     \
14293       int i, j;                                       \
14294       int value;                                      \
14295       for (i = 0; i < max; i++)                       \
14296         for (j = 0; j < max; j++)                     \
14297           if (_SEARCH_array[i][j] == _SEARCH_target)  \
14298             { value = i; goto found; }                \
14299       value = -1;                                     \
14300      found:                                           \
14301       value;                                          \
14302     })
14303
14304 Local label declarations also make the labels they declare visible to
14305nested functions, if there are any.  *Note Nested Functions::, for
14306details.
14307
14308
14309File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
14310
143115.3 Labels as Values
14312====================
14313
14314You can get the address of a label defined in the current function (or
14315a containing function) with the unary operator `&&'.  The value has
14316type `void *'.  This value is a constant and can be used wherever a
14317constant of that type is valid.  For example:
14318
14319     void *ptr;
14320     /* ... */
14321     ptr = &&foo;
14322
14323 To use these values, you need to be able to jump to one.  This is done
14324with the computed goto statement(1), `goto *EXP;'.  For example,
14325
14326     goto *ptr;
14327
14328Any expression of type `void *' is allowed.
14329
14330 One way of using these constants is in initializing a static array that
14331will serve as a jump table:
14332
14333     static void *array[] = { &&foo, &&bar, &&hack };
14334
14335 Then you can select a label with indexing, like this:
14336
14337     goto *array[i];
14338
14339Note that this does not check whether the subscript is in bounds--array
14340indexing in C never does that.
14341
14342 Such an array of label values serves a purpose much like that of the
14343`switch' statement.  The `switch' statement is cleaner, so use that
14344rather than an array unless the problem does not fit a `switch'
14345statement very well.
14346
14347 Another use of label values is in an interpreter for threaded code.
14348The labels within the interpreter function can be stored in the
14349threaded code for super-fast dispatching.
14350
14351 You may not use this mechanism to jump to code in a different function.
14352If you do that, totally unpredictable things will happen.  The best way
14353to avoid this is to store the label address only in automatic variables
14354and never pass it as an argument.
14355
14356 An alternate way to write the above example is
14357
14358     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
14359                                  &&hack - &&foo };
14360     goto *(&&foo + array[i]);
14361
14362This is more friendly to code living in shared libraries, as it reduces
14363the number of dynamic relocations that are needed, and by consequence,
14364allows the data to be read-only.
14365
14366 ---------- Footnotes ----------
14367
14368 (1) The analogous feature in Fortran is called an assigned goto, but
14369that name seems inappropriate in C, where one can do more than simply
14370store label addresses in label variables.
14371
14372
14373File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
14374
143755.4 Nested Functions
14376====================
14377
14378A "nested function" is a function defined inside another function.
14379(Nested functions are not supported for GNU C++.)  The nested function's
14380name is local to the block where it is defined.  For example, here we
14381define a nested function named `square', and call it twice:
14382
14383     foo (double a, double b)
14384     {
14385       double square (double z) { return z * z; }
14386
14387       return square (a) + square (b);
14388     }
14389
14390 The nested function can access all the variables of the containing
14391function that are visible at the point of its definition.  This is
14392called "lexical scoping".  For example, here we show a nested function
14393which uses an inherited variable named `offset':
14394
14395     bar (int *array, int offset, int size)
14396     {
14397       int access (int *array, int index)
14398         { return array[index + offset]; }
14399       int i;
14400       /* ... */
14401       for (i = 0; i < size; i++)
14402         /* ... */ access (array, i) /* ... */
14403     }
14404
14405 Nested function definitions are permitted within functions in the
14406places where variable definitions are allowed; that is, in any block,
14407mixed with the other declarations and statements in the block.
14408
14409 It is possible to call the nested function from outside the scope of
14410its name by storing its address or passing the address to another
14411function:
14412
14413     hack (int *array, int size)
14414     {
14415       void store (int index, int value)
14416         { array[index] = value; }
14417
14418       intermediate (store, size);
14419     }
14420
14421 Here, the function `intermediate' receives the address of `store' as
14422an argument.  If `intermediate' calls `store', the arguments given to
14423`store' are used to store into `array'.  But this technique works only
14424so long as the containing function (`hack', in this example) does not
14425exit.
14426
14427 If you try to call the nested function through its address after the
14428containing function has exited, all hell will break loose.  If you try
14429to call it after a containing scope level has exited, and if it refers
14430to some of the variables that are no longer in scope, you may be lucky,
14431but it's not wise to take the risk.  If, however, the nested function
14432does not refer to anything that has gone out of scope, you should be
14433safe.
14434
14435 GCC implements taking the address of a nested function using a
14436technique called "trampolines".  A paper describing them is available as
14437
14438`http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
14439
14440 A nested function can jump to a label inherited from a containing
14441function, provided the label was explicitly declared in the containing
14442function (*note Local Labels::).  Such a jump returns instantly to the
14443containing function, exiting the nested function which did the `goto'
14444and any intermediate functions as well.  Here is an example:
14445
14446     bar (int *array, int offset, int size)
14447     {
14448       __label__ failure;
14449       int access (int *array, int index)
14450         {
14451           if (index > size)
14452             goto failure;
14453           return array[index + offset];
14454         }
14455       int i;
14456       /* ... */
14457       for (i = 0; i < size; i++)
14458         /* ... */ access (array, i) /* ... */
14459       /* ... */
14460       return 0;
14461
14462      /* Control comes here from `access'
14463         if it detects an error.  */
14464      failure:
14465       return -1;
14466     }
14467
14468 A nested function always has no linkage.  Declaring one with `extern'
14469or `static' is erroneous.  If you need to declare the nested function
14470before its definition, use `auto' (which is otherwise meaningless for
14471function declarations).
14472
14473     bar (int *array, int offset, int size)
14474     {
14475       __label__ failure;
14476       auto int access (int *, int);
14477       /* ... */
14478       int access (int *array, int index)
14479         {
14480           if (index > size)
14481             goto failure;
14482           return array[index + offset];
14483         }
14484       /* ... */
14485     }
14486
14487
14488File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
14489
144905.5 Constructing Function Calls
14491===============================
14492
14493Using the built-in functions described below, you can record the
14494arguments a function received, and call another function with the same
14495arguments, without knowing the number or types of the arguments.
14496
14497 You can also record the return value of that function call, and later
14498return that value, without knowing what data type the function tried to
14499return (as long as your caller expects that data type).
14500
14501 However, these built-in functions may interact badly with some
14502sophisticated features or other extensions of the language.  It is,
14503therefore, not recommended to use them outside very simple functions
14504acting as mere forwarders for their arguments.
14505
14506 -- Built-in Function: void * __builtin_apply_args ()
14507     This built-in function returns a pointer to data describing how to
14508     perform a call with the same arguments as were passed to the
14509     current function.
14510
14511     The function saves the arg pointer register, structure value
14512     address, and all registers that might be used to pass arguments to
14513     a function into a block of memory allocated on the stack.  Then it
14514     returns the address of that block.
14515
14516 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
14517          *ARGUMENTS, size_t SIZE)
14518     This built-in function invokes FUNCTION with a copy of the
14519     parameters described by ARGUMENTS and SIZE.
14520
14521     The value of ARGUMENTS should be the value returned by
14522     `__builtin_apply_args'.  The argument SIZE specifies the size of
14523     the stack argument data, in bytes.
14524
14525     This function returns a pointer to data describing how to return
14526     whatever value was returned by FUNCTION.  The data is saved in a
14527     block of memory allocated on the stack.
14528
14529     It is not always simple to compute the proper value for SIZE.  The
14530     value is used by `__builtin_apply' to compute the amount of data
14531     that should be pushed on the stack and copied from the incoming
14532     argument area.
14533
14534 -- Built-in Function: void __builtin_return (void *RESULT)
14535     This built-in function returns the value described by RESULT from
14536     the containing function.  You should specify, for RESULT, a value
14537     returned by `__builtin_apply'.
14538
14539
14540File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
14541
145425.6 Referring to a Type with `typeof'
14543=====================================
14544
14545Another way to refer to the type of an expression is with `typeof'.
14546The syntax of using of this keyword looks like `sizeof', but the
14547construct acts semantically like a type name defined with `typedef'.
14548
14549 There are two ways of writing the argument to `typeof': with an
14550expression or with a type.  Here is an example with an expression:
14551
14552     typeof (x[0](1))
14553
14554This assumes that `x' is an array of pointers to functions; the type
14555described is that of the values of the functions.
14556
14557 Here is an example with a typename as the argument:
14558
14559     typeof (int *)
14560
14561Here the type described is that of pointers to `int'.
14562
14563 If you are writing a header file that must work when included in ISO C
14564programs, write `__typeof__' instead of `typeof'.  *Note Alternate
14565Keywords::.
14566
14567 A `typeof'-construct can be used anywhere a typedef name could be
14568used.  For example, you can use it in a declaration, in a cast, or
14569inside of `sizeof' or `typeof'.
14570
14571 `typeof' is often useful in conjunction with the
14572statements-within-expressions feature.  Here is how the two together can
14573be used to define a safe "maximum" macro that operates on any
14574arithmetic type and evaluates each of its arguments exactly once:
14575
14576     #define max(a,b) \
14577       ({ typeof (a) _a = (a); \
14578           typeof (b) _b = (b); \
14579         _a > _b ? _a : _b; })
14580
14581 The reason for using names that start with underscores for the local
14582variables is to avoid conflicts with variable names that occur within
14583the expressions that are substituted for `a' and `b'.  Eventually we
14584hope to design a new form of declaration syntax that allows you to
14585declare variables whose scopes start only after their initializers;
14586this will be a more reliable way to prevent such conflicts.
14587
14588Some more examples of the use of `typeof':
14589
14590   * This declares `y' with the type of what `x' points to.
14591
14592          typeof (*x) y;
14593
14594   * This declares `y' as an array of such values.
14595
14596          typeof (*x) y[4];
14597
14598   * This declares `y' as an array of pointers to characters:
14599
14600          typeof (typeof (char *)[4]) y;
14601
14602     It is equivalent to the following traditional C declaration:
14603
14604          char *y[4];
14605
14606     To see the meaning of the declaration using `typeof', and why it
14607     might be a useful way to write, rewrite it with these macros:
14608
14609          #define pointer(T)  typeof(T *)
14610          #define array(T, N) typeof(T [N])
14611
14612     Now the declaration can be rewritten this way:
14613
14614          array (pointer (char), 4) y;
14615
14616     Thus, `array (pointer (char), 4)' is the type of arrays of 4
14617     pointers to `char'.
14618
14619 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
14620limited extension which permitted one to write
14621
14622     typedef T = EXPR;
14623
14624with the effect of declaring T to have the type of the expression EXPR.
14625This extension does not work with GCC 3 (versions between 3.0 and 3.2
14626will crash; 3.2.1 and later give an error).  Code which relies on it
14627should be rewritten to use `typeof':
14628
14629     typedef typeof(EXPR) T;
14630
14631This will work with all versions of GCC.
14632
14633
14634File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
14635
146365.7 Conditionals with Omitted Operands
14637======================================
14638
14639The middle operand in a conditional expression may be omitted.  Then if
14640the first operand is nonzero, its value is the value of the conditional
14641expression.
14642
14643 Therefore, the expression
14644
14645     x ? : y
14646
14647has the value of `x' if that is nonzero; otherwise, the value of `y'.
14648
14649 This example is perfectly equivalent to
14650
14651     x ? x : y
14652
14653In this simple case, the ability to omit the middle operand is not
14654especially useful.  When it becomes useful is when the first operand
14655does, or may (if it is a macro argument), contain a side effect.  Then
14656repeating the operand in the middle would perform the side effect
14657twice.  Omitting the middle operand uses the value already computed
14658without the undesirable effects of recomputing it.
14659
14660
14661File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
14662
146635.8 Double-Word Integers
14664========================
14665
14666ISO C99 supports data types for integers that are at least 64 bits wide,
14667and as an extension GCC supports them in C89 mode and in C++.  Simply
14668write `long long int' for a signed integer, or `unsigned long long int'
14669for an unsigned integer.  To make an integer constant of type `long
14670long int', add the suffix `LL' to the integer.  To make an integer
14671constant of type `unsigned long long int', add the suffix `ULL' to the
14672integer.
14673
14674 You can use these types in arithmetic like any other integer types.
14675Addition, subtraction, and bitwise boolean operations on these types
14676are open-coded on all types of machines.  Multiplication is open-coded
14677if the machine supports fullword-to-doubleword a widening multiply
14678instruction.  Division and shifts are open-coded only on machines that
14679provide special support.  The operations that are not open-coded use
14680special library routines that come with GCC.
14681
14682 There may be pitfalls when you use `long long' types for function
14683arguments, unless you declare function prototypes.  If a function
14684expects type `int' for its argument, and you pass a value of type `long
14685long int', confusion will result because the caller and the subroutine
14686will disagree about the number of bytes for the argument.  Likewise, if
14687the function expects `long long int' and you pass `int'.  The best way
14688to avoid such problems is to use prototypes.
14689
14690
14691File: gcc.info,  Node: Complex,  Next: Decimal Float,  Prev: Long Long,  Up: C Extensions
14692
146935.9 Complex Numbers
14694===================
14695
14696ISO C99 supports complex floating data types, and as an extension GCC
14697supports them in C89 mode and in C++, and supports complex integer data
14698types which are not part of ISO C99.  You can declare complex types
14699using the keyword `_Complex'.  As an extension, the older GNU keyword
14700`__complex__' is also supported.
14701
14702 For example, `_Complex double x;' declares `x' as a variable whose
14703real part and imaginary part are both of type `double'.  `_Complex
14704short int y;' declares `y' to have real and imaginary parts of type
14705`short int'; this is not likely to be useful, but it shows that the set
14706of complex types is complete.
14707
14708 To write a constant with a complex data type, use the suffix `i' or
14709`j' (either one; they are equivalent).  For example, `2.5fi' has type
14710`_Complex float' and `3i' has type `_Complex int'.  Such a constant
14711always has a pure imaginary value, but you can form any complex value
14712you like by adding one to a real constant.  This is a GNU extension; if
14713you have an ISO C99 conforming C library (such as GNU libc), and want
14714to construct complex constants of floating type, you should include
14715`<complex.h>' and use the macros `I' or `_Complex_I' instead.
14716
14717 To extract the real part of a complex-valued expression EXP, write
14718`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
14719part.  This is a GNU extension; for values of floating type, you should
14720use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
14721`cimag' and `cimagl', declared in `<complex.h>' and also provided as
14722built-in functions by GCC.
14723
14724 The operator `~' performs complex conjugation when used on a value
14725with a complex type.  This is a GNU extension; for values of floating
14726type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
14727declared in `<complex.h>' and also provided as built-in functions by
14728GCC.
14729
14730 GCC can allocate complex automatic variables in a noncontiguous
14731fashion; it's even possible for the real part to be in a register while
14732the imaginary part is on the stack (or vice-versa).  Only the DWARF2
14733debug info format can represent this, so use of DWARF2 is recommended.
14734If you are using the stabs debug info format, GCC describes a
14735noncontiguous complex variable as if it were two separate variables of
14736noncomplex type.  If the variable's actual name is `foo', the two
14737fictitious variables are named `foo$real' and `foo$imag'.  You can
14738examine and set these two fictitious variables with your debugger.
14739
14740
14741File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Complex,  Up: C Extensions
14742
147435.10 Decimal Floating Types
14744===========================
14745
14746As an extension, the GNU C compiler supports decimal floating types as
14747defined in the N1176 draft of ISO/IEC WDTR24732.  Support for decimal
14748floating types in GCC will evolve as the draft technical report changes.
14749Calling conventions for any target might also change.  Not all targets
14750support decimal floating types.
14751
14752 The decimal floating types are `_Decimal32', `_Decimal64', and
14753`_Decimal128'.  They use a radix of ten, unlike the floating types
14754`float', `double', and `long double' whose radix is not specified by
14755the C standard but is usually two.
14756
14757 Support for decimal floating types includes the arithmetic operators
14758add, subtract, multiply, divide; unary arithmetic operators; relational
14759operators; equality operators; and conversions to and from integer and
14760other floating types.  Use a suffix `df' or `DF' in a literal constant
14761of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
14762for `_Decimal128'.
14763
14764 GCC support of decimal float as specified by the draft technical report
14765is incomplete:
14766
14767   * Translation time data type (TTDT) is not supported.
14768
14769   * Characteristics of decimal floating types are defined in header
14770     file `decfloat.h' rather than `float.h'.
14771
14772   * When the value of a decimal floating type cannot be represented in
14773     the integer type to which it is being converted, the result is
14774     undefined rather than the result value specified by the draft
14775     technical report.
14776
14777 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
14778the DWARF2 debug information format.
14779
14780
14781File: gcc.info,  Node: Hex Floats,  Next: Zero Length,  Prev: Decimal Float,  Up: C Extensions
14782
147835.11 Hex Floats
14784===============
14785
14786ISO C99 supports floating-point numbers written not only in the usual
14787decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
14788written in hexadecimal format.  As a GNU extension, GCC supports this
14789in C89 mode (except in some cases when strictly conforming) and in C++.
14790In that format the `0x' hex introducer and the `p' or `P' exponent
14791field are mandatory.  The exponent is a decimal number that indicates
14792the power of 2 by which the significant part will be multiplied.  Thus
14793`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
14794is the same as `1.55e1'.
14795
14796 Unlike for floating-point numbers in the decimal notation the exponent
14797is always required in the hexadecimal notation.  Otherwise the compiler
14798would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
14799could mean `1.0f' or `1.9375' since `f' is also the extension for
14800floating-point constants of type `float'.
14801
14802
14803File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Hex Floats,  Up: C Extensions
14804
148055.12 Arrays of Length Zero
14806==========================
14807
14808Zero-length arrays are allowed in GNU C.  They are very useful as the
14809last element of a structure which is really a header for a
14810variable-length object:
14811
14812     struct line {
14813       int length;
14814       char contents[0];
14815     };
14816
14817     struct line *thisline = (struct line *)
14818       malloc (sizeof (struct line) + this_length);
14819     thisline->length = this_length;
14820
14821 In ISO C90, you would have to give `contents' a length of 1, which
14822means either you waste space or complicate the argument to `malloc'.
14823
14824 In ISO C99, you would use a "flexible array member", which is slightly
14825different in syntax and semantics:
14826
14827   * Flexible array members are written as `contents[]' without the `0'.
14828
14829   * Flexible array members have incomplete type, and so the `sizeof'
14830     operator may not be applied.  As a quirk of the original
14831     implementation of zero-length arrays, `sizeof' evaluates to zero.
14832
14833   * Flexible array members may only appear as the last member of a
14834     `struct' that is otherwise non-empty.
14835
14836   * A structure containing a flexible array member, or a union
14837     containing such a structure (possibly recursively), may not be a
14838     member of a structure or an element of an array.  (However, these
14839     uses are permitted by GCC as extensions.)
14840
14841 GCC versions before 3.0 allowed zero-length arrays to be statically
14842initialized, as if they were flexible arrays.  In addition to those
14843cases that were useful, it also allowed initializations in situations
14844that would corrupt later data.  Non-empty initialization of zero-length
14845arrays is now treated like any case where there are more initializer
14846elements than the array holds, in that a suitable warning about "excess
14847elements in array" is given, and the excess elements (all of them, in
14848this case) are ignored.
14849
14850 Instead GCC allows static initialization of flexible array members.
14851This is equivalent to defining a new structure containing the original
14852structure followed by an array of sufficient size to contain the data.
14853I.e. in the following, `f1' is constructed as if it were declared like
14854`f2'.
14855
14856     struct f1 {
14857       int x; int y[];
14858     } f1 = { 1, { 2, 3, 4 } };
14859
14860     struct f2 {
14861       struct f1 f1; int data[3];
14862     } f2 = { { 1 }, { 2, 3, 4 } };
14863
14864The convenience of this extension is that `f1' has the desired type,
14865eliminating the need to consistently refer to `f2.f1'.
14866
14867 This has symmetry with normal static arrays, in that an array of
14868unknown size is also written with `[]'.
14869
14870 Of course, this extension only makes sense if the extra data comes at
14871the end of a top-level object, as otherwise we would be overwriting
14872data at subsequent offsets.  To avoid undue complication and confusion
14873with initialization of deeply nested arrays, we simply disallow any
14874non-empty initialization except when the structure is the top-level
14875object.  For example:
14876
14877     struct foo { int x; int y[]; };
14878     struct bar { struct foo z; };
14879
14880     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
14881     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
14882     struct bar c = { { 1, { } } };            // Valid.
14883     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
14884
14885
14886File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
14887
148885.13 Structures With No Members
14889===============================
14890
14891GCC permits a C structure to have no members:
14892
14893     struct empty {
14894     };
14895
14896 The structure will have size zero.  In C++, empty structures are part
14897of the language.  G++ treats empty structures as if they had a single
14898member of type `char'.
14899
14900
14901File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
14902
149035.14 Arrays of Variable Length
14904==============================
14905
14906Variable-length automatic arrays are allowed in ISO C99, and as an
14907extension GCC accepts them in C89 mode and in C++.  (However, GCC's
14908implementation of variable-length arrays does not yet conform in detail
14909to the ISO C99 standard.)  These arrays are declared like any other
14910automatic arrays, but with a length that is not a constant expression.
14911The storage is allocated at the point of declaration and deallocated
14912when the brace-level is exited.  For example:
14913
14914     FILE *
14915     concat_fopen (char *s1, char *s2, char *mode)
14916     {
14917       char str[strlen (s1) + strlen (s2) + 1];
14918       strcpy (str, s1);
14919       strcat (str, s2);
14920       return fopen (str, mode);
14921     }
14922
14923 Jumping or breaking out of the scope of the array name deallocates the
14924storage.  Jumping into the scope is not allowed; you get an error
14925message for it.
14926
14927 You can use the function `alloca' to get an effect much like
14928variable-length arrays.  The function `alloca' is available in many
14929other C implementations (but not in all).  On the other hand,
14930variable-length arrays are more elegant.
14931
14932 There are other differences between these two methods.  Space allocated
14933with `alloca' exists until the containing _function_ returns.  The
14934space for a variable-length array is deallocated as soon as the array
14935name's scope ends.  (If you use both variable-length arrays and
14936`alloca' in the same function, deallocation of a variable-length array
14937will also deallocate anything more recently allocated with `alloca'.)
14938
14939 You can also use variable-length arrays as arguments to functions:
14940
14941     struct entry
14942     tester (int len, char data[len][len])
14943     {
14944       /* ... */
14945     }
14946
14947 The length of an array is computed once when the storage is allocated
14948and is remembered for the scope of the array in case you access it with
14949`sizeof'.
14950
14951 If you want to pass the array first and the length afterward, you can
14952use a forward declaration in the parameter list--another GNU extension.
14953
14954     struct entry
14955     tester (int len; char data[len][len], int len)
14956     {
14957       /* ... */
14958     }
14959
14960 The `int len' before the semicolon is a "parameter forward
14961declaration", and it serves the purpose of making the name `len' known
14962when the declaration of `data' is parsed.
14963
14964 You can write any number of such parameter forward declarations in the
14965parameter list.  They can be separated by commas or semicolons, but the
14966last one must end with a semicolon, which is followed by the "real"
14967parameter declarations.  Each forward declaration must match a "real"
14968declaration in parameter name and data type.  ISO C99 does not support
14969parameter forward declarations.
14970
14971
14972File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
14973
149745.15 Macros with a Variable Number of Arguments.
14975================================================
14976
14977In the ISO C standard of 1999, a macro can be declared to accept a
14978variable number of arguments much as a function can.  The syntax for
14979defining the macro is similar to that of a function.  Here is an
14980example:
14981
14982     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
14983
14984 Here `...' is a "variable argument".  In the invocation of such a
14985macro, it represents the zero or more tokens until the closing
14986parenthesis that ends the invocation, including any commas.  This set of
14987tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
14988it appears.  See the CPP manual for more information.
14989
14990 GCC has long supported variadic macros, and used a different syntax
14991that allowed you to give a name to the variable arguments just like any
14992other argument.  Here is an example:
14993
14994     #define debug(format, args...) fprintf (stderr, format, args)
14995
14996 This is in all ways equivalent to the ISO C example above, but arguably
14997more readable and descriptive.
14998
14999 GNU CPP has two further variadic macro extensions, and permits them to
15000be used with either of the above forms of macro definition.
15001
15002 In standard C, you are not allowed to leave the variable argument out
15003entirely; but you are allowed to pass an empty argument.  For example,
15004this invocation is invalid in ISO C, because there is no comma after
15005the string:
15006
15007     debug ("A message")
15008
15009 GNU CPP permits you to completely omit the variable arguments in this
15010way.  In the above examples, the compiler would complain, though since
15011the expansion of the macro still has the extra comma after the format
15012string.
15013
15014 To help solve this problem, CPP behaves specially for variable
15015arguments used with the token paste operator, `##'.  If instead you
15016write
15017
15018     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
15019
15020 and if the variable arguments are omitted or empty, the `##' operator
15021causes the preprocessor to remove the comma before it.  If you do
15022provide some variable arguments in your macro invocation, GNU CPP does
15023not complain about the paste operation and instead places the variable
15024arguments after the comma.  Just like any other pasted macro argument,
15025these arguments are not macro expanded.
15026
15027
15028File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
15029
150305.16 Slightly Looser Rules for Escaped Newlines
15031===============================================
15032
15033Recently, the preprocessor has relaxed its treatment of escaped
15034newlines.  Previously, the newline had to immediately follow a
15035backslash.  The current implementation allows whitespace in the form of
15036spaces, horizontal and vertical tabs, and form feeds between the
15037backslash and the subsequent newline.  The preprocessor issues a
15038warning, but treats it as a valid escaped newline and combines the two
15039lines to form a single logical line.  This works within comments and
15040tokens, as well as between tokens.  Comments are _not_ treated as
15041whitespace for the purposes of this relaxation, since they have not yet
15042been replaced with spaces.
15043
15044
15045File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
15046
150475.17 Non-Lvalue Arrays May Have Subscripts
15048==========================================
15049
15050In ISO C99, arrays that are not lvalues still decay to pointers, and
15051may be subscripted, although they may not be modified or used after the
15052next sequence point and the unary `&' operator may not be applied to
15053them.  As an extension, GCC allows such arrays to be subscripted in C89
15054mode, though otherwise they do not decay to pointers outside C99 mode.
15055For example, this is valid in GNU C though not valid in C89:
15056
15057     struct foo {int a[4];};
15058
15059     struct foo f();
15060
15061     bar (int index)
15062     {
15063       return f().a[index];
15064     }
15065
15066
15067File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
15068
150695.18 Arithmetic on `void'- and Function-Pointers
15070================================================
15071
15072In GNU C, addition and subtraction operations are supported on pointers
15073to `void' and on pointers to functions.  This is done by treating the
15074size of a `void' or of a function as 1.
15075
15076 A consequence of this is that `sizeof' is also allowed on `void' and
15077on function types, and returns 1.
15078
15079 The option `-Wpointer-arith' requests a warning if these extensions
15080are used.
15081
15082
15083File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
15084
150855.19 Non-Constant Initializers
15086==============================
15087
15088As in standard C++ and ISO C99, the elements of an aggregate
15089initializer for an automatic variable are not required to be constant
15090expressions in GNU C.  Here is an example of an initializer with
15091run-time varying elements:
15092
15093     foo (float f, float g)
15094     {
15095       float beat_freqs[2] = { f-g, f+g };
15096       /* ... */
15097     }
15098
15099
15100File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
15101
151025.20 Compound Literals
15103======================
15104
15105ISO C99 supports compound literals.  A compound literal looks like a
15106cast containing an initializer.  Its value is an object of the type
15107specified in the cast, containing the elements specified in the
15108initializer; it is an lvalue.  As an extension, GCC supports compound
15109literals in C89 mode and in C++.
15110
15111 Usually, the specified type is a structure.  Assume that `struct foo'
15112and `structure' are declared as shown:
15113
15114     struct foo {int a; char b[2];} structure;
15115
15116Here is an example of constructing a `struct foo' with a compound
15117literal:
15118
15119     structure = ((struct foo) {x + y, 'a', 0});
15120
15121This is equivalent to writing the following:
15122
15123     {
15124       struct foo temp = {x + y, 'a', 0};
15125       structure = temp;
15126     }
15127
15128 You can also construct an array.  If all the elements of the compound
15129literal are (made up of) simple constant expressions, suitable for use
15130in initializers of objects of static storage duration, then the compound
15131literal can be coerced to a pointer to its first element and used in
15132such an initializer, as shown here:
15133
15134     char **foo = (char *[]) { "x", "y", "z" };
15135
15136 Compound literals for scalar types and union types are is also
15137allowed, but then the compound literal is equivalent to a cast.
15138
15139 As a GNU extension, GCC allows initialization of objects with static
15140storage duration by compound literals (which is not possible in ISO
15141C99, because the initializer is not a constant).  It is handled as if
15142the object was initialized only with the bracket enclosed list if the
15143types of the compound literal and the object match.  The initializer
15144list of the compound literal must be constant.  If the object being
15145initialized has array type of unknown size, the size is determined by
15146compound literal size.
15147
15148     static struct foo x = (struct foo) {1, 'a', 'b'};
15149     static int y[] = (int []) {1, 2, 3};
15150     static int z[] = (int [3]) {1};
15151
15152The above lines are equivalent to the following:
15153     static struct foo x = {1, 'a', 'b'};
15154     static int y[] = {1, 2, 3};
15155     static int z[] = {1, 0, 0};
15156
15157
15158File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
15159
151605.21 Designated Initializers
15161============================
15162
15163Standard C89 requires the elements of an initializer to appear in a
15164fixed order, the same as the order of the elements in the array or
15165structure being initialized.
15166
15167 In ISO C99 you can give the elements in any order, specifying the array
15168indices or structure field names they apply to, and GNU C allows this as
15169an extension in C89 mode as well.  This extension is not implemented in
15170GNU C++.
15171
15172 To specify an array index, write `[INDEX] =' before the element value.
15173For example,
15174
15175     int a[6] = { [4] = 29, [2] = 15 };
15176
15177is equivalent to
15178
15179     int a[6] = { 0, 0, 15, 0, 29, 0 };
15180
15181The index values must be constant expressions, even if the array being
15182initialized is automatic.
15183
15184 An alternative syntax for this which has been obsolete since GCC 2.5
15185but GCC still accepts is to write `[INDEX]' before the element value,
15186with no `='.
15187
15188 To initialize a range of elements to the same value, write `[FIRST ...
15189LAST] = VALUE'.  This is a GNU extension.  For example,
15190
15191     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
15192
15193If the value in it has side-effects, the side-effects will happen only
15194once, not for each initialized field by the range initializer.
15195
15196Note that the length of the array is the highest value specified plus
15197one.
15198
15199 In a structure initializer, specify the name of a field to initialize
15200with `.FIELDNAME =' before the element value.  For example, given the
15201following structure,
15202
15203     struct point { int x, y; };
15204
15205the following initialization
15206
15207     struct point p = { .y = yvalue, .x = xvalue };
15208
15209is equivalent to
15210
15211     struct point p = { xvalue, yvalue };
15212
15213 Another syntax which has the same meaning, obsolete since GCC 2.5, is
15214`FIELDNAME:', as shown here:
15215
15216     struct point p = { y: yvalue, x: xvalue };
15217
15218 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
15219also use a designator (or the obsolete colon syntax) when initializing
15220a union, to specify which element of the union should be used.  For
15221example,
15222
15223     union foo { int i; double d; };
15224
15225     union foo f = { .d = 4 };
15226
15227will convert 4 to a `double' to store it in the union using the second
15228element.  By contrast, casting 4 to type `union foo' would store it
15229into the union as the integer `i', since it is an integer.  (*Note Cast
15230to Union::.)
15231
15232 You can combine this technique of naming elements with ordinary C
15233initialization of successive elements.  Each initializer element that
15234does not have a designator applies to the next consecutive element of
15235the array or structure.  For example,
15236
15237     int a[6] = { [1] = v1, v2, [4] = v4 };
15238
15239is equivalent to
15240
15241     int a[6] = { 0, v1, v2, 0, v4, 0 };
15242
15243 Labeling the elements of an array initializer is especially useful
15244when the indices are characters or belong to an `enum' type.  For
15245example:
15246
15247     int whitespace[256]
15248       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
15249           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
15250
15251 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
15252before an `=' to specify a nested subobject to initialize; the list is
15253taken relative to the subobject corresponding to the closest
15254surrounding brace pair.  For example, with the `struct point'
15255declaration above:
15256
15257     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
15258
15259If the same field is initialized multiple times, it will have value from
15260the last initialization.  If any such overridden initialization has
15261side-effect, it is unspecified whether the side-effect happens or not.
15262Currently, GCC will discard them and issue a warning.
15263
15264
15265File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
15266
152675.22 Case Ranges
15268================
15269
15270You can specify a range of consecutive values in a single `case' label,
15271like this:
15272
15273     case LOW ... HIGH:
15274
15275This has the same effect as the proper number of individual `case'
15276labels, one for each integer value from LOW to HIGH, inclusive.
15277
15278 This feature is especially useful for ranges of ASCII character codes:
15279
15280     case 'A' ... 'Z':
15281
15282 *Be careful:* Write spaces around the `...', for otherwise it may be
15283parsed wrong when you use it with integer values.  For example, write
15284this:
15285
15286     case 1 ... 5:
15287
15288rather than this:
15289
15290     case 1...5:
15291
15292
15293File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
15294
152955.23 Cast to a Union Type
15296=========================
15297
15298A cast to union type is similar to other casts, except that the type
15299specified is a union type.  You can specify the type either with `union
15300TAG' or with a typedef name.  A cast to union is actually a constructor
15301though, not a cast, and hence does not yield an lvalue like normal
15302casts.  (*Note Compound Literals::.)
15303
15304 The types that may be cast to the union type are those of the members
15305of the union.  Thus, given the following union and variables:
15306
15307     union foo { int i; double d; };
15308     int x;
15309     double y;
15310
15311both `x' and `y' can be cast to type `union foo'.
15312
15313 Using the cast as the right-hand side of an assignment to a variable of
15314union type is equivalent to storing in a member of the union:
15315
15316     union foo u;
15317     /* ... */
15318     u = (union foo) x  ==  u.i = x
15319     u = (union foo) y  ==  u.d = y
15320
15321 You can also use the union cast as a function argument:
15322
15323     void hack (union foo);
15324     /* ... */
15325     hack ((union foo) x);
15326
15327
15328File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
15329
153305.24 Mixed Declarations and Code
15331================================
15332
15333ISO C99 and ISO C++ allow declarations and code to be freely mixed
15334within compound statements.  As an extension, GCC also allows this in
15335C89 mode.  For example, you could do:
15336
15337     int i;
15338     /* ... */
15339     i++;
15340     int j = i + 2;
15341
15342 Each identifier is visible from where it is declared until the end of
15343the enclosing block.
15344
15345
15346File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
15347
153485.25 Declaring Attributes of Functions
15349======================================
15350
15351In GNU C, you declare certain things about functions called in your
15352program which help the compiler optimize function calls and check your
15353code more carefully.
15354
15355 The keyword `__attribute__' allows you to specify special attributes
15356when making a declaration.  This keyword is followed by an attribute
15357specification inside double parentheses.  The following attributes are
15358currently defined for functions on all targets: `noreturn',
15359`returns_twice', `noinline', `always_inline', `flatten', `pure',
15360`const', `nothrow', `sentinel', `format', `format_arg', `bounded',
15361`no_instrument_function', `section', `constructor', `destructor',
15362`used', `unused', `deprecated', `weak', `malloc', `alias',
15363`warn_unused_result', `nonnull', `gnu_inline' and `externally_visible'.
15364Several other attributes are defined for functions on particular
15365target systems.  Other attributes, including `section' are supported
15366for variables declarations (*note Variable Attributes::) and for types
15367(*note Type Attributes::).
15368
15369 You may also specify attributes with `__' preceding and following each
15370keyword.  This allows you to use them in header files without being
15371concerned about a possible macro of the same name.  For example, you
15372may use `__noreturn__' instead of `noreturn'.
15373
15374 *Note Attribute Syntax::, for details of the exact syntax for using
15375attributes.
15376
15377`alias ("TARGET")'
15378     The `alias' attribute causes the declaration to be emitted as an
15379     alias for another symbol, which must be specified.  For instance,
15380
15381          void __f () { /* Do something. */; }
15382          void f () __attribute__ ((weak, alias ("__f")));
15383
15384     defines `f' to be a weak alias for `__f'.  In C++, the mangled
15385     name for the target must be used.  It is an error if `__f' is not
15386     defined in the same translation unit.
15387
15388     Not all target machines support this attribute.
15389
15390`always_inline'
15391     Generally, functions are not inlined unless optimization is
15392     specified.  For functions declared inline, this attribute inlines
15393     the function even if no optimization level was specified.
15394
15395`gnu_inline'
15396     This attribute should be used with a function which is also
15397     declared with the `inline' keyword.  It directs GCC to treat the
15398     function as if it were defined in gnu89 mode even when compiling
15399     in C99 or gnu99 mode.
15400
15401     If the function is declared `extern', then this definition of the
15402     function is used only for inlining.  In no case is the function
15403     compiled as a standalone function, not even if you take its address
15404     explicitly.  Such an address becomes an external reference, as if
15405     you had only declared the function, and had not defined it.  This
15406     has almost the effect of a macro.  The way to use this is to put a
15407     function definition in a header file with this attribute, and put
15408     another copy of the function, without `extern', in a library file.
15409     The definition in the header file will cause most calls to the
15410     function to be inlined.  If any uses of the function remain, they
15411     will refer to the single copy in the library.  Note that the two
15412     definitions of the functions need not be precisely the same,
15413     although if they do not have the same effect your program may
15414     behave oddly.
15415
15416     If the function is neither `extern' nor `static', then the
15417     function is compiled as a standalone function, as well as being
15418     inlined where possible.
15419
15420     This is how GCC traditionally handled functions declared `inline'.
15421     Since ISO C99 specifies a different semantics for `inline', this
15422     function attribute is provided as a transition measure and as a
15423     useful feature in its own right.  This attribute is available in
15424     GCC 4.1.3 and later.  It is available if either of the
15425     preprocessor macros `__GNUC_GNU_INLINE__' or
15426     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
15427     As Fast As a Macro: Inline.
15428
15429     Note that since the first version of GCC to support C99 inline
15430     semantics is 4.3, earlier versions of GCC which accept this
15431     attribute effectively assume that it is always present, whether or
15432     not it is given explicitly.  In versions prior to 4.3, the only
15433     effect of explicitly including it is to disable warnings about
15434     using inline functions in C99 mode.
15435
15436`flatten'
15437     Generally, inlining into a function is limited.  For a function
15438     marked with this attribute, every call inside this function will
15439     be inlined, if possible.  Whether the function itself is
15440     considered for inlining depends on its size and the current
15441     inlining parameters.  The `flatten' attribute only works reliably
15442     in unit-at-a-time mode.
15443
15444`bounded'
15445     This attribute is used to type-check functions whose parameters
15446     pass fixed-length buffer and their sizes.  The syntax for normal
15447     buffers is:
15448
15449         __attribute__ ((__bounded__ ( __buffer__, buffer, length )))
15450
15451     where buffer contains the parameter number (starting from 1) of the
15452     pointer to the buffer, and length contains the parameter number of the
15453     buffer length argument.
15454
15455     gcc will emit a warning if the length argument is a constant larger than
15456     the actual size of the buffer.  If the buffer is not a statically
15457     declared array of fixed length, no warnings will be generated.  Refer to
15458     memcpy(3) for an example of a function with this check.
15459
15460     For checking strings, just use __string__ instead of __buffer__:
15461
15462     __attribute__ ((__bounded__ ( __string__, buffer, length )))
15463
15464     In addition to the checks described above, this also tests if the length
15465     argument was wrongly derived from a sizeof(void *) operation.  strlcpy(3)
15466     is a good example of a string function with this check.
15467
15468     If a function needs string checking like __string__ but operates on
15469     element counts rather than buffer sizes, use __wcstring__:
15470
15471     __attribute__ ((__bounded__ ( __wcstring__, buffer, count )))
15472
15473     An example of a string function with this check is wcslcpy(3).
15474
15475     Some functions specify the length as two arguments: the number of
15476     elements and the size of each element.  In this case, use the __size__
15477     attribute:
15478
15479     __attribute__ ((__bounded__ ( __size__, buffer, nmemb, size )))
15480
15481     where buffer contains the parameter number of the pointer to the buffer,
15482     nmemb contains the parameter number of the number of members, and size
15483     has the parameter number of the size of each element.  The type checks
15484     performed by __size__ are the same as the __buffer__ attribute.  See
15485     fread(3) for an example of this type of function.
15486
15487     If a function accepts a buffer parameter and specifies that it has to be
15488     of a minimum length, the __minbytes__ attribute can be used:
15489
15490     __attribute__ ((__bounded__ ( __minbytes__, buffer, minsize )))
15491
15492     where buffer contains the parameter number of the pointer to the buffer,
15493     and minsize specifies the minimum number of bytes that the buffer should
15494     be.  ctime_r(3) is an example of this type of function.
15495
15496     If -Wbounded is specified with -Wformat, additional checks are performed
15497     on sscanf(3) format strings.  The `%s' fields are checked for incorrect
15498     bound lengths by checking the size of the buffer associated with the
15499     format argument.
15500
15501`cdecl'
15502     On the Intel 386, the `cdecl' attribute causes the compiler to
15503     assume that the calling function will pop off the stack space used
15504     to pass arguments.  This is useful to override the effects of the
15505     `-mrtd' switch.
15506
15507`const'
15508     Many functions do not examine any values except their arguments,
15509     and have no effects except the return value.  Basically this is
15510     just slightly more strict class than the `pure' attribute below,
15511     since function is not allowed to read global memory.
15512
15513     Note that a function that has pointer arguments and examines the
15514     data pointed to must _not_ be declared `const'.  Likewise, a
15515     function that calls a non-`const' function usually must not be
15516     `const'.  It does not make sense for a `const' function to return
15517     `void'.
15518
15519     The attribute `const' is not implemented in GCC versions earlier
15520     than 2.5.  An alternative way to declare that a function has no
15521     side effects, which works in the current version and in some older
15522     versions, is as follows:
15523
15524          typedef int intfn ();
15525
15526          extern const intfn square;
15527
15528     This approach does not work in GNU C++ from 2.6.0 on, since the
15529     language specifies that the `const' must be attached to the return
15530     value.
15531
15532`constructor'
15533`destructor'
15534     The `constructor' attribute causes the function to be called
15535     automatically before execution enters `main ()'.  Similarly, the
15536     `destructor' attribute causes the function to be called
15537     automatically after `main ()' has completed or `exit ()' has been
15538     called.  Functions with these attributes are useful for
15539     initializing data that will be used implicitly during the
15540     execution of the program.
15541
15542     These attributes are not currently implemented for Objective-C.
15543
15544`deprecated'
15545     The `deprecated' attribute results in a warning if the function is
15546     used anywhere in the source file.  This is useful when identifying
15547     functions that are expected to be removed in a future version of a
15548     program.  The warning also includes the location of the declaration
15549     of the deprecated function, to enable users to easily find further
15550     information about why the function is deprecated, or what they
15551     should do instead.  Note that the warnings only occurs for uses:
15552
15553          int old_fn () __attribute__ ((deprecated));
15554          int old_fn ();
15555          int (*fn_ptr)() = old_fn;
15556
15557     results in a warning on line 3 but not line 2.
15558
15559     The `deprecated' attribute can also be used for variables and
15560     types (*note Variable Attributes::, *note Type Attributes::.)
15561
15562`dllexport'
15563     On Microsoft Windows targets and Symbian OS targets the
15564     `dllexport' attribute causes the compiler to provide a global
15565     pointer to a pointer in a DLL, so that it can be referenced with
15566     the `dllimport' attribute.  On Microsoft Windows targets, the
15567     pointer name is formed by combining `_imp__' and the function or
15568     variable name.
15569
15570     You can use `__declspec(dllexport)' as a synonym for
15571     `__attribute__ ((dllexport))' for compatibility with other
15572     compilers.
15573
15574     On systems that support the `visibility' attribute, this attribute
15575     also implies "default" visibility, unless a `visibility' attribute
15576     is explicitly specified.  You should avoid the use of `dllexport'
15577     with "hidden" or "internal" visibility; in the future GCC may
15578     issue an error for those cases.
15579
15580     Currently, the `dllexport' attribute is ignored for inlined
15581     functions, unless the `-fkeep-inline-functions' flag has been
15582     used.  The attribute is also ignored for undefined symbols.
15583
15584     When applied to C++ classes, the attribute marks defined
15585     non-inlined member functions and static data members as exports.
15586     Static consts initialized in-class are not marked unless they are
15587     also defined out-of-class.
15588
15589     For Microsoft Windows targets there are alternative methods for
15590     including the symbol in the DLL's export table such as using a
15591     `.def' file with an `EXPORTS' section or, with GNU ld, using the
15592     `--export-all' linker flag.
15593
15594`dllimport'
15595     On Microsoft Windows and Symbian OS targets, the `dllimport'
15596     attribute causes the compiler to reference a function or variable
15597     via a global pointer to a pointer that is set up by the DLL
15598     exporting the symbol.  The attribute implies `extern' storage.  On
15599     Microsoft Windows targets, the pointer name is formed by combining
15600     `_imp__' and the function or variable name.
15601
15602     You can use `__declspec(dllimport)' as a synonym for
15603     `__attribute__ ((dllimport))' for compatibility with other
15604     compilers.
15605
15606     Currently, the attribute is ignored for inlined functions.  If the
15607     attribute is applied to a symbol _definition_, an error is
15608     reported.  If a symbol previously declared `dllimport' is later
15609     defined, the attribute is ignored in subsequent references, and a
15610     warning is emitted.  The attribute is also overridden by a
15611     subsequent declaration as `dllexport'.
15612
15613     When applied to C++ classes, the attribute marks non-inlined
15614     member functions and static data members as imports.  However, the
15615     attribute is ignored for virtual methods to allow creation of
15616     vtables using thunks.
15617
15618     On the SH Symbian OS target the `dllimport' attribute also has
15619     another affect--it can cause the vtable and run-time type
15620     information for a class to be exported.  This happens when the
15621     class has a dllimport'ed constructor or a non-inline, non-pure
15622     virtual function and, for either of those two conditions, the
15623     class also has a inline constructor or destructor and has a key
15624     function that is defined in the current translation unit.
15625
15626     For Microsoft Windows based targets the use of the `dllimport'
15627     attribute on functions is not necessary, but provides a small
15628     performance benefit by eliminating a thunk in the DLL.  The use of
15629     the `dllimport' attribute on imported variables was required on
15630     older versions of the GNU linker, but can now be avoided by
15631     passing the `--enable-auto-import' switch to the GNU linker.  As
15632     with functions, using the attribute for a variable eliminates a
15633     thunk in the DLL.
15634
15635     One drawback to using this attribute is that a pointer to a
15636     function or variable marked as `dllimport' cannot be used as a
15637     constant address.  On Microsoft Windows targets, the attribute can
15638     be disabled for functions by setting the `-mnop-fun-dllimport'
15639     flag.
15640
15641`eightbit_data'
15642     Use this attribute on the H8/300, H8/300H, and H8S to indicate
15643     that the specified variable should be placed into the eight bit
15644     data section.  The compiler will generate more efficient code for
15645     certain operations on data in the eight bit data area.  Note the
15646     eight bit data area is limited to 256 bytes of data.
15647
15648     You must use GAS and GLD from GNU binutils version 2.7 or later for
15649     this attribute to work correctly.
15650
15651`exception_handler'
15652     Use this attribute on the Blackfin to indicate that the specified
15653     function is an exception handler.  The compiler will generate
15654     function entry and exit sequences suitable for use in an exception
15655     handler when this attribute is present.
15656
15657`far'
15658     On 68HC11 and 68HC12 the `far' attribute causes the compiler to
15659     use a calling convention that takes care of switching memory banks
15660     when entering and leaving a function.  This calling convention is
15661     also the default when using the `-mlong-calls' option.
15662
15663     On 68HC12 the compiler will use the `call' and `rtc' instructions
15664     to call and return from a function.
15665
15666     On 68HC11 the compiler will generate a sequence of instructions to
15667     invoke a board-specific routine to switch the memory bank and call
15668     the real function.  The board-specific routine simulates a `call'.
15669     At the end of a function, it will jump to a board-specific routine
15670     instead of using `rts'.  The board-specific return routine
15671     simulates the `rtc'.
15672
15673`fastcall'
15674     On the Intel 386, the `fastcall' attribute causes the compiler to
15675     pass the first argument (if of integral type) in the register ECX
15676     and the second argument (if of integral type) in the register EDX.
15677     Subsequent and other typed arguments are passed on the stack.
15678     The called function will pop the arguments off the stack.  If the
15679     number of arguments is variable all arguments are pushed on the
15680     stack.
15681
15682`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
15683     The `format' attribute specifies that a function takes `printf',
15684     `scanf', `strftime' or `strfmon' style arguments which should be
15685     type-checked against a format string.  For example, the
15686     declaration:
15687
15688          extern int
15689          my_printf (void *my_object, const char *my_format, ...)
15690                __attribute__ ((format (printf, 2, 3)));
15691
15692     causes the compiler to check the arguments in calls to `my_printf'
15693     for consistency with the `printf' style format string argument
15694     `my_format'.
15695
15696     The parameter ARCHETYPE determines how the format string is
15697     interpreted, and should be `printf', `scanf', `strftime' or
15698     `strfmon'.  (You can also use `__printf__', `__scanf__',
15699     `__strftime__' or `__strfmon__'.)  The parameter STRING-INDEX
15700     specifies which argument is the format string argument (starting
15701     from 1), while FIRST-TO-CHECK is the number of the first argument
15702     to check against the format string.  For functions where the
15703     arguments are not available to be checked (such as `vprintf'),
15704     specify the third parameter as zero.  In this case the compiler
15705     only checks the format string for consistency.  For `strftime'
15706     formats, the third parameter is required to be zero.  Since
15707     non-static C++ methods have an implicit `this' argument, the
15708     arguments of such methods should be counted from two, not one, when
15709     giving values for STRING-INDEX and FIRST-TO-CHECK.
15710
15711     In the example above, the format string (`my_format') is the second
15712     argument of the function `my_print', and the arguments to check
15713     start with the third argument, so the correct parameters for the
15714     format attribute are 2 and 3.
15715
15716     The `format' attribute allows you to identify your own functions
15717     which take format strings as arguments, so that GCC can check the
15718     calls to these functions for errors.  The compiler always (unless
15719     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
15720     standard library functions `printf', `fprintf', `sprintf',
15721     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
15722     `vsprintf' whenever such warnings are requested (using
15723     `-Wformat'), so there is no need to modify the header file
15724     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
15725     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
15726     strictly conforming C standard modes, the X/Open function
15727     `strfmon' is also checked as are `printf_unlocked' and
15728     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
15729     Dialect Options.
15730
15731     The target may provide additional types of format checks.  *Note
15732     Format Checks Specific to Particular Target Machines: Target
15733     Format Checks.
15734
15735`format_arg (STRING-INDEX)'
15736     The `format_arg' attribute specifies that a function takes a format
15737     string for a `printf', `scanf', `strftime' or `strfmon' style
15738     function and modifies it (for example, to translate it into
15739     another language), so the result can be passed to a `printf',
15740     `scanf', `strftime' or `strfmon' style function (with the
15741     remaining arguments to the format function the same as they would
15742     have been for the unmodified string).  For example, the
15743     declaration:
15744
15745          extern char *
15746          my_dgettext (char *my_domain, const char *my_format)
15747                __attribute__ ((format_arg (2)));
15748
15749     causes the compiler to check the arguments in calls to a `printf',
15750     `scanf', `strftime' or `strfmon' type function, whose format
15751     string argument is a call to the `my_dgettext' function, for
15752     consistency with the format string argument `my_format'.  If the
15753     `format_arg' attribute had not been specified, all the compiler
15754     could tell in such calls to format functions would be that the
15755     format string argument is not constant; this would generate a
15756     warning when `-Wformat-nonliteral' is used, but the calls could
15757     not be checked without the attribute.
15758
15759     The parameter STRING-INDEX specifies which argument is the format
15760     string argument (starting from one).  Since non-static C++ methods
15761     have an implicit `this' argument, the arguments of such methods
15762     should be counted from two.
15763
15764     The `format-arg' attribute allows you to identify your own
15765     functions which modify format strings, so that GCC can check the
15766     calls to `printf', `scanf', `strftime' or `strfmon' type function
15767     whose operands are a call to one of your own function.  The
15768     compiler always treats `gettext', `dgettext', and `dcgettext' in
15769     this manner except when strict ISO C support is requested by
15770     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
15771     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
15772     Dialect Options.
15773
15774`function_vector'
15775     Use this attribute on the H8/300, H8/300H, and H8S to indicate
15776     that the specified function should be called through the function
15777     vector.  Calling a function through the function vector will
15778     reduce code size, however; the function vector has a limited size
15779     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
15780     and H8S) and shares space with the interrupt vector.
15781
15782     You must use GAS and GLD from GNU binutils version 2.7 or later for
15783     this attribute to work correctly.
15784
15785`interrupt'
15786     Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1,
15787     and Xstormy16 ports to indicate that the specified function is an
15788     interrupt handler.  The compiler will generate function entry and
15789     exit sequences suitable for use in an interrupt handler when this
15790     attribute is present.
15791
15792     Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H,
15793     H8S, and SH processors can be specified via the
15794     `interrupt_handler' attribute.
15795
15796     Note, on the AVR, interrupts will be enabled inside the function.
15797
15798     Note, for the ARM, you can specify the kind of interrupt to be
15799     handled by adding an optional parameter to the interrupt attribute
15800     like this:
15801
15802          void f () __attribute__ ((interrupt ("IRQ")));
15803
15804     Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
15805     and UNDEF.
15806
15807`interrupt_handler'
15808     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
15809     and SH to indicate that the specified function is an interrupt
15810     handler.  The compiler will generate function entry and exit
15811     sequences suitable for use in an interrupt handler when this
15812     attribute is present.
15813
15814`kspisusp'
15815     When used together with `interrupt_handler', `exception_handler'
15816     or `nmi_handler', code will be generated to load the stack pointer
15817     from the USP register in the function prologue.
15818
15819`long_call/short_call'
15820     This attribute specifies how a particular function is called on
15821     ARM.  Both attributes override the `-mlong-calls' (*note ARM
15822     Options::) command line switch and `#pragma long_calls' settings.
15823     The `long_call' attribute indicates that the function might be far
15824     away from the call site and require a different (more expensive)
15825     calling sequence.   The `short_call' attribute always places the
15826     offset to the function from the call site into the `BL'
15827     instruction directly.
15828
15829`longcall/shortcall'
15830     On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
15831     indicates that the function might be far away from the call site
15832     and require a different (more expensive) calling sequence.  The
15833     `shortcall' attribute indicates that the function is always close
15834     enough for the shorter calling sequence to be used.  These
15835     attributes override both the `-mlongcall' switch and, on the
15836     RS/6000 and PowerPC, the `#pragma longcall' setting.
15837
15838     *Note RS/6000 and PowerPC Options::, for more information on
15839     whether long calls are necessary.
15840
15841`long_call'
15842     This attribute specifies how a particular function is called on
15843     MIPS.  The attribute overrides the `-mlong-calls' (*note MIPS
15844     Options::) command line switch.  This attribute causes the
15845     compiler to always call the function by first loading its address
15846     into a register, and then using the contents of that register.
15847
15848`malloc'
15849     The `malloc' attribute is used to tell the compiler that a function
15850     may be treated as if any non-`NULL' pointer it returns cannot
15851     alias any other pointer valid when the function returns.  This
15852     will often improve optimization.  Standard functions with this
15853     property include `malloc' and `calloc'.  `realloc'-like functions
15854     have this property as long as the old pointer is never referred to
15855     (including comparing it to the new pointer) after the function
15856     returns a non-`NULL' value.
15857
15858`model (MODEL-NAME)'
15859     On the M32R/D, use this attribute to set the addressability of an
15860     object, and of the code generated for a function.  The identifier
15861     MODEL-NAME is one of `small', `medium', or `large', representing
15862     each of the code models.
15863
15864     Small model objects live in the lower 16MB of memory (so that their
15865     addresses can be loaded with the `ld24' instruction), and are
15866     callable with the `bl' instruction.
15867
15868     Medium model objects may live anywhere in the 32-bit address space
15869     (the compiler will generate `seth/add3' instructions to load their
15870     addresses), and are callable with the `bl' instruction.
15871
15872     Large model objects may live anywhere in the 32-bit address space
15873     (the compiler will generate `seth/add3' instructions to load their
15874     addresses), and may not be reachable with the `bl' instruction
15875     (the compiler will generate the much slower `seth/add3/jl'
15876     instruction sequence).
15877
15878     On IA-64, use this attribute to set the addressability of an
15879     object.  At present, the only supported identifier for MODEL-NAME
15880     is `small', indicating addressability via "small" (22-bit)
15881     addresses (so that their addresses can be loaded with the `addl'
15882     instruction).  Caveat: such addressing is by definition not
15883     position independent and hence this attribute must not be used for
15884     objects defined by shared libraries.
15885
15886`naked'
15887     Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
15888     that the specified function does not need prologue/epilogue
15889     sequences generated by the compiler.  It is up to the programmer
15890     to provide these sequences.
15891
15892`near'
15893     On 68HC11 and 68HC12 the `near' attribute causes the compiler to
15894     use the normal calling convention based on `jsr' and `rts'.  This
15895     attribute can be used to cancel the effect of the `-mlong-calls'
15896     option.
15897
15898`nesting'
15899     Use this attribute together with `interrupt_handler',
15900     `exception_handler' or `nmi_handler' to indicate that the function
15901     entry code should enable nested interrupts or exceptions.
15902
15903`nmi_handler'
15904     Use this attribute on the Blackfin to indicate that the specified
15905     function is an NMI handler.  The compiler will generate function
15906     entry and exit sequences suitable for use in an NMI handler when
15907     this attribute is present.
15908
15909`no_instrument_function'
15910     If `-finstrument-functions' is given, profiling function calls will
15911     be generated at entry and exit of most user-compiled functions.
15912     Functions with this attribute will not be so instrumented.
15913
15914`noinline'
15915     This function attribute prevents a function from being considered
15916     for inlining.
15917
15918`nonnull (ARG-INDEX, ...)'
15919     The `nonnull' attribute specifies that some function parameters
15920     should be non-null pointers.  For instance, the declaration:
15921
15922          extern void *
15923          my_memcpy (void *dest, const void *src, size_t len)
15924          	__attribute__((nonnull (1, 2)));
15925
15926     causes the compiler to check that, in calls to `my_memcpy',
15927     arguments DEST and SRC are non-null.  If the compiler determines
15928     that a null pointer is passed in an argument slot marked as
15929     non-null, and the `-Wnonnull' option is enabled, a warning is
15930     issued.  The compiler may also choose to make optimizations based
15931     on the knowledge that certain function arguments will not be null.
15932
15933     If no argument index list is given to the `nonnull' attribute, all
15934     pointer arguments are marked as non-null.  To illustrate, the
15935     following declaration is equivalent to the previous example:
15936
15937          extern void *
15938          my_memcpy (void *dest, const void *src, size_t len)
15939          	__attribute__((nonnull));
15940
15941`noreturn'
15942     A few standard library functions, such as `abort' and `exit',
15943     cannot return.  GCC knows this automatically.  Some programs define
15944     their own functions that never return.  You can declare them
15945     `noreturn' to tell the compiler this fact.  For example,
15946
15947          void fatal () __attribute__ ((noreturn));
15948
15949          void
15950          fatal (/* ... */)
15951          {
15952            /* ... */ /* Print error message. */ /* ... */
15953            exit (1);
15954          }
15955
15956     The `noreturn' keyword tells the compiler to assume that `fatal'
15957     cannot return.  It can then optimize without regard to what would
15958     happen if `fatal' ever did return.  This makes slightly better
15959     code.  More importantly, it helps avoid spurious warnings of
15960     uninitialized variables.
15961
15962     The `noreturn' keyword does not affect the exceptional path when
15963     that applies: a `noreturn'-marked function may still return to the
15964     caller by throwing an exception or calling `longjmp'.
15965
15966     Do not assume that registers saved by the calling function are
15967     restored before calling the `noreturn' function.
15968
15969     It does not make sense for a `noreturn' function to have a return
15970     type other than `void'.
15971
15972     The attribute `noreturn' is not implemented in GCC versions
15973     earlier than 2.5.  An alternative way to declare that a function
15974     does not return, which works in the current version and in some
15975     older versions, is as follows:
15976
15977          typedef void voidfn ();
15978
15979          volatile voidfn fatal;
15980
15981     This approach does not work in GNU C++.
15982
15983`nothrow'
15984     The `nothrow' attribute is used to inform the compiler that a
15985     function cannot throw an exception.  For example, most functions in
15986     the standard C library can be guaranteed not to throw an exception
15987     with the notable exceptions of `qsort' and `bsearch' that take
15988     function pointer arguments.  The `nothrow' attribute is not
15989     implemented in GCC versions earlier than 3.3.
15990
15991`pure'
15992     Many functions have no effects except the return value and their
15993     return value depends only on the parameters and/or global
15994     variables.  Such a function can be subject to common subexpression
15995     elimination and loop optimization just as an arithmetic operator
15996     would be.  These functions should be declared with the attribute
15997     `pure'.  For example,
15998
15999          int square (int) __attribute__ ((pure));
16000
16001     says that the hypothetical function `square' is safe to call fewer
16002     times than the program says.
16003
16004     Some of common examples of pure functions are `strlen' or `memcmp'.
16005     Interesting non-pure functions are functions with infinite loops
16006     or those depending on volatile memory or other system resource,
16007     that may change between two consecutive calls (such as `feof' in a
16008     multithreading environment).
16009
16010     The attribute `pure' is not implemented in GCC versions earlier
16011     than 2.96.
16012
16013`regparm (NUMBER)'
16014     On the Intel 386, the `regparm' attribute causes the compiler to
16015     pass arguments number one to NUMBER if they are of integral type
16016     in registers EAX, EDX, and ECX instead of on the stack.  Functions
16017     that take a variable number of arguments will continue to be
16018     passed all of their arguments on the stack.
16019
16020     Beware that on some ELF systems this attribute is unsuitable for
16021     global functions in shared libraries with lazy binding (which is
16022     the default).  Lazy binding will send the first call via resolving
16023     code in the loader, which might assume EAX, EDX and ECX can be
16024     clobbered, as per the standard calling conventions.  Solaris 8 is
16025     affected by this.  GNU systems with GLIBC 2.1 or higher, and
16026     FreeBSD, are believed to be safe since the loaders there save all
16027     registers.  (Lazy binding can be disabled with the linker or the
16028     loader if desired, to avoid the problem.)
16029
16030`sseregparm'
16031     On the Intel 386 with SSE support, the `sseregparm' attribute
16032     causes the compiler to pass up to 3 floating point arguments in
16033     SSE registers instead of on the stack.  Functions that take a
16034     variable number of arguments will continue to pass all of their
16035     floating point arguments on the stack.
16036
16037`force_align_arg_pointer'
16038     On the Intel x86, the `force_align_arg_pointer' attribute may be
16039     applied to individual function definitions, generating an alternate
16040     prologue and epilogue that realigns the runtime stack.  This
16041     supports mixing legacy codes that run with a 4-byte aligned stack
16042     with modern codes that keep a 16-byte stack for SSE compatibility.
16043     The alternate prologue and epilogue are slower and bigger than
16044     the regular ones, and the alternate prologue requires a scratch
16045     register; this lowers the number of registers available if used in
16046     conjunction with the `regparm' attribute.  The
16047     `force_align_arg_pointer' attribute is incompatible with nested
16048     functions; this is considered a hard error.
16049
16050`returns_twice'
16051     The `returns_twice' attribute tells the compiler that a function
16052     may return more than one time.  The compiler will ensure that all
16053     registers are dead before calling such a function and will emit a
16054     warning about the variables that may be clobbered after the second
16055     return from the function.  Examples of such functions are `setjmp'
16056     and `vfork'.  The `longjmp'-like counterpart of such function, if
16057     any, might need to be marked with the `noreturn' attribute.
16058
16059`saveall'
16060     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
16061     indicate that all registers except the stack pointer should be
16062     saved in the prologue regardless of whether they are used or not.
16063
16064`section ("SECTION-NAME")'
16065     Normally, the compiler places the code it generates in the `text'
16066     section.  Sometimes, however, you need additional sections, or you
16067     need certain particular functions to appear in special sections.
16068     The `section' attribute specifies that a function lives in a
16069     particular section.  For example, the declaration:
16070
16071          extern void foobar (void) __attribute__ ((section ("bar")));
16072
16073     puts the function `foobar' in the `bar' section.
16074
16075     Some file formats do not support arbitrary sections so the
16076     `section' attribute is not available on all platforms.  If you
16077     need to map the entire contents of a module to a particular
16078     section, consider using the facilities of the linker instead.
16079
16080`sentinel'
16081     This function attribute ensures that a parameter in a function
16082     call is an explicit `NULL'.  The attribute is only valid on
16083     variadic functions.  By default, the sentinel is located at
16084     position zero, the last parameter of the function call.  If an
16085     optional integer position argument P is supplied to the attribute,
16086     the sentinel must be located at position P counting backwards from
16087     the end of the argument list.
16088
16089          __attribute__ ((sentinel))
16090          is equivalent to
16091          __attribute__ ((sentinel(0)))
16092
16093     The attribute is automatically set with a position of 0 for the
16094     built-in functions `execl' and `execlp'.  The built-in function
16095     `execle' has the attribute set with a position of 1.
16096
16097     A valid `NULL' in this context is defined as zero with any pointer
16098     type.  If your system defines the `NULL' macro with an integer type
16099     then you need to add an explicit cast.  GCC replaces `stddef.h'
16100     with a copy that redefines NULL appropriately.
16101
16102     The warnings for missing or incorrect sentinels are enabled with
16103     `-Wformat'.
16104
16105`short_call'
16106     See long_call/short_call.
16107
16108`shortcall'
16109     See longcall/shortcall.
16110
16111`signal'
16112     Use this attribute on the AVR to indicate that the specified
16113     function is a signal handler.  The compiler will generate function
16114     entry and exit sequences suitable for use in a signal handler when
16115     this attribute is present.  Interrupts will be disabled inside the
16116     function.
16117
16118`sp_switch'
16119     Use this attribute on the SH to indicate an `interrupt_handler'
16120     function should switch to an alternate stack.  It expects a string
16121     argument that names a global variable holding the address of the
16122     alternate stack.
16123
16124          void *alt_stack;
16125          void f () __attribute__ ((interrupt_handler,
16126                                    sp_switch ("alt_stack")));
16127
16128`stdcall'
16129     On the Intel 386, the `stdcall' attribute causes the compiler to
16130     assume that the called function will pop off the stack space used
16131     to pass arguments, unless it takes a variable number of arguments.
16132
16133`tiny_data'
16134     Use this attribute on the H8/300H and H8S to indicate that the
16135     specified variable should be placed into the tiny data section.
16136     The compiler will generate more efficient code for loads and stores
16137     on data in the tiny data section.  Note the tiny data area is
16138     limited to slightly under 32kbytes of data.
16139
16140`trap_exit'
16141     Use this attribute on the SH for an `interrupt_handler' to return
16142     using `trapa' instead of `rte'.  This attribute expects an integer
16143     argument specifying the trap number to be used.
16144
16145`unused'
16146     This attribute, attached to a function, means that the function is
16147     meant to be possibly unused.  GCC will not produce a warning for
16148     this function.
16149
16150`used'
16151     This attribute, attached to a function, means that code must be
16152     emitted for the function even if it appears that the function is
16153     not referenced.  This is useful, for example, when the function is
16154     referenced only in inline assembly.
16155
16156`visibility ("VISIBILITY_TYPE")'
16157     This attribute affects the linkage of the declaration to which it
16158     is attached.  There are four supported VISIBILITY_TYPE values:
16159     default, hidden, protected or internal visibility.
16160
16161          void __attribute__ ((visibility ("protected")))
16162          f () { /* Do something. */; }
16163          int i __attribute__ ((visibility ("hidden")));
16164
16165     The possible values of VISIBILITY_TYPE correspond to the
16166     visibility settings in the ELF gABI.
16167
16168    "default"
16169          Default visibility is the normal case for the object file
16170          format.  This value is available for the visibility attribute
16171          to override other options that may change the assumed
16172          visibility of entities.
16173
16174          On ELF, default visibility means that the declaration is
16175          visible to other modules and, in shared libraries, means that
16176          the declared entity may be overridden.
16177
16178          On Darwin, default visibility means that the declaration is
16179          visible to other modules.
16180
16181          Default visibility corresponds to "external linkage" in the
16182          language.
16183
16184    "hidden"
16185          Hidden visibility indicates that the entity declared will
16186          have a new form of linkage, which we'll call "hidden
16187          linkage".  Two declarations of an object with hidden linkage
16188          refer to the same object if they are in the same shared
16189          object.
16190
16191    "internal"
16192          Internal visibility is like hidden visibility, but with
16193          additional processor specific semantics.  Unless otherwise
16194          specified by the psABI, GCC defines internal visibility to
16195          mean that a function is _never_ called from another module.
16196          Compare this with hidden functions which, while they cannot
16197          be referenced directly by other modules, can be referenced
16198          indirectly via function pointers.  By indicating that a
16199          function cannot be called from outside the module, GCC may
16200          for instance omit the load of a PIC register since it is known
16201          that the calling function loaded the correct value.
16202
16203    "protected"
16204          Protected visibility is like default visibility except that it
16205          indicates that references within the defining module will
16206          bind to the definition in that module.  That is, the declared
16207          entity cannot be overridden by another module.
16208
16209
16210     All visibilities are supported on many, but not all, ELF targets
16211     (supported when the assembler supports the `.visibility'
16212     pseudo-op).  Default visibility is supported everywhere.  Hidden
16213     visibility is supported on Darwin targets.
16214
16215     The visibility attribute should be applied only to declarations
16216     which would otherwise have external linkage.  The attribute should
16217     be applied consistently, so that the same entity should not be
16218     declared with different settings of the attribute.
16219
16220     In C++, the visibility attribute applies to types as well as
16221     functions and objects, because in C++ types have linkage.  A class
16222     must not have greater visibility than its non-static data member
16223     types and bases, and class members default to the visibility of
16224     their class.  Also, a declaration without explicit visibility is
16225     limited to the visibility of its type.
16226
16227     In C++, you can mark member functions and static member variables
16228     of a class with the visibility attribute.  This is useful if if
16229     you know a particular method or static member variable should only
16230     be used from one shared object; then you can mark it hidden while
16231     the rest of the class has default visibility.  Care must be taken
16232     to avoid breaking the One Definition Rule; for example, it is
16233     usually not useful to mark an inline method as hidden without
16234     marking the whole class as hidden.
16235
16236     A C++ namespace declaration can also have the visibility attribute.
16237     This attribute applies only to the particular namespace body, not
16238     to other definitions of the same namespace; it is equivalent to
16239     using `#pragma GCC visibility' before and after the namespace
16240     definition (*note Visibility Pragmas::).
16241
16242     In C++, if a template argument has limited visibility, this
16243     restriction is implicitly propagated to the template instantiation.
16244     Otherwise, template instantiations and specializations default to
16245     the visibility of their template.
16246
16247     If both the template and enclosing class have explicit visibility,
16248     the visibility from the template is used.
16249
16250`warn_unused_result'
16251     The `warn_unused_result' attribute causes a warning to be emitted
16252     if a caller of the function with this attribute does not use its
16253     return value.  This is useful for functions where not checking the
16254     result is either a security problem or always a bug, such as
16255     `realloc'.
16256
16257          int fn () __attribute__ ((warn_unused_result));
16258          int foo ()
16259          {
16260            if (fn () < 0) return -1;
16261            fn ();
16262            return 0;
16263          }
16264
16265     results in warning on line 5.
16266
16267`weak'
16268     The `weak' attribute causes the declaration to be emitted as a weak
16269     symbol rather than a global.  This is primarily useful in defining
16270     library functions which can be overridden in user code, though it
16271     can also be used with non-function declarations.  Weak symbols are
16272     supported for ELF targets, and also for a.out targets when using
16273     the GNU assembler and linker.
16274
16275`weakref'
16276`weakref ("TARGET")'
16277     The `weakref' attribute marks a declaration as a weak reference.
16278     Without arguments, it should be accompanied by an `alias' attribute
16279     naming the target symbol.  Optionally, the TARGET may be given as
16280     an argument to `weakref' itself.  In either case, `weakref'
16281     implicitly marks the declaration as `weak'.  Without a TARGET,
16282     given as an argument to `weakref' or to `alias', `weakref' is
16283     equivalent to `weak'.
16284
16285          static int x() __attribute__ ((weakref ("y")));
16286          /* is equivalent to... */
16287          static int x() __attribute__ ((weak, weakref, alias ("y")));
16288          /* and to... */
16289          static int x() __attribute__ ((weakref));
16290          static int x() __attribute__ ((alias ("y")));
16291
16292     A weak reference is an alias that does not by itself require a
16293     definition to be given for the target symbol.  If the target
16294     symbol is only referenced through weak references, then the
16295     becomes a `weak' undefined symbol.  If it is directly referenced,
16296     however, then such strong references prevail, and a definition
16297     will be required for the symbol, not necessarily in the same
16298     translation unit.
16299
16300     The effect is equivalent to moving all references to the alias to a
16301     separate translation unit, renaming the alias to the aliased
16302     symbol, declaring it as weak, compiling the two separate
16303     translation units and performing a reloadable link on them.
16304
16305     At present, a declaration to which `weakref' is attached can only
16306     be `static'.
16307
16308`externally_visible'
16309     This attribute, attached to a global variable or function nullify
16310     effect of `-fwhole-program' command line option, so the object
16311     remain visible outside the current compilation unit
16312
16313
16314 You can specify multiple attributes in a declaration by separating them
16315by commas within the double parentheses or by immediately following an
16316attribute declaration with another attribute declaration.
16317
16318 Some people object to the `__attribute__' feature, suggesting that ISO
16319C's `#pragma' should be used instead.  At the time `__attribute__' was
16320designed, there were two reasons for not doing this.
16321
16322  1. It is impossible to generate `#pragma' commands from a macro.
16323
16324  2. There is no telling what the same `#pragma' might mean in another
16325     compiler.
16326
16327 These two reasons applied to almost any application that might have
16328been proposed for `#pragma'.  It was basically a mistake to use
16329`#pragma' for _anything_.
16330
16331 The ISO C99 standard includes `_Pragma', which now allows pragmas to
16332be generated from macros.  In addition, a `#pragma GCC' namespace is
16333now in use for GCC-specific pragmas.  However, it has been found
16334convenient to use `__attribute__' to achieve a natural attachment of
16335attributes to their corresponding declarations, whereas `#pragma GCC'
16336is of use for constructs that do not naturally form part of the
16337grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
16338Directives.
16339
16340
16341File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
16342
163435.26 Attribute Syntax
16344=====================
16345
16346This section describes the syntax with which `__attribute__' may be
16347used, and the constructs to which attribute specifiers bind, for the C
16348language.  Some details may vary for C++ and Objective-C.  Because of
16349infelicities in the grammar for attributes, some forms described here
16350may not be successfully parsed in all cases.
16351
16352 There are some problems with the semantics of attributes in C++.  For
16353example, there are no manglings for attributes, although they may affect
16354code generation, so problems may arise when attributed types are used in
16355conjunction with templates or overloading.  Similarly, `typeid' does
16356not distinguish between types with different attributes.  Support for
16357attributes in C++ may be restricted in future to attributes on
16358declarations only, but not on nested declarators.
16359
16360 *Note Function Attributes::, for details of the semantics of attributes
16361applying to functions.  *Note Variable Attributes::, for details of the
16362semantics of attributes applying to variables.  *Note Type Attributes::,
16363for details of the semantics of attributes applying to structure, union
16364and enumerated types.
16365
16366 An "attribute specifier" is of the form `__attribute__
16367((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
16368comma-separated sequence of "attributes", where each attribute is one
16369of the following:
16370
16371   * Empty.  Empty attributes are ignored.
16372
16373   * A word (which may be an identifier such as `unused', or a reserved
16374     word such as `const').
16375
16376   * A word, followed by, in parentheses, parameters for the attribute.
16377     These parameters take one of the following forms:
16378
16379        * An identifier.  For example, `mode' attributes use this form.
16380
16381        * An identifier followed by a comma and a non-empty
16382          comma-separated list of expressions.  For example, `format'
16383          attributes use this form.
16384
16385        * A possibly empty comma-separated list of expressions.  For
16386          example, `format_arg' attributes use this form with the list
16387          being a single integer constant expression, and `alias'
16388          attributes use this form with the list being a single string
16389          constant.
16390
16391 An "attribute specifier list" is a sequence of one or more attribute
16392specifiers, not separated by any other tokens.
16393
16394 In GNU C, an attribute specifier list may appear after the colon
16395following a label, other than a `case' or `default' label.  The only
16396attribute it makes sense to use after a label is `unused'.  This
16397feature is intended for code generated by programs which contains labels
16398that may be unused but which is compiled with `-Wall'.  It would not
16399normally be appropriate to use in it human-written code, though it
16400could be useful in cases where the code that jumps to the label is
16401contained within an `#ifdef' conditional.  GNU C++ does not permit such
16402placement of attribute lists, as it is permissible for a declaration,
16403which could begin with an attribute list, to be labelled in C++.
16404Declarations cannot be labelled in C90 or C99, so the ambiguity does
16405not arise there.
16406
16407 An attribute specifier list may appear as part of a `struct', `union'
16408or `enum' specifier.  It may go either immediately after the `struct',
16409`union' or `enum' keyword, or after the closing brace.  The former
16410syntax is preferred.  Where attribute specifiers follow the closing
16411brace, they are considered to relate to the structure, union or
16412enumerated type defined, not to any enclosing declaration the type
16413specifier appears in, and the type defined is not complete until after
16414the attribute specifiers.
16415
16416 Otherwise, an attribute specifier appears as part of a declaration,
16417counting declarations of unnamed parameters and type names, and relates
16418to that declaration (which may be nested in another declaration, for
16419example in the case of a parameter declaration), or to a particular
16420declarator within a declaration.  Where an attribute specifier is
16421applied to a parameter declared as a function or an array, it should
16422apply to the function or array rather than the pointer to which the
16423parameter is implicitly converted, but this is not yet correctly
16424implemented.
16425
16426 Any list of specifiers and qualifiers at the start of a declaration may
16427contain attribute specifiers, whether or not such a list may in that
16428context contain storage class specifiers.  (Some attributes, however,
16429are essentially in the nature of storage class specifiers, and only make
16430sense where storage class specifiers may be used; for example,
16431`section'.)  There is one necessary limitation to this syntax: the
16432first old-style parameter declaration in a function definition cannot
16433begin with an attribute specifier, because such an attribute applies to
16434the function instead by syntax described below (which, however, is not
16435yet implemented in this case).  In some other cases, attribute
16436specifiers are permitted by this grammar but not yet supported by the
16437compiler.  All attribute specifiers in this place relate to the
16438declaration as a whole.  In the obsolescent usage where a type of `int'
16439is implied by the absence of type specifiers, such a list of specifiers
16440and qualifiers may be an attribute specifier list with no other
16441specifiers or qualifiers.
16442
16443 At present, the first parameter in a function prototype must have some
16444type specifier which is not an attribute specifier; this resolves an
16445ambiguity in the interpretation of `void f(int (__attribute__((foo))
16446x))', but is subject to change.  At present, if the parentheses of a
16447function declarator contain only attributes then those attributes are
16448ignored, rather than yielding an error or warning or implying a single
16449parameter of type int, but this is subject to change.
16450
16451 An attribute specifier list may appear immediately before a declarator
16452(other than the first) in a comma-separated list of declarators in a
16453declaration of more than one identifier using a single list of
16454specifiers and qualifiers.  Such attribute specifiers apply only to the
16455identifier before whose declarator they appear.  For example, in
16456
16457     __attribute__((noreturn)) void d0 (void),
16458         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
16459          d2 (void)
16460
16461the `noreturn' attribute applies to all the functions declared; the
16462`format' attribute only applies to `d1'.
16463
16464 An attribute specifier list may appear immediately before the comma,
16465`=' or semicolon terminating the declaration of an identifier other
16466than a function definition.  At present, such attribute specifiers apply
16467to the declared object or function, but in future they may attach to the
16468outermost adjacent declarator.  In simple cases there is no difference,
16469but, for example, in
16470
16471     void (****f)(void) __attribute__((noreturn));
16472
16473at present the `noreturn' attribute applies to `f', which causes a
16474warning since `f' is not a function, but in future it may apply to the
16475function `****f'.  The precise semantics of what attributes in such
16476cases will apply to are not yet specified.  Where an assembler name for
16477an object or function is specified (*note Asm Labels::), at present the
16478attribute must follow the `asm' specification; in future, attributes
16479before the `asm' specification may apply to the adjacent declarator,
16480and those after it to the declared object or function.
16481
16482 An attribute specifier list may, in future, be permitted to appear
16483after the declarator in a function definition (before any old-style
16484parameter declarations or the function body).
16485
16486 Attribute specifiers may be mixed with type qualifiers appearing inside
16487the `[]' of a parameter array declarator, in the C99 construct by which
16488such qualifiers are applied to the pointer to which the array is
16489implicitly converted.  Such attribute specifiers apply to the pointer,
16490not to the array, but at present this is not implemented and they are
16491ignored.
16492
16493 An attribute specifier list may appear at the start of a nested
16494declarator.  At present, there are some limitations in this usage: the
16495attributes correctly apply to the declarator, but for most individual
16496attributes the semantics this implies are not implemented.  When
16497attribute specifiers follow the `*' of a pointer declarator, they may
16498be mixed with any type qualifiers present.  The following describes the
16499formal semantics of this syntax.  It will make the most sense if you
16500are familiar with the formal specification of declarators in the ISO C
16501standard.
16502
16503 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
16504where `T' contains declaration specifiers that specify a type TYPE
16505(such as `int') and `D1' is a declarator that contains an identifier
16506IDENT.  The type specified for IDENT for derived declarators whose type
16507does not include an attribute specifier is as in the ISO C standard.
16508
16509 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
16510declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
16511TYPE" for IDENT, then `T D1' specifies the type
16512"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
16513
16514 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
16515D', and the declaration `T D' specifies the type
16516"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
16517the type "DERIVED-DECLARATOR-TYPE-LIST
16518TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
16519
16520 For example,
16521
16522     void (__attribute__((noreturn)) ****f) (void);
16523
16524specifies the type "pointer to pointer to pointer to pointer to
16525non-returning function returning `void'".  As another example,
16526
16527     char *__attribute__((aligned(8))) *f;
16528
16529specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
16530again that this does not work with most attributes; for example, the
16531usage of `aligned' and `noreturn' attributes given above is not yet
16532supported.
16533
16534 For compatibility with existing code written for compiler versions that
16535did not implement attributes on nested declarators, some laxity is
16536allowed in the placing of attributes.  If an attribute that only applies
16537to types is applied to a declaration, it will be treated as applying to
16538the type of that declaration.  If an attribute that only applies to
16539declarations is applied to the type of a declaration, it will be treated
16540as applying to that declaration; and, for compatibility with code
16541placing the attributes immediately before the identifier declared, such
16542an attribute applied to a function return type will be treated as
16543applying to the function type, and such an attribute applied to an array
16544element type will be treated as applying to the array type.  If an
16545attribute that only applies to function types is applied to a
16546pointer-to-function type, it will be treated as applying to the pointer
16547target type; if such an attribute is applied to a function return type
16548that is not a pointer-to-function type, it will be treated as applying
16549to the function type.
16550
16551
16552File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
16553
165545.27 Prototypes and Old-Style Function Definitions
16555==================================================
16556
16557GNU C extends ISO C to allow a function prototype to override a later
16558old-style non-prototype definition.  Consider the following example:
16559
16560     /* Use prototypes unless the compiler is old-fashioned.  */
16561     #ifdef __STDC__
16562     #define P(x) x
16563     #else
16564     #define P(x) ()
16565     #endif
16566
16567     /* Prototype function declaration.  */
16568     int isroot P((uid_t));
16569
16570     /* Old-style function definition.  */
16571     int
16572     isroot (x)   /* ??? lossage here ??? */
16573          uid_t x;
16574     {
16575       return x == 0;
16576     }
16577
16578 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
16579this example, because subword arguments in old-style non-prototype
16580definitions are promoted.  Therefore in this example the function
16581definition's argument is really an `int', which does not match the
16582prototype argument type of `short'.
16583
16584 This restriction of ISO C makes it hard to write code that is portable
16585to traditional C compilers, because the programmer does not know
16586whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
16587cases like these GNU C allows a prototype to override a later old-style
16588definition.  More precisely, in GNU C, a function prototype argument
16589type overrides the argument type specified by a later old-style
16590definition if the former type is the same as the latter type before
16591promotion.  Thus in GNU C the above example is equivalent to the
16592following:
16593
16594     int isroot (uid_t);
16595
16596     int
16597     isroot (uid_t x)
16598     {
16599       return x == 0;
16600     }
16601
16602GNU C++ does not support old-style function definitions, so this
16603extension is irrelevant.
16604
16605
16606File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
16607
166085.28 C++ Style Comments
16609=======================
16610
16611In GNU C, you may use C++ style comments, which start with `//' and
16612continue until the end of the line.  Many other C implementations allow
16613such comments, and they are included in the 1999 C standard.  However,
16614C++ style comments are not recognized if you specify an `-std' option
16615specifying a version of ISO C before C99, or `-ansi' (equivalent to
16616`-std=c89').
16617
16618
16619File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
16620
166215.29 Dollar Signs in Identifier Names
16622=====================================
16623
16624In GNU C, you may normally use dollar signs in identifier names.  This
16625is because many traditional C implementations allow such identifiers.
16626However, dollar signs in identifiers are not supported on a few target
16627machines, typically because the target assembler does not allow them.
16628
16629
16630File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
16631
166325.30 The Character <ESC> in Constants
16633=====================================
16634
16635You can use the sequence `\e' in a string or character constant to
16636stand for the ASCII character <ESC>.
16637
16638
16639File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
16640
166415.31 Inquiring on Alignment of Types or Variables
16642=================================================
16643
16644The keyword `__alignof__' allows you to inquire about how an object is
16645aligned, or the minimum alignment usually required by a type.  Its
16646syntax is just like `sizeof'.
16647
16648 For example, if the target machine requires a `double' value to be
16649aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
16650is true on many RISC machines.  On more traditional machine designs,
16651`__alignof__ (double)' is 4 or even 2.
16652
16653 Some machines never actually require alignment; they allow reference
16654to any data type even at an odd address.  For these machines,
16655`__alignof__' reports the _recommended_ alignment of a type.
16656
16657 If the operand of `__alignof__' is an lvalue rather than a type, its
16658value is the required alignment for its type, taking into account any
16659minimum alignment specified with GCC's `__attribute__' extension (*note
16660Variable Attributes::).  For example, after this declaration:
16661
16662     struct foo { int x; char y; } foo1;
16663
16664the value of `__alignof__ (foo1.y)' is 1, even though its actual
16665alignment is probably 2 or 4, the same as `__alignof__ (int)'.
16666
16667 It is an error to ask for the alignment of an incomplete type.
16668
16669
16670File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
16671
166725.32 Specifying Attributes of Variables
16673=======================================
16674
16675The keyword `__attribute__' allows you to specify special attributes of
16676variables or structure fields.  This keyword is followed by an
16677attribute specification inside double parentheses.  Some attributes are
16678currently defined generically for variables.  Other attributes are
16679defined for variables on particular target systems.  Other attributes
16680are available for functions (*note Function Attributes::) and for types
16681(*note Type Attributes::).  Other front ends might define more
16682attributes (*note Extensions to the C++ Language: C++ Extensions.).
16683
16684 You may also specify attributes with `__' preceding and following each
16685keyword.  This allows you to use them in header files without being
16686concerned about a possible macro of the same name.  For example, you
16687may use `__aligned__' instead of `aligned'.
16688
16689 *Note Attribute Syntax::, for details of the exact syntax for using
16690attributes.
16691
16692`aligned (ALIGNMENT)'
16693     This attribute specifies a minimum alignment for the variable or
16694     structure field, measured in bytes.  For example, the declaration:
16695
16696          int x __attribute__ ((aligned (16))) = 0;
16697
16698     causes the compiler to allocate the global variable `x' on a
16699     16-byte boundary.  On a 68040, this could be used in conjunction
16700     with an `asm' expression to access the `move16' instruction which
16701     requires 16-byte aligned operands.
16702
16703     You can also specify the alignment of structure fields.  For
16704     example, to create a double-word aligned `int' pair, you could
16705     write:
16706
16707          struct foo { int x[2] __attribute__ ((aligned (8))); };
16708
16709     This is an alternative to creating a union with a `double' member
16710     that forces the union to be double-word aligned.
16711
16712     As in the preceding examples, you can explicitly specify the
16713     alignment (in bytes) that you wish the compiler to use for a given
16714     variable or structure field.  Alternatively, you can leave out the
16715     alignment factor and just ask the compiler to align a variable or
16716     field to the maximum useful alignment for the target machine you
16717     are compiling for.  For example, you could write:
16718
16719          short array[3] __attribute__ ((aligned));
16720
16721     Whenever you leave out the alignment factor in an `aligned'
16722     attribute specification, the compiler automatically sets the
16723     alignment for the declared variable or field to the largest
16724     alignment which is ever used for any data type on the target
16725     machine you are compiling for.  Doing this can often make copy
16726     operations more efficient, because the compiler can use whatever
16727     instructions copy the biggest chunks of memory when performing
16728     copies to or from the variables or fields that you have aligned
16729     this way.
16730
16731     The `aligned' attribute can only increase the alignment; but you
16732     can decrease it by specifying `packed' as well.  See below.
16733
16734     Note that the effectiveness of `aligned' attributes may be limited
16735     by inherent limitations in your linker.  On many systems, the
16736     linker is only able to arrange for variables to be aligned up to a
16737     certain maximum alignment.  (For some linkers, the maximum
16738     supported alignment may be very very small.)  If your linker is
16739     only able to align variables up to a maximum of 8 byte alignment,
16740     then specifying `aligned(16)' in an `__attribute__' will still
16741     only provide you with 8 byte alignment.  See your linker
16742     documentation for further information.
16743
16744`cleanup (CLEANUP_FUNCTION)'
16745     The `cleanup' attribute runs a function when the variable goes out
16746     of scope.  This attribute can only be applied to auto function
16747     scope variables; it may not be applied to parameters or variables
16748     with static storage duration.  The function must take one
16749     parameter, a pointer to a type compatible with the variable.  The
16750     return value of the function (if any) is ignored.
16751
16752     If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
16753     during the stack unwinding that happens during the processing of
16754     the exception.  Note that the `cleanup' attribute does not allow
16755     the exception to be caught, only to perform an action.  It is
16756     undefined what happens if CLEANUP_FUNCTION does not return
16757     normally.
16758
16759`common'
16760`nocommon'
16761     The `common' attribute requests GCC to place a variable in
16762     "common" storage.  The `nocommon' attribute requests the
16763     opposite--to allocate space for it directly.
16764
16765     These attributes override the default chosen by the `-fno-common'
16766     and `-fcommon' flags respectively.
16767
16768`deprecated'
16769     The `deprecated' attribute results in a warning if the variable is
16770     used anywhere in the source file.  This is useful when identifying
16771     variables that are expected to be removed in a future version of a
16772     program.  The warning also includes the location of the declaration
16773     of the deprecated variable, to enable users to easily find further
16774     information about why the variable is deprecated, or what they
16775     should do instead.  Note that the warning only occurs for uses:
16776
16777          extern int old_var __attribute__ ((deprecated));
16778          extern int old_var;
16779          int new_fn () { return old_var; }
16780
16781     results in a warning on line 3 but not line 2.
16782
16783     The `deprecated' attribute can also be used for functions and
16784     types (*note Function Attributes::, *note Type Attributes::.)
16785
16786`mode (MODE)'
16787     This attribute specifies the data type for the
16788     declaration--whichever type corresponds to the mode MODE.  This in
16789     effect lets you request an integer or floating point type
16790     according to its width.
16791
16792     You may also specify a mode of `byte' or `__byte__' to indicate
16793     the mode corresponding to a one-byte integer, `word' or `__word__'
16794     for the mode of a one-word integer, and `pointer' or `__pointer__'
16795     for the mode used to represent pointers.
16796
16797`packed'
16798     The `packed' attribute specifies that a variable or structure field
16799     should have the smallest possible alignment--one byte for a
16800     variable, and one bit for a field, unless you specify a larger
16801     value with the `aligned' attribute.
16802
16803     Here is a structure in which the field `x' is packed, so that it
16804     immediately follows `a':
16805
16806          struct foo
16807          {
16808            char a;
16809            int x[2] __attribute__ ((packed));
16810          };
16811
16812`section ("SECTION-NAME")'
16813     Normally, the compiler places the objects it generates in sections
16814     like `data' and `bss'.  Sometimes, however, you need additional
16815     sections, or you need certain particular variables to appear in
16816     special sections, for example to map to special hardware.  The
16817     `section' attribute specifies that a variable (or function) lives
16818     in a particular section.  For example, this small program uses
16819     several specific section names:
16820
16821          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
16822          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
16823          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
16824          int init_data __attribute__ ((section ("INITDATA"))) = 0;
16825
16826          main()
16827          {
16828            /* Initialize stack pointer */
16829            init_sp (stack + sizeof (stack));
16830
16831            /* Initialize initialized data */
16832            memcpy (&init_data, &data, &edata - &data);
16833
16834            /* Turn on the serial ports */
16835            init_duart (&a);
16836            init_duart (&b);
16837          }
16838
16839     Use the `section' attribute with an _initialized_ definition of a
16840     _global_ variable, as shown in the example.  GCC issues a warning
16841     and otherwise ignores the `section' attribute in uninitialized
16842     variable declarations.
16843
16844     You may only use the `section' attribute with a fully initialized
16845     global definition because of the way linkers work.  The linker
16846     requires each object be defined once, with the exception that
16847     uninitialized variables tentatively go in the `common' (or `bss')
16848     section and can be multiply "defined".  You can force a variable
16849     to be initialized with the `-fno-common' flag or the `nocommon'
16850     attribute.
16851
16852     Some file formats do not support arbitrary sections so the
16853     `section' attribute is not available on all platforms.  If you
16854     need to map the entire contents of a module to a particular
16855     section, consider using the facilities of the linker instead.
16856
16857`shared'
16858     On Microsoft Windows, in addition to putting variable definitions
16859     in a named section, the section can also be shared among all
16860     running copies of an executable or DLL.  For example, this small
16861     program defines shared data by putting it in a named section
16862     `shared' and marking the section shareable:
16863
16864          int foo __attribute__((section ("shared"), shared)) = 0;
16865
16866          int
16867          main()
16868          {
16869            /* Read and write foo.  All running
16870               copies see the same value.  */
16871            return 0;
16872          }
16873
16874     You may only use the `shared' attribute along with `section'
16875     attribute with a fully initialized global definition because of
16876     the way linkers work.  See `section' attribute for more
16877     information.
16878
16879     The `shared' attribute is only available on Microsoft Windows.
16880
16881`tls_model ("TLS_MODEL")'
16882     The `tls_model' attribute sets thread-local storage model (*note
16883     Thread-Local::) of a particular `__thread' variable, overriding
16884     `-ftls-model=' command line switch on a per-variable basis.  The
16885     TLS_MODEL argument should be one of `global-dynamic',
16886     `local-dynamic', `initial-exec' or `local-exec'.
16887
16888     Not all targets support this attribute.
16889
16890`unused'
16891     This attribute, attached to a variable, means that the variable is
16892     meant to be possibly unused.  GCC will not produce a warning for
16893     this variable.
16894
16895`used'
16896     This attribute, attached to a variable, means that the variable
16897     must be emitted even if it appears that the variable is not
16898     referenced.
16899
16900`vector_size (BYTES)'
16901     This attribute specifies the vector size for the variable,
16902     measured in bytes.  For example, the declaration:
16903
16904          int foo __attribute__ ((vector_size (16)));
16905
16906     causes the compiler to set the mode for `foo', to be 16 bytes,
16907     divided into `int' sized units.  Assuming a 32-bit int (a vector of
16908     4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
16909
16910     This attribute is only applicable to integral and float scalars,
16911     although arrays, pointers, and function return values are allowed
16912     in conjunction with this construct.
16913
16914     Aggregates with this attribute are invalid, even if they are of
16915     the same size as a corresponding scalar.  For example, the
16916     declaration:
16917
16918          struct S { int a; };
16919          struct S  __attribute__ ((vector_size (16))) foo;
16920
16921     is invalid even if the size of the structure is the same as the
16922     size of the `int'.
16923
16924`selectany'
16925     The `selectany' attribute causes an initialized global variable to
16926     have link-once semantics.  When multiple definitions of the
16927     variable are encountered by the linker, the first is selected and
16928     the remainder are discarded.  Following usage by the Microsoft
16929     compiler, the linker is told _not_ to warn about size or content
16930     differences of the multiple definitions.
16931
16932     Although the primary usage of this attribute is for POD types, the
16933     attribute can also be applied to global C++ objects that are
16934     initialized by a constructor.  In this case, the static
16935     initialization and destruction code for the object is emitted in
16936     each translation defining the object, but the calls to the
16937     constructor and destructor are protected by a link-once guard
16938     variable.
16939
16940     The `selectany' attribute is only available on Microsoft Windows
16941     targets.  You can use `__declspec (selectany)' as a synonym for
16942     `__attribute__ ((selectany))' for compatibility with other
16943     compilers.
16944
16945`weak'
16946     The `weak' attribute is described in *Note Function Attributes::.
16947
16948`dllimport'
16949     The `dllimport' attribute is described in *Note Function
16950     Attributes::.
16951
16952`dllexport'
16953     The `dllexport' attribute is described in *Note Function
16954     Attributes::.
16955
16956
169575.32.1 M32R/D Variable Attributes
16958---------------------------------
16959
16960One attribute is currently defined for the M32R/D.
16961
16962`model (MODEL-NAME)'
16963     Use this attribute on the M32R/D to set the addressability of an
16964     object.  The identifier MODEL-NAME is one of `small', `medium', or
16965     `large', representing each of the code models.
16966
16967     Small model objects live in the lower 16MB of memory (so that their
16968     addresses can be loaded with the `ld24' instruction).
16969
16970     Medium and large model objects may live anywhere in the 32-bit
16971     address space (the compiler will generate `seth/add3' instructions
16972     to load their addresses).
16973
169745.32.2 i386 Variable Attributes
16975-------------------------------
16976
16977Two attributes are currently defined for i386 configurations:
16978`ms_struct' and `gcc_struct'
16979
16980`ms_struct'
16981`gcc_struct'
16982     If `packed' is used on a structure, or if bit-fields are used it
16983     may be that the Microsoft ABI packs them differently than GCC
16984     would normally pack them.  Particularly when moving packed data
16985     between functions compiled with GCC and the native Microsoft
16986     compiler (either via function call or as data in a file), it may
16987     be necessary to access either format.
16988
16989     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
16990     Windows X86 compilers to match the native Microsoft compiler.
16991
16992     The Microsoft structure layout algorithm is fairly simple with the
16993     exception of the bitfield packing:
16994
16995     The padding and alignment of members of structures and whether a
16996     bit field can straddle a storage-unit boundary
16997
16998       1. Structure members are stored sequentially in the order in
16999          which they are declared: the first member has the lowest
17000          memory address and the last member the highest.
17001
17002       2. Every data object has an alignment-requirement. The
17003          alignment-requirement for all data except structures, unions,
17004          and arrays is either the size of the object or the current
17005          packing size (specified with either the aligned attribute or
17006          the pack pragma), whichever is less. For structures,  unions,
17007          and arrays, the alignment-requirement is the largest
17008          alignment-requirement of its members.  Every object is
17009          allocated an offset so that:
17010
17011          offset %  alignment-requirement == 0
17012
17013       3. Adjacent bit fields are packed into the same 1-, 2-, or
17014          4-byte allocation unit if the integral types are the same
17015          size and if the next bit field fits into the current
17016          allocation unit without crossing the boundary imposed by the
17017          common alignment requirements of the bit fields.
17018
17019     Handling of zero-length bitfields:
17020
17021     MSVC interprets zero-length bitfields in the following ways:
17022
17023       1. If a zero-length bitfield is inserted between two bitfields
17024          that would normally be coalesced, the bitfields will not be
17025          coalesced.
17026
17027          For example:
17028
17029               struct
17030                {
17031                  unsigned long bf_1 : 12;
17032                  unsigned long : 0;
17033                  unsigned long bf_2 : 12;
17034                } t1;
17035
17036          The size of `t1' would be 8 bytes with the zero-length
17037          bitfield.  If the zero-length bitfield were removed, `t1''s
17038          size would be 4 bytes.
17039
17040       2. If a zero-length bitfield is inserted after a bitfield,
17041          `foo', and the alignment of the zero-length bitfield is
17042          greater than the member that follows it, `bar', `bar' will be
17043          aligned as the type of the zero-length bitfield.
17044
17045          For example:
17046
17047               struct
17048                {
17049                  char foo : 4;
17050                  short : 0;
17051                  char bar;
17052                } t2;
17053
17054               struct
17055                {
17056                  char foo : 4;
17057                  short : 0;
17058                  double bar;
17059                } t3;
17060
17061          For `t2', `bar' will be placed at offset 2, rather than
17062          offset 1.  Accordingly, the size of `t2' will be 4.  For
17063          `t3', the zero-length bitfield will not affect the alignment
17064          of `bar' or, as a result, the size of the structure.
17065
17066          Taking this into account, it is important to note the
17067          following:
17068
17069            1. If a zero-length bitfield follows a normal bitfield, the
17070               type of the zero-length bitfield may affect the
17071               alignment of the structure as whole. For example, `t2'
17072               has a size of 4 bytes, since the zero-length bitfield
17073               follows a normal bitfield, and is of type short.
17074
17075            2. Even if a zero-length bitfield is not followed by a
17076               normal bitfield, it may still affect the alignment of
17077               the structure:
17078
17079                    struct
17080                     {
17081                       char foo : 6;
17082                       long : 0;
17083                     } t4;
17084
17085               Here, `t4' will take up 4 bytes.
17086
17087       3. Zero-length bitfields following non-bitfield members are
17088          ignored:
17089
17090               struct
17091                {
17092                  char foo;
17093                  long : 0;
17094                  char bar;
17095                } t5;
17096
17097          Here, `t5' will take up 2 bytes.
17098
170995.32.3 PowerPC Variable Attributes
17100----------------------------------
17101
17102Three attributes currently are defined for PowerPC configurations:
17103`altivec', `ms_struct' and `gcc_struct'.
17104
17105 For full documentation of the struct attributes please see the
17106documentation in the *Note i386 Variable Attributes::, section.
17107
17108 For documentation of `altivec' attribute please see the documentation
17109in the *Note PowerPC Type Attributes::, section.
17110
171115.32.4 Xstormy16 Variable Attributes
17112------------------------------------
17113
17114One attribute is currently defined for xstormy16 configurations:
17115`below100'
17116
17117`below100'
17118     If a variable has the `below100' attribute (`BELOW100' is allowed
17119     also), GCC will place the variable in the first 0x100 bytes of
17120     memory and use special opcodes to access it.  Such variables will
17121     be placed in either the `.bss_below100' section or the
17122     `.data_below100' section.
17123
17124
17125
17126File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
17127
171285.33 Specifying Attributes of Types
17129===================================
17130
17131The keyword `__attribute__' allows you to specify special attributes of
17132`struct' and `union' types when you define such types.  This keyword is
17133followed by an attribute specification inside double parentheses.
17134Seven attributes are currently defined for types: `aligned', `packed',
17135`transparent_union', `unused', `deprecated', `visibility', and
17136`may_alias'.  Other attributes are defined for functions (*note
17137Function Attributes::) and for variables (*note Variable Attributes::).
17138
17139 You may also specify any one of these attributes with `__' preceding
17140and following its keyword.  This allows you to use these attributes in
17141header files without being concerned about a possible macro of the same
17142name.  For example, you may use `__aligned__' instead of `aligned'.
17143
17144 You may specify type attributes either in a `typedef' declaration or
17145in an enum, struct or union type declaration or definition.
17146
17147 For an enum, struct or union type, you may specify attributes either
17148between the enum, struct or union tag and the name of the type, or just
17149past the closing curly brace of the _definition_.  The former syntax is
17150preferred.
17151
17152 *Note Attribute Syntax::, for details of the exact syntax for using
17153attributes.
17154
17155`aligned (ALIGNMENT)'
17156     This attribute specifies a minimum alignment (in bytes) for
17157     variables of the specified type.  For example, the declarations:
17158
17159          struct S { short f[3]; } __attribute__ ((aligned (8)));
17160          typedef int more_aligned_int __attribute__ ((aligned (8)));
17161
17162     force the compiler to insure (as far as it can) that each variable
17163     whose type is `struct S' or `more_aligned_int' will be allocated
17164     and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
17165     all variables of type `struct S' aligned to 8-byte boundaries
17166     allows the compiler to use the `ldd' and `std' (doubleword load and
17167     store) instructions when copying one variable of type `struct S' to
17168     another, thus improving run-time efficiency.
17169
17170     Note that the alignment of any given `struct' or `union' type is
17171     required by the ISO C standard to be at least a perfect multiple of
17172     the lowest common multiple of the alignments of all of the members
17173     of the `struct' or `union' in question.  This means that you _can_
17174     effectively adjust the alignment of a `struct' or `union' type by
17175     attaching an `aligned' attribute to any one of the members of such
17176     a type, but the notation illustrated in the example above is a
17177     more obvious, intuitive, and readable way to request the compiler
17178     to adjust the alignment of an entire `struct' or `union' type.
17179
17180     As in the preceding example, you can explicitly specify the
17181     alignment (in bytes) that you wish the compiler to use for a given
17182     `struct' or `union' type.  Alternatively, you can leave out the
17183     alignment factor and just ask the compiler to align a type to the
17184     maximum useful alignment for the target machine you are compiling
17185     for.  For example, you could write:
17186
17187          struct S { short f[3]; } __attribute__ ((aligned));
17188
17189     Whenever you leave out the alignment factor in an `aligned'
17190     attribute specification, the compiler automatically sets the
17191     alignment for the type to the largest alignment which is ever used
17192     for any data type on the target machine you are compiling for.
17193     Doing this can often make copy operations more efficient, because
17194     the compiler can use whatever instructions copy the biggest chunks
17195     of memory when performing copies to or from the variables which
17196     have types that you have aligned this way.
17197
17198     In the example above, if the size of each `short' is 2 bytes, then
17199     the size of the entire `struct S' type is 6 bytes.  The smallest
17200     power of two which is greater than or equal to that is 8, so the
17201     compiler sets the alignment for the entire `struct S' type to 8
17202     bytes.
17203
17204     Note that although you can ask the compiler to select a
17205     time-efficient alignment for a given type and then declare only
17206     individual stand-alone objects of that type, the compiler's
17207     ability to select a time-efficient alignment is primarily useful
17208     only when you plan to create arrays of variables having the
17209     relevant (efficiently aligned) type.  If you declare or use arrays
17210     of variables of an efficiently-aligned type, then it is likely
17211     that your program will also be doing pointer arithmetic (or
17212     subscripting, which amounts to the same thing) on pointers to the
17213     relevant type, and the code that the compiler generates for these
17214     pointer arithmetic operations will often be more efficient for
17215     efficiently-aligned types than for other types.
17216
17217     The `aligned' attribute can only increase the alignment; but you
17218     can decrease it by specifying `packed' as well.  See below.
17219
17220     Note that the effectiveness of `aligned' attributes may be limited
17221     by inherent limitations in your linker.  On many systems, the
17222     linker is only able to arrange for variables to be aligned up to a
17223     certain maximum alignment.  (For some linkers, the maximum
17224     supported alignment may be very very small.)  If your linker is
17225     only able to align variables up to a maximum of 8 byte alignment,
17226     then specifying `aligned(16)' in an `__attribute__' will still
17227     only provide you with 8 byte alignment.  See your linker
17228     documentation for further information.
17229
17230`packed'
17231     This attribute, attached to `struct' or `union' type definition,
17232     specifies that each member (other than zero-width bitfields) of
17233     the structure or union is placed to minimize the memory required.
17234     When attached to an `enum' definition, it indicates that the
17235     smallest integral type should be used.
17236
17237     Specifying this attribute for `struct' and `union' types is
17238     equivalent to specifying the `packed' attribute on each of the
17239     structure or union members.  Specifying the `-fshort-enums' flag
17240     on the line is equivalent to specifying the `packed' attribute on
17241     all `enum' definitions.
17242
17243     In the following example `struct my_packed_struct''s members are
17244     packed closely together, but the internal layout of its `s' member
17245     is not packed--to do that, `struct my_unpacked_struct' would need
17246     to be packed too.
17247
17248          struct my_unpacked_struct
17249           {
17250              char c;
17251              int i;
17252           };
17253
17254          struct __attribute__ ((__packed__)) my_packed_struct
17255            {
17256               char c;
17257               int  i;
17258               struct my_unpacked_struct s;
17259            };
17260
17261     You may only specify this attribute on the definition of a `enum',
17262     `struct' or `union', not on a `typedef' which does not also define
17263     the enumerated type, structure or union.
17264
17265`transparent_union'
17266     This attribute, attached to a `union' type definition, indicates
17267     that any function parameter having that union type causes calls to
17268     that function to be treated in a special way.
17269
17270     First, the argument corresponding to a transparent union type can
17271     be of any type in the union; no cast is required.  Also, if the
17272     union contains a pointer type, the corresponding argument can be a
17273     null pointer constant or a void pointer expression; and if the
17274     union contains a void pointer type, the corresponding argument can
17275     be any pointer expression.  If the union member type is a pointer,
17276     qualifiers like `const' on the referenced type must be respected,
17277     just as with normal pointer conversions.
17278
17279     Second, the argument is passed to the function using the calling
17280     conventions of the first member of the transparent union, not the
17281     calling conventions of the union itself.  All members of the union
17282     must have the same machine representation; this is necessary for
17283     this argument passing to work properly.
17284
17285     Transparent unions are designed for library functions that have
17286     multiple interfaces for compatibility reasons.  For example,
17287     suppose the `wait' function must accept either a value of type
17288     `int *' to comply with Posix, or a value of type `union wait *' to
17289     comply with the 4.1BSD interface.  If `wait''s parameter were
17290     `void *', `wait' would accept both kinds of arguments, but it
17291     would also accept any other pointer type and this would make
17292     argument type checking less useful.  Instead, `<sys/wait.h>' might
17293     define the interface as follows:
17294
17295          typedef union
17296            {
17297              int *__ip;
17298              union wait *__up;
17299            } wait_status_ptr_t __attribute__ ((__transparent_union__));
17300
17301          pid_t wait (wait_status_ptr_t);
17302
17303     This interface allows either `int *' or `union wait *' arguments
17304     to be passed, using the `int *' calling convention.  The program
17305     can call `wait' with arguments of either type:
17306
17307          int w1 () { int w; return wait (&w); }
17308          int w2 () { union wait w; return wait (&w); }
17309
17310     With this interface, `wait''s implementation might look like this:
17311
17312          pid_t wait (wait_status_ptr_t p)
17313          {
17314            return waitpid (-1, p.__ip, 0);
17315          }
17316
17317`unused'
17318     When attached to a type (including a `union' or a `struct'), this
17319     attribute means that variables of that type are meant to appear
17320     possibly unused.  GCC will not produce a warning for any variables
17321     of that type, even if the variable appears to do nothing.  This is
17322     often the case with lock or thread classes, which are usually
17323     defined and then not referenced, but contain constructors and
17324     destructors that have nontrivial bookkeeping functions.
17325
17326`deprecated'
17327     The `deprecated' attribute results in a warning if the type is
17328     used anywhere in the source file.  This is useful when identifying
17329     types that are expected to be removed in a future version of a
17330     program.  If possible, the warning also includes the location of
17331     the declaration of the deprecated type, to enable users to easily
17332     find further information about why the type is deprecated, or what
17333     they should do instead.  Note that the warnings only occur for
17334     uses and then only if the type is being applied to an identifier
17335     that itself is not being declared as deprecated.
17336
17337          typedef int T1 __attribute__ ((deprecated));
17338          T1 x;
17339          typedef T1 T2;
17340          T2 y;
17341          typedef T1 T3 __attribute__ ((deprecated));
17342          T3 z __attribute__ ((deprecated));
17343
17344     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
17345     warning is issued for line 4 because T2 is not explicitly
17346     deprecated.  Line 5 has no warning because T3 is explicitly
17347     deprecated.  Similarly for line 6.
17348
17349     The `deprecated' attribute can also be used for functions and
17350     variables (*note Function Attributes::, *note Variable
17351     Attributes::.)
17352
17353`may_alias'
17354     Accesses to objects with types with this attribute are not
17355     subjected to type-based alias analysis, but are instead assumed to
17356     be able to alias any other type of objects, just like the `char'
17357     type.  See `-fstrict-aliasing' for more information on aliasing
17358     issues.
17359
17360     Example of use:
17361
17362          typedef short __attribute__((__may_alias__)) short_a;
17363
17364          int
17365          main (void)
17366          {
17367            int a = 0x12345678;
17368            short_a *b = (short_a *) &a;
17369
17370            b[1] = 0;
17371
17372            if (a == 0x12345678)
17373              abort();
17374
17375            exit(0);
17376          }
17377
17378     If you replaced `short_a' with `short' in the variable
17379     declaration, the above program would abort when compiled with
17380     `-fstrict-aliasing', which is on by default at `-O2' or above in
17381     recent GCC versions.
17382
17383`visibility'
17384     In C++, attribute visibility (*note Function Attributes::) can
17385     also be applied to class, struct, union and enum types.  Unlike
17386     other type attributes, the attribute must appear between the
17387     initial keyword and the name of the type; it cannot appear after
17388     the body of the type.
17389
17390     Note that the type visibility is applied to vague linkage entities
17391     associated with the class (vtable, typeinfo node, etc.).  In
17392     particular, if a class is thrown as an exception in one shared
17393     object and caught in another, the class must have default
17394     visibility.  Otherwise the two shared objects will be unable to
17395     use the same typeinfo node and exception handling will break.
17396
173975.33.1 ARM Type Attributes
17398--------------------------
17399
17400     On those ARM targets that support `dllimport' (such as Symbian
17401OS), you can use the `notshared' attribute to indicate that the virtual
17402table and other similar data for a class should not be exported from a
17403DLL.  For example:
17404
17405          class __declspec(notshared) C {
17406          public:
17407            __declspec(dllimport) C();
17408            virtual void f();
17409          }
17410
17411          __declspec(dllexport)
17412          C::C() {}
17413
17414     In this code, `C::C' is exported from the current DLL, but the
17415virtual table for `C' is not exported.  (You can use `__attribute__'
17416instead of `__declspec' if you prefer, but most Symbian OS code uses
17417`__declspec'.)
17418
174195.33.2 i386 Type Attributes
17420---------------------------
17421
17422     Two attributes are currently defined for i386 configurations:
17423`ms_struct' and `gcc_struct'
17424
17425`ms_struct'
17426`gcc_struct'
17427     If `packed' is used on a structure, or if bit-fields are used it
17428     may be that the Microsoft ABI packs them differently than GCC
17429     would normally pack them.  Particularly when moving packed data
17430     between functions compiled with GCC and the native Microsoft
17431     compiler (either via function call or as data in a file), it may
17432     be necessary to access either format.
17433
17434     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
17435     Windows X86 compilers to match the native Microsoft compiler.
17436
17437 To specify multiple attributes, separate them by commas within the
17438double parentheses: for example, `__attribute__ ((aligned (16),
17439packed))'.
17440
174415.33.3 PowerPC Type Attributes
17442------------------------------
17443
17444Three attributes currently are defined for PowerPC configurations:
17445`altivec', `ms_struct' and `gcc_struct'.
17446
17447 For full documentation of the struct attributes please see the
17448documentation in the *Note i386 Type Attributes::, section.
17449
17450 The `altivec' attribute allows one to declare AltiVec vector data
17451types supported by the AltiVec Programming Interface Manual.  The
17452attribute requires an argument to specify one of three vector types:
17453`vector__', `pixel__' (always followed by unsigned short), and `bool__'
17454(always followed by unsigned).
17455
17456     __attribute__((altivec(vector__)))
17457     __attribute__((altivec(pixel__))) unsigned short
17458     __attribute__((altivec(bool__))) unsigned
17459
17460 These attributes mainly are intended to support the `__vector',
17461`__pixel', and `__bool' AltiVec keywords.
17462
17463
17464File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
17465
174665.34 An Inline Function is As Fast As a Macro
17467=============================================
17468
17469By declaring a function `inline', you can direct GCC to integrate that
17470function's code into the code for its callers.  This makes execution
17471faster by eliminating the function-call overhead; in addition, if any
17472of the actual argument values are constant, their known values may
17473permit simplifications at compile time so that not all of the inline
17474function's code needs to be included.  The effect on code size is less
17475predictable; object code may be larger or smaller with function
17476inlining, depending on the particular case.  Inlining of functions is an
17477optimization and it really "works" only in optimizing compilation.  If
17478you don't use `-O', no function is really inline.
17479
17480 Inline functions are included in the ISO C99 standard, but there are
17481currently substantial differences between what GCC implements and what
17482the ISO C99 standard requires.  GCC will fully support C99 inline
17483functions in version 4.3.  The traditional GCC handling of inline
17484functions will still be available with `-std=gnu89', `-fgnu89-inline'
17485or when `gnu_inline' attribute is present on all inline declarations.
17486The preprocessor macros `__GNUC_GNU_INLINE__' and
17487`__GNUC_STDC_INLINE__' may be used to determine the handling of
17488`inline' during a particular compilation (*note Common Predefined
17489Macros: (cpp)Common Predefined Macros.).
17490
17491 To declare a function inline, use the `inline' keyword in its
17492declaration, like this:
17493
17494     inline int
17495     inc (int *a)
17496     {
17497       (*a)++;
17498     }
17499
17500 (If you are writing a header file to be included in ISO C programs,
17501write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
17502You can also make all "simple enough" functions inline with the option
17503`-finline-functions'.
17504
17505 Note that certain usages in a function definition can make it
17506unsuitable for inline substitution.  Among these usages are: use of
17507varargs, use of alloca, use of variable sized data types (*note
17508Variable Length::), use of computed goto (*note Labels as Values::),
17509use of nonlocal goto, and nested functions (*note Nested Functions::).
17510Using `-Winline' will warn when a function marked `inline' could not be
17511substituted, and will give the reason for the failure.
17512
17513 Note that in C and Objective-C, unlike C++, the `inline' keyword does
17514not affect the linkage of the function.
17515
17516 GCC automatically inlines member functions defined within the class
17517body of C++ programs even if they are not explicitly declared `inline'.
17518(You can override this with `-fno-default-inline'; *note Options
17519Controlling C++ Dialect: C++ Dialect Options.)
17520
17521 When a function is both inline and `static', if all calls to the
17522function are integrated into the caller, and the function's address is
17523never used, then the function's own assembler code is never referenced.
17524In this case, GCC does not actually output assembler code for the
17525function, unless you specify the option `-fkeep-inline-functions'.
17526Some calls cannot be integrated for various reasons (in particular,
17527calls that precede the function's definition cannot be integrated, and
17528neither can recursive calls within the definition).  If there is a
17529nonintegrated call, then the function is compiled to assembler code as
17530usual.  The function must also be compiled as usual if the program
17531refers to its address, because that can't be inlined.
17532
17533 When an inline function is not `static', then the compiler must assume
17534that there may be calls from other source files; since a global symbol
17535can be defined only once in any program, the function must not be
17536defined in the other source files, so the calls therein cannot be
17537integrated.  Therefore, a non-`static' inline function is always
17538compiled on its own in the usual fashion.
17539
17540 If you specify both `inline' and `extern' in the function definition,
17541then the definition is used only for inlining.  In no case is the
17542function compiled on its own, not even if you refer to its address
17543explicitly.  Such an address becomes an external reference, as if you
17544had only declared the function, and had not defined it.
17545
17546 This combination of `inline' and `extern' has almost the effect of a
17547macro.  The way to use it is to put a function definition in a header
17548file with these keywords, and put another copy of the definition
17549(lacking `inline' and `extern') in a library file.  The definition in
17550the header file will cause most calls to the function to be inlined.
17551If any uses of the function remain, they will refer to the single copy
17552in the library.
17553
17554 Since GCC 4.3 will implement ISO C99 semantics for inline functions,
17555it is simplest to use `static inline' only to guarantee compatibility.
17556(The existing semantics will remain available when `-std=gnu89' is
17557specified, but eventually the default will be `-std=gnu99'; that will
17558implement the C99 semantics, though it does not do so in versions of
17559GCC before 4.3.  After the default changes, the existing semantics will
17560still be available via the `-fgnu89-inline' option or the `gnu_inline'
17561function attribute.)
17562
17563 GCC does not inline any functions when not optimizing unless you
17564specify the `always_inline' attribute for the function, like this:
17565
17566     /* Prototype.  */
17567     inline void foo (const char) __attribute__((always_inline));
17568
17569
17570File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
17571
175725.35 Assembler Instructions with C Expression Operands
17573======================================================
17574
17575In an assembler instruction using `asm', you can specify the operands
17576of the instruction using C expressions.  This means you need not guess
17577which registers or memory locations will contain the data you want to
17578use.
17579
17580 You must specify an assembler instruction template much like what
17581appears in a machine description, plus an operand constraint string for
17582each operand.
17583
17584 For example, here is how to use the 68881's `fsinx' instruction:
17585
17586     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
17587
17588Here `angle' is the C expression for the input operand while `result'
17589is that of the output operand.  Each has `"f"' as its operand
17590constraint, saying that a floating point register is required.  The `='
17591in `=f' indicates that the operand is an output; all output operands'
17592constraints must use `='.  The constraints use the same language used
17593in the machine description (*note Constraints::).
17594
17595 Each operand is described by an operand-constraint string followed by
17596the C expression in parentheses.  A colon separates the assembler
17597template from the first output operand and another separates the last
17598output operand from the first input, if any.  Commas separate the
17599operands within each group.  The total number of operands is currently
17600limited to 30; this limitation may be lifted in some future version of
17601GCC.
17602
17603 If there are no output operands but there are input operands, you must
17604place two consecutive colons surrounding the place where the output
17605operands would go.
17606
17607 As of GCC version 3.1, it is also possible to specify input and output
17608operands using symbolic names which can be referenced within the
17609assembler code.  These names are specified inside square brackets
17610preceding the constraint string, and can be referenced inside the
17611assembler code using `%[NAME]' instead of a percentage sign followed by
17612the operand number.  Using named operands the above example could look
17613like:
17614
17615     asm ("fsinx %[angle],%[output]"
17616          : [output] "=f" (result)
17617          : [angle] "f" (angle));
17618
17619Note that the symbolic operand names have no relation whatsoever to
17620other C identifiers.  You may use any name you like, even those of
17621existing C symbols, but you must ensure that no two operands within the
17622same assembler construct use the same symbolic name.
17623
17624 Output operand expressions must be lvalues; the compiler can check
17625this.  The input operands need not be lvalues.  The compiler cannot
17626check whether the operands have data types that are reasonable for the
17627instruction being executed.  It does not parse the assembler instruction
17628template and does not know what it means or even whether it is valid
17629assembler input.  The extended `asm' feature is most often used for
17630machine instructions the compiler itself does not know exist.  If the
17631output expression cannot be directly addressed (for example, it is a
17632bit-field), your constraint must allow a register.  In that case, GCC
17633will use the register as the output of the `asm', and then store that
17634register into the output.
17635
17636 The ordinary output operands must be write-only; GCC will assume that
17637the values in these operands before the instruction are dead and need
17638not be generated.  Extended asm supports input-output or read-write
17639operands.  Use the constraint character `+' to indicate such an operand
17640and list it with the output operands.  You should only use read-write
17641operands when the constraints for the operand (or the operand in which
17642only some of the bits are to be changed) allow a register.
17643
17644 You may, as an alternative, logically split its function into two
17645separate operands, one input operand and one write-only output operand.
17646The connection between them is expressed by constraints which say they
17647need to be in the same location when the instruction executes.  You can
17648use the same C expression for both operands, or different expressions.
17649For example, here we write the (fictitious) `combine' instruction with
17650`bar' as its read-only source operand and `foo' as its read-write
17651destination:
17652
17653     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
17654
17655The constraint `"0"' for operand 1 says that it must occupy the same
17656location as operand 0.  A number in constraint is allowed only in an
17657input operand and it must refer to an output operand.
17658
17659 Only a number in the constraint can guarantee that one operand will be
17660in the same place as another.  The mere fact that `foo' is the value of
17661both operands is not enough to guarantee that they will be in the same
17662place in the generated assembler code.  The following would not work
17663reliably:
17664
17665     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
17666
17667 Various optimizations or reloading could cause operands 0 and 1 to be
17668in different registers; GCC knows no reason not to do so.  For example,
17669the compiler might find a copy of the value of `foo' in one register and
17670use it for operand 1, but generate the output operand 0 in a different
17671register (copying it afterward to `foo''s own address).  Of course,
17672since the register for operand 1 is not even mentioned in the assembler
17673code, the result will not work, but GCC can't tell that.
17674
17675 As of GCC version 3.1, one may write `[NAME]' instead of the operand
17676number for a matching constraint.  For example:
17677
17678     asm ("cmoveq %1,%2,%[result]"
17679          : [result] "=r"(result)
17680          : "r" (test), "r"(new), "[result]"(old));
17681
17682 Sometimes you need to make an `asm' operand be a specific register,
17683but there's no matching constraint letter for that register _by
17684itself_.  To force the operand into that register, use a local variable
17685for the operand and specify the register in the variable declaration.
17686*Note Explicit Reg Vars::.  Then for the `asm' operand, use any
17687register constraint letter that matches the register:
17688
17689     register int *p1 asm ("r0") = ...;
17690     register int *p2 asm ("r1") = ...;
17691     register int *result asm ("r0");
17692     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
17693
17694 In the above example, beware that a register that is call-clobbered by
17695the target ABI will be overwritten by any function call in the
17696assignment, including library calls for arithmetic operators.  Assuming
17697it is a call-clobbered register, this may happen to `r0' above by the
17698assignment to `p2'.  If you have to use such a register, use temporary
17699variables for expressions between the register assignment and use:
17700
17701     int t1 = ...;
17702     register int *p1 asm ("r0") = ...;
17703     register int *p2 asm ("r1") = t1;
17704     register int *result asm ("r0");
17705     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
17706
17707 Some instructions clobber specific hard registers.  To describe this,
17708write a third colon after the input operands, followed by the names of
17709the clobbered hard registers (given as strings).  Here is a realistic
17710example for the VAX:
17711
17712     asm volatile ("movc3 %0,%1,%2"
17713                   : /* no outputs */
17714                   : "g" (from), "g" (to), "g" (count)
17715                   : "r0", "r1", "r2", "r3", "r4", "r5");
17716
17717 You may not write a clobber description in a way that overlaps with an
17718input or output operand.  For example, you may not have an operand
17719describing a register class with one member if you mention that register
17720in the clobber list.  Variables declared to live in specific registers
17721(*note Explicit Reg Vars::), and used as asm input or output operands
17722must have no part mentioned in the clobber description.  There is no
17723way for you to specify that an input operand is modified without also
17724specifying it as an output operand.  Note that if all the output
17725operands you specify are for this purpose (and hence unused), you will
17726then also need to specify `volatile' for the `asm' construct, as
17727described below, to prevent GCC from deleting the `asm' statement as
17728unused.
17729
17730 If you refer to a particular hardware register from the assembler code,
17731you will probably have to list the register after the third colon to
17732tell the compiler the register's value is modified.  In some assemblers,
17733the register names begin with `%'; to produce one `%' in the assembler
17734code, you must write `%%' in the input.
17735
17736 If your assembler instruction can alter the condition code register,
17737add `cc' to the list of clobbered registers.  GCC on some machines
17738represents the condition codes as a specific hardware register; `cc'
17739serves to name this register.  On other machines, the condition code is
17740handled differently, and specifying `cc' has no effect.  But it is
17741valid no matter what the machine.
17742
17743 If your assembler instructions access memory in an unpredictable
17744fashion, add `memory' to the list of clobbered registers.  This will
17745cause GCC to not keep memory values cached in registers across the
17746assembler instruction and not optimize stores or loads to that memory.
17747You will also want to add the `volatile' keyword if the memory affected
17748is not listed in the inputs or outputs of the `asm', as the `memory'
17749clobber does not count as a side-effect of the `asm'.  If you know how
17750large the accessed memory is, you can add it as input or output but if
17751this is not known, you should add `memory'.  As an example, if you
17752access ten bytes of a string, you can use a memory input like:
17753
17754     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
17755
17756 Note that in the following example the memory input is necessary,
17757otherwise GCC might optimize the store to `x' away:
17758     int foo ()
17759     {
17760       int x = 42;
17761       int *y = &x;
17762       int result;
17763       asm ("magic stuff accessing an 'int' pointed to by '%1'"
17764             "=&d" (r) : "a" (y), "m" (*y));
17765       return result;
17766     }
17767
17768 You can put multiple assembler instructions together in a single `asm'
17769template, separated by the characters normally used in assembly code
17770for the system.  A combination that works in most places is a newline
17771to break the line, plus a tab character to move to the instruction field
17772(written as `\n\t').  Sometimes semicolons can be used, if the
17773assembler allows semicolons as a line-breaking character.  Note that
17774some assembler dialects use semicolons to start a comment.  The input
17775operands are guaranteed not to use any of the clobbered registers, and
17776neither will the output operands' addresses, so you can read and write
17777the clobbered registers as many times as you like.  Here is an example
17778of multiple instructions in a template; it assumes the subroutine
17779`_foo' accepts arguments in registers 9 and 10:
17780
17781     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
17782          : /* no outputs */
17783          : "g" (from), "g" (to)
17784          : "r9", "r10");
17785
17786 Unless an output operand has the `&' constraint modifier, GCC may
17787allocate it in the same register as an unrelated input operand, on the
17788assumption the inputs are consumed before the outputs are produced.
17789This assumption may be false if the assembler code actually consists of
17790more than one instruction.  In such a case, use `&' for each output
17791operand that may not overlap an input.  *Note Modifiers::.
17792
17793 If you want to test the condition code produced by an assembler
17794instruction, you must include a branch and a label in the `asm'
17795construct, as follows:
17796
17797     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
17798          : "g" (result)
17799          : "g" (input));
17800
17801This assumes your assembler supports local labels, as the GNU assembler
17802and most Unix assemblers do.
17803
17804 Speaking of labels, jumps from one `asm' to another are not supported.
17805The compiler's optimizers do not know about these jumps, and therefore
17806they cannot take account of them when deciding how to optimize.
17807
17808 Usually the most convenient way to use these `asm' instructions is to
17809encapsulate them in macros that look like functions.  For example,
17810
17811     #define sin(x)       \
17812     ({ double __value, __arg = (x);   \
17813        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
17814        __value; })
17815
17816Here the variable `__arg' is used to make sure that the instruction
17817operates on a proper `double' value, and to accept only those arguments
17818`x' which can convert automatically to a `double'.
17819
17820 Another way to make sure the instruction operates on the correct data
17821type is to use a cast in the `asm'.  This is different from using a
17822variable `__arg' in that it converts more different types.  For
17823example, if the desired type were `int', casting the argument to `int'
17824would accept a pointer with no complaint, while assigning the argument
17825to an `int' variable named `__arg' would warn about using a pointer
17826unless the caller explicitly casts it.
17827
17828 If an `asm' has output operands, GCC assumes for optimization purposes
17829the instruction has no side effects except to change the output
17830operands.  This does not mean instructions with a side effect cannot be
17831used, but you must be careful, because the compiler may eliminate them
17832if the output operands aren't used, or move them out of loops, or
17833replace two with one if they constitute a common subexpression.  Also,
17834if your instruction does have a side effect on a variable that otherwise
17835appears not to change, the old value of the variable may be reused later
17836if it happens to be found in a register.
17837
17838 You can prevent an `asm' instruction from being deleted by writing the
17839keyword `volatile' after the `asm'.  For example:
17840
17841     #define get_and_set_priority(new)              \
17842     ({ int __old;                                  \
17843        asm volatile ("get_and_set_priority %0, %1" \
17844                      : "=g" (__old) : "g" (new));  \
17845        __old; })
17846
17847The `volatile' keyword indicates that the instruction has important
17848side-effects.  GCC will not delete a volatile `asm' if it is reachable.
17849(The instruction can still be deleted if GCC can prove that
17850control-flow will never reach the location of the instruction.)  Note
17851that even a volatile `asm' instruction can be moved relative to other
17852code, including across jump instructions.  For example, on many targets
17853there is a system register which can be set to control the rounding
17854mode of floating point operations.  You might try setting it with a
17855volatile `asm', like this PowerPC example:
17856
17857            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
17858            sum = x + y;
17859
17860This will not work reliably, as the compiler may move the addition back
17861before the volatile `asm'.  To make it work you need to add an
17862artificial dependency to the `asm' referencing a variable in the code
17863you don't want moved, for example:
17864
17865         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
17866         sum = x + y;
17867
17868 Similarly, you can't expect a sequence of volatile `asm' instructions
17869to remain perfectly consecutive.  If you want consecutive output, use a
17870single `asm'.  Also, GCC will perform some optimizations across a
17871volatile `asm' instruction; GCC does not "forget everything" when it
17872encounters a volatile `asm' instruction the way some other compilers do.
17873
17874 An `asm' instruction without any output operands will be treated
17875identically to a volatile `asm' instruction.
17876
17877 It is a natural idea to look for a way to give access to the condition
17878code left by the assembler instruction.  However, when we attempted to
17879implement this, we found no way to make it work reliably.  The problem
17880is that output operands might need reloading, which would result in
17881additional following "store" instructions.  On most machines, these
17882instructions would alter the condition code before there was time to
17883test it.  This problem doesn't arise for ordinary "test" and "compare"
17884instructions because they don't have any output operands.
17885
17886 For reasons similar to those described above, it is not possible to
17887give an assembler instruction access to the condition code left by
17888previous instructions.
17889
17890 If you are writing a header file that should be includable in ISO C
17891programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
17892
178935.35.1 Size of an `asm'
17894-----------------------
17895
17896Some targets require that GCC track the size of each instruction used in
17897order to generate correct code.  Because the final length of an `asm'
17898is only known by the assembler, GCC must make an estimate as to how big
17899it will be.  The estimate is formed by counting the number of
17900statements in the pattern of the `asm' and multiplying that by the
17901length of the longest instruction on that processor.  Statements in the
17902`asm' are identified by newline characters and whatever statement
17903separator characters are supported by the assembler; on most processors
17904this is the ``;'' character.
17905
17906 Normally, GCC's estimate is perfectly adequate to ensure that correct
17907code is generated, but it is possible to confuse the compiler if you use
17908pseudo instructions or assembler macros that expand into multiple real
17909instructions or if you use assembler directives that expand to more
17910space in the object file than would be needed for a single instruction.
17911If this happens then the assembler will produce a diagnostic saying that
17912a label is unreachable.
17913
179145.35.2 i386 floating point asm operands
17915---------------------------------------
17916
17917There are several rules on the usage of stack-like regs in asm_operands
17918insns.  These rules apply only to the operands that are stack-like regs:
17919
17920  1. Given a set of input regs that die in an asm_operands, it is
17921     necessary to know which are implicitly popped by the asm, and
17922     which must be explicitly popped by gcc.
17923
17924     An input reg that is implicitly popped by the asm must be
17925     explicitly clobbered, unless it is constrained to match an output
17926     operand.
17927
17928  2. For any input reg that is implicitly popped by an asm, it is
17929     necessary to know how to adjust the stack to compensate for the
17930     pop.  If any non-popped input is closer to the top of the
17931     reg-stack than the implicitly popped reg, it would not be possible
17932     to know what the stack looked like--it's not clear how the rest of
17933     the stack "slides up".
17934
17935     All implicitly popped input regs must be closer to the top of the
17936     reg-stack than any input that is not implicitly popped.
17937
17938     It is possible that if an input dies in an insn, reload might use
17939     the input reg for an output reload.  Consider this example:
17940
17941          asm ("foo" : "=t" (a) : "f" (b));
17942
17943     This asm says that input B is not popped by the asm, and that the
17944     asm pushes a result onto the reg-stack, i.e., the stack is one
17945     deeper after the asm than it was before.  But, it is possible that
17946     reload will think that it can use the same reg for both the input
17947     and the output, if input B dies in this insn.
17948
17949     If any input operand uses the `f' constraint, all output reg
17950     constraints must use the `&' earlyclobber.
17951
17952     The asm above would be written as
17953
17954          asm ("foo" : "=&t" (a) : "f" (b));
17955
17956  3. Some operands need to be in particular places on the stack.  All
17957     output operands fall in this category--there is no other way to
17958     know which regs the outputs appear in unless the user indicates
17959     this in the constraints.
17960
17961     Output operands must specifically indicate which reg an output
17962     appears in after an asm.  `=f' is not allowed: the operand
17963     constraints must select a class with a single reg.
17964
17965  4. Output operands may not be "inserted" between existing stack regs.
17966     Since no 387 opcode uses a read/write operand, all output operands
17967     are dead before the asm_operands, and are pushed by the
17968     asm_operands.  It makes no sense to push anywhere but the top of
17969     the reg-stack.
17970
17971     Output operands must start at the top of the reg-stack: output
17972     operands may not "skip" a reg.
17973
17974  5. Some asm statements may need extra stack space for internal
17975     calculations.  This can be guaranteed by clobbering stack registers
17976     unrelated to the inputs and outputs.
17977
17978
17979 Here are a couple of reasonable asms to want to write.  This asm takes
17980one input, which is internally popped, and produces two outputs.
17981
17982     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
17983
17984 This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
17985and replaces them with one output.  The user must code the `st(1)'
17986clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
17987
17988     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
17989
17990
17991File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
17992
179935.36 Constraints for `asm' Operands
17994===================================
17995
17996Here are specific details on what constraint letters you can use with
17997`asm' operands.  Constraints can say whether an operand may be in a
17998register, and which kinds of register; whether the operand can be a
17999memory reference, and which kinds of address; whether the operand may
18000be an immediate constant, and which possible values it may have.
18001Constraints can also require two operands to match.
18002
18003* Menu:
18004
18005* Simple Constraints::  Basic use of constraints.
18006* Multi-Alternative::   When an insn has two alternative constraint-patterns.
18007* Modifiers::           More precise control over effects of constraints.
18008* Machine Constraints:: Special constraints for some particular machines.
18009
18010
18011File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
18012
180135.36.1 Simple Constraints
18014-------------------------
18015
18016The simplest kind of constraint is a string full of letters, each of
18017which describes one kind of operand that is permitted.  Here are the
18018letters that are allowed:
18019
18020whitespace
18021     Whitespace characters are ignored and can be inserted at any
18022     position except the first.  This enables each alternative for
18023     different operands to be visually aligned in the machine
18024     description even if they have different number of constraints and
18025     modifiers.
18026
18027`m'
18028     A memory operand is allowed, with any kind of address that the
18029     machine supports in general.
18030
18031`o'
18032     A memory operand is allowed, but only if the address is
18033     "offsettable".  This means that adding a small integer (actually,
18034     the width in bytes of the operand, as determined by its machine
18035     mode) may be added to the address and the result is also a valid
18036     memory address.
18037
18038     For example, an address which is constant is offsettable; so is an
18039     address that is the sum of a register and a constant (as long as a
18040     slightly larger constant is also within the range of
18041     address-offsets supported by the machine); but an autoincrement or
18042     autodecrement address is not offsettable.  More complicated
18043     indirect/indexed addresses may or may not be offsettable depending
18044     on the other addressing modes that the machine supports.
18045
18046     Note that in an output operand which can be matched by another
18047     operand, the constraint letter `o' is valid only when accompanied
18048     by both `<' (if the target machine has predecrement addressing)
18049     and `>' (if the target machine has preincrement addressing).
18050
18051`V'
18052     A memory operand that is not offsettable.  In other words,
18053     anything that would fit the `m' constraint but not the `o'
18054     constraint.
18055
18056`<'
18057     A memory operand with autodecrement addressing (either
18058     predecrement or postdecrement) is allowed.
18059
18060`>'
18061     A memory operand with autoincrement addressing (either
18062     preincrement or postincrement) is allowed.
18063
18064`r'
18065     A register operand is allowed provided that it is in a general
18066     register.
18067
18068`i'
18069     An immediate integer operand (one with constant value) is allowed.
18070     This includes symbolic constants whose values will be known only at
18071     assembly time or later.
18072
18073`n'
18074     An immediate integer operand with a known numeric value is allowed.
18075     Many systems cannot support assembly-time constants for operands
18076     less than a word wide.  Constraints for these operands should use
18077     `n' rather than `i'.
18078
18079`I', `J', `K', ... `P'
18080     Other letters in the range `I' through `P' may be defined in a
18081     machine-dependent fashion to permit immediate integer operands with
18082     explicit integer values in specified ranges.  For example, on the
18083     68000, `I' is defined to stand for the range of values 1 to 8.
18084     This is the range permitted as a shift count in the shift
18085     instructions.
18086
18087`E'
18088     An immediate floating operand (expression code `const_double') is
18089     allowed, but only if the target floating point format is the same
18090     as that of the host machine (on which the compiler is running).
18091
18092`F'
18093     An immediate floating operand (expression code `const_double' or
18094     `const_vector') is allowed.
18095
18096`G', `H'
18097     `G' and `H' may be defined in a machine-dependent fashion to
18098     permit immediate floating operands in particular ranges of values.
18099
18100`s'
18101     An immediate integer operand whose value is not an explicit
18102     integer is allowed.
18103
18104     This might appear strange; if an insn allows a constant operand
18105     with a value not known at compile time, it certainly must allow
18106     any known value.  So why use `s' instead of `i'?  Sometimes it
18107     allows better code to be generated.
18108
18109     For example, on the 68000 in a fullword instruction it is possible
18110     to use an immediate operand; but if the immediate value is between
18111     -128 and 127, better code results from loading the value into a
18112     register and using the register.  This is because the load into
18113     the register can be done with a `moveq' instruction.  We arrange
18114     for this to happen by defining the letter `K' to mean "any integer
18115     outside the range -128 to 127", and then specifying `Ks' in the
18116     operand constraints.
18117
18118`g'
18119     Any register, memory or immediate integer operand is allowed,
18120     except for registers that are not general registers.
18121
18122`X'
18123     Any operand whatsoever is allowed.
18124
18125`0', `1', `2', ... `9'
18126     An operand that matches the specified operand number is allowed.
18127     If a digit is used together with letters within the same
18128     alternative, the digit should come last.
18129
18130     This number is allowed to be more than a single digit.  If multiple
18131     digits are encountered consecutively, they are interpreted as a
18132     single decimal integer.  There is scant chance for ambiguity,
18133     since to-date it has never been desirable that `10' be interpreted
18134     as matching either operand 1 _or_ operand 0.  Should this be
18135     desired, one can use multiple alternatives instead.
18136
18137     This is called a "matching constraint" and what it really means is
18138     that the assembler has only a single operand that fills two roles
18139     which `asm' distinguishes.  For example, an add instruction uses
18140     two input operands and an output operand, but on most CISC
18141     machines an add instruction really has only two operands, one of
18142     them an input-output operand:
18143
18144          addl #35,r12
18145
18146     Matching constraints are used in these circumstances.  More
18147     precisely, the two operands that match must include one input-only
18148     operand and one output-only operand.  Moreover, the digit must be a
18149     smaller number than the number of the operand that uses it in the
18150     constraint.
18151
18152`p'
18153     An operand that is a valid memory address is allowed.  This is for
18154     "load address" and "push address" instructions.
18155
18156     `p' in the constraint must be accompanied by `address_operand' as
18157     the predicate in the `match_operand'.  This predicate interprets
18158     the mode specified in the `match_operand' as the mode of the memory
18159     reference for which the address would be valid.
18160
18161OTHER-LETTERS
18162     Other letters can be defined in machine-dependent fashion to stand
18163     for particular classes of registers or other arbitrary operand
18164     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
18165     for data, address and floating point registers.
18166
18167
18168File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
18169
181705.36.2 Multiple Alternative Constraints
18171---------------------------------------
18172
18173Sometimes a single instruction has multiple alternative sets of possible
18174operands.  For example, on the 68000, a logical-or instruction can
18175combine register or an immediate value into memory, or it can combine
18176any kind of operand into a register; but it cannot combine one memory
18177location into another.
18178
18179 These constraints are represented as multiple alternatives.  An
18180alternative can be described by a series of letters for each operand.
18181The overall constraint for an operand is made from the letters for this
18182operand from the first alternative, a comma, the letters for this
18183operand from the second alternative, a comma, and so on until the last
18184alternative.
18185
18186 If all the operands fit any one alternative, the instruction is valid.
18187Otherwise, for each alternative, the compiler counts how many
18188instructions must be added to copy the operands so that that
18189alternative applies.  The alternative requiring the least copying is
18190chosen.  If two alternatives need the same amount of copying, the one
18191that comes first is chosen.  These choices can be altered with the `?'
18192and `!' characters:
18193
18194`?'
18195     Disparage slightly the alternative that the `?' appears in, as a
18196     choice when no alternative applies exactly.  The compiler regards
18197     this alternative as one unit more costly for each `?' that appears
18198     in it.
18199
18200`!'
18201     Disparage severely the alternative that the `!' appears in.  This
18202     alternative can still be used if it fits without reloading, but if
18203     reloading is needed, some other alternative will be used.
18204
18205
18206File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
18207
182085.36.3 Constraint Modifier Characters
18209-------------------------------------
18210
18211Here are constraint modifier characters.
18212
18213`='
18214     Means that this operand is write-only for this instruction: the
18215     previous value is discarded and replaced by output data.
18216
18217`+'
18218     Means that this operand is both read and written by the
18219     instruction.
18220
18221     When the compiler fixes up the operands to satisfy the constraints,
18222     it needs to know which operands are inputs to the instruction and
18223     which are outputs from it.  `=' identifies an output; `+'
18224     identifies an operand that is both input and output; all other
18225     operands are assumed to be input only.
18226
18227     If you specify `=' or `+' in a constraint, you put it in the first
18228     character of the constraint string.
18229
18230`&'
18231     Means (in a particular alternative) that this operand is an
18232     "earlyclobber" operand, which is modified before the instruction is
18233     finished using the input operands.  Therefore, this operand may
18234     not lie in a register that is used as an input operand or as part
18235     of any memory address.
18236
18237     `&' applies only to the alternative in which it is written.  In
18238     constraints with multiple alternatives, sometimes one alternative
18239     requires `&' while others do not.  See, for example, the `movdf'
18240     insn of the 68000.
18241
18242     An input operand can be tied to an earlyclobber operand if its only
18243     use as an input occurs before the early result is written.  Adding
18244     alternatives of this form often allows GCC to produce better code
18245     when only some of the inputs can be affected by the earlyclobber.
18246     See, for example, the `mulsi3' insn of the ARM.
18247
18248     `&' does not obviate the need to write `='.
18249
18250`%'
18251     Declares the instruction to be commutative for this operand and the
18252     following operand.  This means that the compiler may interchange
18253     the two operands if that is the cheapest way to make all operands
18254     fit the constraints.  GCC can only handle one commutative pair in
18255     an asm; if you use more, the compiler may fail.  Note that you
18256     need not use the modifier if the two alternatives are strictly
18257     identical; this would only waste time in the reload pass.  The
18258     modifier is not operational after register allocation, so the
18259     result of `define_peephole2' and `define_split's performed after
18260     reload cannot rely on `%' to make the intended insn match.
18261
18262`#'
18263     Says that all following characters, up to the next comma, are to be
18264     ignored as a constraint.  They are significant only for choosing
18265     register preferences.
18266
18267`*'
18268     Says that the following character should be ignored when choosing
18269     register preferences.  `*' has no effect on the meaning of the
18270     constraint as a constraint, and no effect on reloading.
18271
18272
18273
18274File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
18275
182765.36.4 Constraints for Particular Machines
18277------------------------------------------
18278
18279Whenever possible, you should use the general-purpose constraint letters
18280in `asm' arguments, since they will convey meaning more readily to
18281people reading your code.  Failing that, use the constraint letters
18282that usually have very similar meanings across architectures.  The most
18283commonly used constraints are `m' and `r' (for memory and
18284general-purpose registers respectively; *note Simple Constraints::), and
18285`I', usually the letter indicating the most common immediate-constant
18286format.
18287
18288 Each architecture defines additional constraints.  These constraints
18289are used by the compiler itself for instruction generation, as well as
18290for `asm' statements; therefore, some of the constraints are not
18291particularly useful for `asm'.  Here is a summary of some of the
18292machine-dependent constraints available on some particular machines; it
18293includes both constraints that are useful for `asm' and constraints
18294that aren't.  The compiler source file mentioned in the table heading
18295for each architecture is the definitive reference for the meanings of
18296that architecture's constraints.
18297
18298_ARM family--`config/arm/arm.h'_
18299
18300    `f'
18301          Floating-point register
18302
18303    `w'
18304          VFP floating-point register
18305
18306    `F'
18307          One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
18308          4.0, 5.0 or 10.0
18309
18310    `G'
18311          Floating-point constant that would satisfy the constraint `F'
18312          if it were negated
18313
18314    `I'
18315          Integer that is valid as an immediate operand in a data
18316          processing instruction.  That is, an integer in the range 0
18317          to 255 rotated by a multiple of 2
18318
18319    `J'
18320          Integer in the range -4095 to 4095
18321
18322    `K'
18323          Integer that satisfies constraint `I' when inverted (ones
18324          complement)
18325
18326    `L'
18327          Integer that satisfies constraint `I' when negated (twos
18328          complement)
18329
18330    `M'
18331          Integer in the range 0 to 32
18332
18333    `Q'
18334          A memory reference where the exact address is in a single
18335          register (``m'' is preferable for `asm' statements)
18336
18337    `R'
18338          An item in the constant pool
18339
18340    `S'
18341          A symbol in the text segment of the current file
18342
18343    `Uv'
18344          A memory reference suitable for VFP load/store insns
18345          (reg+constant offset)
18346
18347    `Uy'
18348          A memory reference suitable for iWMMXt load/store
18349          instructions.
18350
18351    `Uq'
18352          A memory reference suitable for the ARMv4 ldrsb instruction.
18353
18354_AVR family--`config/avr/constraints.md'_
18355
18356    `l'
18357          Registers from r0 to r15
18358
18359    `a'
18360          Registers from r16 to r23
18361
18362    `d'
18363          Registers from r16 to r31
18364
18365    `w'
18366          Registers from r24 to r31.  These registers can be used in
18367          `adiw' command
18368
18369    `e'
18370          Pointer register (r26-r31)
18371
18372    `b'
18373          Base pointer register (r28-r31)
18374
18375    `q'
18376          Stack pointer register (SPH:SPL)
18377
18378    `t'
18379          Temporary register r0
18380
18381    `x'
18382          Register pair X (r27:r26)
18383
18384    `y'
18385          Register pair Y (r29:r28)
18386
18387    `z'
18388          Register pair Z (r31:r30)
18389
18390    `I'
18391          Constant greater than -1, less than 64
18392
18393    `J'
18394          Constant greater than -64, less than 1
18395
18396    `K'
18397          Constant integer 2
18398
18399    `L'
18400          Constant integer 0
18401
18402    `M'
18403          Constant that fits in 8 bits
18404
18405    `N'
18406          Constant integer -1
18407
18408    `O'
18409          Constant integer 8, 16, or 24
18410
18411    `P'
18412          Constant integer 1
18413
18414    `G'
18415          A floating point constant 0.0
18416
18417_CRX Architecture--`config/crx/crx.h'_
18418
18419    `b'
18420          Registers from r0 to r14 (registers without stack pointer)
18421
18422    `l'
18423          Register r16 (64-bit accumulator lo register)
18424
18425    `h'
18426          Register r17 (64-bit accumulator hi register)
18427
18428    `k'
18429          Register pair r16-r17. (64-bit accumulator lo-hi pair)
18430
18431    `I'
18432          Constant that fits in 3 bits
18433
18434    `J'
18435          Constant that fits in 4 bits
18436
18437    `K'
18438          Constant that fits in 5 bits
18439
18440    `L'
18441          Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
18442
18443    `G'
18444          Floating point constant that is legal for store immediate
18445
18446_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
18447
18448    `b'
18449          Address base register
18450
18451    `f'
18452          Floating point register
18453
18454    `v'
18455          Vector register
18456
18457    `h'
18458          `MQ', `CTR', or `LINK' register
18459
18460    `q'
18461          `MQ' register
18462
18463    `c'
18464          `CTR' register
18465
18466    `l'
18467          `LINK' register
18468
18469    `x'
18470          `CR' register (condition register) number 0
18471
18472    `y'
18473          `CR' register (condition register)
18474
18475    `z'
18476          `FPMEM' stack memory for FPR-GPR transfers
18477
18478    `I'
18479          Signed 16-bit constant
18480
18481    `J'
18482          Unsigned 16-bit constant shifted left 16 bits (use `L'
18483          instead for `SImode' constants)
18484
18485    `K'
18486          Unsigned 16-bit constant
18487
18488    `L'
18489          Signed 16-bit constant shifted left 16 bits
18490
18491    `M'
18492          Constant larger than 31
18493
18494    `N'
18495          Exact power of 2
18496
18497    `O'
18498          Zero
18499
18500    `P'
18501          Constant whose negation is a signed 16-bit constant
18502
18503    `G'
18504          Floating point constant that can be loaded into a register
18505          with one instruction per word
18506
18507    `Q'
18508          Memory operand that is an offset from a register (`m' is
18509          preferable for `asm' statements)
18510
18511    `R'
18512          AIX TOC entry
18513
18514    `S'
18515          Constant suitable as a 64-bit mask operand
18516
18517    `T'
18518          Constant suitable as a 32-bit mask operand
18519
18520    `U'
18521          System V Release 4 small data area reference
18522
18523_MorphoTech family--`config/mt/mt.h'_
18524
18525    `I'
18526          Constant for an arithmetic insn (16-bit signed integer).
18527
18528    `J'
18529          The constant 0.
18530
18531    `K'
18532          Constant for a logical insn (16-bit zero-extended integer).
18533
18534    `L'
18535          A constant that can be loaded with `lui' (i.e. the bottom 16
18536          bits are zero).
18537
18538    `M'
18539          A constant that takes two words to load (i.e. not matched by
18540          `I', `K', or `L').
18541
18542    `N'
18543          Negative 16-bit constants other than -65536.
18544
18545    `O'
18546          A 15-bit signed integer constant.
18547
18548    `P'
18549          A positive 16-bit constant.
18550
18551_Intel 386--`config/i386/constraints.md'_
18552
18553    `R'
18554          Legacy register--the eight integer registers available on all
18555          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
18556
18557    `q'
18558          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
18559          `c', and `d'; in 64-bit mode, any integer register.
18560
18561    `Q'
18562          Any register accessible as `Rh': `a', `b', `c', and `d'.
18563
18564    `a'
18565          The `a' register.
18566
18567    `b'
18568          The `b' register.
18569
18570    `c'
18571          The `c' register.
18572
18573    `d'
18574          The `d' register.
18575
18576    `S'
18577          The `si' register.
18578
18579    `D'
18580          The `di' register.
18581
18582    `A'
18583          The `a' and `d' registers, as a pair (for instructions that
18584          return half the result in one and half in the other).
18585
18586    `f'
18587          Any 80387 floating-point (stack) register.
18588
18589    `t'
18590          Top of 80387 floating-point stack (`%st(0)').
18591
18592    `u'
18593          Second from top of 80387 floating-point stack (`%st(1)').
18594
18595    `y'
18596          Any MMX register.
18597
18598    `x'
18599          Any SSE register.
18600
18601    `I'
18602          Integer constant in the range 0 ... 31, for 32-bit shifts.
18603
18604    `J'
18605          Integer constant in the range 0 ... 63, for 64-bit shifts.
18606
18607    `K'
18608          Signed 8-bit integer constant.
18609
18610    `L'
18611          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
18612
18613    `M'
18614          0, 1, 2, or 3 (shifts for the `lea' instruction).
18615
18616    `N'
18617          Unsigned 8-bit integer constant (for `in' and `out'
18618          instructions).
18619
18620    `G'
18621          Standard 80387 floating point constant.
18622
18623    `C'
18624          Standard SSE floating point constant.
18625
18626    `e'
18627          32-bit signed integer constant, or a symbolic reference known
18628          to fit that range (for immediate operands in sign-extending
18629          x86-64 instructions).
18630
18631    `Z'
18632          32-bit unsigned integer constant, or a symbolic reference
18633          known to fit that range (for immediate operands in
18634          zero-extending x86-64 instructions).
18635
18636
18637_Intel IA-64--`config/ia64/ia64.h'_
18638
18639    `a'
18640          General register `r0' to `r3' for `addl' instruction
18641
18642    `b'
18643          Branch register
18644
18645    `c'
18646          Predicate register (`c' as in "conditional")
18647
18648    `d'
18649          Application register residing in M-unit
18650
18651    `e'
18652          Application register residing in I-unit
18653
18654    `f'
18655          Floating-point register
18656
18657    `m'
18658          Memory operand.  Remember that `m' allows postincrement and
18659          postdecrement which require printing with `%Pn' on IA-64.
18660          Use `S' to disallow postincrement and postdecrement.
18661
18662    `G'
18663          Floating-point constant 0.0 or 1.0
18664
18665    `I'
18666          14-bit signed integer constant
18667
18668    `J'
18669          22-bit signed integer constant
18670
18671    `K'
18672          8-bit signed integer constant for logical instructions
18673
18674    `L'
18675          8-bit adjusted signed integer constant for compare pseudo-ops
18676
18677    `M'
18678          6-bit unsigned integer constant for shift counts
18679
18680    `N'
18681          9-bit signed integer constant for load and store
18682          postincrements
18683
18684    `O'
18685          The constant zero
18686
18687    `P'
18688          0 or -1 for `dep' instruction
18689
18690    `Q'
18691          Non-volatile memory for floating-point loads and stores
18692
18693    `R'
18694          Integer constant in the range 1 to 4 for `shladd' instruction
18695
18696    `S'
18697          Memory operand except postincrement and postdecrement
18698
18699_FRV--`config/frv/frv.h'_
18700
18701    `a'
18702          Register in the class `ACC_REGS' (`acc0' to `acc7').
18703
18704    `b'
18705          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
18706
18707    `c'
18708          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
18709          to `icc3').
18710
18711    `d'
18712          Register in the class `GPR_REGS' (`gr0' to `gr63').
18713
18714    `e'
18715          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
18716          registers are excluded not in the class but through the use
18717          of a machine mode larger than 4 bytes.
18718
18719    `f'
18720          Register in the class `FPR_REGS' (`fr0' to `fr63').
18721
18722    `h'
18723          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
18724          registers are excluded not in the class but through the use
18725          of a machine mode larger than 4 bytes.
18726
18727    `l'
18728          Register in the class `LR_REG' (the `lr' register).
18729
18730    `q'
18731          Register in the class `QUAD_REGS' (`gr2' to `gr63').
18732          Register numbers not divisible by 4 are excluded not in the
18733          class but through the use of a machine mode larger than 8
18734          bytes.
18735
18736    `t'
18737          Register in the class `ICC_REGS' (`icc0' to `icc3').
18738
18739    `u'
18740          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
18741
18742    `v'
18743          Register in the class `ICR_REGS' (`cc4' to `cc7').
18744
18745    `w'
18746          Register in the class `FCR_REGS' (`cc0' to `cc3').
18747
18748    `x'
18749          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
18750          Register numbers not divisible by 4 are excluded not in the
18751          class but through the use of a machine mode larger than 8
18752          bytes.
18753
18754    `z'
18755          Register in the class `SPR_REGS' (`lcr' and `lr').
18756
18757    `A'
18758          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
18759
18760    `B'
18761          Register in the class `ACCG_REGS' (`accg0' to `accg7').
18762
18763    `C'
18764          Register in the class `CR_REGS' (`cc0' to `cc7').
18765
18766    `G'
18767          Floating point constant zero
18768
18769    `I'
18770          6-bit signed integer constant
18771
18772    `J'
18773          10-bit signed integer constant
18774
18775    `L'
18776          16-bit signed integer constant
18777
18778    `M'
18779          16-bit unsigned integer constant
18780
18781    `N'
18782          12-bit signed integer constant that is negative--i.e. in the
18783          range of -2048 to -1
18784
18785    `O'
18786          Constant zero
18787
18788    `P'
18789          12-bit signed integer constant that is greater than
18790          zero--i.e. in the range of 1 to 2047.
18791
18792
18793_Blackfin family--`config/bfin/bfin.h'_
18794
18795    `a'
18796          P register
18797
18798    `d'
18799          D register
18800
18801    `z'
18802          A call clobbered P register.
18803
18804    `D'
18805          Even-numbered D register
18806
18807    `W'
18808          Odd-numbered D register
18809
18810    `e'
18811          Accumulator register.
18812
18813    `A'
18814          Even-numbered accumulator register.
18815
18816    `B'
18817          Odd-numbered accumulator register.
18818
18819    `b'
18820          I register
18821
18822    `v'
18823          B register
18824
18825    `f'
18826          M register
18827
18828    `c'
18829          Registers used for circular buffering, i.e. I, B, or L
18830          registers.
18831
18832    `C'
18833          The CC register.
18834
18835    `t'
18836          LT0 or LT1.
18837
18838    `k'
18839          LC0 or LC1.
18840
18841    `u'
18842          LB0 or LB1.
18843
18844    `x'
18845          Any D, P, B, M, I or L register.
18846
18847    `y'
18848          Additional registers typically used only in prologues and
18849          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
18850          USP.
18851
18852    `w'
18853          Any register except accumulators or CC.
18854
18855    `Ksh'
18856          Signed 16 bit integer (in the range -32768 to 32767)
18857
18858    `Kuh'
18859          Unsigned 16 bit integer (in the range 0 to 65535)
18860
18861    `Ks7'
18862          Signed 7 bit integer (in the range -64 to 63)
18863
18864    `Ku7'
18865          Unsigned 7 bit integer (in the range 0 to 127)
18866
18867    `Ku5'
18868          Unsigned 5 bit integer (in the range 0 to 31)
18869
18870    `Ks4'
18871          Signed 4 bit integer (in the range -8 to 7)
18872
18873    `Ks3'
18874          Signed 3 bit integer (in the range -3 to 4)
18875
18876    `Ku3'
18877          Unsigned 3 bit integer (in the range 0 to 7)
18878
18879    `PN'
18880          Constant N, where N is a single-digit constant in the range 0
18881          to 4.
18882
18883    `M1'
18884          Constant 255.
18885
18886    `M2'
18887          Constant 65535.
18888
18889    `J'
18890          An integer constant with exactly a single bit set.
18891
18892    `L'
18893          An integer constant with all bits set except exactly one.
18894
18895    `H'
18896
18897    `Q'
18898          Any SYMBOL_REF.
18899
18900_M32C--`config/m32c/m32c.c'_
18901
18902    `Rsp'
18903    `Rfb'
18904    `Rsb'
18905          `$sp', `$fb', `$sb'.
18906
18907    `Rcr'
18908          Any control register, when they're 16 bits wide (nothing if
18909          control registers are 24 bits wide)
18910
18911    `Rcl'
18912          Any control register, when they're 24 bits wide.
18913
18914    `R0w'
18915    `R1w'
18916    `R2w'
18917    `R3w'
18918          $r0, $r1, $r2, $r3.
18919
18920    `R02'
18921          $r0 or $r2, or $r2r0 for 32 bit values.
18922
18923    `R13'
18924          $r1 or $r3, or $r3r1 for 32 bit values.
18925
18926    `Rdi'
18927          A register that can hold a 64 bit value.
18928
18929    `Rhl'
18930          $r0 or $r1 (registers with addressable high/low bytes)
18931
18932    `R23'
18933          $r2 or $r3
18934
18935    `Raa'
18936          Address registers
18937
18938    `Raw'
18939          Address registers when they're 16 bits wide.
18940
18941    `Ral'
18942          Address registers when they're 24 bits wide.
18943
18944    `Rqi'
18945          Registers that can hold QI values.
18946
18947    `Rad'
18948          Registers that can be used with displacements ($a0, $a1, $sb).
18949
18950    `Rsi'
18951          Registers that can hold 32 bit values.
18952
18953    `Rhi'
18954          Registers that can hold 16 bit values.
18955
18956    `Rhc'
18957          Registers chat can hold 16 bit values, including all control
18958          registers.
18959
18960    `Rra'
18961          $r0 through R1, plus $a0 and $a1.
18962
18963    `Rfl'
18964          The flags register.
18965
18966    `Rmm'
18967          The memory-based pseudo-registers $mem0 through $mem15.
18968
18969    `Rpi'
18970          Registers that can hold pointers (16 bit registers for r8c,
18971          m16c; 24 bit registers for m32cm, m32c).
18972
18973    `Rpa'
18974          Matches multiple registers in a PARALLEL to form a larger
18975          register.  Used to match function return values.
18976
18977    `Is3'
18978          -8 ... 7
18979
18980    `IS1'
18981          -128 ... 127
18982
18983    `IS2'
18984          -32768 ... 32767
18985
18986    `IU2'
18987          0 ... 65535
18988
18989    `In4'
18990          -8 ... -1 or 1 ... 8
18991
18992    `In5'
18993          -16 ... -1 or 1 ... 16
18994
18995    `In6'
18996          -32 ... -1 or 1 ... 32
18997
18998    `IM2'
18999          -65536 ... -1
19000
19001    `Ilb'
19002          An 8 bit value with exactly one bit set.
19003
19004    `Ilw'
19005          A 16 bit value with exactly one bit set.
19006
19007    `Sd'
19008          The common src/dest memory addressing modes.
19009
19010    `Sa'
19011          Memory addressed using $a0 or $a1.
19012
19013    `Si'
19014          Memory addressed with immediate addresses.
19015
19016    `Ss'
19017          Memory addressed using the stack pointer ($sp).
19018
19019    `Sf'
19020          Memory addressed using the frame base register ($fb).
19021
19022    `Ss'
19023          Memory addressed using the small base register ($sb).
19024
19025    `S1'
19026          $r1h
19027
19028_MIPS--`config/mips/constraints.md'_
19029
19030    `d'
19031          An address register.  This is equivalent to `r' unless
19032          generating MIPS16 code.
19033
19034    `f'
19035          A floating-point register (if available).
19036
19037    `h'
19038          The `hi' register.
19039
19040    `l'
19041          The `lo' register.
19042
19043    `x'
19044          The `hi' and `lo' registers.
19045
19046    `c'
19047          A register suitable for use in an indirect jump.  This will
19048          always be `$25' for `-mabicalls'.
19049
19050    `y'
19051          Equivalent to `r'; retained for backwards compatibility.
19052
19053    `z'
19054          A floating-point condition code register.
19055
19056    `I'
19057          A signed 16-bit constant (for arithmetic instructions).
19058
19059    `J'
19060          Integer zero.
19061
19062    `K'
19063          An unsigned 16-bit constant (for logic instructions).
19064
19065    `L'
19066          A signed 32-bit constant in which the lower 16 bits are zero.
19067          Such constants can be loaded using `lui'.
19068
19069    `M'
19070          A constant that cannot be loaded using `lui', `addiu' or
19071          `ori'.
19072
19073    `N'
19074          A constant in the range -65535 to -1 (inclusive).
19075
19076    `O'
19077          A signed 15-bit constant.
19078
19079    `P'
19080          A constant in the range 1 to 65535 (inclusive).
19081
19082    `G'
19083          Floating-point zero.
19084
19085    `R'
19086          An address that can be used in a non-macro load or store.
19087
19088_Motorola 680x0--`config/m68k/m68k.h'_
19089
19090    `a'
19091          Address register
19092
19093    `d'
19094          Data register
19095
19096    `f'
19097          68881 floating-point register, if available
19098
19099    `I'
19100          Integer in the range 1 to 8
19101
19102    `J'
19103          16-bit signed number
19104
19105    `K'
19106          Signed number whose magnitude is greater than 0x80
19107
19108    `L'
19109          Integer in the range -8 to -1
19110
19111    `M'
19112          Signed number whose magnitude is greater than 0x100
19113
19114    `G'
19115          Floating point constant that is not a 68881 constant
19116
19117_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
19118
19119    `a'
19120          Register `a'
19121
19122    `b'
19123          Register `b'
19124
19125    `d'
19126          Register `d'
19127
19128    `q'
19129          An 8-bit register
19130
19131    `t'
19132          Temporary soft register _.tmp
19133
19134    `u'
19135          A soft register _.d1 to _.d31
19136
19137    `w'
19138          Stack pointer register
19139
19140    `x'
19141          Register `x'
19142
19143    `y'
19144          Register `y'
19145
19146    `z'
19147          Pseudo register `z' (replaced by `x' or `y' at the end)
19148
19149    `A'
19150          An address register: x, y or z
19151
19152    `B'
19153          An address register: x or y
19154
19155    `D'
19156          Register pair (x:d) to form a 32-bit value
19157
19158    `L'
19159          Constants in the range -65536 to 65535
19160
19161    `M'
19162          Constants whose 16-bit low part is zero
19163
19164    `N'
19165          Constant integer 1 or -1
19166
19167    `O'
19168          Constant integer 16
19169
19170    `P'
19171          Constants in the range -8 to 2
19172
19173
19174_SPARC--`config/sparc/sparc.h'_
19175
19176    `f'
19177          Floating-point register on the SPARC-V8 architecture and
19178          lower floating-point register on the SPARC-V9 architecture.
19179
19180    `e'
19181          Floating-point register.  It is equivalent to `f' on the
19182          SPARC-V8 architecture and contains both lower and upper
19183          floating-point registers on the SPARC-V9 architecture.
19184
19185    `c'
19186          Floating-point condition code register.
19187
19188    `d'
19189          Lower floating-point register.  It is only valid on the
19190          SPARC-V9 architecture when the Visual Instruction Set is
19191          available.
19192
19193    `b'
19194          Floating-point register.  It is only valid on the SPARC-V9
19195          architecture when the Visual Instruction Set is available.
19196
19197    `h'
19198          64-bit global or out register for the SPARC-V8+ architecture.
19199
19200    `I'
19201          Signed 13-bit constant
19202
19203    `J'
19204          Zero
19205
19206    `K'
19207          32-bit constant with the low 12 bits clear (a constant that
19208          can be loaded with the `sethi' instruction)
19209
19210    `L'
19211          A constant in the range supported by `movcc' instructions
19212
19213    `M'
19214          A constant in the range supported by `movrcc' instructions
19215
19216    `N'
19217          Same as `K', except that it verifies that bits that are not
19218          in the lower 32-bit range are all zero.  Must be used instead
19219          of `K' for modes wider than `SImode'
19220
19221    `O'
19222          The constant 4096
19223
19224    `G'
19225          Floating-point zero
19226
19227    `H'
19228          Signed 13-bit constant, sign-extended to 32 or 64 bits
19229
19230    `Q'
19231          Floating-point constant whose integral representation can be
19232          moved into an integer register using a single sethi
19233          instruction
19234
19235    `R'
19236          Floating-point constant whose integral representation can be
19237          moved into an integer register using a single mov instruction
19238
19239    `S'
19240          Floating-point constant whose integral representation can be
19241          moved into an integer register using a high/lo_sum
19242          instruction sequence
19243
19244    `T'
19245          Memory address aligned to an 8-byte boundary
19246
19247    `U'
19248          Even register
19249
19250    `W'
19251          Memory address for `e' constraint registers
19252
19253    `Y'
19254          Vector zero
19255
19256
19257_TMS320C3x/C4x--`config/c4x/c4x.h'_
19258
19259    `a'
19260          Auxiliary (address) register (ar0-ar7)
19261
19262    `b'
19263          Stack pointer register (sp)
19264
19265    `c'
19266          Standard (32-bit) precision integer register
19267
19268    `f'
19269          Extended (40-bit) precision register (r0-r11)
19270
19271    `k'
19272          Block count register (bk)
19273
19274    `q'
19275          Extended (40-bit) precision low register (r0-r7)
19276
19277    `t'
19278          Extended (40-bit) precision register (r0-r1)
19279
19280    `u'
19281          Extended (40-bit) precision register (r2-r3)
19282
19283    `v'
19284          Repeat count register (rc)
19285
19286    `x'
19287          Index register (ir0-ir1)
19288
19289    `y'
19290          Status (condition code) register (st)
19291
19292    `z'
19293          Data page register (dp)
19294
19295    `G'
19296          Floating-point zero
19297
19298    `H'
19299          Immediate 16-bit floating-point constant
19300
19301    `I'
19302          Signed 16-bit constant
19303
19304    `J'
19305          Signed 8-bit constant
19306
19307    `K'
19308          Signed 5-bit constant
19309
19310    `L'
19311          Unsigned 16-bit constant
19312
19313    `M'
19314          Unsigned 8-bit constant
19315
19316    `N'
19317          Ones complement of unsigned 16-bit constant
19318
19319    `O'
19320          High 16-bit constant (32-bit constant with 16 LSBs zero)
19321
19322    `Q'
19323          Indirect memory reference with signed 8-bit or index register
19324          displacement
19325
19326    `R'
19327          Indirect memory reference with unsigned 5-bit displacement
19328
19329    `S'
19330          Indirect memory reference with 1 bit or index register
19331          displacement
19332
19333    `T'
19334          Direct memory reference
19335
19336    `U'
19337          Symbolic address
19338
19339
19340_S/390 and zSeries--`config/s390/s390.h'_
19341
19342    `a'
19343          Address register (general purpose register except r0)
19344
19345    `c'
19346          Condition code register
19347
19348    `d'
19349          Data register (arbitrary general purpose register)
19350
19351    `f'
19352          Floating-point register
19353
19354    `I'
19355          Unsigned 8-bit constant (0-255)
19356
19357    `J'
19358          Unsigned 12-bit constant (0-4095)
19359
19360    `K'
19361          Signed 16-bit constant (-32768-32767)
19362
19363    `L'
19364          Value appropriate as displacement.
19365         `(0..4095)'
19366               for short displacement
19367
19368         `(-524288..524287)'
19369               for long displacement
19370
19371    `M'
19372          Constant integer with a value of 0x7fffffff.
19373
19374    `N'
19375          Multiple letter constraint followed by 4 parameter letters.
19376         `0..9:'
19377               number of the part counting from most to least
19378               significant
19379
19380         `H,Q:'
19381               mode of the part
19382
19383         `D,S,H:'
19384               mode of the containing operand
19385
19386         `0,F:'
19387               value of the other parts (F--all bits set)
19388          The constraint matches if the specified part of a constant
19389          has a value different from it's other parts.
19390
19391    `Q'
19392          Memory reference without index register and with short
19393          displacement.
19394
19395    `R'
19396          Memory reference with index register and short displacement.
19397
19398    `S'
19399          Memory reference without index register but with long
19400          displacement.
19401
19402    `T'
19403          Memory reference with index register and long displacement.
19404
19405    `U'
19406          Pointer with short displacement.
19407
19408    `W'
19409          Pointer with long displacement.
19410
19411    `Y'
19412          Shift count operand.
19413
19414
19415_Score family--`config/score/score.h'_
19416
19417    `d'
19418          Registers from r0 to r32.
19419
19420    `e'
19421          Registers from r0 to r16.
19422
19423    `t'
19424          r8--r11 or r22--r27 registers.
19425
19426    `h'
19427          hi register.
19428
19429    `l'
19430          lo register.
19431
19432    `x'
19433          hi + lo register.
19434
19435    `q'
19436          cnt register.
19437
19438    `y'
19439          lcb register.
19440
19441    `z'
19442          scb register.
19443
19444    `a'
19445          cnt + lcb + scb register.
19446
19447    `c'
19448          cr0--cr15 register.
19449
19450    `b'
19451          cp1 registers.
19452
19453    `f'
19454          cp2 registers.
19455
19456    `i'
19457          cp3 registers.
19458
19459    `j'
19460          cp1 + cp2 + cp3 registers.
19461
19462    `I'
19463          High 16-bit constant (32-bit constant with 16 LSBs zero).
19464
19465    `J'
19466          Unsigned 5 bit integer (in the range 0 to 31).
19467
19468    `K'
19469          Unsigned 16 bit integer (in the range 0 to 65535).
19470
19471    `L'
19472          Signed 16 bit integer (in the range -32768 to 32767).
19473
19474    `M'
19475          Unsigned 14 bit integer (in the range 0 to 16383).
19476
19477    `N'
19478          Signed 14 bit integer (in the range -8192 to 8191).
19479
19480    `Z'
19481          Any SYMBOL_REF.
19482
19483_Xstormy16--`config/stormy16/stormy16.h'_
19484
19485    `a'
19486          Register r0.
19487
19488    `b'
19489          Register r1.
19490
19491    `c'
19492          Register r2.
19493
19494    `d'
19495          Register r8.
19496
19497    `e'
19498          Registers r0 through r7.
19499
19500    `t'
19501          Registers r0 and r1.
19502
19503    `y'
19504          The carry register.
19505
19506    `z'
19507          Registers r8 and r9.
19508
19509    `I'
19510          A constant between 0 and 3 inclusive.
19511
19512    `J'
19513          A constant that has exactly one bit set.
19514
19515    `K'
19516          A constant that has exactly one bit clear.
19517
19518    `L'
19519          A constant between 0 and 255 inclusive.
19520
19521    `M'
19522          A constant between -255 and 0 inclusive.
19523
19524    `N'
19525          A constant between -3 and 0 inclusive.
19526
19527    `O'
19528          A constant between 1 and 4 inclusive.
19529
19530    `P'
19531          A constant between -4 and -1 inclusive.
19532
19533    `Q'
19534          A memory reference that is a stack push.
19535
19536    `R'
19537          A memory reference that is a stack pop.
19538
19539    `S'
19540          A memory reference that refers to a constant address of known
19541          value.
19542
19543    `T'
19544          The register indicated by Rx (not implemented yet).
19545
19546    `U'
19547          A constant that is not between 2 and 15 inclusive.
19548
19549    `Z'
19550          The constant 0.
19551
19552
19553_Xtensa--`config/xtensa/xtensa.h'_
19554
19555    `a'
19556          General-purpose 32-bit register
19557
19558    `b'
19559          One-bit boolean register
19560
19561    `A'
19562          MAC16 40-bit accumulator register
19563
19564    `I'
19565          Signed 12-bit integer constant, for use in MOVI instructions
19566
19567    `J'
19568          Signed 8-bit integer constant, for use in ADDI instructions
19569
19570    `K'
19571          Integer constant valid for BccI instructions
19572
19573    `L'
19574          Unsigned constant valid for BccUI instructions
19575
19576
19577
19578
19579File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
19580
195815.37 Controlling Names Used in Assembler Code
19582=============================================
19583
19584You can specify the name to be used in the assembler code for a C
19585function or variable by writing the `asm' (or `__asm__') keyword after
19586the declarator as follows:
19587
19588     int foo asm ("myfoo") = 2;
19589
19590This specifies that the name to be used for the variable `foo' in the
19591assembler code should be `myfoo' rather than the usual `_foo'.
19592
19593 On systems where an underscore is normally prepended to the name of a C
19594function or variable, this feature allows you to define names for the
19595linker that do not start with an underscore.
19596
19597 It does not make sense to use this feature with a non-static local
19598variable since such variables do not have assembler names.  If you are
19599trying to put the variable in a particular register, see *Note Explicit
19600Reg Vars::.  GCC presently accepts such code with a warning, but will
19601probably be changed to issue an error, rather than a warning, in the
19602future.
19603
19604 You cannot use `asm' in this way in a function _definition_; but you
19605can get the same effect by writing a declaration for the function
19606before its definition and putting `asm' there, like this:
19607
19608     extern func () asm ("FUNC");
19609
19610     func (x, y)
19611          int x, y;
19612     /* ... */
19613
19614 It is up to you to make sure that the assembler names you choose do not
19615conflict with any other assembler symbols.  Also, you must not use a
19616register name; that would produce completely invalid assembler code.
19617GCC does not as yet have the ability to store static variables in
19618registers.  Perhaps that will be added.
19619
19620
19621File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
19622
196235.38 Variables in Specified Registers
19624=====================================
19625
19626GNU C allows you to put a few global variables into specified hardware
19627registers.  You can also specify the register in which an ordinary
19628register variable should be allocated.
19629
19630   * Global register variables reserve registers throughout the program.
19631     This may be useful in programs such as programming language
19632     interpreters which have a couple of global variables that are
19633     accessed very often.
19634
19635   * Local register variables in specific registers do not reserve the
19636     registers, except at the point where they are used as input or
19637     output operands in an `asm' statement and the `asm' statement
19638     itself is not deleted.  The compiler's data flow analysis is
19639     capable of determining where the specified registers contain live
19640     values, and where they are available for other uses.  Stores into
19641     local register variables may be deleted when they appear to be
19642     dead according to dataflow analysis.  References to local register
19643     variables may be deleted or moved or simplified.
19644
19645     These local variables are sometimes convenient for use with the
19646     extended `asm' feature (*note Extended Asm::), if you want to
19647     write one output of the assembler instruction directly into a
19648     particular register.  (This will work provided the register you
19649     specify fits the constraints specified for that operand in the
19650     `asm'.)
19651
19652* Menu:
19653
19654* Global Reg Vars::
19655* Local Reg Vars::
19656
19657
19658File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
19659
196605.38.1 Defining Global Register Variables
19661-----------------------------------------
19662
19663You can define a global register variable in GNU C like this:
19664
19665     register int *foo asm ("a5");
19666
19667Here `a5' is the name of the register which should be used.  Choose a
19668register which is normally saved and restored by function calls on your
19669machine, so that library routines will not clobber it.
19670
19671 Naturally the register name is cpu-dependent, so you would need to
19672conditionalize your program according to cpu type.  The register `a5'
19673would be a good choice on a 68000 for a variable of pointer type.  On
19674machines with register windows, be sure to choose a "global" register
19675that is not affected magically by the function call mechanism.
19676
19677 In addition, operating systems on one type of cpu may differ in how
19678they name the registers; then you would need additional conditionals.
19679For example, some 68000 operating systems call this register `%a5'.
19680
19681 Eventually there may be a way of asking the compiler to choose a
19682register automatically, but first we need to figure out how it should
19683choose and how to enable you to guide the choice.  No solution is
19684evident.
19685
19686 Defining a global register variable in a certain register reserves that
19687register entirely for this use, at least within the current compilation.
19688The register will not be allocated for any other purpose in the
19689functions in the current compilation.  The register will not be saved
19690and restored by these functions.  Stores into this register are never
19691deleted even if they would appear to be dead, but references may be
19692deleted or moved or simplified.
19693
19694 It is not safe to access the global register variables from signal
19695handlers, or from more than one thread of control, because the system
19696library routines may temporarily use the register for other things
19697(unless you recompile them specially for the task at hand).
19698
19699 It is not safe for one function that uses a global register variable to
19700call another such function `foo' by way of a third function `lose' that
19701was compiled without knowledge of this variable (i.e. in a different
19702source file in which the variable wasn't declared).  This is because
19703`lose' might save the register and put some other value there.  For
19704example, you can't expect a global register variable to be available in
19705the comparison-function that you pass to `qsort', since `qsort' might
19706have put something else in that register.  (If you are prepared to
19707recompile `qsort' with the same global register variable, you can solve
19708this problem.)
19709
19710 If you want to recompile `qsort' or other source files which do not
19711actually use your global register variable, so that they will not use
19712that register for any other purpose, then it suffices to specify the
19713compiler option `-ffixed-REG'.  You need not actually add a global
19714register declaration to their source code.
19715
19716 A function which can alter the value of a global register variable
19717cannot safely be called from a function compiled without this variable,
19718because it could clobber the value the caller expects to find there on
19719return.  Therefore, the function which is the entry point into the part
19720of the program that uses the global register variable must explicitly
19721save and restore the value which belongs to its caller.
19722
19723 On most machines, `longjmp' will restore to each global register
19724variable the value it had at the time of the `setjmp'.  On some
19725machines, however, `longjmp' will not change the value of global
19726register variables.  To be portable, the function that called `setjmp'
19727should make other arrangements to save the values of the global register
19728variables, and to restore them in a `longjmp'.  This way, the same
19729thing will happen regardless of what `longjmp' does.
19730
19731 All global register variable declarations must precede all function
19732definitions.  If such a declaration could appear after function
19733definitions, the declaration would be too late to prevent the register
19734from being used for other purposes in the preceding functions.
19735
19736 Global register variables may not have initial values, because an
19737executable file has no means to supply initial contents for a register.
19738
19739 On the SPARC, there are reports that g3 ... g7 are suitable registers,
19740but certain library functions, such as `getwd', as well as the
19741subroutines for division and remainder, modify g3 and g4.  g1 and g2
19742are local temporaries.
19743
19744 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
19745course, it will not do to use more than a few of those.
19746
19747
19748File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
19749
197505.38.2 Specifying Registers for Local Variables
19751-----------------------------------------------
19752
19753You can define a local register variable with a specified register like
19754this:
19755
19756     register int *foo asm ("a5");
19757
19758Here `a5' is the name of the register which should be used.  Note that
19759this is the same syntax used for defining global register variables,
19760but for a local variable it would appear within a function.
19761
19762 Naturally the register name is cpu-dependent, but this is not a
19763problem, since specific registers are most often useful with explicit
19764assembler instructions (*note Extended Asm::).  Both of these things
19765generally require that you conditionalize your program according to cpu
19766type.
19767
19768 In addition, operating systems on one type of cpu may differ in how
19769they name the registers; then you would need additional conditionals.
19770For example, some 68000 operating systems call this register `%a5'.
19771
19772 Defining such a register variable does not reserve the register; it
19773remains available for other uses in places where flow control determines
19774the variable's value is not live.
19775
19776 This option does not guarantee that GCC will generate code that has
19777this variable in the register you specify at all times.  You may not
19778code an explicit reference to this register in the _assembler
19779instruction template_ part of an `asm' statement and assume it will
19780always refer to this variable.  However, using the variable as an `asm'
19781_operand_ guarantees that the specified register is used for the
19782operand.
19783
19784 Stores into local register variables may be deleted when they appear
19785to be dead according to dataflow analysis.  References to local
19786register variables may be deleted or moved or simplified.
19787
19788 As for global register variables, it's recommended that you choose a
19789register which is normally saved and restored by function calls on your
19790machine, so that library routines will not clobber it.  A common
19791pitfall is to initialize multiple call-clobbered registers with
19792arbitrary expressions, where a function call or library call for an
19793arithmetic operator will overwrite a register value from a previous
19794assignment, for example `r0' below:
19795     register int *p1 asm ("r0") = ...;
19796     register int *p2 asm ("r1") = ...;
19797 In those cases, a solution is to use a temporary variable for each
19798arbitrary expression.   *Note Example of asm with clobbered asm reg::.
19799
19800
19801File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
19802
198035.39 Alternate Keywords
19804=======================
19805
19806`-ansi' and the various `-std' options disable certain keywords.  This
19807causes trouble when you want to use GNU C extensions, or a
19808general-purpose header file that should be usable by all programs,
19809including ISO C programs.  The keywords `asm', `typeof' and `inline'
19810are not available in programs compiled with `-ansi' or `-std' (although
19811`inline' can be used in a program compiled with `-std=c99').  The ISO
19812C99 keyword `restrict' is only available when `-std=gnu99' (which will
19813eventually be the default) or `-std=c99' (or the equivalent
19814`-std=iso9899:1999') is used.
19815
19816 The way to solve these problems is to put `__' at the beginning and
19817end of each problematical keyword.  For example, use `__asm__' instead
19818of `asm', and `__inline__' instead of `inline'.
19819
19820 Other C compilers won't accept these alternative keywords; if you want
19821to compile with another compiler, you can define the alternate keywords
19822as macros to replace them with the customary keywords.  It looks like
19823this:
19824
19825     #ifndef __GNUC__
19826     #define __asm__ asm
19827     #endif
19828
19829 `-pedantic' and other options cause warnings for many GNU C extensions.
19830You can prevent such warnings within one expression by writing
19831`__extension__' before the expression.  `__extension__' has no effect
19832aside from this.
19833
19834
19835File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
19836
198375.40 Incomplete `enum' Types
19838============================
19839
19840You can define an `enum' tag without specifying its possible values.
19841This results in an incomplete type, much like what you get if you write
19842`struct foo' without describing the elements.  A later declaration
19843which does specify the possible values completes the type.
19844
19845 You can't allocate variables or storage using the type while it is
19846incomplete.  However, you can work with pointers to that type.
19847
19848 This extension may not be very useful, but it makes the handling of
19849`enum' more consistent with the way `struct' and `union' are handled.
19850
19851 This extension is not supported by GNU C++.
19852
19853
19854File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
19855
198565.41 Function Names as Strings
19857==============================
19858
19859GCC provides three magic variables which hold the name of the current
19860function, as a string.  The first of these is `__func__', which is part
19861of the C99 standard:
19862
19863     The identifier `__func__' is implicitly declared by the translator
19864     as if, immediately following the opening brace of each function
19865     definition, the declaration
19866          static const char __func__[] = "function-name";
19867
19868     appeared, where function-name is the name of the lexically-enclosing
19869     function.  This name is the unadorned name of the function.
19870
19871 `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
19872recognize only this name.  However, it is not standardized.  For
19873maximum portability, we recommend you use `__func__', but provide a
19874fallback definition with the preprocessor:
19875
19876     #if __STDC_VERSION__ < 199901L
19877     # if __GNUC__ >= 2
19878     #  define __func__ __FUNCTION__
19879     # else
19880     #  define __func__ "<unknown>"
19881     # endif
19882     #endif
19883
19884 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
19885However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
19886the function as well as its bare name.  For example, this program:
19887
19888     extern "C" {
19889     extern int printf (char *, ...);
19890     }
19891
19892     class a {
19893      public:
19894       void sub (int i)
19895         {
19896           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
19897           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
19898         }
19899     };
19900
19901     int
19902     main (void)
19903     {
19904       a ax;
19905       ax.sub (0);
19906       return 0;
19907     }
19908
19909gives this output:
19910
19911     __FUNCTION__ = sub
19912     __PRETTY_FUNCTION__ = void a::sub(int)
19913
19914 These identifiers are not preprocessor macros.  In GCC 3.3 and
19915earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
19916treated as string literals; they could be used to initialize `char'
19917arrays, and they could be concatenated with other string literals.  GCC
199183.4 and later treat them as variables, like `__func__'.  In C++,
19919`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
19920
19921
19922File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
19923
199245.42 Getting the Return or Frame Address of a Function
19925======================================================
19926
19927These functions may be used to get information about the callers of a
19928function.
19929
19930 -- Built-in Function: void * __builtin_return_address (unsigned int
19931          LEVEL)
19932     This function returns the return address of the current function,
19933     or of one of its callers.  The LEVEL argument is number of frames
19934     to scan up the call stack.  A value of `0' yields the return
19935     address of the current function, a value of `1' yields the return
19936     address of the caller of the current function, and so forth.  When
19937     inlining the expected behavior is that the function will return
19938     the address of the function that will be returned to.  To work
19939     around this behavior use the `noinline' function attribute.
19940
19941     The LEVEL argument must be a constant integer.
19942
19943     On some machines it may be impossible to determine the return
19944     address of any function other than the current one; in such cases,
19945     or when the top of the stack has been reached, this function will
19946     return `0' or a random value.  In addition,
19947     `__builtin_frame_address' may be used to determine if the top of
19948     the stack has been reached.
19949
19950     This function should only be used with a nonzero argument for
19951     debugging purposes.
19952
19953 -- Built-in Function: void * __builtin_frame_address (unsigned int
19954          LEVEL)
19955     This function is similar to `__builtin_return_address', but it
19956     returns the address of the function frame rather than the return
19957     address of the function.  Calling `__builtin_frame_address' with a
19958     value of `0' yields the frame address of the current function, a
19959     value of `1' yields the frame address of the caller of the current
19960     function, and so forth.
19961
19962     The frame is the area on the stack which holds local variables and
19963     saved registers.  The frame address is normally the address of the
19964     first word pushed on to the stack by the function.  However, the
19965     exact definition depends upon the processor and the calling
19966     convention.  If the processor has a dedicated frame pointer
19967     register, and the function has a frame, then
19968     `__builtin_frame_address' will return the value of the frame
19969     pointer register.
19970
19971     On some machines it may be impossible to determine the frame
19972     address of any function other than the current one; in such cases,
19973     or when the top of the stack has been reached, this function will
19974     return `0' if the first frame pointer is properly initialized by
19975     the startup code.
19976
19977     This function should only be used with a nonzero argument for
19978     debugging purposes.
19979
19980
19981File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
19982
199835.43 Using vector instructions through built-in functions
19984=========================================================
19985
19986On some targets, the instruction set contains SIMD vector instructions
19987that operate on multiple values contained in one large register at the
19988same time.  For example, on the i386 the MMX, 3Dnow! and SSE extensions
19989can be used this way.
19990
19991 The first step in using these extensions is to provide the necessary
19992data types.  This should be done using an appropriate `typedef':
19993
19994     typedef int v4si __attribute__ ((vector_size (16)));
19995
19996 The `int' type specifies the base type, while the attribute specifies
19997the vector size for the variable, measured in bytes.  For example, the
19998declaration above causes the compiler to set the mode for the `v4si'
19999type to be 16 bytes wide and divided into `int' sized units.  For a
2000032-bit `int' this means a vector of 4 units of 4 bytes, and the
20001corresponding mode of `foo' will be V4SI.
20002
20003 The `vector_size' attribute is only applicable to integral and float
20004scalars, although arrays, pointers, and function return values are
20005allowed in conjunction with this construct.
20006
20007 All the basic integer types can be used as base types, both as signed
20008and as unsigned: `char', `short', `int', `long', `long long'.  In
20009addition, `float' and `double' can be used to build floating-point
20010vector types.
20011
20012 Specifying a combination that is not valid for the current architecture
20013will cause GCC to synthesize the instructions using a narrower mode.
20014For example, if you specify a variable of type `V4SI' and your
20015architecture does not allow for this specific SIMD type, GCC will
20016produce code that uses 4 `SIs'.
20017
20018 The types defined in this manner can be used with a subset of normal C
20019operations.  Currently, GCC will allow using the following operators on
20020these types: `+, -, *, /, unary minus, ^, |, &, ~'.
20021
20022 The operations behave like C++ `valarrays'.  Addition is defined as
20023the addition of the corresponding elements of the operands.  For
20024example, in the code below, each of the 4 elements in A will be added
20025to the corresponding 4 elements in B and the resulting vector will be
20026stored in C.
20027
20028     typedef int v4si __attribute__ ((vector_size (16)));
20029
20030     v4si a, b, c;
20031
20032     c = a + b;
20033
20034 Subtraction, multiplication, division, and the logical operations
20035operate in a similar manner.  Likewise, the result of using the unary
20036minus or complement operators on a vector type is a vector whose
20037elements are the negative or complemented values of the corresponding
20038elements in the operand.
20039
20040 You can declare variables and use them in function calls and returns,
20041as well as in assignments and some casts.  You can specify a vector
20042type as a return type for a function.  Vector types can also be used as
20043function arguments.  It is possible to cast from one vector type to
20044another, provided they are of the same size (in fact, you can also cast
20045vectors to and from other datatypes of the same size).
20046
20047 You cannot operate between vectors of different lengths or different
20048signedness without a cast.
20049
20050 A port that supports hardware vector operations, usually provides a set
20051of built-in functions that can be used to operate on vectors.  For
20052example, a function to add two vectors and multiply the result by a
20053third could look like this:
20054
20055     v4si f (v4si a, v4si b, v4si c)
20056     {
20057       v4si tmp = __builtin_addv4si (a, b);
20058       return __builtin_mulv4si (tmp, c);
20059     }
20060
20061
20062File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
20063
200645.44 Offsetof
20065=============
20066
20067GCC implements for both C and C++ a syntactic extension to implement
20068the `offsetof' macro.
20069
20070     primary:
20071     	"__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
20072
20073     offsetof_member_designator:
20074     	  `identifier'
20075     	| offsetof_member_designator "." `identifier'
20076     	| offsetof_member_designator "[" `expr' "]"
20077
20078 This extension is sufficient such that
20079
20080     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
20081
20082 is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
20083dependent.  In either case, MEMBER may consist of a single identifier,
20084or a sequence of member accesses and array references.
20085
20086
20087File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
20088
200895.45 Built-in functions for atomic memory access
20090================================================
20091
20092The following builtins are intended to be compatible with those
20093described in the `Intel Itanium Processor-specific Application Binary
20094Interface', section 7.4.  As such, they depart from the normal GCC
20095practice of using the "__builtin_" prefix, and further that they are
20096overloaded such that they work on multiple types.
20097
20098 The definition given in the Intel documentation allows only for the
20099use of the types `int', `long', `long long' as well as their unsigned
20100counterparts.  GCC will allow any integral scalar or pointer type that
20101is 1, 2, 4 or 8 bytes in length.
20102
20103 Not all operations are supported by all target processors.  If a
20104particular operation cannot be implemented on the target processor, a
20105warning will be generated and a call an external function will be
20106generated.  The external function will carry the same name as the
20107builtin, with an additional suffix `_N' where N is the size of the data
20108type.
20109
20110 In most cases, these builtins are considered a "full barrier".  That
20111is, no memory operand will be moved across the operation, either
20112forward or backward.  Further, instructions will be issued as necessary
20113to prevent the processor from speculating loads across the operation
20114and from queuing stores after the operation.
20115
20116 All of the routines are are described in the Intel documentation to
20117take "an optional list of variables protected by the memory barrier".
20118It's not clear what is meant by that; it could mean that _only_ the
20119following variables are protected, or it could mean that these variables
20120should in addition be protected.  At present GCC ignores this list and
20121protects all variables which are globally accessible.  If in the future
20122we make some use of this list, an empty list will continue to mean all
20123globally accessible variables.
20124
20125`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
20126`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
20127`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
20128`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
20129`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
20130`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
20131     These builtins perform the operation suggested by the name, and
20132     returns the value that had previously been in memory.  That is,
20133
20134          { tmp = *ptr; *ptr OP= value; return tmp; }
20135          { tmp = *ptr; *ptr = ~tmp & value; return tmp; }   // nand
20136
20137`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
20138`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
20139`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
20140`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
20141`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
20142`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
20143     These builtins perform the operation suggested by the name, and
20144     return the new value.  That is,
20145
20146          { *ptr OP= value; return *ptr; }
20147          { *ptr = ~*ptr & value; return *ptr; }   // nand
20148
20149`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
20150`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
20151     These builtins perform an atomic compare and swap.  That is, if
20152     the current value of `*PTR' is OLDVAL, then write NEWVAL into
20153     `*PTR'.
20154
20155     The "bool" version returns true if the comparison is successful and
20156     NEWVAL was written.  The "val" version returns the contents of
20157     `*PTR' before the operation.
20158
20159`__sync_synchronize (...)'
20160     This builtin issues a full memory barrier.
20161
20162`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
20163     This builtin, as described by Intel, is not a traditional
20164     test-and-set operation, but rather an atomic exchange operation.
20165     It writes VALUE into `*PTR', and returns the previous contents of
20166     `*PTR'.
20167
20168     Many targets have only minimal support for such locks, and do not
20169     support a full exchange operation.  In this case, a target may
20170     support reduced functionality here by which the _only_ valid value
20171     to store is the immediate constant 1.  The exact value actually
20172     stored in `*PTR' is implementation defined.
20173
20174     This builtin is not a full barrier, but rather an "acquire
20175     barrier".  This means that references after the builtin cannot
20176     move to (or be speculated to) before the builtin, but previous
20177     memory stores may not be globally visible yet, and previous memory
20178     loads may not yet be satisfied.
20179
20180`void __sync_lock_release (TYPE *ptr, ...)'
20181     This builtin releases the lock acquired by
20182     `__sync_lock_test_and_set'.  Normally this means writing the
20183     constant 0 to `*PTR'.
20184
20185     This builtin is not a full barrier, but rather a "release barrier".
20186     This means that all previous memory stores are globally visible,
20187     and all previous memory loads have been satisfied, but following
20188     memory reads are not prevented from being speculated to before the
20189     barrier.
20190
20191
20192File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
20193
201945.46 Object Size Checking Builtins
20195==================================
20196
20197GCC implements a limited buffer overflow protection mechanism that can
20198prevent some buffer overflow attacks.
20199
20200 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
20201          TYPE)
20202     is a built-in construct that returns a constant number of bytes
20203     from PTR to the end of the object PTR pointer points to (if known
20204     at compile time).  `__builtin_object_size' never evaluates its
20205     arguments for side-effects.  If there are any side-effects in
20206     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
20207     for TYPE 2 or 3.  If there are multiple objects PTR can point to
20208     and all of them are known at compile time, the returned number is
20209     the maximum of remaining byte counts in those objects if TYPE & 2
20210     is 0 and minimum if nonzero.  If it is not possible to determine
20211     which objects PTR points to at compile time,
20212     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
20213     1 and `(size_t) 0' for TYPE 2 or 3.
20214
20215     TYPE is an integer constant from 0 to 3.  If the least significant
20216     bit is clear, objects are whole variables, if it is set, a closest
20217     surrounding subobject is considered the object a pointer points to.
20218     The second bit determines if maximum or minimum of remaining bytes
20219     is computed.
20220
20221          struct V { char buf1[10]; int b; char buf2[10]; } var;
20222          char *p = &var.buf1[1], *q = &var.b;
20223
20224          /* Here the object p points to is var.  */
20225          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
20226          /* The subobject p points to is var.buf1.  */
20227          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
20228          /* The object q points to is var.  */
20229          assert (__builtin_object_size (q, 0)
20230          	== (char *) (&var + 1) - (char *) &var.b);
20231          /* The subobject q points to is var.b.  */
20232          assert (__builtin_object_size (q, 1) == sizeof (var.b));
20233
20234 There are built-in functions added for many common string operation
20235functions, e.g. for `memcpy' `__builtin___memcpy_chk' built-in is
20236provided.  This built-in has an additional last argument, which is the
20237number of bytes remaining in object the DEST argument points to or
20238`(size_t) -1' if the size is not known.
20239
20240 The built-in functions are optimized into the normal string functions
20241like `memcpy' if the last argument is `(size_t) -1' or if it is known
20242at compile time that the destination object will not be overflown.  If
20243the compiler can determine at compile time the object will be always
20244overflown, it issues a warning.
20245
20246 The intended use can be e.g.
20247
20248     #undef memcpy
20249     #define bos0(dest) __builtin_object_size (dest, 0)
20250     #define memcpy(dest, src, n) \
20251       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
20252
20253     char *volatile p;
20254     char buf[10];
20255     /* It is unknown what object p points to, so this is optimized
20256        into plain memcpy - no checking is possible.  */
20257     memcpy (p, "abcde", n);
20258     /* Destination is known and length too.  It is known at compile
20259        time there will be no overflow.  */
20260     memcpy (&buf[5], "abcde", 5);
20261     /* Destination is known, but the length is not known at compile time.
20262        This will result in __memcpy_chk call that can check for overflow
20263        at runtime.  */
20264     memcpy (&buf[5], "abcde", n);
20265     /* Destination is known and it is known at compile time there will
20266        be overflow.  There will be a warning and __memcpy_chk call that
20267        will abort the program at runtime.  */
20268     memcpy (&buf[6], "abcde", 5);
20269
20270 Such built-in functions are provided for `memcpy', `mempcpy',
20271`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
20272`strncat'.
20273
20274 There are also checking built-in functions for formatted output
20275functions.
20276     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
20277     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
20278     			      const char *fmt, ...);
20279     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
20280     			      va_list ap);
20281     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
20282     			       const char *fmt, va_list ap);
20283
20284 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
20285functions and can contain implementation specific flags on what
20286additional security measures the checking function might take, such as
20287handling `%n' differently.
20288
20289 The OS argument is the object size S points to, like in the other
20290built-in functions.  There is a small difference in the behavior
20291though, if OS is `(size_t) -1', the built-in functions are optimized
20292into the non-checking functions only if FLAG is 0, otherwise the
20293checking function is called with OS argument set to `(size_t) -1'.
20294
20295 In addition to this, there are checking built-in functions
20296`__builtin___printf_chk', `__builtin___vprintf_chk',
20297`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
20298just one additional argument, FLAG, right before format string FMT.  If
20299the compiler is able to optimize them to `fputc' etc. functions, it
20300will, otherwise the checking function should be called and the FLAG
20301argument passed to it.
20302
20303
20304File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
20305
203065.47 Other built-in functions provided by GCC
20307=============================================
20308
20309GCC provides a large number of built-in functions other than the ones
20310mentioned above.  Some of these are for internal use in the processing
20311of exceptions or variable-length argument lists and will not be
20312documented here because they may change from time to time; we do not
20313recommend general use of these functions.
20314
20315 The remaining functions are provided for optimization purposes.
20316
20317 GCC includes built-in versions of many of the functions in the standard
20318C library.  The versions prefixed with `__builtin_' will always be
20319treated as having the same meaning as the C library function even if you
20320specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
20321these functions are only optimized in certain cases; if they are not
20322optimized in a particular case, a call to the library function will be
20323emitted.
20324
20325 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
20326functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
20327`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
20328`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
20329`gamma', `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f',
20330`j1l', `j1', `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10',
20331`printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', `signbit',
20332`signbitf', `signbitl', `significandf', `significandl', `significand',
20333`sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp',
20334`strdup', `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l',
20335`y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as
20336built-in functions.  All these functions have corresponding versions
20337prefixed with `__builtin_', which may be used even in strict C89 mode.
20338
20339 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
20340`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
20341`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
20342`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
20343`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
20344`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
20345`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
20346`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
20347`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
20348`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
20349`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
20350`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
20351`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
20352`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
20353`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
20354`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
20355`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
20356`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
20357`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
20358`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
20359`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
20360`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
20361`remainderf', `remainderl', `remainder', `remquof', `remquol',
20362`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
20363`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
20364`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
20365`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
20366functions except in strict ISO C90 mode (`-ansi' or `-std=c89').
20367
20368 There are also built-in versions of the ISO C99 functions `acosf',
20369`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
20370`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
20371`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
20372`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
20373`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
20374`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
20375recognized in any mode since ISO C90 reserves these names for the
20376purpose to which ISO C99 puts them.  All these functions have
20377corresponding versions prefixed with `__builtin_'.
20378
20379 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
20380`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
20381`iswxdigit', `towlower' and `towupper' are handled as built-in functions
20382except in strict ISO C90 mode (`-ansi' or `-std=c89').
20383
20384 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
20385`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
20386`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
20387`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
20388`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
20389`log', `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf',
20390`putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf',
20391`sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn',
20392`strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr',
20393`strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf'
20394are all recognized as built-in functions unless `-fno-builtin' is
20395specified (or `-fno-builtin-FUNCTION' is specified for an individual
20396function).  All of these functions have corresponding versions prefixed
20397with `__builtin_'.
20398
20399 GCC provides built-in versions of the ISO C99 floating point comparison
20400macros that avoid raising exceptions for unordered operands.  They have
20401the same names as the standard macros ( `isgreater', `isgreaterequal',
20402`isless', `islessequal', `islessgreater', and `isunordered') , with
20403`__builtin_' prefixed.  We intend for a library implementor to be able
20404to simply `#define' each standard macro to its built-in equivalent.
20405
20406 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
20407     You can use the built-in function `__builtin_types_compatible_p' to
20408     determine whether two types are the same.
20409
20410     This built-in function returns 1 if the unqualified versions of the
20411     types TYPE1 and TYPE2 (which are types, not expressions) are
20412     compatible, 0 otherwise.  The result of this built-in function can
20413     be used in integer constant expressions.
20414
20415     This built-in function ignores top level qualifiers (e.g., `const',
20416     `volatile').  For example, `int' is equivalent to `const int'.
20417
20418     The type `int[]' and `int[5]' are compatible.  On the other hand,
20419     `int' and `char *' are not compatible, even if the size of their
20420     types, on the particular architecture are the same.  Also, the
20421     amount of pointer indirection is taken into account when
20422     determining similarity.  Consequently, `short *' is not similar to
20423     `short **'.  Furthermore, two types that are typedefed are
20424     considered compatible if their underlying types are compatible.
20425
20426     An `enum' type is not considered to be compatible with another
20427     `enum' type even if both are compatible with the same integer
20428     type; this is what the C standard specifies.  For example, `enum
20429     {foo, bar}' is not similar to `enum {hot, dog}'.
20430
20431     You would typically use this function in code whose execution
20432     varies depending on the arguments' types.  For example:
20433
20434          #define foo(x)                                                  \
20435            ({                                                           \
20436              typeof (x) tmp = (x);                                       \
20437              if (__builtin_types_compatible_p (typeof (x), long double)) \
20438                tmp = foo_long_double (tmp);                              \
20439              else if (__builtin_types_compatible_p (typeof (x), double)) \
20440                tmp = foo_double (tmp);                                   \
20441              else if (__builtin_types_compatible_p (typeof (x), float))  \
20442                tmp = foo_float (tmp);                                    \
20443              else                                                        \
20444                abort ();                                                 \
20445              tmp;                                                        \
20446            })
20447
20448     _Note:_ This construct is only available for C.
20449
20450
20451 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
20452          EXP2)
20453     You can use the built-in function `__builtin_choose_expr' to
20454     evaluate code depending on the value of a constant expression.
20455     This built-in function returns EXP1 if CONST_EXP, which is a
20456     constant expression that must be able to be determined at compile
20457     time, is nonzero.  Otherwise it returns 0.
20458
20459     This built-in function is analogous to the `? :' operator in C,
20460     except that the expression returned has its type unaltered by
20461     promotion rules.  Also, the built-in function does not evaluate
20462     the expression that was not chosen.  For example, if CONST_EXP
20463     evaluates to true, EXP2 is not evaluated even if it has
20464     side-effects.
20465
20466     This built-in function can return an lvalue if the chosen argument
20467     is an lvalue.
20468
20469     If EXP1 is returned, the return type is the same as EXP1's type.
20470     Similarly, if EXP2 is returned, its return type is the same as
20471     EXP2.
20472
20473     Example:
20474
20475          #define foo(x)                                                    \
20476            __builtin_choose_expr (                                         \
20477              __builtin_types_compatible_p (typeof (x), double),            \
20478              foo_double (x),                                               \
20479              __builtin_choose_expr (                                       \
20480                __builtin_types_compatible_p (typeof (x), float),           \
20481                foo_float (x),                                              \
20482                /* The void expression results in a compile-time error  \
20483                   when assigning the result to something.  */          \
20484                (void)0))
20485
20486     _Note:_ This construct is only available for C.  Furthermore, the
20487     unused expression (EXP1 or EXP2 depending on the value of
20488     CONST_EXP) may still generate syntax errors.  This may change in
20489     future revisions.
20490
20491
20492 -- Built-in Function: int __builtin_constant_p (EXP)
20493     You can use the built-in function `__builtin_constant_p' to
20494     determine if a value is known to be constant at compile-time and
20495     hence that GCC can perform constant-folding on expressions
20496     involving that value.  The argument of the function is the value
20497     to test.  The function returns the integer 1 if the argument is
20498     known to be a compile-time constant and 0 if it is not known to be
20499     a compile-time constant.  A return of 0 does not indicate that the
20500     value is _not_ a constant, but merely that GCC cannot prove it is
20501     a constant with the specified value of the `-O' option.
20502
20503     You would typically use this function in an embedded application
20504     where memory was a critical resource.  If you have some complex
20505     calculation, you may want it to be folded if it involves
20506     constants, but need to call a function if it does not.  For
20507     example:
20508
20509          #define Scale_Value(X)      \
20510            (__builtin_constant_p (X) \
20511            ? ((X) * SCALE + OFFSET) : Scale (X))
20512
20513     You may use this built-in function in either a macro or an inline
20514     function.  However, if you use it in an inlined function and pass
20515     an argument of the function as the argument to the built-in, GCC
20516     will never return 1 when you call the inline function with a
20517     string constant or compound literal (*note Compound Literals::)
20518     and will not return 1 when you pass a constant numeric value to
20519     the inline function unless you specify the `-O' option.
20520
20521     You may also use `__builtin_constant_p' in initializers for static
20522     data.  For instance, you can write
20523
20524          static const int table[] = {
20525             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
20526             /* ... */
20527          };
20528
20529     This is an acceptable initializer even if EXPRESSION is not a
20530     constant expression.  GCC must be more conservative about
20531     evaluating the built-in in this case, because it has no
20532     opportunity to perform optimization.
20533
20534     Previous versions of GCC did not accept this built-in in data
20535     initializers.  The earliest version where it is completely safe is
20536     3.0.1.
20537
20538 -- Built-in Function: long __builtin_expect (long EXP, long C)
20539     You may use `__builtin_expect' to provide the compiler with branch
20540     prediction information.  In general, you should prefer to use
20541     actual profile feedback for this (`-fprofile-arcs'), as
20542     programmers are notoriously bad at predicting how their programs
20543     actually perform.  However, there are applications in which this
20544     data is hard to collect.
20545
20546     The return value is the value of EXP, which should be an integral
20547     expression.  The value of C must be a compile-time constant.  The
20548     semantics of the built-in are that it is expected that EXP == C.
20549     For example:
20550
20551          if (__builtin_expect (x, 0))
20552            foo ();
20553
20554     would indicate that we do not expect to call `foo', since we
20555     expect `x' to be zero.  Since you are limited to integral
20556     expressions for EXP, you should use constructions such as
20557
20558          if (__builtin_expect (ptr != NULL, 1))
20559            error ();
20560
20561     when testing pointer or floating-point values.
20562
20563 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
20564     This function is used to minimize cache-miss latency by moving
20565     data into a cache before it is accessed.  You can insert calls to
20566     `__builtin_prefetch' into code for which you know addresses of
20567     data in memory that is likely to be accessed soon.  If the target
20568     supports them, data prefetch instructions will be generated.  If
20569     the prefetch is done early enough before the access then the data
20570     will be in the cache by the time it is accessed.
20571
20572     The value of ADDR is the address of the memory to prefetch.  There
20573     are two optional arguments, RW and LOCALITY.  The value of RW is a
20574     compile-time constant one or zero; one means that the prefetch is
20575     preparing for a write to the memory address and zero, the default,
20576     means that the prefetch is preparing for a read.  The value
20577     LOCALITY must be a compile-time constant integer between zero and
20578     three.  A value of zero means that the data has no temporal
20579     locality, so it need not be left in the cache after the access.  A
20580     value of three means that the data has a high degree of temporal
20581     locality and should be left in all levels of cache possible.
20582     Values of one and two mean, respectively, a low or moderate degree
20583     of temporal locality.  The default is three.
20584
20585          for (i = 0; i < n; i++)
20586            {
20587              a[i] = a[i] + b[i];
20588              __builtin_prefetch (&a[i+j], 1, 1);
20589              __builtin_prefetch (&b[i+j], 0, 1);
20590              /* ... */
20591            }
20592
20593     Data prefetch does not generate faults if ADDR is invalid, but the
20594     address expression itself must be valid.  For example, a prefetch
20595     of `p->next' will not fault if `p->next' is not a valid address,
20596     but evaluation will fault if `p' is not a valid address.
20597
20598     If the target does not support data prefetch, the address
20599     expression is evaluated if it includes side effects but no other
20600     code is generated and GCC does not issue a warning.
20601
20602 -- Built-in Function: double __builtin_huge_val (void)
20603     Returns a positive infinity, if supported by the floating-point
20604     format, else `DBL_MAX'.  This function is suitable for
20605     implementing the ISO C macro `HUGE_VAL'.
20606
20607 -- Built-in Function: float __builtin_huge_valf (void)
20608     Similar to `__builtin_huge_val', except the return type is `float'.
20609
20610 -- Built-in Function: long double __builtin_huge_vall (void)
20611     Similar to `__builtin_huge_val', except the return type is `long
20612     double'.
20613
20614 -- Built-in Function: double __builtin_inf (void)
20615     Similar to `__builtin_huge_val', except a warning is generated if
20616     the target floating-point format does not support infinities.
20617
20618 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
20619     Similar to `__builtin_inf', except the return type is `_Decimal32'.
20620
20621 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
20622     Similar to `__builtin_inf', except the return type is `_Decimal64'.
20623
20624 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
20625     Similar to `__builtin_inf', except the return type is
20626     `_Decimal128'.
20627
20628 -- Built-in Function: float __builtin_inff (void)
20629     Similar to `__builtin_inf', except the return type is `float'.
20630     This function is suitable for implementing the ISO C99 macro
20631     `INFINITY'.
20632
20633 -- Built-in Function: long double __builtin_infl (void)
20634     Similar to `__builtin_inf', except the return type is `long
20635     double'.
20636
20637 -- Built-in Function: double __builtin_nan (const char *str)
20638     This is an implementation of the ISO C99 function `nan'.
20639
20640     Since ISO C99 defines this function in terms of `strtod', which we
20641     do not implement, a description of the parsing is in order.  The
20642     string is parsed as by `strtol'; that is, the base is recognized by
20643     leading `0' or `0x' prefixes.  The number parsed is placed in the
20644     significand such that the least significant bit of the number is
20645     at the least significant bit of the significand.  The number is
20646     truncated to fit the significand field provided.  The significand
20647     is forced to be a quiet NaN.
20648
20649     This function, if given a string literal all of which would have
20650     been consumed by strtol, is evaluated early enough that it is
20651     considered a compile-time constant.
20652
20653 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
20654     Similar to `__builtin_nan', except the return type is `_Decimal32'.
20655
20656 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
20657     Similar to `__builtin_nan', except the return type is `_Decimal64'.
20658
20659 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
20660     Similar to `__builtin_nan', except the return type is
20661     `_Decimal128'.
20662
20663 -- Built-in Function: float __builtin_nanf (const char *str)
20664     Similar to `__builtin_nan', except the return type is `float'.
20665
20666 -- Built-in Function: long double __builtin_nanl (const char *str)
20667     Similar to `__builtin_nan', except the return type is `long
20668     double'.
20669
20670 -- Built-in Function: double __builtin_nans (const char *str)
20671     Similar to `__builtin_nan', except the significand is forced to be
20672     a signaling NaN.  The `nans' function is proposed by WG14 N965.
20673
20674 -- Built-in Function: float __builtin_nansf (const char *str)
20675     Similar to `__builtin_nans', except the return type is `float'.
20676
20677 -- Built-in Function: long double __builtin_nansl (const char *str)
20678     Similar to `__builtin_nans', except the return type is `long
20679     double'.
20680
20681 -- Built-in Function: int __builtin_ffs (unsigned int x)
20682     Returns one plus the index of the least significant 1-bit of X, or
20683     if X is zero, returns zero.
20684
20685 -- Built-in Function: int __builtin_clz (unsigned int x)
20686     Returns the number of leading 0-bits in X, starting at the most
20687     significant bit position.  If X is 0, the result is undefined.
20688
20689 -- Built-in Function: int __builtin_ctz (unsigned int x)
20690     Returns the number of trailing 0-bits in X, starting at the least
20691     significant bit position.  If X is 0, the result is undefined.
20692
20693 -- Built-in Function: int __builtin_popcount (unsigned int x)
20694     Returns the number of 1-bits in X.
20695
20696 -- Built-in Function: int __builtin_parity (unsigned int x)
20697     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
20698
20699 -- Built-in Function: int __builtin_ffsl (unsigned long)
20700     Similar to `__builtin_ffs', except the argument type is `unsigned
20701     long'.
20702
20703 -- Built-in Function: int __builtin_clzl (unsigned long)
20704     Similar to `__builtin_clz', except the argument type is `unsigned
20705     long'.
20706
20707 -- Built-in Function: int __builtin_ctzl (unsigned long)
20708     Similar to `__builtin_ctz', except the argument type is `unsigned
20709     long'.
20710
20711 -- Built-in Function: int __builtin_popcountl (unsigned long)
20712     Similar to `__builtin_popcount', except the argument type is
20713     `unsigned long'.
20714
20715 -- Built-in Function: int __builtin_parityl (unsigned long)
20716     Similar to `__builtin_parity', except the argument type is
20717     `unsigned long'.
20718
20719 -- Built-in Function: int __builtin_ffsll (unsigned long long)
20720     Similar to `__builtin_ffs', except the argument type is `unsigned
20721     long long'.
20722
20723 -- Built-in Function: int __builtin_clzll (unsigned long long)
20724     Similar to `__builtin_clz', except the argument type is `unsigned
20725     long long'.
20726
20727 -- Built-in Function: int __builtin_ctzll (unsigned long long)
20728     Similar to `__builtin_ctz', except the argument type is `unsigned
20729     long long'.
20730
20731 -- Built-in Function: int __builtin_popcountll (unsigned long long)
20732     Similar to `__builtin_popcount', except the argument type is
20733     `unsigned long long'.
20734
20735 -- Built-in Function: int __builtin_parityll (unsigned long long)
20736     Similar to `__builtin_parity', except the argument type is
20737     `unsigned long long'.
20738
20739 -- Built-in Function: double __builtin_powi (double, int)
20740     Returns the first argument raised to the power of the second.
20741     Unlike the `pow' function no guarantees about precision and
20742     rounding are made.
20743
20744 -- Built-in Function: float __builtin_powif (float, int)
20745     Similar to `__builtin_powi', except the argument and return types
20746     are `float'.
20747
20748 -- Built-in Function: long double __builtin_powil (long double, int)
20749     Similar to `__builtin_powi', except the argument and return types
20750     are `long double'.
20751
20752
20753File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
20754
207555.48 Built-in Functions Specific to Particular Target Machines
20756==============================================================
20757
20758On some target machines, GCC supports many built-in functions specific
20759to those machines.  Generally these generate calls to specific machine
20760instructions, but allow the compiler to schedule those calls.
20761
20762* Menu:
20763
20764* Alpha Built-in Functions::
20765* ARM Built-in Functions::
20766* Blackfin Built-in Functions::
20767* FR-V Built-in Functions::
20768* X86 Built-in Functions::
20769* MIPS DSP Built-in Functions::
20770* MIPS Paired-Single Support::
20771* PowerPC AltiVec Built-in Functions::
20772* SPARC VIS Built-in Functions::
20773
20774
20775File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM Built-in Functions,  Up: Target Builtins
20776
207775.48.1 Alpha Built-in Functions
20778-------------------------------
20779
20780These built-in functions are available for the Alpha family of
20781processors, depending on the command-line switches used.
20782
20783 The following built-in functions are always available.  They all
20784generate the machine instruction that is part of the name.
20785
20786     long __builtin_alpha_implver (void)
20787     long __builtin_alpha_rpcc (void)
20788     long __builtin_alpha_amask (long)
20789     long __builtin_alpha_cmpbge (long, long)
20790     long __builtin_alpha_extbl (long, long)
20791     long __builtin_alpha_extwl (long, long)
20792     long __builtin_alpha_extll (long, long)
20793     long __builtin_alpha_extql (long, long)
20794     long __builtin_alpha_extwh (long, long)
20795     long __builtin_alpha_extlh (long, long)
20796     long __builtin_alpha_extqh (long, long)
20797     long __builtin_alpha_insbl (long, long)
20798     long __builtin_alpha_inswl (long, long)
20799     long __builtin_alpha_insll (long, long)
20800     long __builtin_alpha_insql (long, long)
20801     long __builtin_alpha_inswh (long, long)
20802     long __builtin_alpha_inslh (long, long)
20803     long __builtin_alpha_insqh (long, long)
20804     long __builtin_alpha_mskbl (long, long)
20805     long __builtin_alpha_mskwl (long, long)
20806     long __builtin_alpha_mskll (long, long)
20807     long __builtin_alpha_mskql (long, long)
20808     long __builtin_alpha_mskwh (long, long)
20809     long __builtin_alpha_msklh (long, long)
20810     long __builtin_alpha_mskqh (long, long)
20811     long __builtin_alpha_umulh (long, long)
20812     long __builtin_alpha_zap (long, long)
20813     long __builtin_alpha_zapnot (long, long)
20814
20815 The following built-in functions are always with `-mmax' or
20816`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
20817machine instruction that is part of the name.
20818
20819     long __builtin_alpha_pklb (long)
20820     long __builtin_alpha_pkwb (long)
20821     long __builtin_alpha_unpkbl (long)
20822     long __builtin_alpha_unpkbw (long)
20823     long __builtin_alpha_minub8 (long, long)
20824     long __builtin_alpha_minsb8 (long, long)
20825     long __builtin_alpha_minuw4 (long, long)
20826     long __builtin_alpha_minsw4 (long, long)
20827     long __builtin_alpha_maxub8 (long, long)
20828     long __builtin_alpha_maxsb8 (long, long)
20829     long __builtin_alpha_maxuw4 (long, long)
20830     long __builtin_alpha_maxsw4 (long, long)
20831     long __builtin_alpha_perr (long, long)
20832
20833 The following built-in functions are always with `-mcix' or
20834`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
20835machine instruction that is part of the name.
20836
20837     long __builtin_alpha_cttz (long)
20838     long __builtin_alpha_ctlz (long)
20839     long __builtin_alpha_ctpop (long)
20840
20841 The following builtins are available on systems that use the OSF/1
20842PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
20843when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
20844
20845     void *__builtin_thread_pointer (void)
20846     void __builtin_set_thread_pointer (void *)
20847
20848
20849File: gcc.info,  Node: ARM Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
20850
208515.48.2 ARM Built-in Functions
20852-----------------------------
20853
20854These built-in functions are available for the ARM family of
20855processors, when the `-mcpu=iwmmxt' switch is used:
20856
20857     typedef int v2si __attribute__ ((vector_size (8)));
20858     typedef short v4hi __attribute__ ((vector_size (8)));
20859     typedef char v8qi __attribute__ ((vector_size (8)));
20860
20861     int __builtin_arm_getwcx (int)
20862     void __builtin_arm_setwcx (int, int)
20863     int __builtin_arm_textrmsb (v8qi, int)
20864     int __builtin_arm_textrmsh (v4hi, int)
20865     int __builtin_arm_textrmsw (v2si, int)
20866     int __builtin_arm_textrmub (v8qi, int)
20867     int __builtin_arm_textrmuh (v4hi, int)
20868     int __builtin_arm_textrmuw (v2si, int)
20869     v8qi __builtin_arm_tinsrb (v8qi, int)
20870     v4hi __builtin_arm_tinsrh (v4hi, int)
20871     v2si __builtin_arm_tinsrw (v2si, int)
20872     long long __builtin_arm_tmia (long long, int, int)
20873     long long __builtin_arm_tmiabb (long long, int, int)
20874     long long __builtin_arm_tmiabt (long long, int, int)
20875     long long __builtin_arm_tmiaph (long long, int, int)
20876     long long __builtin_arm_tmiatb (long long, int, int)
20877     long long __builtin_arm_tmiatt (long long, int, int)
20878     int __builtin_arm_tmovmskb (v8qi)
20879     int __builtin_arm_tmovmskh (v4hi)
20880     int __builtin_arm_tmovmskw (v2si)
20881     long long __builtin_arm_waccb (v8qi)
20882     long long __builtin_arm_wacch (v4hi)
20883     long long __builtin_arm_waccw (v2si)
20884     v8qi __builtin_arm_waddb (v8qi, v8qi)
20885     v8qi __builtin_arm_waddbss (v8qi, v8qi)
20886     v8qi __builtin_arm_waddbus (v8qi, v8qi)
20887     v4hi __builtin_arm_waddh (v4hi, v4hi)
20888     v4hi __builtin_arm_waddhss (v4hi, v4hi)
20889     v4hi __builtin_arm_waddhus (v4hi, v4hi)
20890     v2si __builtin_arm_waddw (v2si, v2si)
20891     v2si __builtin_arm_waddwss (v2si, v2si)
20892     v2si __builtin_arm_waddwus (v2si, v2si)
20893     v8qi __builtin_arm_walign (v8qi, v8qi, int)
20894     long long __builtin_arm_wand(long long, long long)
20895     long long __builtin_arm_wandn (long long, long long)
20896     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
20897     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
20898     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
20899     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
20900     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
20901     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
20902     v2si __builtin_arm_wcmpeqw (v2si, v2si)
20903     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
20904     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
20905     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
20906     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
20907     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
20908     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
20909     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
20910     long long __builtin_arm_wmacsz (v4hi, v4hi)
20911     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
20912     long long __builtin_arm_wmacuz (v4hi, v4hi)
20913     v4hi __builtin_arm_wmadds (v4hi, v4hi)
20914     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
20915     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
20916     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
20917     v2si __builtin_arm_wmaxsw (v2si, v2si)
20918     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
20919     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
20920     v2si __builtin_arm_wmaxuw (v2si, v2si)
20921     v8qi __builtin_arm_wminsb (v8qi, v8qi)
20922     v4hi __builtin_arm_wminsh (v4hi, v4hi)
20923     v2si __builtin_arm_wminsw (v2si, v2si)
20924     v8qi __builtin_arm_wminub (v8qi, v8qi)
20925     v4hi __builtin_arm_wminuh (v4hi, v4hi)
20926     v2si __builtin_arm_wminuw (v2si, v2si)
20927     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
20928     v4hi __builtin_arm_wmulul (v4hi, v4hi)
20929     v4hi __builtin_arm_wmulum (v4hi, v4hi)
20930     long long __builtin_arm_wor (long long, long long)
20931     v2si __builtin_arm_wpackdss (long long, long long)
20932     v2si __builtin_arm_wpackdus (long long, long long)
20933     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
20934     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
20935     v4hi __builtin_arm_wpackwss (v2si, v2si)
20936     v4hi __builtin_arm_wpackwus (v2si, v2si)
20937     long long __builtin_arm_wrord (long long, long long)
20938     long long __builtin_arm_wrordi (long long, int)
20939     v4hi __builtin_arm_wrorh (v4hi, long long)
20940     v4hi __builtin_arm_wrorhi (v4hi, int)
20941     v2si __builtin_arm_wrorw (v2si, long long)
20942     v2si __builtin_arm_wrorwi (v2si, int)
20943     v2si __builtin_arm_wsadb (v8qi, v8qi)
20944     v2si __builtin_arm_wsadbz (v8qi, v8qi)
20945     v2si __builtin_arm_wsadh (v4hi, v4hi)
20946     v2si __builtin_arm_wsadhz (v4hi, v4hi)
20947     v4hi __builtin_arm_wshufh (v4hi, int)
20948     long long __builtin_arm_wslld (long long, long long)
20949     long long __builtin_arm_wslldi (long long, int)
20950     v4hi __builtin_arm_wsllh (v4hi, long long)
20951     v4hi __builtin_arm_wsllhi (v4hi, int)
20952     v2si __builtin_arm_wsllw (v2si, long long)
20953     v2si __builtin_arm_wsllwi (v2si, int)
20954     long long __builtin_arm_wsrad (long long, long long)
20955     long long __builtin_arm_wsradi (long long, int)
20956     v4hi __builtin_arm_wsrah (v4hi, long long)
20957     v4hi __builtin_arm_wsrahi (v4hi, int)
20958     v2si __builtin_arm_wsraw (v2si, long long)
20959     v2si __builtin_arm_wsrawi (v2si, int)
20960     long long __builtin_arm_wsrld (long long, long long)
20961     long long __builtin_arm_wsrldi (long long, int)
20962     v4hi __builtin_arm_wsrlh (v4hi, long long)
20963     v4hi __builtin_arm_wsrlhi (v4hi, int)
20964     v2si __builtin_arm_wsrlw (v2si, long long)
20965     v2si __builtin_arm_wsrlwi (v2si, int)
20966     v8qi __builtin_arm_wsubb (v8qi, v8qi)
20967     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
20968     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
20969     v4hi __builtin_arm_wsubh (v4hi, v4hi)
20970     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
20971     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
20972     v2si __builtin_arm_wsubw (v2si, v2si)
20973     v2si __builtin_arm_wsubwss (v2si, v2si)
20974     v2si __builtin_arm_wsubwus (v2si, v2si)
20975     v4hi __builtin_arm_wunpckehsb (v8qi)
20976     v2si __builtin_arm_wunpckehsh (v4hi)
20977     long long __builtin_arm_wunpckehsw (v2si)
20978     v4hi __builtin_arm_wunpckehub (v8qi)
20979     v2si __builtin_arm_wunpckehuh (v4hi)
20980     long long __builtin_arm_wunpckehuw (v2si)
20981     v4hi __builtin_arm_wunpckelsb (v8qi)
20982     v2si __builtin_arm_wunpckelsh (v4hi)
20983     long long __builtin_arm_wunpckelsw (v2si)
20984     v4hi __builtin_arm_wunpckelub (v8qi)
20985     v2si __builtin_arm_wunpckeluh (v4hi)
20986     long long __builtin_arm_wunpckeluw (v2si)
20987     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
20988     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
20989     v2si __builtin_arm_wunpckihw (v2si, v2si)
20990     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
20991     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
20992     v2si __builtin_arm_wunpckilw (v2si, v2si)
20993     long long __builtin_arm_wxor (long long, long long)
20994     long long __builtin_arm_wzero ()
20995
20996
20997File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM Built-in Functions,  Up: Target Builtins
20998
209995.48.3 Blackfin Built-in Functions
21000----------------------------------
21001
21002Currently, there are two Blackfin-specific built-in functions.  These
21003are used for generating `CSYNC' and `SSYNC' machine insns without using
21004inline assembly; by using these built-in functions the compiler can
21005automatically add workarounds for hardware errata involving these
21006instructions.  These functions are named as follows:
21007
21008     void __builtin_bfin_csync (void)
21009     void __builtin_bfin_ssync (void)
21010
21011
21012File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
21013
210145.48.4 FR-V Built-in Functions
21015------------------------------
21016
21017GCC provides many FR-V-specific built-in functions.  In general, these
21018functions are intended to be compatible with those described by `FR-V
21019Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
21020The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
21021which pass 128-bit values by pointer rather than by value.
21022
21023 Most of the functions are named after specific FR-V instructions.
21024Such functions are said to be "directly mapped" and are summarized here
21025in tabular form.
21026
21027* Menu:
21028
21029* Argument Types::
21030* Directly-mapped Integer Functions::
21031* Directly-mapped Media Functions::
21032* Raw read/write Functions::
21033* Other Built-in Functions::
21034
21035
21036File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
21037
210385.48.4.1 Argument Types
21039.......................
21040
21041The arguments to the built-in functions can be divided into three
21042groups: register numbers, compile-time constants and run-time values.
21043In order to make this classification clear at a glance, the arguments
21044and return values are given the following pseudo types:
21045
21046Pseudo type    Real C type            Constant?   Description
21047`uh'           `unsigned short'       No          an unsigned halfword
21048`uw1'          `unsigned int'         No          an unsigned word
21049`sw1'          `int'                  No          a signed word
21050`uw2'          `unsigned long long'   No          an unsigned doubleword
21051`sw2'          `long long'            No          a signed doubleword
21052`const'        `int'                  Yes         an integer constant
21053`acc'          `int'                  Yes         an ACC register number
21054`iacc'         `int'                  Yes         an IACC register number
21055
21056 These pseudo types are not defined by GCC, they are simply a notational
21057convenience used in this manual.
21058
21059 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
21060run time.  They correspond to register operands in the underlying FR-V
21061instructions.
21062
21063 `const' arguments represent immediate operands in the underlying FR-V
21064instructions.  They must be compile-time constants.
21065
21066 `acc' arguments are evaluated at compile time and specify the number
21067of an accumulator register.  For example, an `acc' argument of 2 will
21068select the ACC2 register.
21069
21070 `iacc' arguments are similar to `acc' arguments but specify the number
21071of an IACC register.  See *note Other Built-in Functions:: for more
21072details.
21073
21074
21075File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
21076
210775.48.4.2 Directly-mapped Integer Functions
21078..........................................
21079
21080The functions listed below map directly to FR-V I-type instructions.
21081
21082Function prototype               Example usage           Assembly output
21083`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
21084`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
21085`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
21086`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
21087`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
21088`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
21089`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
21090`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
21091`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
21092`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
21093
21094
21095File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
21096
210975.48.4.3 Directly-mapped Media Functions
21098........................................
21099
21100The functions listed below map directly to FR-V M-type instructions.
21101
21102Function prototype               Example usage           Assembly output
21103`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
21104`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
21105`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
21106`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
21107`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
21108`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
21109`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
21110`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
21111`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
21112`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
21113`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
21114`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
21115`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
21116`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
21117`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
21118`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
21119`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
21120`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
21121`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
21122`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
21123`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
21124`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
21125`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
21126`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
21127`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
21128`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
21129`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
21130`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
21131`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
21132`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
21133`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
21134`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
21135`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
21136`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
21137`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
21138`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
21139`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
21140`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
21141`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
21142`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
21143`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
21144`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
21145`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
21146`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
21147`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
21148`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
21149`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
21150`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
21151`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
21152`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
21153`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
21154`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
21155`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
21156`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
21157`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
21158`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
21159`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
21160`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
21161`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
21162sw2)'
21163`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
21164`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
21165`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
21166sw2)'
21167`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
21168uw2)'
21169`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
21170`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
21171`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
21172`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
21173`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
21174`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
21175sw2)'
21176`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
21177sw2)'
21178`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
21179`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
21180`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
21181`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
21182`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
21183`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
21184`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
21185`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
21186`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
21187`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
21188`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
21189`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
21190`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
21191`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
21192`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
21193`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
21194`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
21195`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
21196
21197
21198File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
21199
212005.48.4.4 Raw read/write Functions
21201.................................
21202
21203This sections describes built-in functions related to read and write
21204instructions to access memory.  These functions generate `membar'
21205instructions to flush the I/O load and stores where appropriate, as
21206described in Fujitsu's manual described above.
21207
21208`unsigned char __builtin_read8 (void *DATA)'
21209
21210`unsigned short __builtin_read16 (void *DATA)'
21211
21212`unsigned long __builtin_read32 (void *DATA)'
21213
21214`unsigned long long __builtin_read64 (void *DATA)'
21215
21216`void __builtin_write8 (void *DATA, unsigned char DATUM)'
21217
21218`void __builtin_write16 (void *DATA, unsigned short DATUM)'
21219
21220`void __builtin_write32 (void *DATA, unsigned long DATUM)'
21221
21222`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
21223
21224
21225File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
21226
212275.48.4.5 Other Built-in Functions
21228.................................
21229
21230This section describes built-in functions that are not named after a
21231specific FR-V instruction.
21232
21233`sw2 __IACCreadll (iacc REG)'
21234     Return the full 64-bit value of IACC0.  The REG argument is
21235     reserved for future expansion and must be 0.
21236
21237`sw1 __IACCreadl (iacc REG)'
21238     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
21239     Other values of REG are rejected as invalid.
21240
21241`void __IACCsetll (iacc REG, sw2 X)'
21242     Set the full 64-bit value of IACC0 to X.  The REG argument is
21243     reserved for future expansion and must be 0.
21244
21245`void __IACCsetl (iacc REG, sw1 X)'
21246     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
21247     values of REG are rejected as invalid.
21248
21249`void __data_prefetch0 (const void *X)'
21250     Use the `dcpl' instruction to load the contents of address X into
21251     the data cache.
21252
21253`void __data_prefetch (const void *X)'
21254     Use the `nldub' instruction to load the contents of address X into
21255     the data cache.  The instruction will be issued in slot I1.
21256
21257
21258File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
21259
212605.48.5 X86 Built-in Functions
21261-----------------------------
21262
21263These built-in functions are available for the i386 and x86-64 family
21264of computers, depending on the command-line switches used.
21265
21266 Note that, if you specify command-line switches such as `-msse', the
21267compiler could use the extended instruction sets even if the built-ins
21268are not used explicitly in the program.  For this reason, applications
21269which perform runtime CPU detection must compile separate files for each
21270supported architecture, using the appropriate flags.  In particular,
21271the file containing the CPU detection code should be compiled without
21272these options.
21273
21274 The following machine modes are available for use with MMX built-in
21275functions (*note Vector Extensions::): `V2SI' for a vector of two
2127632-bit integers, `V4HI' for a vector of four 16-bit integers, and
21277`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
21278functions operate on MMX registers as a whole 64-bit entity, these use
21279`DI' as their mode.
21280
21281 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
21282of two 32-bit floating point values.
21283
21284 If SSE extensions are enabled, `V4SF' is used for a vector of four
2128532-bit floating point values.  Some instructions use a vector of four
2128632-bit integers, these use `V4SI'.  Finally, some instructions operate
21287on an entire vector register, interpreting it as a 128-bit integer,
21288these use mode `TI'.
21289
21290 The following built-in functions are made available by `-mmmx'.  All
21291of them generate the machine instruction that is part of the name.
21292
21293     v8qi __builtin_ia32_paddb (v8qi, v8qi)
21294     v4hi __builtin_ia32_paddw (v4hi, v4hi)
21295     v2si __builtin_ia32_paddd (v2si, v2si)
21296     v8qi __builtin_ia32_psubb (v8qi, v8qi)
21297     v4hi __builtin_ia32_psubw (v4hi, v4hi)
21298     v2si __builtin_ia32_psubd (v2si, v2si)
21299     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
21300     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
21301     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
21302     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
21303     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
21304     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
21305     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
21306     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
21307     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
21308     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
21309     di __builtin_ia32_pand (di, di)
21310     di __builtin_ia32_pandn (di,di)
21311     di __builtin_ia32_por (di, di)
21312     di __builtin_ia32_pxor (di, di)
21313     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
21314     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
21315     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
21316     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
21317     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
21318     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
21319     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
21320     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
21321     v2si __builtin_ia32_punpckhdq (v2si, v2si)
21322     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
21323     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
21324     v2si __builtin_ia32_punpckldq (v2si, v2si)
21325     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
21326     v4hi __builtin_ia32_packssdw (v2si, v2si)
21327     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
21328
21329 The following built-in functions are made available either with
21330`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
21331of them generate the machine instruction that is part of the name.
21332
21333     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
21334     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
21335     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
21336     v4hi __builtin_ia32_psadbw (v8qi, v8qi)
21337     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
21338     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
21339     v8qi __builtin_ia32_pminub (v8qi, v8qi)
21340     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
21341     int __builtin_ia32_pextrw (v4hi, int)
21342     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
21343     int __builtin_ia32_pmovmskb (v8qi)
21344     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
21345     void __builtin_ia32_movntq (di *, di)
21346     void __builtin_ia32_sfence (void)
21347
21348 The following built-in functions are available when `-msse' is used.
21349All of them generate the machine instruction that is part of the name.
21350
21351     int __builtin_ia32_comieq (v4sf, v4sf)
21352     int __builtin_ia32_comineq (v4sf, v4sf)
21353     int __builtin_ia32_comilt (v4sf, v4sf)
21354     int __builtin_ia32_comile (v4sf, v4sf)
21355     int __builtin_ia32_comigt (v4sf, v4sf)
21356     int __builtin_ia32_comige (v4sf, v4sf)
21357     int __builtin_ia32_ucomieq (v4sf, v4sf)
21358     int __builtin_ia32_ucomineq (v4sf, v4sf)
21359     int __builtin_ia32_ucomilt (v4sf, v4sf)
21360     int __builtin_ia32_ucomile (v4sf, v4sf)
21361     int __builtin_ia32_ucomigt (v4sf, v4sf)
21362     int __builtin_ia32_ucomige (v4sf, v4sf)
21363     v4sf __builtin_ia32_addps (v4sf, v4sf)
21364     v4sf __builtin_ia32_subps (v4sf, v4sf)
21365     v4sf __builtin_ia32_mulps (v4sf, v4sf)
21366     v4sf __builtin_ia32_divps (v4sf, v4sf)
21367     v4sf __builtin_ia32_addss (v4sf, v4sf)
21368     v4sf __builtin_ia32_subss (v4sf, v4sf)
21369     v4sf __builtin_ia32_mulss (v4sf, v4sf)
21370     v4sf __builtin_ia32_divss (v4sf, v4sf)
21371     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
21372     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
21373     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
21374     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
21375     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
21376     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
21377     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
21378     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
21379     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
21380     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
21381     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
21382     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
21383     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
21384     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
21385     v4si __builtin_ia32_cmpless (v4sf, v4sf)
21386     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
21387     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
21388     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
21389     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
21390     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
21391     v4sf __builtin_ia32_maxps (v4sf, v4sf)
21392     v4sf __builtin_ia32_maxss (v4sf, v4sf)
21393     v4sf __builtin_ia32_minps (v4sf, v4sf)
21394     v4sf __builtin_ia32_minss (v4sf, v4sf)
21395     v4sf __builtin_ia32_andps (v4sf, v4sf)
21396     v4sf __builtin_ia32_andnps (v4sf, v4sf)
21397     v4sf __builtin_ia32_orps (v4sf, v4sf)
21398     v4sf __builtin_ia32_xorps (v4sf, v4sf)
21399     v4sf __builtin_ia32_movss (v4sf, v4sf)
21400     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
21401     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
21402     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
21403     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
21404     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
21405     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
21406     v2si __builtin_ia32_cvtps2pi (v4sf)
21407     int __builtin_ia32_cvtss2si (v4sf)
21408     v2si __builtin_ia32_cvttps2pi (v4sf)
21409     int __builtin_ia32_cvttss2si (v4sf)
21410     v4sf __builtin_ia32_rcpps (v4sf)
21411     v4sf __builtin_ia32_rsqrtps (v4sf)
21412     v4sf __builtin_ia32_sqrtps (v4sf)
21413     v4sf __builtin_ia32_rcpss (v4sf)
21414     v4sf __builtin_ia32_rsqrtss (v4sf)
21415     v4sf __builtin_ia32_sqrtss (v4sf)
21416     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
21417     void __builtin_ia32_movntps (float *, v4sf)
21418     int __builtin_ia32_movmskps (v4sf)
21419
21420 The following built-in functions are available when `-msse' is used.
21421
21422`v4sf __builtin_ia32_loadaps (float *)'
21423     Generates the `movaps' machine instruction as a load from memory.
21424
21425`void __builtin_ia32_storeaps (float *, v4sf)'
21426     Generates the `movaps' machine instruction as a store to memory.
21427
21428`v4sf __builtin_ia32_loadups (float *)'
21429     Generates the `movups' machine instruction as a load from memory.
21430
21431`void __builtin_ia32_storeups (float *, v4sf)'
21432     Generates the `movups' machine instruction as a store to memory.
21433
21434`v4sf __builtin_ia32_loadsss (float *)'
21435     Generates the `movss' machine instruction as a load from memory.
21436
21437`void __builtin_ia32_storess (float *, v4sf)'
21438     Generates the `movss' machine instruction as a store to memory.
21439
21440`v4sf __builtin_ia32_loadhps (v4sf, v2si *)'
21441     Generates the `movhps' machine instruction as a load from memory.
21442
21443`v4sf __builtin_ia32_loadlps (v4sf, v2si *)'
21444     Generates the `movlps' machine instruction as a load from memory
21445
21446`void __builtin_ia32_storehps (v4sf, v2si *)'
21447     Generates the `movhps' machine instruction as a store to memory.
21448
21449`void __builtin_ia32_storelps (v4sf, v2si *)'
21450     Generates the `movlps' machine instruction as a store to memory.
21451
21452 The following built-in functions are available when `-msse2' is used.
21453All of them generate the machine instruction that is part of the name.
21454
21455     int __builtin_ia32_comisdeq (v2df, v2df)
21456     int __builtin_ia32_comisdlt (v2df, v2df)
21457     int __builtin_ia32_comisdle (v2df, v2df)
21458     int __builtin_ia32_comisdgt (v2df, v2df)
21459     int __builtin_ia32_comisdge (v2df, v2df)
21460     int __builtin_ia32_comisdneq (v2df, v2df)
21461     int __builtin_ia32_ucomisdeq (v2df, v2df)
21462     int __builtin_ia32_ucomisdlt (v2df, v2df)
21463     int __builtin_ia32_ucomisdle (v2df, v2df)
21464     int __builtin_ia32_ucomisdgt (v2df, v2df)
21465     int __builtin_ia32_ucomisdge (v2df, v2df)
21466     int __builtin_ia32_ucomisdneq (v2df, v2df)
21467     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
21468     v2df __builtin_ia32_cmpltpd (v2df, v2df)
21469     v2df __builtin_ia32_cmplepd (v2df, v2df)
21470     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
21471     v2df __builtin_ia32_cmpgepd (v2df, v2df)
21472     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
21473     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
21474     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
21475     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
21476     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
21477     v2df __builtin_ia32_cmpngepd (v2df, v2df)
21478     v2df __builtin_ia32_cmpordpd (v2df, v2df)
21479     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
21480     v2df __builtin_ia32_cmpltsd (v2df, v2df)
21481     v2df __builtin_ia32_cmplesd (v2df, v2df)
21482     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
21483     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
21484     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
21485     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
21486     v2df __builtin_ia32_cmpordsd (v2df, v2df)
21487     v2di __builtin_ia32_paddq (v2di, v2di)
21488     v2di __builtin_ia32_psubq (v2di, v2di)
21489     v2df __builtin_ia32_addpd (v2df, v2df)
21490     v2df __builtin_ia32_subpd (v2df, v2df)
21491     v2df __builtin_ia32_mulpd (v2df, v2df)
21492     v2df __builtin_ia32_divpd (v2df, v2df)
21493     v2df __builtin_ia32_addsd (v2df, v2df)
21494     v2df __builtin_ia32_subsd (v2df, v2df)
21495     v2df __builtin_ia32_mulsd (v2df, v2df)
21496     v2df __builtin_ia32_divsd (v2df, v2df)
21497     v2df __builtin_ia32_minpd (v2df, v2df)
21498     v2df __builtin_ia32_maxpd (v2df, v2df)
21499     v2df __builtin_ia32_minsd (v2df, v2df)
21500     v2df __builtin_ia32_maxsd (v2df, v2df)
21501     v2df __builtin_ia32_andpd (v2df, v2df)
21502     v2df __builtin_ia32_andnpd (v2df, v2df)
21503     v2df __builtin_ia32_orpd (v2df, v2df)
21504     v2df __builtin_ia32_xorpd (v2df, v2df)
21505     v2df __builtin_ia32_movsd (v2df, v2df)
21506     v2df __builtin_ia32_unpckhpd (v2df, v2df)
21507     v2df __builtin_ia32_unpcklpd (v2df, v2df)
21508     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
21509     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
21510     v4si __builtin_ia32_paddd128 (v4si, v4si)
21511     v2di __builtin_ia32_paddq128 (v2di, v2di)
21512     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
21513     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
21514     v4si __builtin_ia32_psubd128 (v4si, v4si)
21515     v2di __builtin_ia32_psubq128 (v2di, v2di)
21516     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
21517     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
21518     v2di __builtin_ia32_pand128 (v2di, v2di)
21519     v2di __builtin_ia32_pandn128 (v2di, v2di)
21520     v2di __builtin_ia32_por128 (v2di, v2di)
21521     v2di __builtin_ia32_pxor128 (v2di, v2di)
21522     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
21523     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
21524     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
21525     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
21526     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
21527     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
21528     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
21529     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
21530     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
21531     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
21532     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
21533     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
21534     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
21535     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
21536     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
21537     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
21538     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
21539     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
21540     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
21541     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
21542     v16qi __builtin_ia32_packsswb128 (v16qi, v16qi)
21543     v8hi __builtin_ia32_packssdw128 (v8hi, v8hi)
21544     v16qi __builtin_ia32_packuswb128 (v16qi, v16qi)
21545     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
21546     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
21547     v2df __builtin_ia32_loadupd (double *)
21548     void __builtin_ia32_storeupd (double *, v2df)
21549     v2df __builtin_ia32_loadhpd (v2df, double *)
21550     v2df __builtin_ia32_loadlpd (v2df, double *)
21551     int __builtin_ia32_movmskpd (v2df)
21552     int __builtin_ia32_pmovmskb128 (v16qi)
21553     void __builtin_ia32_movnti (int *, int)
21554     void __builtin_ia32_movntpd (double *, v2df)
21555     void __builtin_ia32_movntdq (v2df *, v2df)
21556     v4si __builtin_ia32_pshufd (v4si, int)
21557     v8hi __builtin_ia32_pshuflw (v8hi, int)
21558     v8hi __builtin_ia32_pshufhw (v8hi, int)
21559     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
21560     v2df __builtin_ia32_sqrtpd (v2df)
21561     v2df __builtin_ia32_sqrtsd (v2df)
21562     v2df __builtin_ia32_shufpd (v2df, v2df, int)
21563     v2df __builtin_ia32_cvtdq2pd (v4si)
21564     v4sf __builtin_ia32_cvtdq2ps (v4si)
21565     v4si __builtin_ia32_cvtpd2dq (v2df)
21566     v2si __builtin_ia32_cvtpd2pi (v2df)
21567     v4sf __builtin_ia32_cvtpd2ps (v2df)
21568     v4si __builtin_ia32_cvttpd2dq (v2df)
21569     v2si __builtin_ia32_cvttpd2pi (v2df)
21570     v2df __builtin_ia32_cvtpi2pd (v2si)
21571     int __builtin_ia32_cvtsd2si (v2df)
21572     int __builtin_ia32_cvttsd2si (v2df)
21573     long long __builtin_ia32_cvtsd2si64 (v2df)
21574     long long __builtin_ia32_cvttsd2si64 (v2df)
21575     v4si __builtin_ia32_cvtps2dq (v4sf)
21576     v2df __builtin_ia32_cvtps2pd (v4sf)
21577     v4si __builtin_ia32_cvttps2dq (v4sf)
21578     v2df __builtin_ia32_cvtsi2sd (v2df, int)
21579     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
21580     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
21581     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
21582     void __builtin_ia32_clflush (const void *)
21583     void __builtin_ia32_lfence (void)
21584     void __builtin_ia32_mfence (void)
21585     v16qi __builtin_ia32_loaddqu (const char *)
21586     void __builtin_ia32_storedqu (char *, v16qi)
21587     unsigned long long __builtin_ia32_pmuludq (v2si, v2si)
21588     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
21589     v8hi __builtin_ia32_psllw128 (v8hi, v2di)
21590     v4si __builtin_ia32_pslld128 (v4si, v2di)
21591     v2di __builtin_ia32_psllq128 (v4si, v2di)
21592     v8hi __builtin_ia32_psrlw128 (v8hi, v2di)
21593     v4si __builtin_ia32_psrld128 (v4si, v2di)
21594     v2di __builtin_ia32_psrlq128 (v2di, v2di)
21595     v8hi __builtin_ia32_psraw128 (v8hi, v2di)
21596     v4si __builtin_ia32_psrad128 (v4si, v2di)
21597     v2di __builtin_ia32_pslldqi128 (v2di, int)
21598     v8hi __builtin_ia32_psllwi128 (v8hi, int)
21599     v4si __builtin_ia32_pslldi128 (v4si, int)
21600     v2di __builtin_ia32_psllqi128 (v2di, int)
21601     v2di __builtin_ia32_psrldqi128 (v2di, int)
21602     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
21603     v4si __builtin_ia32_psrldi128 (v4si, int)
21604     v2di __builtin_ia32_psrlqi128 (v2di, int)
21605     v8hi __builtin_ia32_psrawi128 (v8hi, int)
21606     v4si __builtin_ia32_psradi128 (v4si, int)
21607     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
21608
21609 The following built-in functions are available when `-msse3' is used.
21610All of them generate the machine instruction that is part of the name.
21611
21612     v2df __builtin_ia32_addsubpd (v2df, v2df)
21613     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
21614     v2df __builtin_ia32_haddpd (v2df, v2df)
21615     v4sf __builtin_ia32_haddps (v4sf, v4sf)
21616     v2df __builtin_ia32_hsubpd (v2df, v2df)
21617     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
21618     v16qi __builtin_ia32_lddqu (char const *)
21619     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
21620     v2df __builtin_ia32_movddup (v2df)
21621     v4sf __builtin_ia32_movshdup (v4sf)
21622     v4sf __builtin_ia32_movsldup (v4sf)
21623     void __builtin_ia32_mwait (unsigned int, unsigned int)
21624
21625 The following built-in functions are available when `-msse3' is used.
21626
21627`v2df __builtin_ia32_loadddup (double const *)'
21628     Generates the `movddup' machine instruction as a load from memory.
21629
21630 The following built-in functions are available when `-m3dnow' is used.
21631All of them generate the machine instruction that is part of the name.
21632
21633     void __builtin_ia32_femms (void)
21634     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
21635     v2si __builtin_ia32_pf2id (v2sf)
21636     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
21637     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
21638     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
21639     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
21640     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
21641     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
21642     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
21643     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
21644     v2sf __builtin_ia32_pfrcp (v2sf)
21645     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
21646     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
21647     v2sf __builtin_ia32_pfrsqrt (v2sf)
21648     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
21649     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
21650     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
21651     v2sf __builtin_ia32_pi2fd (v2si)
21652     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
21653
21654 The following built-in functions are available when both `-m3dnow' and
21655`-march=athlon' are used.  All of them generate the machine instruction
21656that is part of the name.
21657
21658     v2si __builtin_ia32_pf2iw (v2sf)
21659     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
21660     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
21661     v2sf __builtin_ia32_pi2fw (v2si)
21662     v2sf __builtin_ia32_pswapdsf (v2sf)
21663     v2si __builtin_ia32_pswapdsi (v2si)
21664
21665
21666File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
21667
216685.48.6 MIPS DSP Built-in Functions
21669----------------------------------
21670
21671The MIPS DSP Application-Specific Extension (ASE) includes new
21672instructions that are designed to improve the performance of DSP and
21673media applications.  It provides instructions that operate on packed
216748-bit integer data, Q15 fractional data and Q31 fractional data.
21675
21676 GCC supports MIPS DSP operations using both the generic vector
21677extensions (*note Vector Extensions::) and a collection of
21678MIPS-specific built-in functions.  Both kinds of support are enabled by
21679the `-mdsp' command-line option.
21680
21681 At present, GCC only provides support for operations on 32-bit
21682vectors.  The vector type associated with 8-bit integer data is usually
21683called `v4i8' and the vector type associated with Q15 is usually called
21684`v2q15'.  They can be defined in C as follows:
21685
21686     typedef char v4i8 __attribute__ ((vector_size(4)));
21687     typedef short v2q15 __attribute__ ((vector_size(4)));
21688
21689 `v4i8' and `v2q15' values are initialized in the same way as
21690aggregates.  For example:
21691
21692     v4i8 a = {1, 2, 3, 4};
21693     v4i8 b;
21694     b = (v4i8) {5, 6, 7, 8};
21695
21696     v2q15 c = {0x0fcb, 0x3a75};
21697     v2q15 d;
21698     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
21699
21700 _Note:_ The CPU's endianness determines the order in which values are
21701packed.  On little-endian targets, the first value is the least
21702significant and the last value is the most significant.  The opposite
21703order applies to big-endian targets.  For example, the code above will
21704set the lowest byte of `a' to `1' on little-endian targets and `4' on
21705big-endian targets.
21706
21707 _Note:_ Q15 and Q31 values must be initialized with their integer
21708representation.  As shown in this example, the integer representation
21709of a Q15 value can be obtained by multiplying the fractional value by
21710`0x1.0p15'.  The equivalent for Q31 values is to multiply by `0x1.0p31'.
21711
21712 The table below lists the `v4i8' and `v2q15' operations for which
21713hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
21714`d' are `v2q15' values.
21715
21716C code                               MIPS instruction
21717`a + b'                              `addu.qb'
21718`c + d'                              `addq.ph'
21719`a - b'                              `subu.qb'
21720`c - d'                              `subq.ph'
21721
21722 It is easier to describe the DSP built-in functions if we first define
21723the following types:
21724
21725     typedef int q31;
21726     typedef int i32;
21727     typedef long long a64;
21728
21729 `q31' and `i32' are actually the same as `int', but we use `q31' to
21730indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
21731value.  Similarly, `a64' is the same as `long long', but we use `a64'
21732to indicate values that will be placed in one of the four DSP
21733accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
21734
21735 Also, some built-in functions prefer or require immediate numbers as
21736parameters, because the corresponding DSP instructions accept both
21737immediate numbers and register operands, or accept immediate numbers
21738only.  The immediate parameters are listed as follows.
21739
21740     imm0_7: 0 to 7.
21741     imm0_15: 0 to 15.
21742     imm0_31: 0 to 31.
21743     imm0_63: 0 to 63.
21744     imm0_255: 0 to 255.
21745     imm_n32_31: -32 to 31.
21746     imm_n512_511: -512 to 511.
21747
21748 The following built-in functions map directly to a particular MIPS DSP
21749instruction.  Please refer to the architecture specification for
21750details on what each instruction does.
21751
21752     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
21753     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
21754     q31 __builtin_mips_addq_s_w (q31, q31)
21755     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
21756     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
21757     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
21758     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
21759     q31 __builtin_mips_subq_s_w (q31, q31)
21760     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
21761     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
21762     i32 __builtin_mips_addsc (i32, i32)
21763     i32 __builtin_mips_addwc (i32, i32)
21764     i32 __builtin_mips_modsub (i32, i32)
21765     i32 __builtin_mips_raddu_w_qb (v4i8)
21766     v2q15 __builtin_mips_absq_s_ph (v2q15)
21767     q31 __builtin_mips_absq_s_w (q31)
21768     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
21769     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
21770     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
21771     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
21772     q31 __builtin_mips_preceq_w_phl (v2q15)
21773     q31 __builtin_mips_preceq_w_phr (v2q15)
21774     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
21775     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
21776     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
21777     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
21778     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
21779     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
21780     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
21781     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
21782     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
21783     v4i8 __builtin_mips_shll_qb (v4i8, i32)
21784     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
21785     v2q15 __builtin_mips_shll_ph (v2q15, i32)
21786     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
21787     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
21788     q31 __builtin_mips_shll_s_w (q31, imm0_31)
21789     q31 __builtin_mips_shll_s_w (q31, i32)
21790     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
21791     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
21792     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
21793     v2q15 __builtin_mips_shra_ph (v2q15, i32)
21794     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
21795     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
21796     q31 __builtin_mips_shra_r_w (q31, imm0_31)
21797     q31 __builtin_mips_shra_r_w (q31, i32)
21798     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
21799     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
21800     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
21801     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
21802     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
21803     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
21804     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
21805     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
21806     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
21807     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
21808     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
21809     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
21810     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
21811     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
21812     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
21813     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
21814     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
21815     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
21816     i32 __builtin_mips_bitrev (i32)
21817     i32 __builtin_mips_insv (i32, i32)
21818     v4i8 __builtin_mips_repl_qb (imm0_255)
21819     v4i8 __builtin_mips_repl_qb (i32)
21820     v2q15 __builtin_mips_repl_ph (imm_n512_511)
21821     v2q15 __builtin_mips_repl_ph (i32)
21822     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
21823     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
21824     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
21825     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
21826     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
21827     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
21828     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
21829     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
21830     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
21831     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
21832     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
21833     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
21834     i32 __builtin_mips_extr_w (a64, imm0_31)
21835     i32 __builtin_mips_extr_w (a64, i32)
21836     i32 __builtin_mips_extr_r_w (a64, imm0_31)
21837     i32 __builtin_mips_extr_s_h (a64, i32)
21838     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
21839     i32 __builtin_mips_extr_rs_w (a64, i32)
21840     i32 __builtin_mips_extr_s_h (a64, imm0_31)
21841     i32 __builtin_mips_extr_r_w (a64, i32)
21842     i32 __builtin_mips_extp (a64, imm0_31)
21843     i32 __builtin_mips_extp (a64, i32)
21844     i32 __builtin_mips_extpdp (a64, imm0_31)
21845     i32 __builtin_mips_extpdp (a64, i32)
21846     a64 __builtin_mips_shilo (a64, imm_n32_31)
21847     a64 __builtin_mips_shilo (a64, i32)
21848     a64 __builtin_mips_mthlip (a64, i32)
21849     void __builtin_mips_wrdsp (i32, imm0_63)
21850     i32 __builtin_mips_rddsp (imm0_63)
21851     i32 __builtin_mips_lbux (void *, i32)
21852     i32 __builtin_mips_lhx (void *, i32)
21853     i32 __builtin_mips_lwx (void *, i32)
21854     i32 __builtin_mips_bposge32 (void)
21855
21856
21857File: gcc.info,  Node: MIPS Paired-Single Support,  Next: PowerPC AltiVec Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
21858
218595.48.7 MIPS Paired-Single Support
21860---------------------------------
21861
21862The MIPS64 architecture includes a number of instructions that operate
21863on pairs of single-precision floating-point values.  Each pair is
21864packed into a 64-bit floating-point register, with one element being
21865designated the "upper half" and the other being designated the "lower
21866half".
21867
21868 GCC supports paired-single operations using both the generic vector
21869extensions (*note Vector Extensions::) and a collection of
21870MIPS-specific built-in functions.  Both kinds of support are enabled by
21871the `-mpaired-single' command-line option.
21872
21873 The vector type associated with paired-single values is usually called
21874`v2sf'.  It can be defined in C as follows:
21875
21876     typedef float v2sf __attribute__ ((vector_size (8)));
21877
21878 `v2sf' values are initialized in the same way as aggregates.  For
21879example:
21880
21881     v2sf a = {1.5, 9.1};
21882     v2sf b;
21883     float e, f;
21884     b = (v2sf) {e, f};
21885
21886 _Note:_ The CPU's endianness determines which value is stored in the
21887upper half of a register and which value is stored in the lower half.
21888On little-endian targets, the first value is the lower one and the
21889second value is the upper one.  The opposite order applies to
21890big-endian targets.  For example, the code above will set the lower
21891half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
21892targets.
21893
21894* Menu:
21895
21896* Paired-Single Arithmetic::
21897* Paired-Single Built-in Functions::
21898* MIPS-3D Built-in Functions::
21899
21900
21901File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Paired-Single Support
21902
219035.48.7.1 Paired-Single Arithmetic
21904.................................
21905
21906The table below lists the `v2sf' operations for which hardware support
21907exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
21908value.
21909
21910C code                               MIPS instruction
21911`a + b'                              `add.ps'
21912`a - b'                              `sub.ps'
21913`-a'                                 `neg.ps'
21914`a * b'                              `mul.ps'
21915`a * b + c'                          `madd.ps'
21916`a * b - c'                          `msub.ps'
21917`-(a * b + c)'                       `nmadd.ps'
21918`-(a * b - c)'                       `nmsub.ps'
21919`x ? a : b'                          `movn.ps'/`movz.ps'
21920
21921 Note that the multiply-accumulate instructions can be disabled using
21922the command-line option `-mno-fused-madd'.
21923
21924
21925File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Paired-Single Support
21926
219275.48.7.2 Paired-Single Built-in Functions
21928.........................................
21929
21930The following paired-single functions map directly to a particular MIPS
21931instruction.  Please refer to the architecture specification for
21932details on what each instruction does.
21933
21934`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
21935     Pair lower lower (`pll.ps').
21936
21937`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
21938     Pair upper lower (`pul.ps').
21939
21940`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
21941     Pair lower upper (`plu.ps').
21942
21943`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
21944     Pair upper upper (`puu.ps').
21945
21946`v2sf __builtin_mips_cvt_ps_s (float, float)'
21947     Convert pair to paired single (`cvt.ps.s').
21948
21949`float __builtin_mips_cvt_s_pl (v2sf)'
21950     Convert pair lower to single (`cvt.s.pl').
21951
21952`float __builtin_mips_cvt_s_pu (v2sf)'
21953     Convert pair upper to single (`cvt.s.pu').
21954
21955`v2sf __builtin_mips_abs_ps (v2sf)'
21956     Absolute value (`abs.ps').
21957
21958`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
21959     Align variable (`alnv.ps').
21960
21961     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
21962     otherwise the result will be unpredictable.  Please read the
21963     instruction description for details.
21964
21965 The following multi-instruction functions are also available.  In each
21966case, COND can be any of the 16 floating-point conditions: `f', `un',
21967`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
21968`lt', `nge', `le' or `ngt'.
21969
21970`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
21971`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
21972     Conditional move based on floating point comparison (`c.COND.ps',
21973     `movt.ps'/`movf.ps').
21974
21975     The `movt' functions return the value X computed by:
21976
21977          c.COND.ps CC,A,B
21978          mov.ps X,C
21979          movt.ps X,D,CC
21980
21981     The `movf' functions are similar but use `movf.ps' instead of
21982     `movt.ps'.
21983
21984`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
21985`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
21986     Comparison of two paired-single values (`c.COND.ps',
21987     `bc1t'/`bc1f').
21988
21989     These functions compare A and B using `c.COND.ps' and return
21990     either the upper or lower half of the result.  For example:
21991
21992          v2sf a, b;
21993          if (__builtin_mips_upper_c_eq_ps (a, b))
21994            upper_halves_are_equal ();
21995          else
21996            upper_halves_are_unequal ();
21997
21998          if (__builtin_mips_lower_c_eq_ps (a, b))
21999            lower_halves_are_equal ();
22000          else
22001            lower_halves_are_unequal ();
22002
22003
22004File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Paired-Single Support
22005
220065.48.7.3 MIPS-3D Built-in Functions
22007...................................
22008
22009The MIPS-3D Application-Specific Extension (ASE) includes additional
22010paired-single instructions that are designed to improve the performance
22011of 3D graphics operations.  Support for these instructions is controlled
22012by the `-mips3d' command-line option.
22013
22014 The functions listed below map directly to a particular MIPS-3D
22015instruction.  Please refer to the architecture specification for more
22016details on what each instruction does.
22017
22018`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
22019     Reduction add (`addr.ps').
22020
22021`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
22022     Reduction multiply (`mulr.ps').
22023
22024`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
22025     Convert paired single to paired word (`cvt.pw.ps').
22026
22027`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
22028     Convert paired word to paired single (`cvt.ps.pw').
22029
22030`float __builtin_mips_recip1_s (float)'
22031`double __builtin_mips_recip1_d (double)'
22032`v2sf __builtin_mips_recip1_ps (v2sf)'
22033     Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
22034
22035`float __builtin_mips_recip2_s (float, float)'
22036`double __builtin_mips_recip2_d (double, double)'
22037`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
22038     Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
22039
22040`float __builtin_mips_rsqrt1_s (float)'
22041`double __builtin_mips_rsqrt1_d (double)'
22042`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
22043     Reduced precision reciprocal square root (sequence step 1)
22044     (`rsqrt1.FMT').
22045
22046`float __builtin_mips_rsqrt2_s (float, float)'
22047`double __builtin_mips_rsqrt2_d (double, double)'
22048`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
22049     Reduced precision reciprocal square root (sequence step 2)
22050     (`rsqrt2.FMT').
22051
22052 The following multi-instruction functions are also available.  In each
22053case, COND can be any of the 16 floating-point conditions: `f', `un',
22054`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
22055`lt', `nge', `le' or `ngt'.
22056
22057`int __builtin_mips_cabs_COND_s (float A, float B)'
22058`int __builtin_mips_cabs_COND_d (double A, double B)'
22059     Absolute comparison of two scalar values (`cabs.COND.FMT',
22060     `bc1t'/`bc1f').
22061
22062     These functions compare A and B using `cabs.COND.s' or
22063     `cabs.COND.d' and return the result as a boolean value.  For
22064     example:
22065
22066          float a, b;
22067          if (__builtin_mips_cabs_eq_s (a, b))
22068            true ();
22069          else
22070            false ();
22071
22072`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
22073`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
22074     Absolute comparison of two paired-single values (`cabs.COND.ps',
22075     `bc1t'/`bc1f').
22076
22077     These functions compare A and B using `cabs.COND.ps' and return
22078     either the upper or lower half of the result.  For example:
22079
22080          v2sf a, b;
22081          if (__builtin_mips_upper_cabs_eq_ps (a, b))
22082            upper_halves_are_equal ();
22083          else
22084            upper_halves_are_unequal ();
22085
22086          if (__builtin_mips_lower_cabs_eq_ps (a, b))
22087            lower_halves_are_equal ();
22088          else
22089            lower_halves_are_unequal ();
22090
22091`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
22092`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
22093     Conditional move based on absolute comparison (`cabs.COND.ps',
22094     `movt.ps'/`movf.ps').
22095
22096     The `movt' functions return the value X computed by:
22097
22098          cabs.COND.ps CC,A,B
22099          mov.ps X,C
22100          movt.ps X,D,CC
22101
22102     The `movf' functions are similar but use `movf.ps' instead of
22103     `movt.ps'.
22104
22105`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
22106`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
22107`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
22108`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
22109     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
22110     `bc1any2t'/`bc1any2f').
22111
22112     These functions compare A and B using `c.COND.ps' or
22113     `cabs.COND.ps'.  The `any' forms return true if either result is
22114     true and the `all' forms return true if both results are true.
22115     For example:
22116
22117          v2sf a, b;
22118          if (__builtin_mips_any_c_eq_ps (a, b))
22119            one_is_true ();
22120          else
22121            both_are_false ();
22122
22123          if (__builtin_mips_all_c_eq_ps (a, b))
22124            both_are_true ();
22125          else
22126            one_is_false ();
22127
22128`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22129`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22130`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22131`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22132     Comparison of four paired-single values
22133     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
22134
22135     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
22136     with B and to compare C with D.  The `any' forms return true if
22137     any of the four results are true and the `all' forms return true
22138     if all four results are true.  For example:
22139
22140          v2sf a, b, c, d;
22141          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
22142            some_are_true ();
22143          else
22144            all_are_false ();
22145
22146          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
22147            all_are_true ();
22148          else
22149            some_are_false ();
22150
22151
22152File: gcc.info,  Node: PowerPC AltiVec Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
22153
221545.48.8 PowerPC AltiVec Built-in Functions
22155-----------------------------------------
22156
22157GCC provides an interface for the PowerPC family of processors to access
22158the AltiVec operations described in Motorola's AltiVec Programming
22159Interface Manual.  The interface is made available by including
22160`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
22161supports the following vector types.
22162
22163     vector unsigned char
22164     vector signed char
22165     vector bool char
22166
22167     vector unsigned short
22168     vector signed short
22169     vector bool short
22170     vector pixel
22171
22172     vector unsigned int
22173     vector signed int
22174     vector bool int
22175     vector float
22176
22177 GCC's implementation of the high-level language interface available
22178from C and C++ code differs from Motorola's documentation in several
22179ways.
22180
22181   * A vector constant is a list of constant expressions within curly
22182     braces.
22183
22184   * A vector initializer requires no cast if the vector constant is of
22185     the same type as the variable it is initializing.
22186
22187   * If `signed' or `unsigned' is omitted, the signedness of the vector
22188     type is the default signedness of the base type.  The default
22189     varies depending on the operating system, so a portable program
22190     should always specify the signedness.
22191
22192   * Compiling with `-maltivec' adds keywords `__vector', `__pixel',
22193     and `__bool'.  Macros `vector', `pixel', and `bool' are defined in
22194     `<altivec.h>' and can be undefined.
22195
22196   * GCC allows using a `typedef' name as the type specifier for a
22197     vector type.
22198
22199   * For C, overloaded functions are implemented with macros so the
22200     following does not work:
22201
22202            vec_add ((vector signed int){1, 2, 3, 4}, foo);
22203
22204     Since `vec_add' is a macro, the vector constant in the example is
22205     treated as four separate arguments.  Wrap the entire argument in
22206     parentheses for this to work.
22207
22208 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
22209GCC uses built-in functions to achieve the functionality in the
22210aforementioned header file, but they are not supported and are subject
22211to change without notice.
22212
22213 The following interfaces are supported for the generic and specific
22214AltiVec operations and the AltiVec predicates.  In cases where there is
22215a direct mapping between generic and specific operations, only the
22216generic names are shown here, although the specific operations can also
22217be used.
22218
22219 Arguments that are documented as `const int' require literal integral
22220values within the range required for that operation.
22221
22222     vector signed char vec_abs (vector signed char);
22223     vector signed short vec_abs (vector signed short);
22224     vector signed int vec_abs (vector signed int);
22225     vector float vec_abs (vector float);
22226
22227     vector signed char vec_abss (vector signed char);
22228     vector signed short vec_abss (vector signed short);
22229     vector signed int vec_abss (vector signed int);
22230
22231     vector signed char vec_add (vector bool char, vector signed char);
22232     vector signed char vec_add (vector signed char, vector bool char);
22233     vector signed char vec_add (vector signed char, vector signed char);
22234     vector unsigned char vec_add (vector bool char, vector unsigned char);
22235     vector unsigned char vec_add (vector unsigned char, vector bool char);
22236     vector unsigned char vec_add (vector unsigned char,
22237                                   vector unsigned char);
22238     vector signed short vec_add (vector bool short, vector signed short);
22239     vector signed short vec_add (vector signed short, vector bool short);
22240     vector signed short vec_add (vector signed short, vector signed short);
22241     vector unsigned short vec_add (vector bool short,
22242                                    vector unsigned short);
22243     vector unsigned short vec_add (vector unsigned short,
22244                                    vector bool short);
22245     vector unsigned short vec_add (vector unsigned short,
22246                                    vector unsigned short);
22247     vector signed int vec_add (vector bool int, vector signed int);
22248     vector signed int vec_add (vector signed int, vector bool int);
22249     vector signed int vec_add (vector signed int, vector signed int);
22250     vector unsigned int vec_add (vector bool int, vector unsigned int);
22251     vector unsigned int vec_add (vector unsigned int, vector bool int);
22252     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
22253     vector float vec_add (vector float, vector float);
22254
22255     vector float vec_vaddfp (vector float, vector float);
22256
22257     vector signed int vec_vadduwm (vector bool int, vector signed int);
22258     vector signed int vec_vadduwm (vector signed int, vector bool int);
22259     vector signed int vec_vadduwm (vector signed int, vector signed int);
22260     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
22261     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
22262     vector unsigned int vec_vadduwm (vector unsigned int,
22263                                      vector unsigned int);
22264
22265     vector signed short vec_vadduhm (vector bool short,
22266                                      vector signed short);
22267     vector signed short vec_vadduhm (vector signed short,
22268                                      vector bool short);
22269     vector signed short vec_vadduhm (vector signed short,
22270                                      vector signed short);
22271     vector unsigned short vec_vadduhm (vector bool short,
22272                                        vector unsigned short);
22273     vector unsigned short vec_vadduhm (vector unsigned short,
22274                                        vector bool short);
22275     vector unsigned short vec_vadduhm (vector unsigned short,
22276                                        vector unsigned short);
22277
22278     vector signed char vec_vaddubm (vector bool char, vector signed char);
22279     vector signed char vec_vaddubm (vector signed char, vector bool char);
22280     vector signed char vec_vaddubm (vector signed char, vector signed char);
22281     vector unsigned char vec_vaddubm (vector bool char,
22282                                       vector unsigned char);
22283     vector unsigned char vec_vaddubm (vector unsigned char,
22284                                       vector bool char);
22285     vector unsigned char vec_vaddubm (vector unsigned char,
22286                                       vector unsigned char);
22287
22288     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
22289
22290     vector unsigned char vec_adds (vector bool char, vector unsigned char);
22291     vector unsigned char vec_adds (vector unsigned char, vector bool char);
22292     vector unsigned char vec_adds (vector unsigned char,
22293                                    vector unsigned char);
22294     vector signed char vec_adds (vector bool char, vector signed char);
22295     vector signed char vec_adds (vector signed char, vector bool char);
22296     vector signed char vec_adds (vector signed char, vector signed char);
22297     vector unsigned short vec_adds (vector bool short,
22298                                     vector unsigned short);
22299     vector unsigned short vec_adds (vector unsigned short,
22300                                     vector bool short);
22301     vector unsigned short vec_adds (vector unsigned short,
22302                                     vector unsigned short);
22303     vector signed short vec_adds (vector bool short, vector signed short);
22304     vector signed short vec_adds (vector signed short, vector bool short);
22305     vector signed short vec_adds (vector signed short, vector signed short);
22306     vector unsigned int vec_adds (vector bool int, vector unsigned int);
22307     vector unsigned int vec_adds (vector unsigned int, vector bool int);
22308     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
22309     vector signed int vec_adds (vector bool int, vector signed int);
22310     vector signed int vec_adds (vector signed int, vector bool int);
22311     vector signed int vec_adds (vector signed int, vector signed int);
22312
22313     vector signed int vec_vaddsws (vector bool int, vector signed int);
22314     vector signed int vec_vaddsws (vector signed int, vector bool int);
22315     vector signed int vec_vaddsws (vector signed int, vector signed int);
22316
22317     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
22318     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
22319     vector unsigned int vec_vadduws (vector unsigned int,
22320                                      vector unsigned int);
22321
22322     vector signed short vec_vaddshs (vector bool short,
22323                                      vector signed short);
22324     vector signed short vec_vaddshs (vector signed short,
22325                                      vector bool short);
22326     vector signed short vec_vaddshs (vector signed short,
22327                                      vector signed short);
22328
22329     vector unsigned short vec_vadduhs (vector bool short,
22330                                        vector unsigned short);
22331     vector unsigned short vec_vadduhs (vector unsigned short,
22332                                        vector bool short);
22333     vector unsigned short vec_vadduhs (vector unsigned short,
22334                                        vector unsigned short);
22335
22336     vector signed char vec_vaddsbs (vector bool char, vector signed char);
22337     vector signed char vec_vaddsbs (vector signed char, vector bool char);
22338     vector signed char vec_vaddsbs (vector signed char, vector signed char);
22339
22340     vector unsigned char vec_vaddubs (vector bool char,
22341                                       vector unsigned char);
22342     vector unsigned char vec_vaddubs (vector unsigned char,
22343                                       vector bool char);
22344     vector unsigned char vec_vaddubs (vector unsigned char,
22345                                       vector unsigned char);
22346
22347     vector float vec_and (vector float, vector float);
22348     vector float vec_and (vector float, vector bool int);
22349     vector float vec_and (vector bool int, vector float);
22350     vector bool int vec_and (vector bool int, vector bool int);
22351     vector signed int vec_and (vector bool int, vector signed int);
22352     vector signed int vec_and (vector signed int, vector bool int);
22353     vector signed int vec_and (vector signed int, vector signed int);
22354     vector unsigned int vec_and (vector bool int, vector unsigned int);
22355     vector unsigned int vec_and (vector unsigned int, vector bool int);
22356     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
22357     vector bool short vec_and (vector bool short, vector bool short);
22358     vector signed short vec_and (vector bool short, vector signed short);
22359     vector signed short vec_and (vector signed short, vector bool short);
22360     vector signed short vec_and (vector signed short, vector signed short);
22361     vector unsigned short vec_and (vector bool short,
22362                                    vector unsigned short);
22363     vector unsigned short vec_and (vector unsigned short,
22364                                    vector bool short);
22365     vector unsigned short vec_and (vector unsigned short,
22366                                    vector unsigned short);
22367     vector signed char vec_and (vector bool char, vector signed char);
22368     vector bool char vec_and (vector bool char, vector bool char);
22369     vector signed char vec_and (vector signed char, vector bool char);
22370     vector signed char vec_and (vector signed char, vector signed char);
22371     vector unsigned char vec_and (vector bool char, vector unsigned char);
22372     vector unsigned char vec_and (vector unsigned char, vector bool char);
22373     vector unsigned char vec_and (vector unsigned char,
22374                                   vector unsigned char);
22375
22376     vector float vec_andc (vector float, vector float);
22377     vector float vec_andc (vector float, vector bool int);
22378     vector float vec_andc (vector bool int, vector float);
22379     vector bool int vec_andc (vector bool int, vector bool int);
22380     vector signed int vec_andc (vector bool int, vector signed int);
22381     vector signed int vec_andc (vector signed int, vector bool int);
22382     vector signed int vec_andc (vector signed int, vector signed int);
22383     vector unsigned int vec_andc (vector bool int, vector unsigned int);
22384     vector unsigned int vec_andc (vector unsigned int, vector bool int);
22385     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
22386     vector bool short vec_andc (vector bool short, vector bool short);
22387     vector signed short vec_andc (vector bool short, vector signed short);
22388     vector signed short vec_andc (vector signed short, vector bool short);
22389     vector signed short vec_andc (vector signed short, vector signed short);
22390     vector unsigned short vec_andc (vector bool short,
22391                                     vector unsigned short);
22392     vector unsigned short vec_andc (vector unsigned short,
22393                                     vector bool short);
22394     vector unsigned short vec_andc (vector unsigned short,
22395                                     vector unsigned short);
22396     vector signed char vec_andc (vector bool char, vector signed char);
22397     vector bool char vec_andc (vector bool char, vector bool char);
22398     vector signed char vec_andc (vector signed char, vector bool char);
22399     vector signed char vec_andc (vector signed char, vector signed char);
22400     vector unsigned char vec_andc (vector bool char, vector unsigned char);
22401     vector unsigned char vec_andc (vector unsigned char, vector bool char);
22402     vector unsigned char vec_andc (vector unsigned char,
22403                                    vector unsigned char);
22404
22405     vector unsigned char vec_avg (vector unsigned char,
22406                                   vector unsigned char);
22407     vector signed char vec_avg (vector signed char, vector signed char);
22408     vector unsigned short vec_avg (vector unsigned short,
22409                                    vector unsigned short);
22410     vector signed short vec_avg (vector signed short, vector signed short);
22411     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
22412     vector signed int vec_avg (vector signed int, vector signed int);
22413
22414     vector signed int vec_vavgsw (vector signed int, vector signed int);
22415
22416     vector unsigned int vec_vavguw (vector unsigned int,
22417                                     vector unsigned int);
22418
22419     vector signed short vec_vavgsh (vector signed short,
22420                                     vector signed short);
22421
22422     vector unsigned short vec_vavguh (vector unsigned short,
22423                                       vector unsigned short);
22424
22425     vector signed char vec_vavgsb (vector signed char, vector signed char);
22426
22427     vector unsigned char vec_vavgub (vector unsigned char,
22428                                      vector unsigned char);
22429
22430     vector float vec_ceil (vector float);
22431
22432     vector signed int vec_cmpb (vector float, vector float);
22433
22434     vector bool char vec_cmpeq (vector signed char, vector signed char);
22435     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
22436     vector bool short vec_cmpeq (vector signed short, vector signed short);
22437     vector bool short vec_cmpeq (vector unsigned short,
22438                                  vector unsigned short);
22439     vector bool int vec_cmpeq (vector signed int, vector signed int);
22440     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
22441     vector bool int vec_cmpeq (vector float, vector float);
22442
22443     vector bool int vec_vcmpeqfp (vector float, vector float);
22444
22445     vector bool int vec_vcmpequw (vector signed int, vector signed int);
22446     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
22447
22448     vector bool short vec_vcmpequh (vector signed short,
22449                                     vector signed short);
22450     vector bool short vec_vcmpequh (vector unsigned short,
22451                                     vector unsigned short);
22452
22453     vector bool char vec_vcmpequb (vector signed char, vector signed char);
22454     vector bool char vec_vcmpequb (vector unsigned char,
22455                                    vector unsigned char);
22456
22457     vector bool int vec_cmpge (vector float, vector float);
22458
22459     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
22460     vector bool char vec_cmpgt (vector signed char, vector signed char);
22461     vector bool short vec_cmpgt (vector unsigned short,
22462                                  vector unsigned short);
22463     vector bool short vec_cmpgt (vector signed short, vector signed short);
22464     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
22465     vector bool int vec_cmpgt (vector signed int, vector signed int);
22466     vector bool int vec_cmpgt (vector float, vector float);
22467
22468     vector bool int vec_vcmpgtfp (vector float, vector float);
22469
22470     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
22471
22472     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
22473
22474     vector bool short vec_vcmpgtsh (vector signed short,
22475                                     vector signed short);
22476
22477     vector bool short vec_vcmpgtuh (vector unsigned short,
22478                                     vector unsigned short);
22479
22480     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
22481
22482     vector bool char vec_vcmpgtub (vector unsigned char,
22483                                    vector unsigned char);
22484
22485     vector bool int vec_cmple (vector float, vector float);
22486
22487     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
22488     vector bool char vec_cmplt (vector signed char, vector signed char);
22489     vector bool short vec_cmplt (vector unsigned short,
22490                                  vector unsigned short);
22491     vector bool short vec_cmplt (vector signed short, vector signed short);
22492     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
22493     vector bool int vec_cmplt (vector signed int, vector signed int);
22494     vector bool int vec_cmplt (vector float, vector float);
22495
22496     vector float vec_ctf (vector unsigned int, const int);
22497     vector float vec_ctf (vector signed int, const int);
22498
22499     vector float vec_vcfsx (vector signed int, const int);
22500
22501     vector float vec_vcfux (vector unsigned int, const int);
22502
22503     vector signed int vec_cts (vector float, const int);
22504
22505     vector unsigned int vec_ctu (vector float, const int);
22506
22507     void vec_dss (const int);
22508
22509     void vec_dssall (void);
22510
22511     void vec_dst (const vector unsigned char *, int, const int);
22512     void vec_dst (const vector signed char *, int, const int);
22513     void vec_dst (const vector bool char *, int, const int);
22514     void vec_dst (const vector unsigned short *, int, const int);
22515     void vec_dst (const vector signed short *, int, const int);
22516     void vec_dst (const vector bool short *, int, const int);
22517     void vec_dst (const vector pixel *, int, const int);
22518     void vec_dst (const vector unsigned int *, int, const int);
22519     void vec_dst (const vector signed int *, int, const int);
22520     void vec_dst (const vector bool int *, int, const int);
22521     void vec_dst (const vector float *, int, const int);
22522     void vec_dst (const unsigned char *, int, const int);
22523     void vec_dst (const signed char *, int, const int);
22524     void vec_dst (const unsigned short *, int, const int);
22525     void vec_dst (const short *, int, const int);
22526     void vec_dst (const unsigned int *, int, const int);
22527     void vec_dst (const int *, int, const int);
22528     void vec_dst (const unsigned long *, int, const int);
22529     void vec_dst (const long *, int, const int);
22530     void vec_dst (const float *, int, const int);
22531
22532     void vec_dstst (const vector unsigned char *, int, const int);
22533     void vec_dstst (const vector signed char *, int, const int);
22534     void vec_dstst (const vector bool char *, int, const int);
22535     void vec_dstst (const vector unsigned short *, int, const int);
22536     void vec_dstst (const vector signed short *, int, const int);
22537     void vec_dstst (const vector bool short *, int, const int);
22538     void vec_dstst (const vector pixel *, int, const int);
22539     void vec_dstst (const vector unsigned int *, int, const int);
22540     void vec_dstst (const vector signed int *, int, const int);
22541     void vec_dstst (const vector bool int *, int, const int);
22542     void vec_dstst (const vector float *, int, const int);
22543     void vec_dstst (const unsigned char *, int, const int);
22544     void vec_dstst (const signed char *, int, const int);
22545     void vec_dstst (const unsigned short *, int, const int);
22546     void vec_dstst (const short *, int, const int);
22547     void vec_dstst (const unsigned int *, int, const int);
22548     void vec_dstst (const int *, int, const int);
22549     void vec_dstst (const unsigned long *, int, const int);
22550     void vec_dstst (const long *, int, const int);
22551     void vec_dstst (const float *, int, const int);
22552
22553     void vec_dststt (const vector unsigned char *, int, const int);
22554     void vec_dststt (const vector signed char *, int, const int);
22555     void vec_dststt (const vector bool char *, int, const int);
22556     void vec_dststt (const vector unsigned short *, int, const int);
22557     void vec_dststt (const vector signed short *, int, const int);
22558     void vec_dststt (const vector bool short *, int, const int);
22559     void vec_dststt (const vector pixel *, int, const int);
22560     void vec_dststt (const vector unsigned int *, int, const int);
22561     void vec_dststt (const vector signed int *, int, const int);
22562     void vec_dststt (const vector bool int *, int, const int);
22563     void vec_dststt (const vector float *, int, const int);
22564     void vec_dststt (const unsigned char *, int, const int);
22565     void vec_dststt (const signed char *, int, const int);
22566     void vec_dststt (const unsigned short *, int, const int);
22567     void vec_dststt (const short *, int, const int);
22568     void vec_dststt (const unsigned int *, int, const int);
22569     void vec_dststt (const int *, int, const int);
22570     void vec_dststt (const unsigned long *, int, const int);
22571     void vec_dststt (const long *, int, const int);
22572     void vec_dststt (const float *, int, const int);
22573
22574     void vec_dstt (const vector unsigned char *, int, const int);
22575     void vec_dstt (const vector signed char *, int, const int);
22576     void vec_dstt (const vector bool char *, int, const int);
22577     void vec_dstt (const vector unsigned short *, int, const int);
22578     void vec_dstt (const vector signed short *, int, const int);
22579     void vec_dstt (const vector bool short *, int, const int);
22580     void vec_dstt (const vector pixel *, int, const int);
22581     void vec_dstt (const vector unsigned int *, int, const int);
22582     void vec_dstt (const vector signed int *, int, const int);
22583     void vec_dstt (const vector bool int *, int, const int);
22584     void vec_dstt (const vector float *, int, const int);
22585     void vec_dstt (const unsigned char *, int, const int);
22586     void vec_dstt (const signed char *, int, const int);
22587     void vec_dstt (const unsigned short *, int, const int);
22588     void vec_dstt (const short *, int, const int);
22589     void vec_dstt (const unsigned int *, int, const int);
22590     void vec_dstt (const int *, int, const int);
22591     void vec_dstt (const unsigned long *, int, const int);
22592     void vec_dstt (const long *, int, const int);
22593     void vec_dstt (const float *, int, const int);
22594
22595     vector float vec_expte (vector float);
22596
22597     vector float vec_floor (vector float);
22598
22599     vector float vec_ld (int, const vector float *);
22600     vector float vec_ld (int, const float *);
22601     vector bool int vec_ld (int, const vector bool int *);
22602     vector signed int vec_ld (int, const vector signed int *);
22603     vector signed int vec_ld (int, const int *);
22604     vector signed int vec_ld (int, const long *);
22605     vector unsigned int vec_ld (int, const vector unsigned int *);
22606     vector unsigned int vec_ld (int, const unsigned int *);
22607     vector unsigned int vec_ld (int, const unsigned long *);
22608     vector bool short vec_ld (int, const vector bool short *);
22609     vector pixel vec_ld (int, const vector pixel *);
22610     vector signed short vec_ld (int, const vector signed short *);
22611     vector signed short vec_ld (int, const short *);
22612     vector unsigned short vec_ld (int, const vector unsigned short *);
22613     vector unsigned short vec_ld (int, const unsigned short *);
22614     vector bool char vec_ld (int, const vector bool char *);
22615     vector signed char vec_ld (int, const vector signed char *);
22616     vector signed char vec_ld (int, const signed char *);
22617     vector unsigned char vec_ld (int, const vector unsigned char *);
22618     vector unsigned char vec_ld (int, const unsigned char *);
22619
22620     vector signed char vec_lde (int, const signed char *);
22621     vector unsigned char vec_lde (int, const unsigned char *);
22622     vector signed short vec_lde (int, const short *);
22623     vector unsigned short vec_lde (int, const unsigned short *);
22624     vector float vec_lde (int, const float *);
22625     vector signed int vec_lde (int, const int *);
22626     vector unsigned int vec_lde (int, const unsigned int *);
22627     vector signed int vec_lde (int, const long *);
22628     vector unsigned int vec_lde (int, const unsigned long *);
22629
22630     vector float vec_lvewx (int, float *);
22631     vector signed int vec_lvewx (int, int *);
22632     vector unsigned int vec_lvewx (int, unsigned int *);
22633     vector signed int vec_lvewx (int, long *);
22634     vector unsigned int vec_lvewx (int, unsigned long *);
22635
22636     vector signed short vec_lvehx (int, short *);
22637     vector unsigned short vec_lvehx (int, unsigned short *);
22638
22639     vector signed char vec_lvebx (int, char *);
22640     vector unsigned char vec_lvebx (int, unsigned char *);
22641
22642     vector float vec_ldl (int, const vector float *);
22643     vector float vec_ldl (int, const float *);
22644     vector bool int vec_ldl (int, const vector bool int *);
22645     vector signed int vec_ldl (int, const vector signed int *);
22646     vector signed int vec_ldl (int, const int *);
22647     vector signed int vec_ldl (int, const long *);
22648     vector unsigned int vec_ldl (int, const vector unsigned int *);
22649     vector unsigned int vec_ldl (int, const unsigned int *);
22650     vector unsigned int vec_ldl (int, const unsigned long *);
22651     vector bool short vec_ldl (int, const vector bool short *);
22652     vector pixel vec_ldl (int, const vector pixel *);
22653     vector signed short vec_ldl (int, const vector signed short *);
22654     vector signed short vec_ldl (int, const short *);
22655     vector unsigned short vec_ldl (int, const vector unsigned short *);
22656     vector unsigned short vec_ldl (int, const unsigned short *);
22657     vector bool char vec_ldl (int, const vector bool char *);
22658     vector signed char vec_ldl (int, const vector signed char *);
22659     vector signed char vec_ldl (int, const signed char *);
22660     vector unsigned char vec_ldl (int, const vector unsigned char *);
22661     vector unsigned char vec_ldl (int, const unsigned char *);
22662
22663     vector float vec_loge (vector float);
22664
22665     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
22666     vector unsigned char vec_lvsl (int, const volatile signed char *);
22667     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
22668     vector unsigned char vec_lvsl (int, const volatile short *);
22669     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
22670     vector unsigned char vec_lvsl (int, const volatile int *);
22671     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
22672     vector unsigned char vec_lvsl (int, const volatile long *);
22673     vector unsigned char vec_lvsl (int, const volatile float *);
22674
22675     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
22676     vector unsigned char vec_lvsr (int, const volatile signed char *);
22677     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
22678     vector unsigned char vec_lvsr (int, const volatile short *);
22679     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
22680     vector unsigned char vec_lvsr (int, const volatile int *);
22681     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
22682     vector unsigned char vec_lvsr (int, const volatile long *);
22683     vector unsigned char vec_lvsr (int, const volatile float *);
22684
22685     vector float vec_madd (vector float, vector float, vector float);
22686
22687     vector signed short vec_madds (vector signed short,
22688                                    vector signed short,
22689                                    vector signed short);
22690
22691     vector unsigned char vec_max (vector bool char, vector unsigned char);
22692     vector unsigned char vec_max (vector unsigned char, vector bool char);
22693     vector unsigned char vec_max (vector unsigned char,
22694                                   vector unsigned char);
22695     vector signed char vec_max (vector bool char, vector signed char);
22696     vector signed char vec_max (vector signed char, vector bool char);
22697     vector signed char vec_max (vector signed char, vector signed char);
22698     vector unsigned short vec_max (vector bool short,
22699                                    vector unsigned short);
22700     vector unsigned short vec_max (vector unsigned short,
22701                                    vector bool short);
22702     vector unsigned short vec_max (vector unsigned short,
22703                                    vector unsigned short);
22704     vector signed short vec_max (vector bool short, vector signed short);
22705     vector signed short vec_max (vector signed short, vector bool short);
22706     vector signed short vec_max (vector signed short, vector signed short);
22707     vector unsigned int vec_max (vector bool int, vector unsigned int);
22708     vector unsigned int vec_max (vector unsigned int, vector bool int);
22709     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
22710     vector signed int vec_max (vector bool int, vector signed int);
22711     vector signed int vec_max (vector signed int, vector bool int);
22712     vector signed int vec_max (vector signed int, vector signed int);
22713     vector float vec_max (vector float, vector float);
22714
22715     vector float vec_vmaxfp (vector float, vector float);
22716
22717     vector signed int vec_vmaxsw (vector bool int, vector signed int);
22718     vector signed int vec_vmaxsw (vector signed int, vector bool int);
22719     vector signed int vec_vmaxsw (vector signed int, vector signed int);
22720
22721     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
22722     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
22723     vector unsigned int vec_vmaxuw (vector unsigned int,
22724                                     vector unsigned int);
22725
22726     vector signed short vec_vmaxsh (vector bool short, vector signed short);
22727     vector signed short vec_vmaxsh (vector signed short, vector bool short);
22728     vector signed short vec_vmaxsh (vector signed short,
22729                                     vector signed short);
22730
22731     vector unsigned short vec_vmaxuh (vector bool short,
22732                                       vector unsigned short);
22733     vector unsigned short vec_vmaxuh (vector unsigned short,
22734                                       vector bool short);
22735     vector unsigned short vec_vmaxuh (vector unsigned short,
22736                                       vector unsigned short);
22737
22738     vector signed char vec_vmaxsb (vector bool char, vector signed char);
22739     vector signed char vec_vmaxsb (vector signed char, vector bool char);
22740     vector signed char vec_vmaxsb (vector signed char, vector signed char);
22741
22742     vector unsigned char vec_vmaxub (vector bool char,
22743                                      vector unsigned char);
22744     vector unsigned char vec_vmaxub (vector unsigned char,
22745                                      vector bool char);
22746     vector unsigned char vec_vmaxub (vector unsigned char,
22747                                      vector unsigned char);
22748
22749     vector bool char vec_mergeh (vector bool char, vector bool char);
22750     vector signed char vec_mergeh (vector signed char, vector signed char);
22751     vector unsigned char vec_mergeh (vector unsigned char,
22752                                      vector unsigned char);
22753     vector bool short vec_mergeh (vector bool short, vector bool short);
22754     vector pixel vec_mergeh (vector pixel, vector pixel);
22755     vector signed short vec_mergeh (vector signed short,
22756                                     vector signed short);
22757     vector unsigned short vec_mergeh (vector unsigned short,
22758                                       vector unsigned short);
22759     vector float vec_mergeh (vector float, vector float);
22760     vector bool int vec_mergeh (vector bool int, vector bool int);
22761     vector signed int vec_mergeh (vector signed int, vector signed int);
22762     vector unsigned int vec_mergeh (vector unsigned int,
22763                                     vector unsigned int);
22764
22765     vector float vec_vmrghw (vector float, vector float);
22766     vector bool int vec_vmrghw (vector bool int, vector bool int);
22767     vector signed int vec_vmrghw (vector signed int, vector signed int);
22768     vector unsigned int vec_vmrghw (vector unsigned int,
22769                                     vector unsigned int);
22770
22771     vector bool short vec_vmrghh (vector bool short, vector bool short);
22772     vector signed short vec_vmrghh (vector signed short,
22773                                     vector signed short);
22774     vector unsigned short vec_vmrghh (vector unsigned short,
22775                                       vector unsigned short);
22776     vector pixel vec_vmrghh (vector pixel, vector pixel);
22777
22778     vector bool char vec_vmrghb (vector bool char, vector bool char);
22779     vector signed char vec_vmrghb (vector signed char, vector signed char);
22780     vector unsigned char vec_vmrghb (vector unsigned char,
22781                                      vector unsigned char);
22782
22783     vector bool char vec_mergel (vector bool char, vector bool char);
22784     vector signed char vec_mergel (vector signed char, vector signed char);
22785     vector unsigned char vec_mergel (vector unsigned char,
22786                                      vector unsigned char);
22787     vector bool short vec_mergel (vector bool short, vector bool short);
22788     vector pixel vec_mergel (vector pixel, vector pixel);
22789     vector signed short vec_mergel (vector signed short,
22790                                     vector signed short);
22791     vector unsigned short vec_mergel (vector unsigned short,
22792                                       vector unsigned short);
22793     vector float vec_mergel (vector float, vector float);
22794     vector bool int vec_mergel (vector bool int, vector bool int);
22795     vector signed int vec_mergel (vector signed int, vector signed int);
22796     vector unsigned int vec_mergel (vector unsigned int,
22797                                     vector unsigned int);
22798
22799     vector float vec_vmrglw (vector float, vector float);
22800     vector signed int vec_vmrglw (vector signed int, vector signed int);
22801     vector unsigned int vec_vmrglw (vector unsigned int,
22802                                     vector unsigned int);
22803     vector bool int vec_vmrglw (vector bool int, vector bool int);
22804
22805     vector bool short vec_vmrglh (vector bool short, vector bool short);
22806     vector signed short vec_vmrglh (vector signed short,
22807                                     vector signed short);
22808     vector unsigned short vec_vmrglh (vector unsigned short,
22809                                       vector unsigned short);
22810     vector pixel vec_vmrglh (vector pixel, vector pixel);
22811
22812     vector bool char vec_vmrglb (vector bool char, vector bool char);
22813     vector signed char vec_vmrglb (vector signed char, vector signed char);
22814     vector unsigned char vec_vmrglb (vector unsigned char,
22815                                      vector unsigned char);
22816
22817     vector unsigned short vec_mfvscr (void);
22818
22819     vector unsigned char vec_min (vector bool char, vector unsigned char);
22820     vector unsigned char vec_min (vector unsigned char, vector bool char);
22821     vector unsigned char vec_min (vector unsigned char,
22822                                   vector unsigned char);
22823     vector signed char vec_min (vector bool char, vector signed char);
22824     vector signed char vec_min (vector signed char, vector bool char);
22825     vector signed char vec_min (vector signed char, vector signed char);
22826     vector unsigned short vec_min (vector bool short,
22827                                    vector unsigned short);
22828     vector unsigned short vec_min (vector unsigned short,
22829                                    vector bool short);
22830     vector unsigned short vec_min (vector unsigned short,
22831                                    vector unsigned short);
22832     vector signed short vec_min (vector bool short, vector signed short);
22833     vector signed short vec_min (vector signed short, vector bool short);
22834     vector signed short vec_min (vector signed short, vector signed short);
22835     vector unsigned int vec_min (vector bool int, vector unsigned int);
22836     vector unsigned int vec_min (vector unsigned int, vector bool int);
22837     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
22838     vector signed int vec_min (vector bool int, vector signed int);
22839     vector signed int vec_min (vector signed int, vector bool int);
22840     vector signed int vec_min (vector signed int, vector signed int);
22841     vector float vec_min (vector float, vector float);
22842
22843     vector float vec_vminfp (vector float, vector float);
22844
22845     vector signed int vec_vminsw (vector bool int, vector signed int);
22846     vector signed int vec_vminsw (vector signed int, vector bool int);
22847     vector signed int vec_vminsw (vector signed int, vector signed int);
22848
22849     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
22850     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
22851     vector unsigned int vec_vminuw (vector unsigned int,
22852                                     vector unsigned int);
22853
22854     vector signed short vec_vminsh (vector bool short, vector signed short);
22855     vector signed short vec_vminsh (vector signed short, vector bool short);
22856     vector signed short vec_vminsh (vector signed short,
22857                                     vector signed short);
22858
22859     vector unsigned short vec_vminuh (vector bool short,
22860                                       vector unsigned short);
22861     vector unsigned short vec_vminuh (vector unsigned short,
22862                                       vector bool short);
22863     vector unsigned short vec_vminuh (vector unsigned short,
22864                                       vector unsigned short);
22865
22866     vector signed char vec_vminsb (vector bool char, vector signed char);
22867     vector signed char vec_vminsb (vector signed char, vector bool char);
22868     vector signed char vec_vminsb (vector signed char, vector signed char);
22869
22870     vector unsigned char vec_vminub (vector bool char,
22871                                      vector unsigned char);
22872     vector unsigned char vec_vminub (vector unsigned char,
22873                                      vector bool char);
22874     vector unsigned char vec_vminub (vector unsigned char,
22875                                      vector unsigned char);
22876
22877     vector signed short vec_mladd (vector signed short,
22878                                    vector signed short,
22879                                    vector signed short);
22880     vector signed short vec_mladd (vector signed short,
22881                                    vector unsigned short,
22882                                    vector unsigned short);
22883     vector signed short vec_mladd (vector unsigned short,
22884                                    vector signed short,
22885                                    vector signed short);
22886     vector unsigned short vec_mladd (vector unsigned short,
22887                                      vector unsigned short,
22888                                      vector unsigned short);
22889
22890     vector signed short vec_mradds (vector signed short,
22891                                     vector signed short,
22892                                     vector signed short);
22893
22894     vector unsigned int vec_msum (vector unsigned char,
22895                                   vector unsigned char,
22896                                   vector unsigned int);
22897     vector signed int vec_msum (vector signed char,
22898                                 vector unsigned char,
22899                                 vector signed int);
22900     vector unsigned int vec_msum (vector unsigned short,
22901                                   vector unsigned short,
22902                                   vector unsigned int);
22903     vector signed int vec_msum (vector signed short,
22904                                 vector signed short,
22905                                 vector signed int);
22906
22907     vector signed int vec_vmsumshm (vector signed short,
22908                                     vector signed short,
22909                                     vector signed int);
22910
22911     vector unsigned int vec_vmsumuhm (vector unsigned short,
22912                                       vector unsigned short,
22913                                       vector unsigned int);
22914
22915     vector signed int vec_vmsummbm (vector signed char,
22916                                     vector unsigned char,
22917                                     vector signed int);
22918
22919     vector unsigned int vec_vmsumubm (vector unsigned char,
22920                                       vector unsigned char,
22921                                       vector unsigned int);
22922
22923     vector unsigned int vec_msums (vector unsigned short,
22924                                    vector unsigned short,
22925                                    vector unsigned int);
22926     vector signed int vec_msums (vector signed short,
22927                                  vector signed short,
22928                                  vector signed int);
22929
22930     vector signed int vec_vmsumshs (vector signed short,
22931                                     vector signed short,
22932                                     vector signed int);
22933
22934     vector unsigned int vec_vmsumuhs (vector unsigned short,
22935                                       vector unsigned short,
22936                                       vector unsigned int);
22937
22938     void vec_mtvscr (vector signed int);
22939     void vec_mtvscr (vector unsigned int);
22940     void vec_mtvscr (vector bool int);
22941     void vec_mtvscr (vector signed short);
22942     void vec_mtvscr (vector unsigned short);
22943     void vec_mtvscr (vector bool short);
22944     void vec_mtvscr (vector pixel);
22945     void vec_mtvscr (vector signed char);
22946     void vec_mtvscr (vector unsigned char);
22947     void vec_mtvscr (vector bool char);
22948
22949     vector unsigned short vec_mule (vector unsigned char,
22950                                     vector unsigned char);
22951     vector signed short vec_mule (vector signed char,
22952                                   vector signed char);
22953     vector unsigned int vec_mule (vector unsigned short,
22954                                   vector unsigned short);
22955     vector signed int vec_mule (vector signed short, vector signed short);
22956
22957     vector signed int vec_vmulesh (vector signed short,
22958                                    vector signed short);
22959
22960     vector unsigned int vec_vmuleuh (vector unsigned short,
22961                                      vector unsigned short);
22962
22963     vector signed short vec_vmulesb (vector signed char,
22964                                      vector signed char);
22965
22966     vector unsigned short vec_vmuleub (vector unsigned char,
22967                                       vector unsigned char);
22968
22969     vector unsigned short vec_mulo (vector unsigned char,
22970                                     vector unsigned char);
22971     vector signed short vec_mulo (vector signed char, vector signed char);
22972     vector unsigned int vec_mulo (vector unsigned short,
22973                                   vector unsigned short);
22974     vector signed int vec_mulo (vector signed short, vector signed short);
22975
22976     vector signed int vec_vmulosh (vector signed short,
22977                                    vector signed short);
22978
22979     vector unsigned int vec_vmulouh (vector unsigned short,
22980                                      vector unsigned short);
22981
22982     vector signed short vec_vmulosb (vector signed char,
22983                                      vector signed char);
22984
22985     vector unsigned short vec_vmuloub (vector unsigned char,
22986                                        vector unsigned char);
22987
22988     vector float vec_nmsub (vector float, vector float, vector float);
22989
22990     vector float vec_nor (vector float, vector float);
22991     vector signed int vec_nor (vector signed int, vector signed int);
22992     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
22993     vector bool int vec_nor (vector bool int, vector bool int);
22994     vector signed short vec_nor (vector signed short, vector signed short);
22995     vector unsigned short vec_nor (vector unsigned short,
22996                                    vector unsigned short);
22997     vector bool short vec_nor (vector bool short, vector bool short);
22998     vector signed char vec_nor (vector signed char, vector signed char);
22999     vector unsigned char vec_nor (vector unsigned char,
23000                                   vector unsigned char);
23001     vector bool char vec_nor (vector bool char, vector bool char);
23002
23003     vector float vec_or (vector float, vector float);
23004     vector float vec_or (vector float, vector bool int);
23005     vector float vec_or (vector bool int, vector float);
23006     vector bool int vec_or (vector bool int, vector bool int);
23007     vector signed int vec_or (vector bool int, vector signed int);
23008     vector signed int vec_or (vector signed int, vector bool int);
23009     vector signed int vec_or (vector signed int, vector signed int);
23010     vector unsigned int vec_or (vector bool int, vector unsigned int);
23011     vector unsigned int vec_or (vector unsigned int, vector bool int);
23012     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
23013     vector bool short vec_or (vector bool short, vector bool short);
23014     vector signed short vec_or (vector bool short, vector signed short);
23015     vector signed short vec_or (vector signed short, vector bool short);
23016     vector signed short vec_or (vector signed short, vector signed short);
23017     vector unsigned short vec_or (vector bool short, vector unsigned short);
23018     vector unsigned short vec_or (vector unsigned short, vector bool short);
23019     vector unsigned short vec_or (vector unsigned short,
23020                                   vector unsigned short);
23021     vector signed char vec_or (vector bool char, vector signed char);
23022     vector bool char vec_or (vector bool char, vector bool char);
23023     vector signed char vec_or (vector signed char, vector bool char);
23024     vector signed char vec_or (vector signed char, vector signed char);
23025     vector unsigned char vec_or (vector bool char, vector unsigned char);
23026     vector unsigned char vec_or (vector unsigned char, vector bool char);
23027     vector unsigned char vec_or (vector unsigned char,
23028                                  vector unsigned char);
23029
23030     vector signed char vec_pack (vector signed short, vector signed short);
23031     vector unsigned char vec_pack (vector unsigned short,
23032                                    vector unsigned short);
23033     vector bool char vec_pack (vector bool short, vector bool short);
23034     vector signed short vec_pack (vector signed int, vector signed int);
23035     vector unsigned short vec_pack (vector unsigned int,
23036                                     vector unsigned int);
23037     vector bool short vec_pack (vector bool int, vector bool int);
23038
23039     vector bool short vec_vpkuwum (vector bool int, vector bool int);
23040     vector signed short vec_vpkuwum (vector signed int, vector signed int);
23041     vector unsigned short vec_vpkuwum (vector unsigned int,
23042                                        vector unsigned int);
23043
23044     vector bool char vec_vpkuhum (vector bool short, vector bool short);
23045     vector signed char vec_vpkuhum (vector signed short,
23046                                     vector signed short);
23047     vector unsigned char vec_vpkuhum (vector unsigned short,
23048                                       vector unsigned short);
23049
23050     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
23051
23052     vector unsigned char vec_packs (vector unsigned short,
23053                                     vector unsigned short);
23054     vector signed char vec_packs (vector signed short, vector signed short);
23055     vector unsigned short vec_packs (vector unsigned int,
23056                                      vector unsigned int);
23057     vector signed short vec_packs (vector signed int, vector signed int);
23058
23059     vector signed short vec_vpkswss (vector signed int, vector signed int);
23060
23061     vector unsigned short vec_vpkuwus (vector unsigned int,
23062                                        vector unsigned int);
23063
23064     vector signed char vec_vpkshss (vector signed short,
23065                                     vector signed short);
23066
23067     vector unsigned char vec_vpkuhus (vector unsigned short,
23068                                       vector unsigned short);
23069
23070     vector unsigned char vec_packsu (vector unsigned short,
23071                                      vector unsigned short);
23072     vector unsigned char vec_packsu (vector signed short,
23073                                      vector signed short);
23074     vector unsigned short vec_packsu (vector unsigned int,
23075                                       vector unsigned int);
23076     vector unsigned short vec_packsu (vector signed int, vector signed int);
23077
23078     vector unsigned short vec_vpkswus (vector signed int,
23079                                        vector signed int);
23080
23081     vector unsigned char vec_vpkshus (vector signed short,
23082                                       vector signed short);
23083
23084     vector float vec_perm (vector float,
23085                            vector float,
23086                            vector unsigned char);
23087     vector signed int vec_perm (vector signed int,
23088                                 vector signed int,
23089                                 vector unsigned char);
23090     vector unsigned int vec_perm (vector unsigned int,
23091                                   vector unsigned int,
23092                                   vector unsigned char);
23093     vector bool int vec_perm (vector bool int,
23094                               vector bool int,
23095                               vector unsigned char);
23096     vector signed short vec_perm (vector signed short,
23097                                   vector signed short,
23098                                   vector unsigned char);
23099     vector unsigned short vec_perm (vector unsigned short,
23100                                     vector unsigned short,
23101                                     vector unsigned char);
23102     vector bool short vec_perm (vector bool short,
23103                                 vector bool short,
23104                                 vector unsigned char);
23105     vector pixel vec_perm (vector pixel,
23106                            vector pixel,
23107                            vector unsigned char);
23108     vector signed char vec_perm (vector signed char,
23109                                  vector signed char,
23110                                  vector unsigned char);
23111     vector unsigned char vec_perm (vector unsigned char,
23112                                    vector unsigned char,
23113                                    vector unsigned char);
23114     vector bool char vec_perm (vector bool char,
23115                                vector bool char,
23116                                vector unsigned char);
23117
23118     vector float vec_re (vector float);
23119
23120     vector signed char vec_rl (vector signed char,
23121                                vector unsigned char);
23122     vector unsigned char vec_rl (vector unsigned char,
23123                                  vector unsigned char);
23124     vector signed short vec_rl (vector signed short, vector unsigned short);
23125     vector unsigned short vec_rl (vector unsigned short,
23126                                   vector unsigned short);
23127     vector signed int vec_rl (vector signed int, vector unsigned int);
23128     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
23129
23130     vector signed int vec_vrlw (vector signed int, vector unsigned int);
23131     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
23132
23133     vector signed short vec_vrlh (vector signed short,
23134                                   vector unsigned short);
23135     vector unsigned short vec_vrlh (vector unsigned short,
23136                                     vector unsigned short);
23137
23138     vector signed char vec_vrlb (vector signed char, vector unsigned char);
23139     vector unsigned char vec_vrlb (vector unsigned char,
23140                                    vector unsigned char);
23141
23142     vector float vec_round (vector float);
23143
23144     vector float vec_rsqrte (vector float);
23145
23146     vector float vec_sel (vector float, vector float, vector bool int);
23147     vector float vec_sel (vector float, vector float, vector unsigned int);
23148     vector signed int vec_sel (vector signed int,
23149                                vector signed int,
23150                                vector bool int);
23151     vector signed int vec_sel (vector signed int,
23152                                vector signed int,
23153                                vector unsigned int);
23154     vector unsigned int vec_sel (vector unsigned int,
23155                                  vector unsigned int,
23156                                  vector bool int);
23157     vector unsigned int vec_sel (vector unsigned int,
23158                                  vector unsigned int,
23159                                  vector unsigned int);
23160     vector bool int vec_sel (vector bool int,
23161                              vector bool int,
23162                              vector bool int);
23163     vector bool int vec_sel (vector bool int,
23164                              vector bool int,
23165                              vector unsigned int);
23166     vector signed short vec_sel (vector signed short,
23167                                  vector signed short,
23168                                  vector bool short);
23169     vector signed short vec_sel (vector signed short,
23170                                  vector signed short,
23171                                  vector unsigned short);
23172     vector unsigned short vec_sel (vector unsigned short,
23173                                    vector unsigned short,
23174                                    vector bool short);
23175     vector unsigned short vec_sel (vector unsigned short,
23176                                    vector unsigned short,
23177                                    vector unsigned short);
23178     vector bool short vec_sel (vector bool short,
23179                                vector bool short,
23180                                vector bool short);
23181     vector bool short vec_sel (vector bool short,
23182                                vector bool short,
23183                                vector unsigned short);
23184     vector signed char vec_sel (vector signed char,
23185                                 vector signed char,
23186                                 vector bool char);
23187     vector signed char vec_sel (vector signed char,
23188                                 vector signed char,
23189                                 vector unsigned char);
23190     vector unsigned char vec_sel (vector unsigned char,
23191                                   vector unsigned char,
23192                                   vector bool char);
23193     vector unsigned char vec_sel (vector unsigned char,
23194                                   vector unsigned char,
23195                                   vector unsigned char);
23196     vector bool char vec_sel (vector bool char,
23197                               vector bool char,
23198                               vector bool char);
23199     vector bool char vec_sel (vector bool char,
23200                               vector bool char,
23201                               vector unsigned char);
23202
23203     vector signed char vec_sl (vector signed char,
23204                                vector unsigned char);
23205     vector unsigned char vec_sl (vector unsigned char,
23206                                  vector unsigned char);
23207     vector signed short vec_sl (vector signed short, vector unsigned short);
23208     vector unsigned short vec_sl (vector unsigned short,
23209                                   vector unsigned short);
23210     vector signed int vec_sl (vector signed int, vector unsigned int);
23211     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
23212
23213     vector signed int vec_vslw (vector signed int, vector unsigned int);
23214     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
23215
23216     vector signed short vec_vslh (vector signed short,
23217                                   vector unsigned short);
23218     vector unsigned short vec_vslh (vector unsigned short,
23219                                     vector unsigned short);
23220
23221     vector signed char vec_vslb (vector signed char, vector unsigned char);
23222     vector unsigned char vec_vslb (vector unsigned char,
23223                                    vector unsigned char);
23224
23225     vector float vec_sld (vector float, vector float, const int);
23226     vector signed int vec_sld (vector signed int,
23227                                vector signed int,
23228                                const int);
23229     vector unsigned int vec_sld (vector unsigned int,
23230                                  vector unsigned int,
23231                                  const int);
23232     vector bool int vec_sld (vector bool int,
23233                              vector bool int,
23234                              const int);
23235     vector signed short vec_sld (vector signed short,
23236                                  vector signed short,
23237                                  const int);
23238     vector unsigned short vec_sld (vector unsigned short,
23239                                    vector unsigned short,
23240                                    const int);
23241     vector bool short vec_sld (vector bool short,
23242                                vector bool short,
23243                                const int);
23244     vector pixel vec_sld (vector pixel,
23245                           vector pixel,
23246                           const int);
23247     vector signed char vec_sld (vector signed char,
23248                                 vector signed char,
23249                                 const int);
23250     vector unsigned char vec_sld (vector unsigned char,
23251                                   vector unsigned char,
23252                                   const int);
23253     vector bool char vec_sld (vector bool char,
23254                               vector bool char,
23255                               const int);
23256
23257     vector signed int vec_sll (vector signed int,
23258                                vector unsigned int);
23259     vector signed int vec_sll (vector signed int,
23260                                vector unsigned short);
23261     vector signed int vec_sll (vector signed int,
23262                                vector unsigned char);
23263     vector unsigned int vec_sll (vector unsigned int,
23264                                  vector unsigned int);
23265     vector unsigned int vec_sll (vector unsigned int,
23266                                  vector unsigned short);
23267     vector unsigned int vec_sll (vector unsigned int,
23268                                  vector unsigned char);
23269     vector bool int vec_sll (vector bool int,
23270                              vector unsigned int);
23271     vector bool int vec_sll (vector bool int,
23272                              vector unsigned short);
23273     vector bool int vec_sll (vector bool int,
23274                              vector unsigned char);
23275     vector signed short vec_sll (vector signed short,
23276                                  vector unsigned int);
23277     vector signed short vec_sll (vector signed short,
23278                                  vector unsigned short);
23279     vector signed short vec_sll (vector signed short,
23280                                  vector unsigned char);
23281     vector unsigned short vec_sll (vector unsigned short,
23282                                    vector unsigned int);
23283     vector unsigned short vec_sll (vector unsigned short,
23284                                    vector unsigned short);
23285     vector unsigned short vec_sll (vector unsigned short,
23286                                    vector unsigned char);
23287     vector bool short vec_sll (vector bool short, vector unsigned int);
23288     vector bool short vec_sll (vector bool short, vector unsigned short);
23289     vector bool short vec_sll (vector bool short, vector unsigned char);
23290     vector pixel vec_sll (vector pixel, vector unsigned int);
23291     vector pixel vec_sll (vector pixel, vector unsigned short);
23292     vector pixel vec_sll (vector pixel, vector unsigned char);
23293     vector signed char vec_sll (vector signed char, vector unsigned int);
23294     vector signed char vec_sll (vector signed char, vector unsigned short);
23295     vector signed char vec_sll (vector signed char, vector unsigned char);
23296     vector unsigned char vec_sll (vector unsigned char,
23297                                   vector unsigned int);
23298     vector unsigned char vec_sll (vector unsigned char,
23299                                   vector unsigned short);
23300     vector unsigned char vec_sll (vector unsigned char,
23301                                   vector unsigned char);
23302     vector bool char vec_sll (vector bool char, vector unsigned int);
23303     vector bool char vec_sll (vector bool char, vector unsigned short);
23304     vector bool char vec_sll (vector bool char, vector unsigned char);
23305
23306     vector float vec_slo (vector float, vector signed char);
23307     vector float vec_slo (vector float, vector unsigned char);
23308     vector signed int vec_slo (vector signed int, vector signed char);
23309     vector signed int vec_slo (vector signed int, vector unsigned char);
23310     vector unsigned int vec_slo (vector unsigned int, vector signed char);
23311     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
23312     vector signed short vec_slo (vector signed short, vector signed char);
23313     vector signed short vec_slo (vector signed short, vector unsigned char);
23314     vector unsigned short vec_slo (vector unsigned short,
23315                                    vector signed char);
23316     vector unsigned short vec_slo (vector unsigned short,
23317                                    vector unsigned char);
23318     vector pixel vec_slo (vector pixel, vector signed char);
23319     vector pixel vec_slo (vector pixel, vector unsigned char);
23320     vector signed char vec_slo (vector signed char, vector signed char);
23321     vector signed char vec_slo (vector signed char, vector unsigned char);
23322     vector unsigned char vec_slo (vector unsigned char, vector signed char);
23323     vector unsigned char vec_slo (vector unsigned char,
23324                                   vector unsigned char);
23325
23326     vector signed char vec_splat (vector signed char, const int);
23327     vector unsigned char vec_splat (vector unsigned char, const int);
23328     vector bool char vec_splat (vector bool char, const int);
23329     vector signed short vec_splat (vector signed short, const int);
23330     vector unsigned short vec_splat (vector unsigned short, const int);
23331     vector bool short vec_splat (vector bool short, const int);
23332     vector pixel vec_splat (vector pixel, const int);
23333     vector float vec_splat (vector float, const int);
23334     vector signed int vec_splat (vector signed int, const int);
23335     vector unsigned int vec_splat (vector unsigned int, const int);
23336     vector bool int vec_splat (vector bool int, const int);
23337
23338     vector float vec_vspltw (vector float, const int);
23339     vector signed int vec_vspltw (vector signed int, const int);
23340     vector unsigned int vec_vspltw (vector unsigned int, const int);
23341     vector bool int vec_vspltw (vector bool int, const int);
23342
23343     vector bool short vec_vsplth (vector bool short, const int);
23344     vector signed short vec_vsplth (vector signed short, const int);
23345     vector unsigned short vec_vsplth (vector unsigned short, const int);
23346     vector pixel vec_vsplth (vector pixel, const int);
23347
23348     vector signed char vec_vspltb (vector signed char, const int);
23349     vector unsigned char vec_vspltb (vector unsigned char, const int);
23350     vector bool char vec_vspltb (vector bool char, const int);
23351
23352     vector signed char vec_splat_s8 (const int);
23353
23354     vector signed short vec_splat_s16 (const int);
23355
23356     vector signed int vec_splat_s32 (const int);
23357
23358     vector unsigned char vec_splat_u8 (const int);
23359
23360     vector unsigned short vec_splat_u16 (const int);
23361
23362     vector unsigned int vec_splat_u32 (const int);
23363
23364     vector signed char vec_sr (vector signed char, vector unsigned char);
23365     vector unsigned char vec_sr (vector unsigned char,
23366                                  vector unsigned char);
23367     vector signed short vec_sr (vector signed short,
23368                                 vector unsigned short);
23369     vector unsigned short vec_sr (vector unsigned short,
23370                                   vector unsigned short);
23371     vector signed int vec_sr (vector signed int, vector unsigned int);
23372     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
23373
23374     vector signed int vec_vsrw (vector signed int, vector unsigned int);
23375     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
23376
23377     vector signed short vec_vsrh (vector signed short,
23378                                   vector unsigned short);
23379     vector unsigned short vec_vsrh (vector unsigned short,
23380                                     vector unsigned short);
23381
23382     vector signed char vec_vsrb (vector signed char, vector unsigned char);
23383     vector unsigned char vec_vsrb (vector unsigned char,
23384                                    vector unsigned char);
23385
23386     vector signed char vec_sra (vector signed char, vector unsigned char);
23387     vector unsigned char vec_sra (vector unsigned char,
23388                                   vector unsigned char);
23389     vector signed short vec_sra (vector signed short,
23390                                  vector unsigned short);
23391     vector unsigned short vec_sra (vector unsigned short,
23392                                    vector unsigned short);
23393     vector signed int vec_sra (vector signed int, vector unsigned int);
23394     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
23395
23396     vector signed int vec_vsraw (vector signed int, vector unsigned int);
23397     vector unsigned int vec_vsraw (vector unsigned int,
23398                                    vector unsigned int);
23399
23400     vector signed short vec_vsrah (vector signed short,
23401                                    vector unsigned short);
23402     vector unsigned short vec_vsrah (vector unsigned short,
23403                                      vector unsigned short);
23404
23405     vector signed char vec_vsrab (vector signed char, vector unsigned char);
23406     vector unsigned char vec_vsrab (vector unsigned char,
23407                                     vector unsigned char);
23408
23409     vector signed int vec_srl (vector signed int, vector unsigned int);
23410     vector signed int vec_srl (vector signed int, vector unsigned short);
23411     vector signed int vec_srl (vector signed int, vector unsigned char);
23412     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
23413     vector unsigned int vec_srl (vector unsigned int,
23414                                  vector unsigned short);
23415     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
23416     vector bool int vec_srl (vector bool int, vector unsigned int);
23417     vector bool int vec_srl (vector bool int, vector unsigned short);
23418     vector bool int vec_srl (vector bool int, vector unsigned char);
23419     vector signed short vec_srl (vector signed short, vector unsigned int);
23420     vector signed short vec_srl (vector signed short,
23421                                  vector unsigned short);
23422     vector signed short vec_srl (vector signed short, vector unsigned char);
23423     vector unsigned short vec_srl (vector unsigned short,
23424                                    vector unsigned int);
23425     vector unsigned short vec_srl (vector unsigned short,
23426                                    vector unsigned short);
23427     vector unsigned short vec_srl (vector unsigned short,
23428                                    vector unsigned char);
23429     vector bool short vec_srl (vector bool short, vector unsigned int);
23430     vector bool short vec_srl (vector bool short, vector unsigned short);
23431     vector bool short vec_srl (vector bool short, vector unsigned char);
23432     vector pixel vec_srl (vector pixel, vector unsigned int);
23433     vector pixel vec_srl (vector pixel, vector unsigned short);
23434     vector pixel vec_srl (vector pixel, vector unsigned char);
23435     vector signed char vec_srl (vector signed char, vector unsigned int);
23436     vector signed char vec_srl (vector signed char, vector unsigned short);
23437     vector signed char vec_srl (vector signed char, vector unsigned char);
23438     vector unsigned char vec_srl (vector unsigned char,
23439                                   vector unsigned int);
23440     vector unsigned char vec_srl (vector unsigned char,
23441                                   vector unsigned short);
23442     vector unsigned char vec_srl (vector unsigned char,
23443                                   vector unsigned char);
23444     vector bool char vec_srl (vector bool char, vector unsigned int);
23445     vector bool char vec_srl (vector bool char, vector unsigned short);
23446     vector bool char vec_srl (vector bool char, vector unsigned char);
23447
23448     vector float vec_sro (vector float, vector signed char);
23449     vector float vec_sro (vector float, vector unsigned char);
23450     vector signed int vec_sro (vector signed int, vector signed char);
23451     vector signed int vec_sro (vector signed int, vector unsigned char);
23452     vector unsigned int vec_sro (vector unsigned int, vector signed char);
23453     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
23454     vector signed short vec_sro (vector signed short, vector signed char);
23455     vector signed short vec_sro (vector signed short, vector unsigned char);
23456     vector unsigned short vec_sro (vector unsigned short,
23457                                    vector signed char);
23458     vector unsigned short vec_sro (vector unsigned short,
23459                                    vector unsigned char);
23460     vector pixel vec_sro (vector pixel, vector signed char);
23461     vector pixel vec_sro (vector pixel, vector unsigned char);
23462     vector signed char vec_sro (vector signed char, vector signed char);
23463     vector signed char vec_sro (vector signed char, vector unsigned char);
23464     vector unsigned char vec_sro (vector unsigned char, vector signed char);
23465     vector unsigned char vec_sro (vector unsigned char,
23466                                   vector unsigned char);
23467
23468     void vec_st (vector float, int, vector float *);
23469     void vec_st (vector float, int, float *);
23470     void vec_st (vector signed int, int, vector signed int *);
23471     void vec_st (vector signed int, int, int *);
23472     void vec_st (vector unsigned int, int, vector unsigned int *);
23473     void vec_st (vector unsigned int, int, unsigned int *);
23474     void vec_st (vector bool int, int, vector bool int *);
23475     void vec_st (vector bool int, int, unsigned int *);
23476     void vec_st (vector bool int, int, int *);
23477     void vec_st (vector signed short, int, vector signed short *);
23478     void vec_st (vector signed short, int, short *);
23479     void vec_st (vector unsigned short, int, vector unsigned short *);
23480     void vec_st (vector unsigned short, int, unsigned short *);
23481     void vec_st (vector bool short, int, vector bool short *);
23482     void vec_st (vector bool short, int, unsigned short *);
23483     void vec_st (vector pixel, int, vector pixel *);
23484     void vec_st (vector pixel, int, unsigned short *);
23485     void vec_st (vector pixel, int, short *);
23486     void vec_st (vector bool short, int, short *);
23487     void vec_st (vector signed char, int, vector signed char *);
23488     void vec_st (vector signed char, int, signed char *);
23489     void vec_st (vector unsigned char, int, vector unsigned char *);
23490     void vec_st (vector unsigned char, int, unsigned char *);
23491     void vec_st (vector bool char, int, vector bool char *);
23492     void vec_st (vector bool char, int, unsigned char *);
23493     void vec_st (vector bool char, int, signed char *);
23494
23495     void vec_ste (vector signed char, int, signed char *);
23496     void vec_ste (vector unsigned char, int, unsigned char *);
23497     void vec_ste (vector bool char, int, signed char *);
23498     void vec_ste (vector bool char, int, unsigned char *);
23499     void vec_ste (vector signed short, int, short *);
23500     void vec_ste (vector unsigned short, int, unsigned short *);
23501     void vec_ste (vector bool short, int, short *);
23502     void vec_ste (vector bool short, int, unsigned short *);
23503     void vec_ste (vector pixel, int, short *);
23504     void vec_ste (vector pixel, int, unsigned short *);
23505     void vec_ste (vector float, int, float *);
23506     void vec_ste (vector signed int, int, int *);
23507     void vec_ste (vector unsigned int, int, unsigned int *);
23508     void vec_ste (vector bool int, int, int *);
23509     void vec_ste (vector bool int, int, unsigned int *);
23510
23511     void vec_stvewx (vector float, int, float *);
23512     void vec_stvewx (vector signed int, int, int *);
23513     void vec_stvewx (vector unsigned int, int, unsigned int *);
23514     void vec_stvewx (vector bool int, int, int *);
23515     void vec_stvewx (vector bool int, int, unsigned int *);
23516
23517     void vec_stvehx (vector signed short, int, short *);
23518     void vec_stvehx (vector unsigned short, int, unsigned short *);
23519     void vec_stvehx (vector bool short, int, short *);
23520     void vec_stvehx (vector bool short, int, unsigned short *);
23521     void vec_stvehx (vector pixel, int, short *);
23522     void vec_stvehx (vector pixel, int, unsigned short *);
23523
23524     void vec_stvebx (vector signed char, int, signed char *);
23525     void vec_stvebx (vector unsigned char, int, unsigned char *);
23526     void vec_stvebx (vector bool char, int, signed char *);
23527     void vec_stvebx (vector bool char, int, unsigned char *);
23528
23529     void vec_stl (vector float, int, vector float *);
23530     void vec_stl (vector float, int, float *);
23531     void vec_stl (vector signed int, int, vector signed int *);
23532     void vec_stl (vector signed int, int, int *);
23533     void vec_stl (vector unsigned int, int, vector unsigned int *);
23534     void vec_stl (vector unsigned int, int, unsigned int *);
23535     void vec_stl (vector bool int, int, vector bool int *);
23536     void vec_stl (vector bool int, int, unsigned int *);
23537     void vec_stl (vector bool int, int, int *);
23538     void vec_stl (vector signed short, int, vector signed short *);
23539     void vec_stl (vector signed short, int, short *);
23540     void vec_stl (vector unsigned short, int, vector unsigned short *);
23541     void vec_stl (vector unsigned short, int, unsigned short *);
23542     void vec_stl (vector bool short, int, vector bool short *);
23543     void vec_stl (vector bool short, int, unsigned short *);
23544     void vec_stl (vector bool short, int, short *);
23545     void vec_stl (vector pixel, int, vector pixel *);
23546     void vec_stl (vector pixel, int, unsigned short *);
23547     void vec_stl (vector pixel, int, short *);
23548     void vec_stl (vector signed char, int, vector signed char *);
23549     void vec_stl (vector signed char, int, signed char *);
23550     void vec_stl (vector unsigned char, int, vector unsigned char *);
23551     void vec_stl (vector unsigned char, int, unsigned char *);
23552     void vec_stl (vector bool char, int, vector bool char *);
23553     void vec_stl (vector bool char, int, unsigned char *);
23554     void vec_stl (vector bool char, int, signed char *);
23555
23556     vector signed char vec_sub (vector bool char, vector signed char);
23557     vector signed char vec_sub (vector signed char, vector bool char);
23558     vector signed char vec_sub (vector signed char, vector signed char);
23559     vector unsigned char vec_sub (vector bool char, vector unsigned char);
23560     vector unsigned char vec_sub (vector unsigned char, vector bool char);
23561     vector unsigned char vec_sub (vector unsigned char,
23562                                   vector unsigned char);
23563     vector signed short vec_sub (vector bool short, vector signed short);
23564     vector signed short vec_sub (vector signed short, vector bool short);
23565     vector signed short vec_sub (vector signed short, vector signed short);
23566     vector unsigned short vec_sub (vector bool short,
23567                                    vector unsigned short);
23568     vector unsigned short vec_sub (vector unsigned short,
23569                                    vector bool short);
23570     vector unsigned short vec_sub (vector unsigned short,
23571                                    vector unsigned short);
23572     vector signed int vec_sub (vector bool int, vector signed int);
23573     vector signed int vec_sub (vector signed int, vector bool int);
23574     vector signed int vec_sub (vector signed int, vector signed int);
23575     vector unsigned int vec_sub (vector bool int, vector unsigned int);
23576     vector unsigned int vec_sub (vector unsigned int, vector bool int);
23577     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
23578     vector float vec_sub (vector float, vector float);
23579
23580     vector float vec_vsubfp (vector float, vector float);
23581
23582     vector signed int vec_vsubuwm (vector bool int, vector signed int);
23583     vector signed int vec_vsubuwm (vector signed int, vector bool int);
23584     vector signed int vec_vsubuwm (vector signed int, vector signed int);
23585     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
23586     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
23587     vector unsigned int vec_vsubuwm (vector unsigned int,
23588                                      vector unsigned int);
23589
23590     vector signed short vec_vsubuhm (vector bool short,
23591                                      vector signed short);
23592     vector signed short vec_vsubuhm (vector signed short,
23593                                      vector bool short);
23594     vector signed short vec_vsubuhm (vector signed short,
23595                                      vector signed short);
23596     vector unsigned short vec_vsubuhm (vector bool short,
23597                                        vector unsigned short);
23598     vector unsigned short vec_vsubuhm (vector unsigned short,
23599                                        vector bool short);
23600     vector unsigned short vec_vsubuhm (vector unsigned short,
23601                                        vector unsigned short);
23602
23603     vector signed char vec_vsububm (vector bool char, vector signed char);
23604     vector signed char vec_vsububm (vector signed char, vector bool char);
23605     vector signed char vec_vsububm (vector signed char, vector signed char);
23606     vector unsigned char vec_vsububm (vector bool char,
23607                                       vector unsigned char);
23608     vector unsigned char vec_vsububm (vector unsigned char,
23609                                       vector bool char);
23610     vector unsigned char vec_vsububm (vector unsigned char,
23611                                       vector unsigned char);
23612
23613     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
23614
23615     vector unsigned char vec_subs (vector bool char, vector unsigned char);
23616     vector unsigned char vec_subs (vector unsigned char, vector bool char);
23617     vector unsigned char vec_subs (vector unsigned char,
23618                                    vector unsigned char);
23619     vector signed char vec_subs (vector bool char, vector signed char);
23620     vector signed char vec_subs (vector signed char, vector bool char);
23621     vector signed char vec_subs (vector signed char, vector signed char);
23622     vector unsigned short vec_subs (vector bool short,
23623                                     vector unsigned short);
23624     vector unsigned short vec_subs (vector unsigned short,
23625                                     vector bool short);
23626     vector unsigned short vec_subs (vector unsigned short,
23627                                     vector unsigned short);
23628     vector signed short vec_subs (vector bool short, vector signed short);
23629     vector signed short vec_subs (vector signed short, vector bool short);
23630     vector signed short vec_subs (vector signed short, vector signed short);
23631     vector unsigned int vec_subs (vector bool int, vector unsigned int);
23632     vector unsigned int vec_subs (vector unsigned int, vector bool int);
23633     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
23634     vector signed int vec_subs (vector bool int, vector signed int);
23635     vector signed int vec_subs (vector signed int, vector bool int);
23636     vector signed int vec_subs (vector signed int, vector signed int);
23637
23638     vector signed int vec_vsubsws (vector bool int, vector signed int);
23639     vector signed int vec_vsubsws (vector signed int, vector bool int);
23640     vector signed int vec_vsubsws (vector signed int, vector signed int);
23641
23642     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
23643     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
23644     vector unsigned int vec_vsubuws (vector unsigned int,
23645                                      vector unsigned int);
23646
23647     vector signed short vec_vsubshs (vector bool short,
23648                                      vector signed short);
23649     vector signed short vec_vsubshs (vector signed short,
23650                                      vector bool short);
23651     vector signed short vec_vsubshs (vector signed short,
23652                                      vector signed short);
23653
23654     vector unsigned short vec_vsubuhs (vector bool short,
23655                                        vector unsigned short);
23656     vector unsigned short vec_vsubuhs (vector unsigned short,
23657                                        vector bool short);
23658     vector unsigned short vec_vsubuhs (vector unsigned short,
23659                                        vector unsigned short);
23660
23661     vector signed char vec_vsubsbs (vector bool char, vector signed char);
23662     vector signed char vec_vsubsbs (vector signed char, vector bool char);
23663     vector signed char vec_vsubsbs (vector signed char, vector signed char);
23664
23665     vector unsigned char vec_vsububs (vector bool char,
23666                                       vector unsigned char);
23667     vector unsigned char vec_vsububs (vector unsigned char,
23668                                       vector bool char);
23669     vector unsigned char vec_vsububs (vector unsigned char,
23670                                       vector unsigned char);
23671
23672     vector unsigned int vec_sum4s (vector unsigned char,
23673                                    vector unsigned int);
23674     vector signed int vec_sum4s (vector signed char, vector signed int);
23675     vector signed int vec_sum4s (vector signed short, vector signed int);
23676
23677     vector signed int vec_vsum4shs (vector signed short, vector signed int);
23678
23679     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
23680
23681     vector unsigned int vec_vsum4ubs (vector unsigned char,
23682                                       vector unsigned int);
23683
23684     vector signed int vec_sum2s (vector signed int, vector signed int);
23685
23686     vector signed int vec_sums (vector signed int, vector signed int);
23687
23688     vector float vec_trunc (vector float);
23689
23690     vector signed short vec_unpackh (vector signed char);
23691     vector bool short vec_unpackh (vector bool char);
23692     vector signed int vec_unpackh (vector signed short);
23693     vector bool int vec_unpackh (vector bool short);
23694     vector unsigned int vec_unpackh (vector pixel);
23695
23696     vector bool int vec_vupkhsh (vector bool short);
23697     vector signed int vec_vupkhsh (vector signed short);
23698
23699     vector unsigned int vec_vupkhpx (vector pixel);
23700
23701     vector bool short vec_vupkhsb (vector bool char);
23702     vector signed short vec_vupkhsb (vector signed char);
23703
23704     vector signed short vec_unpackl (vector signed char);
23705     vector bool short vec_unpackl (vector bool char);
23706     vector unsigned int vec_unpackl (vector pixel);
23707     vector signed int vec_unpackl (vector signed short);
23708     vector bool int vec_unpackl (vector bool short);
23709
23710     vector unsigned int vec_vupklpx (vector pixel);
23711
23712     vector bool int vec_vupklsh (vector bool short);
23713     vector signed int vec_vupklsh (vector signed short);
23714
23715     vector bool short vec_vupklsb (vector bool char);
23716     vector signed short vec_vupklsb (vector signed char);
23717
23718     vector float vec_xor (vector float, vector float);
23719     vector float vec_xor (vector float, vector bool int);
23720     vector float vec_xor (vector bool int, vector float);
23721     vector bool int vec_xor (vector bool int, vector bool int);
23722     vector signed int vec_xor (vector bool int, vector signed int);
23723     vector signed int vec_xor (vector signed int, vector bool int);
23724     vector signed int vec_xor (vector signed int, vector signed int);
23725     vector unsigned int vec_xor (vector bool int, vector unsigned int);
23726     vector unsigned int vec_xor (vector unsigned int, vector bool int);
23727     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
23728     vector bool short vec_xor (vector bool short, vector bool short);
23729     vector signed short vec_xor (vector bool short, vector signed short);
23730     vector signed short vec_xor (vector signed short, vector bool short);
23731     vector signed short vec_xor (vector signed short, vector signed short);
23732     vector unsigned short vec_xor (vector bool short,
23733                                    vector unsigned short);
23734     vector unsigned short vec_xor (vector unsigned short,
23735                                    vector bool short);
23736     vector unsigned short vec_xor (vector unsigned short,
23737                                    vector unsigned short);
23738     vector signed char vec_xor (vector bool char, vector signed char);
23739     vector bool char vec_xor (vector bool char, vector bool char);
23740     vector signed char vec_xor (vector signed char, vector bool char);
23741     vector signed char vec_xor (vector signed char, vector signed char);
23742     vector unsigned char vec_xor (vector bool char, vector unsigned char);
23743     vector unsigned char vec_xor (vector unsigned char, vector bool char);
23744     vector unsigned char vec_xor (vector unsigned char,
23745                                   vector unsigned char);
23746
23747     int vec_all_eq (vector signed char, vector bool char);
23748     int vec_all_eq (vector signed char, vector signed char);
23749     int vec_all_eq (vector unsigned char, vector bool char);
23750     int vec_all_eq (vector unsigned char, vector unsigned char);
23751     int vec_all_eq (vector bool char, vector bool char);
23752     int vec_all_eq (vector bool char, vector unsigned char);
23753     int vec_all_eq (vector bool char, vector signed char);
23754     int vec_all_eq (vector signed short, vector bool short);
23755     int vec_all_eq (vector signed short, vector signed short);
23756     int vec_all_eq (vector unsigned short, vector bool short);
23757     int vec_all_eq (vector unsigned short, vector unsigned short);
23758     int vec_all_eq (vector bool short, vector bool short);
23759     int vec_all_eq (vector bool short, vector unsigned short);
23760     int vec_all_eq (vector bool short, vector signed short);
23761     int vec_all_eq (vector pixel, vector pixel);
23762     int vec_all_eq (vector signed int, vector bool int);
23763     int vec_all_eq (vector signed int, vector signed int);
23764     int vec_all_eq (vector unsigned int, vector bool int);
23765     int vec_all_eq (vector unsigned int, vector unsigned int);
23766     int vec_all_eq (vector bool int, vector bool int);
23767     int vec_all_eq (vector bool int, vector unsigned int);
23768     int vec_all_eq (vector bool int, vector signed int);
23769     int vec_all_eq (vector float, vector float);
23770
23771     int vec_all_ge (vector bool char, vector unsigned char);
23772     int vec_all_ge (vector unsigned char, vector bool char);
23773     int vec_all_ge (vector unsigned char, vector unsigned char);
23774     int vec_all_ge (vector bool char, vector signed char);
23775     int vec_all_ge (vector signed char, vector bool char);
23776     int vec_all_ge (vector signed char, vector signed char);
23777     int vec_all_ge (vector bool short, vector unsigned short);
23778     int vec_all_ge (vector unsigned short, vector bool short);
23779     int vec_all_ge (vector unsigned short, vector unsigned short);
23780     int vec_all_ge (vector signed short, vector signed short);
23781     int vec_all_ge (vector bool short, vector signed short);
23782     int vec_all_ge (vector signed short, vector bool short);
23783     int vec_all_ge (vector bool int, vector unsigned int);
23784     int vec_all_ge (vector unsigned int, vector bool int);
23785     int vec_all_ge (vector unsigned int, vector unsigned int);
23786     int vec_all_ge (vector bool int, vector signed int);
23787     int vec_all_ge (vector signed int, vector bool int);
23788     int vec_all_ge (vector signed int, vector signed int);
23789     int vec_all_ge (vector float, vector float);
23790
23791     int vec_all_gt (vector bool char, vector unsigned char);
23792     int vec_all_gt (vector unsigned char, vector bool char);
23793     int vec_all_gt (vector unsigned char, vector unsigned char);
23794     int vec_all_gt (vector bool char, vector signed char);
23795     int vec_all_gt (vector signed char, vector bool char);
23796     int vec_all_gt (vector signed char, vector signed char);
23797     int vec_all_gt (vector bool short, vector unsigned short);
23798     int vec_all_gt (vector unsigned short, vector bool short);
23799     int vec_all_gt (vector unsigned short, vector unsigned short);
23800     int vec_all_gt (vector bool short, vector signed short);
23801     int vec_all_gt (vector signed short, vector bool short);
23802     int vec_all_gt (vector signed short, vector signed short);
23803     int vec_all_gt (vector bool int, vector unsigned int);
23804     int vec_all_gt (vector unsigned int, vector bool int);
23805     int vec_all_gt (vector unsigned int, vector unsigned int);
23806     int vec_all_gt (vector bool int, vector signed int);
23807     int vec_all_gt (vector signed int, vector bool int);
23808     int vec_all_gt (vector signed int, vector signed int);
23809     int vec_all_gt (vector float, vector float);
23810
23811     int vec_all_in (vector float, vector float);
23812
23813     int vec_all_le (vector bool char, vector unsigned char);
23814     int vec_all_le (vector unsigned char, vector bool char);
23815     int vec_all_le (vector unsigned char, vector unsigned char);
23816     int vec_all_le (vector bool char, vector signed char);
23817     int vec_all_le (vector signed char, vector bool char);
23818     int vec_all_le (vector signed char, vector signed char);
23819     int vec_all_le (vector bool short, vector unsigned short);
23820     int vec_all_le (vector unsigned short, vector bool short);
23821     int vec_all_le (vector unsigned short, vector unsigned short);
23822     int vec_all_le (vector bool short, vector signed short);
23823     int vec_all_le (vector signed short, vector bool short);
23824     int vec_all_le (vector signed short, vector signed short);
23825     int vec_all_le (vector bool int, vector unsigned int);
23826     int vec_all_le (vector unsigned int, vector bool int);
23827     int vec_all_le (vector unsigned int, vector unsigned int);
23828     int vec_all_le (vector bool int, vector signed int);
23829     int vec_all_le (vector signed int, vector bool int);
23830     int vec_all_le (vector signed int, vector signed int);
23831     int vec_all_le (vector float, vector float);
23832
23833     int vec_all_lt (vector bool char, vector unsigned char);
23834     int vec_all_lt (vector unsigned char, vector bool char);
23835     int vec_all_lt (vector unsigned char, vector unsigned char);
23836     int vec_all_lt (vector bool char, vector signed char);
23837     int vec_all_lt (vector signed char, vector bool char);
23838     int vec_all_lt (vector signed char, vector signed char);
23839     int vec_all_lt (vector bool short, vector unsigned short);
23840     int vec_all_lt (vector unsigned short, vector bool short);
23841     int vec_all_lt (vector unsigned short, vector unsigned short);
23842     int vec_all_lt (vector bool short, vector signed short);
23843     int vec_all_lt (vector signed short, vector bool short);
23844     int vec_all_lt (vector signed short, vector signed short);
23845     int vec_all_lt (vector bool int, vector unsigned int);
23846     int vec_all_lt (vector unsigned int, vector bool int);
23847     int vec_all_lt (vector unsigned int, vector unsigned int);
23848     int vec_all_lt (vector bool int, vector signed int);
23849     int vec_all_lt (vector signed int, vector bool int);
23850     int vec_all_lt (vector signed int, vector signed int);
23851     int vec_all_lt (vector float, vector float);
23852
23853     int vec_all_nan (vector float);
23854
23855     int vec_all_ne (vector signed char, vector bool char);
23856     int vec_all_ne (vector signed char, vector signed char);
23857     int vec_all_ne (vector unsigned char, vector bool char);
23858     int vec_all_ne (vector unsigned char, vector unsigned char);
23859     int vec_all_ne (vector bool char, vector bool char);
23860     int vec_all_ne (vector bool char, vector unsigned char);
23861     int vec_all_ne (vector bool char, vector signed char);
23862     int vec_all_ne (vector signed short, vector bool short);
23863     int vec_all_ne (vector signed short, vector signed short);
23864     int vec_all_ne (vector unsigned short, vector bool short);
23865     int vec_all_ne (vector unsigned short, vector unsigned short);
23866     int vec_all_ne (vector bool short, vector bool short);
23867     int vec_all_ne (vector bool short, vector unsigned short);
23868     int vec_all_ne (vector bool short, vector signed short);
23869     int vec_all_ne (vector pixel, vector pixel);
23870     int vec_all_ne (vector signed int, vector bool int);
23871     int vec_all_ne (vector signed int, vector signed int);
23872     int vec_all_ne (vector unsigned int, vector bool int);
23873     int vec_all_ne (vector unsigned int, vector unsigned int);
23874     int vec_all_ne (vector bool int, vector bool int);
23875     int vec_all_ne (vector bool int, vector unsigned int);
23876     int vec_all_ne (vector bool int, vector signed int);
23877     int vec_all_ne (vector float, vector float);
23878
23879     int vec_all_nge (vector float, vector float);
23880
23881     int vec_all_ngt (vector float, vector float);
23882
23883     int vec_all_nle (vector float, vector float);
23884
23885     int vec_all_nlt (vector float, vector float);
23886
23887     int vec_all_numeric (vector float);
23888
23889     int vec_any_eq (vector signed char, vector bool char);
23890     int vec_any_eq (vector signed char, vector signed char);
23891     int vec_any_eq (vector unsigned char, vector bool char);
23892     int vec_any_eq (vector unsigned char, vector unsigned char);
23893     int vec_any_eq (vector bool char, vector bool char);
23894     int vec_any_eq (vector bool char, vector unsigned char);
23895     int vec_any_eq (vector bool char, vector signed char);
23896     int vec_any_eq (vector signed short, vector bool short);
23897     int vec_any_eq (vector signed short, vector signed short);
23898     int vec_any_eq (vector unsigned short, vector bool short);
23899     int vec_any_eq (vector unsigned short, vector unsigned short);
23900     int vec_any_eq (vector bool short, vector bool short);
23901     int vec_any_eq (vector bool short, vector unsigned short);
23902     int vec_any_eq (vector bool short, vector signed short);
23903     int vec_any_eq (vector pixel, vector pixel);
23904     int vec_any_eq (vector signed int, vector bool int);
23905     int vec_any_eq (vector signed int, vector signed int);
23906     int vec_any_eq (vector unsigned int, vector bool int);
23907     int vec_any_eq (vector unsigned int, vector unsigned int);
23908     int vec_any_eq (vector bool int, vector bool int);
23909     int vec_any_eq (vector bool int, vector unsigned int);
23910     int vec_any_eq (vector bool int, vector signed int);
23911     int vec_any_eq (vector float, vector float);
23912
23913     int vec_any_ge (vector signed char, vector bool char);
23914     int vec_any_ge (vector unsigned char, vector bool char);
23915     int vec_any_ge (vector unsigned char, vector unsigned char);
23916     int vec_any_ge (vector signed char, vector signed char);
23917     int vec_any_ge (vector bool char, vector unsigned char);
23918     int vec_any_ge (vector bool char, vector signed char);
23919     int vec_any_ge (vector unsigned short, vector bool short);
23920     int vec_any_ge (vector unsigned short, vector unsigned short);
23921     int vec_any_ge (vector signed short, vector signed short);
23922     int vec_any_ge (vector signed short, vector bool short);
23923     int vec_any_ge (vector bool short, vector unsigned short);
23924     int vec_any_ge (vector bool short, vector signed short);
23925     int vec_any_ge (vector signed int, vector bool int);
23926     int vec_any_ge (vector unsigned int, vector bool int);
23927     int vec_any_ge (vector unsigned int, vector unsigned int);
23928     int vec_any_ge (vector signed int, vector signed int);
23929     int vec_any_ge (vector bool int, vector unsigned int);
23930     int vec_any_ge (vector bool int, vector signed int);
23931     int vec_any_ge (vector float, vector float);
23932
23933     int vec_any_gt (vector bool char, vector unsigned char);
23934     int vec_any_gt (vector unsigned char, vector bool char);
23935     int vec_any_gt (vector unsigned char, vector unsigned char);
23936     int vec_any_gt (vector bool char, vector signed char);
23937     int vec_any_gt (vector signed char, vector bool char);
23938     int vec_any_gt (vector signed char, vector signed char);
23939     int vec_any_gt (vector bool short, vector unsigned short);
23940     int vec_any_gt (vector unsigned short, vector bool short);
23941     int vec_any_gt (vector unsigned short, vector unsigned short);
23942     int vec_any_gt (vector bool short, vector signed short);
23943     int vec_any_gt (vector signed short, vector bool short);
23944     int vec_any_gt (vector signed short, vector signed short);
23945     int vec_any_gt (vector bool int, vector unsigned int);
23946     int vec_any_gt (vector unsigned int, vector bool int);
23947     int vec_any_gt (vector unsigned int, vector unsigned int);
23948     int vec_any_gt (vector bool int, vector signed int);
23949     int vec_any_gt (vector signed int, vector bool int);
23950     int vec_any_gt (vector signed int, vector signed int);
23951     int vec_any_gt (vector float, vector float);
23952
23953     int vec_any_le (vector bool char, vector unsigned char);
23954     int vec_any_le (vector unsigned char, vector bool char);
23955     int vec_any_le (vector unsigned char, vector unsigned char);
23956     int vec_any_le (vector bool char, vector signed char);
23957     int vec_any_le (vector signed char, vector bool char);
23958     int vec_any_le (vector signed char, vector signed char);
23959     int vec_any_le (vector bool short, vector unsigned short);
23960     int vec_any_le (vector unsigned short, vector bool short);
23961     int vec_any_le (vector unsigned short, vector unsigned short);
23962     int vec_any_le (vector bool short, vector signed short);
23963     int vec_any_le (vector signed short, vector bool short);
23964     int vec_any_le (vector signed short, vector signed short);
23965     int vec_any_le (vector bool int, vector unsigned int);
23966     int vec_any_le (vector unsigned int, vector bool int);
23967     int vec_any_le (vector unsigned int, vector unsigned int);
23968     int vec_any_le (vector bool int, vector signed int);
23969     int vec_any_le (vector signed int, vector bool int);
23970     int vec_any_le (vector signed int, vector signed int);
23971     int vec_any_le (vector float, vector float);
23972
23973     int vec_any_lt (vector bool char, vector unsigned char);
23974     int vec_any_lt (vector unsigned char, vector bool char);
23975     int vec_any_lt (vector unsigned char, vector unsigned char);
23976     int vec_any_lt (vector bool char, vector signed char);
23977     int vec_any_lt (vector signed char, vector bool char);
23978     int vec_any_lt (vector signed char, vector signed char);
23979     int vec_any_lt (vector bool short, vector unsigned short);
23980     int vec_any_lt (vector unsigned short, vector bool short);
23981     int vec_any_lt (vector unsigned short, vector unsigned short);
23982     int vec_any_lt (vector bool short, vector signed short);
23983     int vec_any_lt (vector signed short, vector bool short);
23984     int vec_any_lt (vector signed short, vector signed short);
23985     int vec_any_lt (vector bool int, vector unsigned int);
23986     int vec_any_lt (vector unsigned int, vector bool int);
23987     int vec_any_lt (vector unsigned int, vector unsigned int);
23988     int vec_any_lt (vector bool int, vector signed int);
23989     int vec_any_lt (vector signed int, vector bool int);
23990     int vec_any_lt (vector signed int, vector signed int);
23991     int vec_any_lt (vector float, vector float);
23992
23993     int vec_any_nan (vector float);
23994
23995     int vec_any_ne (vector signed char, vector bool char);
23996     int vec_any_ne (vector signed char, vector signed char);
23997     int vec_any_ne (vector unsigned char, vector bool char);
23998     int vec_any_ne (vector unsigned char, vector unsigned char);
23999     int vec_any_ne (vector bool char, vector bool char);
24000     int vec_any_ne (vector bool char, vector unsigned char);
24001     int vec_any_ne (vector bool char, vector signed char);
24002     int vec_any_ne (vector signed short, vector bool short);
24003     int vec_any_ne (vector signed short, vector signed short);
24004     int vec_any_ne (vector unsigned short, vector bool short);
24005     int vec_any_ne (vector unsigned short, vector unsigned short);
24006     int vec_any_ne (vector bool short, vector bool short);
24007     int vec_any_ne (vector bool short, vector unsigned short);
24008     int vec_any_ne (vector bool short, vector signed short);
24009     int vec_any_ne (vector pixel, vector pixel);
24010     int vec_any_ne (vector signed int, vector bool int);
24011     int vec_any_ne (vector signed int, vector signed int);
24012     int vec_any_ne (vector unsigned int, vector bool int);
24013     int vec_any_ne (vector unsigned int, vector unsigned int);
24014     int vec_any_ne (vector bool int, vector bool int);
24015     int vec_any_ne (vector bool int, vector unsigned int);
24016     int vec_any_ne (vector bool int, vector signed int);
24017     int vec_any_ne (vector float, vector float);
24018
24019     int vec_any_nge (vector float, vector float);
24020
24021     int vec_any_ngt (vector float, vector float);
24022
24023     int vec_any_nle (vector float, vector float);
24024
24025     int vec_any_nlt (vector float, vector float);
24026
24027     int vec_any_numeric (vector float);
24028
24029     int vec_any_out (vector float, vector float);
24030
24031
24032File: gcc.info,  Node: SPARC VIS Built-in Functions,  Prev: PowerPC AltiVec Built-in Functions,  Up: Target Builtins
24033
240345.48.9 SPARC VIS Built-in Functions
24035-----------------------------------
24036
24037GCC supports SIMD operations on the SPARC using both the generic vector
24038extensions (*note Vector Extensions::) as well as built-in functions for
24039the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
24040switch, the VIS extension is exposed as the following built-in
24041functions:
24042
24043     typedef int v2si __attribute__ ((vector_size (8)));
24044     typedef short v4hi __attribute__ ((vector_size (8)));
24045     typedef short v2hi __attribute__ ((vector_size (4)));
24046     typedef char v8qi __attribute__ ((vector_size (8)));
24047     typedef char v4qi __attribute__ ((vector_size (4)));
24048
24049     void * __builtin_vis_alignaddr (void *, long);
24050     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
24051     v2si __builtin_vis_faligndatav2si (v2si, v2si);
24052     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
24053     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
24054
24055     v4hi __builtin_vis_fexpand (v4qi);
24056
24057     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
24058     v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
24059     v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
24060     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
24061     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
24062     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
24063     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
24064
24065     v4qi __builtin_vis_fpack16 (v4hi);
24066     v8qi __builtin_vis_fpack32 (v2si, v2si);
24067     v2hi __builtin_vis_fpackfix (v2si);
24068     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
24069
24070     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
24071
24072
24073File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
24074
240755.49 Format Checks Specific to Particular Target Machines
24076=========================================================
24077
24078For some target machines, GCC supports additional options to the format
24079attribute (*note Declaring Attributes of Functions: Function
24080Attributes.).
24081
24082* Menu:
24083
24084* Solaris Format Checks::
24085
24086
24087File: gcc.info,  Node: Solaris Format Checks,  Up: Target Format Checks
24088
240895.49.1 Solaris Format Checks
24090----------------------------
24091
24092Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
24093`cmn_err' accepts a subset of the standard `printf' conversions, and
24094the two-argument `%b' conversion for displaying bit-fields.  See the
24095Solaris man page for `cmn_err' for more information.
24096
24097
24098File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
24099
241005.50 Pragmas Accepted by GCC
24101============================
24102
24103GCC supports several types of pragmas, primarily in order to compile
24104code originally written for other compilers.  Note that in general we
24105do not recommend the use of pragmas; *Note Function Attributes::, for
24106further explanation.
24107
24108* Menu:
24109
24110* ARM Pragmas::
24111* M32C Pragmas::
24112* RS/6000 and PowerPC Pragmas::
24113* Darwin Pragmas::
24114* Solaris Pragmas::
24115* Symbol-Renaming Pragmas::
24116* Structure-Packing Pragmas::
24117* Weak Pragmas::
24118* Diagnostic Pragmas::
24119* Visibility Pragmas::
24120
24121
24122File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
24123
241245.50.1 ARM Pragmas
24125------------------
24126
24127The ARM target defines pragmas for controlling the default addition of
24128`long_call' and `short_call' attributes to functions.  *Note Function
24129Attributes::, for information about the effects of these attributes.
24130
24131`long_calls'
24132     Set all subsequent functions to have the `long_call' attribute.
24133
24134`no_long_calls'
24135     Set all subsequent functions to have the `short_call' attribute.
24136
24137`long_calls_off'
24138     Do not affect the `long_call' or `short_call' attributes of
24139     subsequent functions.
24140
24141
24142File: gcc.info,  Node: M32C Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
24143
241445.50.2 M32C Pragmas
24145-------------------
24146
24147`memregs NUMBER'
24148     Overrides the command line option `-memregs=' for the current
24149     file.  Use with care!  This pragma must be before any function in
24150     the file, and mixing different memregs values in different objects
24151     may make them incompatible.  This pragma is useful when a
24152     performance-critical function uses a memreg for temporary values,
24153     as it may allow you to reduce the number of memregs used.
24154
24155
24156
24157File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
24158
241595.50.3 RS/6000 and PowerPC Pragmas
24160----------------------------------
24161
24162The RS/6000 and PowerPC targets define one pragma for controlling
24163whether or not the `longcall' attribute is added to function
24164declarations by default.  This pragma overrides the `-mlongcall'
24165option, but not the `longcall' and `shortcall' attributes.  *Note
24166RS/6000 and PowerPC Options::, for more information about when long
24167calls are and are not necessary.
24168
24169`longcall (1)'
24170     Apply the `longcall' attribute to all subsequent function
24171     declarations.
24172
24173`longcall (0)'
24174     Do not apply the `longcall' attribute to subsequent function
24175     declarations.
24176
24177
24178File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
24179
241805.50.4 Darwin Pragmas
24181---------------------
24182
24183The following pragmas are available for all architectures running the
24184Darwin operating system.  These are useful for compatibility with other
24185Mac OS compilers.
24186
24187`mark TOKENS...'
24188     This pragma is accepted, but has no effect.
24189
24190`options align=ALIGNMENT'
24191     This pragma sets the alignment of fields in structures.  The
24192     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
24193     `power', to emulate PowerPC alignment.  Uses of this pragma nest
24194     properly; to restore the previous setting, use `reset' for the
24195     ALIGNMENT.
24196
24197`segment TOKENS...'
24198     This pragma is accepted, but has no effect.
24199
24200`unused (VAR [, VAR]...)'
24201     This pragma declares variables to be possibly unused.  GCC will not
24202     produce warnings for the listed variables.  The effect is similar
24203     to that of the `unused' attribute, except that this pragma may
24204     appear anywhere within the variables' scopes.
24205
24206
24207File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
24208
242095.50.5 Solaris Pragmas
24210----------------------
24211
24212The Solaris target supports `#pragma redefine_extname' (*note
24213Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
24214directives for compatibility with the system compiler.
24215
24216`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
24217     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
24218     This is the same as GCC's `aligned' attribute *note Variable
24219     Attributes::).  Macro expansion occurs on the arguments to this
24220     pragma when compiling C and Objective-C.  It does not currently
24221     occur when compiling C++, but this is a bug which may be fixed in
24222     a future release.
24223
24224`fini (FUNCTION [, FUNCTION]...)'
24225     This pragma causes each listed FUNCTION to be called after main,
24226     or during shared module unloading, by adding a call to the `.fini'
24227     section.
24228
24229`init (FUNCTION [, FUNCTION]...)'
24230     This pragma causes each listed FUNCTION to be called during
24231     initialization (before `main') or during shared module loading, by
24232     adding a call to the `.init' section.
24233
24234
24235
24236File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
24237
242385.50.6 Symbol-Renaming Pragmas
24239------------------------------
24240
24241For compatibility with the Solaris and Tru64 UNIX system headers, GCC
24242supports two `#pragma' directives which change the name used in
24243assembly for a given declaration.  These pragmas are only available on
24244platforms whose system headers need them.  To get this effect on all
24245platforms supported by GCC, use the asm labels extension (*note Asm
24246Labels::).
24247
24248`redefine_extname OLDNAME NEWNAME'
24249     This pragma gives the C function OLDNAME the assembly symbol
24250     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
24251     be defined if this pragma is available (currently only on Solaris).
24252
24253`extern_prefix STRING'
24254     This pragma causes all subsequent external function and variable
24255     declarations to have STRING prepended to their assembly symbols.
24256     This effect may be terminated with another `extern_prefix' pragma
24257     whose argument is an empty string.  The preprocessor macro
24258     `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
24259     available (currently only on Tru64 UNIX).
24260
24261 These pragmas and the asm labels extension interact in a complicated
24262manner.  Here are some corner cases you may want to be aware of.
24263
24264  1. Both pragmas silently apply only to declarations with external
24265     linkage.  Asm labels do not have this restriction.
24266
24267  2. In C++, both pragmas silently apply only to declarations with "C"
24268     linkage.  Again, asm labels do not have this restriction.
24269
24270  3. If any of the three ways of changing the assembly name of a
24271     declaration is applied to a declaration whose assembly name has
24272     already been determined (either by a previous use of one of these
24273     features, or because the compiler needed the assembly name in
24274     order to generate code), and the new name is different, a warning
24275     issues and the name does not change.
24276
24277  4. The OLDNAME used by `#pragma redefine_extname' is always the
24278     C-language name.
24279
24280  5. If `#pragma extern_prefix' is in effect, and a declaration occurs
24281     with an asm label attached, the prefix is silently ignored for
24282     that declaration.
24283
24284  6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
24285     the same declaration, whichever triggered first wins, and a
24286     warning issues if they contradict each other.  (We would like to
24287     have `#pragma redefine_extname' always win, for consistency with
24288     asm labels, but if `#pragma extern_prefix' triggers first we have
24289     no way of knowing that that happened.)
24290
24291
24292File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
24293
242945.50.7 Structure-Packing Pragmas
24295--------------------------------
24296
24297For compatibility with Win32, GCC supports a set of `#pragma'
24298directives which change the maximum alignment of members of structures
24299(other than zero-width bitfields), unions, and classes subsequently
24300defined.  The N value below always is required to be a small power of
24301two and specifies the new alignment in bytes.
24302
24303  1. `#pragma pack(N)' simply sets the new alignment.
24304
24305  2. `#pragma pack()' sets the alignment to the one that was in effect
24306     when compilation started (see also command line option
24307     `-fpack-struct[=<n>]' *note Code Gen Options::).
24308
24309  3. `#pragma pack(push[,N])' pushes the current alignment setting on
24310     an internal stack and then optionally sets the new alignment.
24311
24312  4. `#pragma pack(pop)' restores the alignment setting to the one
24313     saved at the top of the internal stack (and removes that stack
24314     entry).  Note that `#pragma pack([N])' does not influence this
24315     internal stack; thus it is possible to have `#pragma pack(push)'
24316     followed by multiple `#pragma pack(N)' instances and finalized by
24317     a single `#pragma pack(pop)'.
24318
24319 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
24320which lays out a structure as the documented `__attribute__
24321((ms_struct))'.
24322  1. `#pragma ms_struct on' turns on the layout for structures declared.
24323
24324  2. `#pragma ms_struct off' turns off the layout for structures
24325     declared.
24326
24327  3. `#pragma ms_struct reset' goes back to the default layout.
24328
24329
24330File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
24331
243325.50.8 Weak Pragmas
24333-------------------
24334
24335For compatibility with SVR4, GCC supports a set of `#pragma' directives
24336for declaring symbols to be weak, and defining weak aliases.
24337
24338`#pragma weak SYMBOL'
24339     This pragma declares SYMBOL to be weak, as if the declaration had
24340     the attribute of the same name.  The pragma may appear before or
24341     after the declaration of SYMBOL, but must appear before either its
24342     first use or its definition.  It is not an error for SYMBOL to
24343     never be defined at all.
24344
24345`#pragma weak SYMBOL1 = SYMBOL2'
24346     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
24347     an error if SYMBOL2 is not defined in the current translation unit.
24348
24349
24350File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
24351
243525.50.9 Diagnostic Pragmas
24353-------------------------
24354
24355GCC allows the user to selectively enable or disable certain types of
24356diagnostics, and change the kind of the diagnostic.  For example, a
24357project's policy might require that all sources compile with `-Werror'
24358but certain files might have exceptions allowing specific types of
24359warnings.  Or, a project might selectively enable diagnostics and treat
24360them as errors depending on which preprocessor macros are defined.
24361
24362`#pragma GCC diagnostic KIND OPTION'
24363     Modifies the disposition of a diagnostic.  Note that not all
24364     diagnostics are modifiable; at the moment only warnings (normally
24365     controlled by `-W...') can be controlled, and not all of them.
24366     Use `-fdiagnostics-show-option' to determine which diagnostics are
24367     controllable and which option controls them.
24368
24369     KIND is `error' to treat this diagnostic as an error, `warning' to
24370     treat it like a warning (even if `-Werror' is in effect), or
24371     `ignored' if the diagnostic is to be ignored.  OPTION is a double
24372     quoted string which matches the command line option.
24373
24374          #pragma GCC diagnostic warning "-Wformat"
24375          #pragma GCC diagnostic error "-Wformat"
24376          #pragma GCC diagnostic ignored "-Wformat"
24377
24378     Note that these pragmas override any command line options.  Also,
24379     while it is syntactically valid to put these pragmas anywhere in
24380     your sources, the only supported location for them is before any
24381     data or functions are defined.  Doing otherwise may result in
24382     unpredictable results depending on how the optimizer manages your
24383     sources.  If the same option is listed multiple times, the last
24384     one specified is the one that is in effect.  This pragma is not
24385     intended to be a general purpose replacement for command line
24386     options, but for implementing strict control over project policies.
24387
24388
24389
24390File: gcc.info,  Node: Visibility Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
24391
243925.50.10 Visibility Pragmas
24393--------------------------
24394
24395`#pragma GCC visibility push(VISIBILITY)'
24396`#pragma GCC visibility pop'
24397     This pragma allows the user to set the visibility for multiple
24398     declarations without having to give each a visibility attribute
24399     *Note Function Attributes::, for more information about visibility
24400     and the attribute syntax.
24401
24402     In C++, `#pragma GCC visibility' affects only namespace-scope
24403     declarations.  Class members and template specializations are not
24404     affected; if you want to override the visibility for a particular
24405     member or instantiation, you must use an attribute.
24406
24407
24408
24409File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
24410
244115.51 Unnamed struct/union fields within structs/unions
24412======================================================
24413
24414For compatibility with other compilers, GCC allows you to define a
24415structure or union that contains, as fields, structures and unions
24416without names.  For example:
24417
24418     struct {
24419       int a;
24420       union {
24421         int b;
24422         float c;
24423       };
24424       int d;
24425     } foo;
24426
24427 In this example, the user would be able to access members of the
24428unnamed union with code like `foo.b'.  Note that only unnamed structs
24429and unions are allowed, you may not have, for example, an unnamed `int'.
24430
24431 You must never create such structures that cause ambiguous field
24432definitions.  For example, this structure:
24433
24434     struct {
24435       int a;
24436       struct {
24437         int a;
24438       };
24439     } foo;
24440
24441 It is ambiguous which `a' is being referred to with `foo.a'.  Such
24442constructs are not supported and must be avoided.  In the future, such
24443constructs may be detected and treated as compilation errors.
24444
24445 Unless `-fms-extensions' is used, the unnamed field must be a
24446structure or union definition without a tag (for example, `struct { int
24447a; };').  If `-fms-extensions' is used, the field may also be a
24448definition with a tag such as `struct foo { int a; };', a reference to
24449a previously defined structure or union such as `struct foo;', or a
24450reference to a `typedef' name for a previously defined structure or
24451union type.
24452
24453
24454File: gcc.info,  Node: Thread-Local,  Prev: Unnamed Fields,  Up: C Extensions
24455
244565.52 Thread-Local Storage
24457=========================
24458
24459Thread-local storage (TLS) is a mechanism by which variables are
24460allocated such that there is one instance of the variable per extant
24461thread.  The run-time model GCC uses to implement this originates in
24462the IA-64 processor-specific ABI, but has since been migrated to other
24463processors as well.  It requires significant support from the linker
24464(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
24465`libpthread.so'), so it is not available everywhere.
24466
24467 At the user level, the extension is visible with a new storage class
24468keyword: `__thread'.  For example:
24469
24470     __thread int i;
24471     extern __thread struct state s;
24472     static __thread char *p;
24473
24474 The `__thread' specifier may be used alone, with the `extern' or
24475`static' specifiers, but with no other storage class specifier.  When
24476used with `extern' or `static', `__thread' must appear immediately
24477after the other storage class specifier.
24478
24479 The `__thread' specifier may be applied to any global, file-scoped
24480static, function-scoped static, or static data member of a class.  It
24481may not be applied to block-scoped automatic or non-static data member.
24482
24483 When the address-of operator is applied to a thread-local variable, it
24484is evaluated at run-time and returns the address of the current thread's
24485instance of that variable.  An address so obtained may be used by any
24486thread.  When a thread terminates, any pointers to thread-local
24487variables in that thread become invalid.
24488
24489 No static initialization may refer to the address of a thread-local
24490variable.
24491
24492 In C++, if an initializer is present for a thread-local variable, it
24493must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
24494standard.
24495
24496 See ELF Handling For Thread-Local Storage
24497(http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
24498the four thread-local storage addressing models, and how the run-time
24499is expected to function.
24500
24501* Menu:
24502
24503* C99 Thread-Local Edits::
24504* C++98 Thread-Local Edits::
24505
24506
24507File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
24508
245095.52.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
24510-------------------------------------------------------
24511
24512The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
24513document the exact semantics of the language extension.
24514
24515   * `5.1.2  Execution environments'
24516
24517     Add new text after paragraph 1
24518
24519          Within either execution environment, a "thread" is a flow of
24520          control within a program.  It is implementation defined
24521          whether or not there may be more than one thread associated
24522          with a program.  It is implementation defined how threads
24523          beyond the first are created, the name and type of the
24524          function called at thread startup, and how threads may be
24525          terminated.  However, objects with thread storage duration
24526          shall be initialized before thread startup.
24527
24528   * `6.2.4  Storage durations of objects'
24529
24530     Add new text before paragraph 3
24531
24532          An object whose identifier is declared with the storage-class
24533          specifier `__thread' has "thread storage duration".  Its
24534          lifetime is the entire execution of the thread, and its
24535          stored value is initialized only once, prior to thread
24536          startup.
24537
24538   * `6.4.1  Keywords'
24539
24540     Add `__thread'.
24541
24542   * `6.7.1  Storage-class specifiers'
24543
24544     Add `__thread' to the list of storage class specifiers in
24545     paragraph 1.
24546
24547     Change paragraph 2 to
24548
24549          With the exception of `__thread', at most one storage-class
24550          specifier may be given [...].  The `__thread' specifier may
24551          be used alone, or immediately following `extern' or `static'.
24552
24553     Add new text after paragraph 6
24554
24555          The declaration of an identifier for a variable that has
24556          block scope that specifies `__thread' shall also specify
24557          either `extern' or `static'.
24558
24559          The `__thread' specifier shall be used only with variables.
24560
24561
24562File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
24563
245645.52.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
24565--------------------------------------------------------
24566
24567The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
24568that document the exact semantics of the language extension.
24569
24570   * [intro.execution]
24571
24572     New text after paragraph 4
24573
24574          A "thread" is a flow of control within the abstract machine.
24575          It is implementation defined whether or not there may be more
24576          than one thread.
24577
24578     New text after paragraph 7
24579
24580          It is unspecified whether additional action must be taken to
24581          ensure when and whether side effects are visible to other
24582          threads.
24583
24584   * [lex.key]
24585
24586     Add `__thread'.
24587
24588   * [basic.start.main]
24589
24590     Add after paragraph 5
24591
24592          The thread that begins execution at the `main' function is
24593          called the "main thread".  It is implementation defined how
24594          functions beginning threads other than the main thread are
24595          designated or typed.  A function so designated, as well as
24596          the `main' function, is called a "thread startup function".
24597          It is implementation defined what happens if a thread startup
24598          function returns.  It is implementation defined what happens
24599          to other threads when any thread calls `exit'.
24600
24601   * [basic.start.init]
24602
24603     Add after paragraph 4
24604
24605          The storage for an object of thread storage duration shall be
24606          statically initialized before the first statement of the
24607          thread startup function.  An object of thread storage
24608          duration shall not require dynamic initialization.
24609
24610   * [basic.start.term]
24611
24612     Add after paragraph 3
24613
24614          The type of an object with thread storage duration shall not
24615          have a non-trivial destructor, nor shall it be an array type
24616          whose elements (directly or indirectly) have non-trivial
24617          destructors.
24618
24619   * [basic.stc]
24620
24621     Add "thread storage duration" to the list in paragraph 1.
24622
24623     Change paragraph 2
24624
24625          Thread, static, and automatic storage durations are
24626          associated with objects introduced by declarations [...].
24627
24628     Add `__thread' to the list of specifiers in paragraph 3.
24629
24630   * [basic.stc.thread]
24631
24632     New section before [basic.stc.static]
24633
24634          The keyword `__thread' applied to a non-local object gives the
24635          object thread storage duration.
24636
24637          A local variable or class data member declared both `static'
24638          and `__thread' gives the variable or member thread storage
24639          duration.
24640
24641   * [basic.stc.static]
24642
24643     Change paragraph 1
24644
24645          All objects which have neither thread storage duration,
24646          dynamic storage duration nor are local [...].
24647
24648   * [dcl.stc]
24649
24650     Add `__thread' to the list in paragraph 1.
24651
24652     Change paragraph 1
24653
24654          With the exception of `__thread', at most one
24655          STORAGE-CLASS-SPECIFIER shall appear in a given
24656          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
24657          alone, or immediately following the `extern' or `static'
24658          specifiers.  [...]
24659
24660     Add after paragraph 5
24661
24662          The `__thread' specifier can be applied only to the names of
24663          objects and to anonymous unions.
24664
24665   * [class.mem]
24666
24667     Add after paragraph 6
24668
24669          Non-`static' members shall not be `__thread'.
24670
24671
24672File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
24673
246746 Extensions to the C++ Language
24675********************************
24676
24677The GNU compiler provides these extensions to the C++ language (and you
24678can also use most of the C language extensions in your C++ programs).
24679If you want to write code that checks whether these features are
24680available, you can test for the GNU compiler the same way as for C
24681programs: check for a predefined macro `__GNUC__'.  You can also use
24682`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
24683(cpp)Common Predefined Macros.).
24684
24685* Menu:
24686
24687* Volatiles::		What constitutes an access to a volatile object.
24688* Restricted Pointers:: C99 restricted pointers and references.
24689* Vague Linkage::       Where G++ puts inlines, vtables and such.
24690* C++ Interface::       You can use a single C++ header file for both
24691                        declarations and definitions.
24692* Template Instantiation:: Methods for ensuring that exactly one copy of
24693                        each needed template instantiation is emitted.
24694* Bound member functions:: You can extract a function pointer to the
24695                        method denoted by a `->*' or `.*' expression.
24696* C++ Attributes::      Variable, function, and type attributes for C++ only.
24697* Namespace Association:: Strong using-directives for namespace association.
24698* Java Exceptions::     Tweaking exception handling to work with Java.
24699* Deprecated Features:: Things will disappear from g++.
24700* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
24701
24702
24703File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
24704
247056.1 When is a Volatile Object Accessed?
24706=======================================
24707
24708Both the C and C++ standard have the concept of volatile objects.  These
24709are normally accessed by pointers and used for accessing hardware.  The
24710standards encourage compilers to refrain from optimizations concerning
24711accesses to volatile objects.  The C standard leaves it implementation
24712defined  as to what constitutes a volatile access.  The C++ standard
24713omits to specify this, except to say that C++ should behave in a
24714similar manner to C with respect to volatiles, where possible.  The
24715minimum either standard specifies is that at a sequence point all
24716previous accesses to volatile objects have stabilized and no subsequent
24717accesses have occurred.  Thus an implementation is free to reorder and
24718combine volatile accesses which occur between sequence points, but
24719cannot do so for accesses across a sequence point.  The use of
24720volatiles does not allow you to violate the restriction on updating
24721objects multiple times within a sequence point.
24722
24723 *Note Volatile qualifier and the C compiler: Qualifiers implementation.
24724
24725 The behavior differs slightly between C and C++ in the non-obvious
24726cases:
24727
24728     volatile int *src = SOMEVALUE;
24729     *src;
24730
24731 With C, such expressions are rvalues, and GCC interprets this either
24732as a read of the volatile object being pointed to or only as request to
24733evaluate the side-effects.  The C++ standard specifies that such
24734expressions do not undergo lvalue to rvalue conversion, and that the
24735type of the dereferenced object may be incomplete.  The C++ standard
24736does not specify explicitly that it is this lvalue to rvalue conversion
24737which may be responsible for causing an access.  However, there is
24738reason to believe that it is, because otherwise certain simple
24739expressions become undefined.  However, because it would surprise most
24740programmers, G++ treats dereferencing a pointer to volatile object of
24741complete type when the value is unused as GCC would do for an
24742equivalent type in C.  When the object has incomplete type, G++ issues
24743a warning; if you wish to force an error, you must force a conversion
24744to rvalue with, for instance, a static cast.
24745
24746 When using a reference to volatile, G++ does not treat equivalent
24747expressions as accesses to volatiles, but instead issues a warning that
24748no volatile is accessed.  The rationale for this is that otherwise it
24749becomes difficult to determine where volatile access occur, and not
24750possible to ignore the return value from functions returning volatile
24751references.  Again, if you wish to force a read, cast the reference to
24752an rvalue.
24753
24754
24755File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
24756
247576.2 Restricting Pointer Aliasing
24758================================
24759
24760As with the C front end, G++ understands the C99 feature of restricted
24761pointers, specified with the `__restrict__', or `__restrict' type
24762qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
24763language flag, `restrict' is not a keyword in C++.
24764
24765 In addition to allowing restricted pointers, you can specify restricted
24766references, which indicate that the reference is not aliased in the
24767local context.
24768
24769     void fn (int *__restrict__ rptr, int &__restrict__ rref)
24770     {
24771       /* ... */
24772     }
24773
24774In the body of `fn', RPTR points to an unaliased integer and RREF
24775refers to a (different) unaliased integer.
24776
24777 You may also specify whether a member function's THIS pointer is
24778unaliased by using `__restrict__' as a member function qualifier.
24779
24780     void T::fn () __restrict__
24781     {
24782       /* ... */
24783     }
24784
24785Within the body of `T::fn', THIS will have the effective definition `T
24786*__restrict__ const this'.  Notice that the interpretation of a
24787`__restrict__' member function qualifier is different to that of
24788`const' or `volatile' qualifier, in that it is applied to the pointer
24789rather than the object.  This is consistent with other compilers which
24790implement restricted pointers.
24791
24792 As with all outermost parameter qualifiers, `__restrict__' is ignored
24793in function definition matching.  This means you only need to specify
24794`__restrict__' in a function definition, rather than in a function
24795prototype as well.
24796
24797
24798File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
24799
248006.3 Vague Linkage
24801=================
24802
24803There are several constructs in C++ which require space in the object
24804file but are not clearly tied to a single translation unit.  We say that
24805these constructs have "vague linkage".  Typically such constructs are
24806emitted wherever they are needed, though sometimes we can be more
24807clever.
24808
24809Inline Functions
24810     Inline functions are typically defined in a header file which can
24811     be included in many different compilations.  Hopefully they can
24812     usually be inlined, but sometimes an out-of-line copy is
24813     necessary, if the address of the function is taken or if inlining
24814     fails.  In general, we emit an out-of-line copy in all translation
24815     units where one is needed.  As an exception, we only emit inline
24816     virtual functions with the vtable, since it will always require a
24817     copy.
24818
24819     Local static variables and string constants used in an inline
24820     function are also considered to have vague linkage, since they
24821     must be shared between all inlined and out-of-line instances of
24822     the function.
24823
24824VTables
24825     C++ virtual functions are implemented in most compilers using a
24826     lookup table, known as a vtable.  The vtable contains pointers to
24827     the virtual functions provided by a class, and each object of the
24828     class contains a pointer to its vtable (or vtables, in some
24829     multiple-inheritance situations).  If the class declares any
24830     non-inline, non-pure virtual functions, the first one is chosen as
24831     the "key method" for the class, and the vtable is only emitted in
24832     the translation unit where the key method is defined.
24833
24834     _Note:_ If the chosen key method is later defined as inline, the
24835     vtable will still be emitted in every translation unit which
24836     defines it.  Make sure that any inline virtuals are declared
24837     inline in the class body, even if they are not defined there.
24838
24839type_info objects
24840     C++ requires information about types to be written out in order to
24841     implement `dynamic_cast', `typeid' and exception handling.  For
24842     polymorphic classes (classes with virtual functions), the type_info
24843     object is written out along with the vtable so that `dynamic_cast'
24844     can determine the dynamic type of a class object at runtime.  For
24845     all other types, we write out the type_info object when it is
24846     used: when applying `typeid' to an expression, throwing an object,
24847     or referring to a type in a catch clause or exception
24848     specification.
24849
24850Template Instantiations
24851     Most everything in this section also applies to template
24852     instantiations, but there are other options as well.  *Note
24853     Where's the Template?: Template Instantiation.
24854
24855
24856 When used with GNU ld version 2.8 or later on an ELF system such as
24857GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
24858these constructs will be discarded at link time.  This is known as
24859COMDAT support.
24860
24861 On targets that don't support COMDAT, but do support weak symbols, GCC
24862will use them.  This way one copy will override all the others, but the
24863unused copies will still take up space in the executable.
24864
24865 For targets which do not support either COMDAT or weak symbols, most
24866entities with vague linkage will be emitted as local symbols to avoid
24867duplicate definition errors from the linker.  This will not happen for
24868local statics in inlines, however, as having multiple copies will
24869almost certainly break things.
24870
24871 *Note Declarations and Definitions in One Header: C++ Interface, for
24872another way to control placement of these constructs.
24873
24874
24875File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
24876
248776.4 #pragma interface and implementation
24878========================================
24879
24880`#pragma interface' and `#pragma implementation' provide the user with
24881a way of explicitly directing the compiler to emit entities with vague
24882linkage (and debugging information) in a particular translation unit.
24883
24884 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
24885cases, because of COMDAT support and the "key method" heuristic
24886mentioned in *Note Vague Linkage::.  Using them can actually cause your
24887program to grow due to unnecessary out-of-line copies of inline
24888functions.  Currently (3.4) the only benefit of these `#pragma's is
24889reduced duplication of debugging information, and that should be
24890addressed soon on DWARF 2 targets with the use of COMDAT groups.
24891
24892`#pragma interface'
24893`#pragma interface "SUBDIR/OBJECTS.h"'
24894     Use this directive in _header files_ that define object classes,
24895     to save space in most of the object files that use those classes.
24896     Normally, local copies of certain information (backup copies of
24897     inline member functions, debugging information, and the internal
24898     tables that implement virtual functions) must be kept in each
24899     object file that includes class definitions.  You can use this
24900     pragma to avoid such duplication.  When a header file containing
24901     `#pragma interface' is included in a compilation, this auxiliary
24902     information will not be generated (unless the main input source
24903     file itself uses `#pragma implementation').  Instead, the object
24904     files will contain references to be resolved at link time.
24905
24906     The second form of this directive is useful for the case where you
24907     have multiple headers with the same name in different directories.
24908     If you use this form, you must specify the same string to `#pragma
24909     implementation'.
24910
24911`#pragma implementation'
24912`#pragma implementation "OBJECTS.h"'
24913     Use this pragma in a _main input file_, when you want full output
24914     from included header files to be generated (and made globally
24915     visible).  The included header file, in turn, should use `#pragma
24916     interface'.  Backup copies of inline member functions, debugging
24917     information, and the internal tables used to implement virtual
24918     functions are all generated in implementation files.
24919
24920     If you use `#pragma implementation' with no argument, it applies to
24921     an include file with the same basename(1) as your source file.
24922     For example, in `allclass.cc', giving just `#pragma implementation'
24923     by itself is equivalent to `#pragma implementation "allclass.h"'.
24924
24925     In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
24926     an implementation file whenever you would include it from
24927     `allclass.cc' even if you never specified `#pragma
24928     implementation'.  This was deemed to be more trouble than it was
24929     worth, however, and disabled.
24930
24931     Use the string argument if you want a single implementation file to
24932     include code from multiple header files.  (You must also use
24933     `#include' to include the header file; `#pragma implementation'
24934     only specifies how to use the file--it doesn't actually include
24935     it.)
24936
24937     There is no way to split up the contents of a single header file
24938     into multiple implementation files.
24939
24940 `#pragma implementation' and `#pragma interface' also have an effect
24941on function inlining.
24942
24943 If you define a class in a header file marked with `#pragma
24944interface', the effect on an inline function defined in that class is
24945similar to an explicit `extern' declaration--the compiler emits no code
24946at all to define an independent version of the function.  Its
24947definition is used only for inlining with its callers.
24948
24949 Conversely, when you include the same header file in a main source file
24950that declares it as `#pragma implementation', the compiler emits code
24951for the function itself; this defines a version of the function that
24952can be found via pointers (or by callers compiled without inlining).
24953If all calls to the function can be inlined, you can avoid emitting the
24954function by compiling with `-fno-implement-inlines'.  If any calls were
24955not inlined, you will get linker errors.
24956
24957 ---------- Footnotes ----------
24958
24959 (1) A file's "basename" was the name stripped of all leading path
24960information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
24961
24962
24963File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
24964
249656.5 Where's the Template?
24966=========================
24967
24968C++ templates are the first language feature to require more
24969intelligence from the environment than one usually finds on a UNIX
24970system.  Somehow the compiler and linker have to make sure that each
24971template instance occurs exactly once in the executable if it is needed,
24972and not at all otherwise.  There are two basic approaches to this
24973problem, which are referred to as the Borland model and the Cfront
24974model.
24975
24976Borland model
24977     Borland C++ solved the template instantiation problem by adding
24978     the code equivalent of common blocks to their linker; the compiler
24979     emits template instances in each translation unit that uses them,
24980     and the linker collapses them together.  The advantage of this
24981     model is that the linker only has to consider the object files
24982     themselves; there is no external complexity to worry about.  This
24983     disadvantage is that compilation time is increased because the
24984     template code is being compiled repeatedly.  Code written for this
24985     model tends to include definitions of all templates in the header
24986     file, since they must be seen to be instantiated.
24987
24988Cfront model
24989     The AT&T C++ translator, Cfront, solved the template instantiation
24990     problem by creating the notion of a template repository, an
24991     automatically maintained place where template instances are
24992     stored.  A more modern version of the repository works as follows:
24993     As individual object files are built, the compiler places any
24994     template definitions and instantiations encountered in the
24995     repository.  At link time, the link wrapper adds in the objects in
24996     the repository and compiles any needed instances that were not
24997     previously emitted.  The advantages of this model are more optimal
24998     compilation speed and the ability to use the system linker; to
24999     implement the Borland model a compiler vendor also needs to
25000     replace the linker.  The disadvantages are vastly increased
25001     complexity, and thus potential for error; for some code this can be
25002     just as transparent, but in practice it can been very difficult to
25003     build multiple programs in one directory and one program in
25004     multiple directories.  Code written for this model tends to
25005     separate definitions of non-inline member templates into a
25006     separate file, which should be compiled separately.
25007
25008 When used with GNU ld version 2.8 or later on an ELF system such as
25009GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
25010Borland model.  On other systems, G++ implements neither automatic
25011model.
25012
25013 A future version of G++ will support a hybrid model whereby the
25014compiler will emit any instantiations for which the template definition
25015is included in the compile, and store template definitions and
25016instantiation context information into the object file for the rest.
25017The link wrapper will extract that information as necessary and invoke
25018the compiler to produce the remaining instantiations.  The linker will
25019then combine duplicate instantiations.
25020
25021 In the mean time, you have the following options for dealing with
25022template instantiations:
25023
25024  1. Compile your template-using code with `-frepo'.  The compiler will
25025     generate files with the extension `.rpo' listing all of the
25026     template instantiations used in the corresponding object files
25027     which could be instantiated there; the link wrapper, `collect2',
25028     will then update the `.rpo' files to tell the compiler where to
25029     place those instantiations and rebuild any affected object files.
25030     The link-time overhead is negligible after the first pass, as the
25031     compiler will continue to place the instantiations in the same
25032     files.
25033
25034     This is your best option for application code written for the
25035     Borland model, as it will just work.  Code written for the Cfront
25036     model will need to be modified so that the template definitions
25037     are available at one or more points of instantiation; usually this
25038     is as simple as adding `#include <tmethods.cc>' to the end of each
25039     template header.
25040
25041     For library code, if you want the library to provide all of the
25042     template instantiations it needs, just try to link all of its
25043     object files together; the link will fail, but cause the
25044     instantiations to be generated as a side effect.  Be warned,
25045     however, that this may cause conflicts if multiple libraries try
25046     to provide the same instantiations.  For greater control, use
25047     explicit instantiation as described in the next option.
25048
25049  2. Compile your code with `-fno-implicit-templates' to disable the
25050     implicit generation of template instances, and explicitly
25051     instantiate all the ones you use.  This approach requires more
25052     knowledge of exactly which instances you need than do the others,
25053     but it's less mysterious and allows greater control.  You can
25054     scatter the explicit instantiations throughout your program,
25055     perhaps putting them in the translation units where the instances
25056     are used or the translation units that define the templates
25057     themselves; you can put all of the explicit instantiations you
25058     need into one big file; or you can create small files like
25059
25060          #include "Foo.h"
25061          #include "Foo.cc"
25062
25063          template class Foo<int>;
25064          template ostream& operator <<
25065                          (ostream&, const Foo<int>&);
25066
25067     for each of the instances you need, and create a template
25068     instantiation library from those.
25069
25070     If you are using Cfront-model code, you can probably get away with
25071     not using `-fno-implicit-templates' when compiling files that don't
25072     `#include' the member template definitions.
25073
25074     If you use one big file to do the instantiations, you may want to
25075     compile it without `-fno-implicit-templates' so you get all of the
25076     instances required by your explicit instantiations (but not by any
25077     other files) without having to specify them as well.
25078
25079     G++ has extended the template instantiation syntax given in the ISO
25080     standard to allow forward declaration of explicit instantiations
25081     (with `extern'), instantiation of the compiler support data for a
25082     template class (i.e. the vtable) without instantiating any of its
25083     members (with `inline'), and instantiation of only the static data
25084     members of a template class, without the support data or member
25085     functions (with (`static'):
25086
25087          extern template int max (int, int);
25088          inline template class Foo<int>;
25089          static template class Foo<int>;
25090
25091  3. Do nothing.  Pretend G++ does implement automatic instantiation
25092     management.  Code written for the Borland model will work fine, but
25093     each translation unit will contain instances of each of the
25094     templates it uses.  In a large program, this can lead to an
25095     unacceptable amount of code duplication.
25096
25097
25098File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
25099
251006.6 Extracting the function pointer from a bound pointer to member function
25101===========================================================================
25102
25103In C++, pointer to member functions (PMFs) are implemented using a wide
25104pointer of sorts to handle all the possible call mechanisms; the PMF
25105needs to store information about how to adjust the `this' pointer, and
25106if the function pointed to is virtual, where to find the vtable, and
25107where in the vtable to look for the member function.  If you are using
25108PMFs in an inner loop, you should really reconsider that decision.  If
25109that is not an option, you can extract the pointer to the function that
25110would be called for a given object/PMF pair and call it directly inside
25111the inner loop, to save a bit of time.
25112
25113 Note that you will still be paying the penalty for the call through a
25114function pointer; on most modern architectures, such a call defeats the
25115branch prediction features of the CPU.  This is also true of normal
25116virtual function calls.
25117
25118 The syntax for this extension is
25119
25120     extern A a;
25121     extern int (A::*fp)();
25122     typedef int (*fptr)(A *);
25123
25124     fptr p = (fptr)(a.*fp);
25125
25126 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
25127object is needed to obtain the address of the function.  They can be
25128converted to function pointers directly:
25129
25130     fptr p1 = (fptr)(&A::foo);
25131
25132 You must specify `-Wno-pmf-conversions' to use this extension.
25133
25134
25135File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
25136
251376.7 C++-Specific Variable, Function, and Type Attributes
25138========================================================
25139
25140Some attributes only make sense for C++ programs.
25141
25142`init_priority (PRIORITY)'
25143     In Standard C++, objects defined at namespace scope are guaranteed
25144     to be initialized in an order in strict accordance with that of
25145     their definitions _in a given translation unit_.  No guarantee is
25146     made for initializations across translation units.  However, GNU
25147     C++ allows users to control the order of initialization of objects
25148     defined at namespace scope with the `init_priority' attribute by
25149     specifying a relative PRIORITY, a constant integral expression
25150     currently bounded between 101 and 65535 inclusive.  Lower numbers
25151     indicate a higher priority.
25152
25153     In the following example, `A' would normally be created before
25154     `B', but the `init_priority' attribute has reversed that order:
25155
25156          Some_Class  A  __attribute__ ((init_priority (2000)));
25157          Some_Class  B  __attribute__ ((init_priority (543)));
25158
25159     Note that the particular values of PRIORITY do not matter; only
25160     their relative ordering.
25161
25162`java_interface'
25163     This type attribute informs C++ that the class is a Java
25164     interface.  It may only be applied to classes declared within an
25165     `extern "Java"' block.  Calls to methods declared in this
25166     interface will be dispatched using GCJ's interface table
25167     mechanism, instead of regular virtual table dispatch.
25168
25169
25170 See also *Note Namespace Association::.
25171
25172
25173File: gcc.info,  Node: Namespace Association,  Next: Java Exceptions,  Prev: C++ Attributes,  Up: C++ Extensions
25174
251756.8 Namespace Association
25176=========================
25177
25178*Caution:* The semantics of this extension are not fully defined.
25179Users should refrain from using this extension as its semantics may
25180change subtly over time.  It is possible that this extension will be
25181removed in future versions of G++.
25182
25183 A using-directive with `__attribute ((strong))' is stronger than a
25184normal using-directive in two ways:
25185
25186   * Templates from the used namespace can be specialized and explicitly
25187     instantiated as though they were members of the using namespace.
25188
25189   * The using namespace is considered an associated namespace of all
25190     templates in the used namespace for purposes of argument-dependent
25191     name lookup.
25192
25193 The used namespace must be nested within the using namespace so that
25194normal unqualified lookup works properly.
25195
25196 This is useful for composing a namespace transparently from
25197implementation namespaces.  For example:
25198
25199     namespace std {
25200       namespace debug {
25201         template <class T> struct A { };
25202       }
25203       using namespace debug __attribute ((__strong__));
25204       template <> struct A<int> { };   // ok to specialize
25205
25206       template <class T> void f (A<T>);
25207     }
25208
25209     int main()
25210     {
25211       f (std::A<float>());             // lookup finds std::f
25212       f (std::A<int>());
25213     }
25214
25215
25216File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Namespace Association,  Up: C++ Extensions
25217
252186.9 Java Exceptions
25219===================
25220
25221The Java language uses a slightly different exception handling model
25222from C++.  Normally, GNU C++ will automatically detect when you are
25223writing C++ code that uses Java exceptions, and handle them
25224appropriately.  However, if C++ code only needs to execute destructors
25225when Java exceptions are thrown through it, GCC will guess incorrectly.
25226Sample problematic code is:
25227
25228       struct S { ~S(); };
25229       extern void bar();    // is written in Java, and may throw exceptions
25230       void foo()
25231       {
25232         S s;
25233         bar();
25234       }
25235
25236The usual effect of an incorrect guess is a link failure, complaining of
25237a missing routine called `__gxx_personality_v0'.
25238
25239 You can inform the compiler that Java exceptions are to be used in a
25240translation unit, irrespective of what it might think, by writing
25241`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
25242must appear before any functions that throw or catch exceptions, or run
25243destructors when exceptions are thrown through them.
25244
25245 You cannot mix Java and C++ exceptions in the same translation unit.
25246It is believed to be safe to throw a C++ exception from one file through
25247another file compiled for the Java exception model, or vice versa, but
25248there may be bugs in this area.
25249
25250
25251File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
25252
252536.10 Deprecated Features
25254========================
25255
25256In the past, the GNU C++ compiler was extended to experiment with new
25257features, at a time when the C++ language was still evolving.  Now that
25258the C++ standard is complete, some of those features are superseded by
25259superior alternatives.  Using the old features might cause a warning in
25260some cases that the feature will be dropped in the future.  In other
25261cases, the feature might be gone already.
25262
25263 While the list below is not exhaustive, it documents some of the
25264options that are now deprecated:
25265
25266`-fexternal-templates'
25267`-falt-external-templates'
25268     These are two of the many ways for G++ to implement template
25269     instantiation.  *Note Template Instantiation::.  The C++ standard
25270     clearly defines how template definitions have to be organized
25271     across implementation units.  G++ has an implicit instantiation
25272     mechanism that should work just fine for standard-conforming code.
25273
25274`-fstrict-prototype'
25275`-fno-strict-prototype'
25276     Previously it was possible to use an empty prototype parameter
25277     list to indicate an unspecified number of parameters (like C),
25278     rather than no parameters, as C++ demands.  This feature has been
25279     removed, except where it is required for backwards compatibility
25280     *Note Backwards Compatibility::.
25281
25282 G++ allows a virtual function returning `void *' to be overridden by
25283one returning a different pointer type.  This extension to the
25284covariant return type rules is now deprecated and will be removed from a
25285future version.
25286
25287 The G++ minimum and maximum operators (`<?' and `>?') and their
25288compound forms (`<?=') and `>?=') have been deprecated and will be
25289removed in a future version.  Code using these operators should be
25290modified to use `std::min' and `std::max' instead.
25291
25292 The named return value extension has been deprecated, and is now
25293removed from G++.
25294
25295 The use of initializer lists with new expressions has been deprecated,
25296and is now removed from G++.
25297
25298 Floating and complex non-type template parameters have been deprecated,
25299and are now removed from G++.
25300
25301 The implicit typename extension has been deprecated and is now removed
25302from G++.
25303
25304 The use of default arguments in function pointers, function typedefs
25305and other places where they are not permitted by the standard is
25306deprecated and will be removed from a future version of G++.
25307
25308 G++ allows floating-point literals to appear in integral constant
25309expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
25310deprecated and will be removed from a future version.
25311
25312 G++ allows static data members of const floating-point type to be
25313declared with an initializer in a class definition. The standard only
25314allows initializers for static members of const integral types and const
25315enumeration types so this extension has been deprecated and will be
25316removed from a future version.
25317
25318
25319File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
25320
253216.11 Backwards Compatibility
25322============================
25323
25324Now that there is a definitive ISO standard C++, G++ has a specification
25325to adhere to.  The C++ language evolved over time, and features that
25326used to be acceptable in previous drafts of the standard, such as the
25327ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
25328to allow compilation of C++ written to such drafts, G++ contains some
25329backwards compatibilities.  _All such backwards compatibility features
25330are liable to disappear in future versions of G++._ They should be
25331considered deprecated *Note Deprecated Features::.
25332
25333`For scope'
25334     If a variable is declared at for scope, it used to remain in scope
25335     until the end of the scope which contained the for statement
25336     (rather than just within the for scope).  G++ retains this, but
25337     issues a warning, if such a variable is accessed outside the for
25338     scope.
25339
25340`Implicit C language'
25341     Old C system header files did not contain an `extern "C" {...}'
25342     scope to set the language.  On such systems, all header files are
25343     implicitly scoped inside a C language scope.  Also, an empty
25344     prototype `()' will be treated as an unspecified number of
25345     arguments, rather than no arguments, as C++ demands.
25346
25347
25348File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
25349
253507 GNU Objective-C runtime features
25351**********************************
25352
25353This document is meant to describe some of the GNU Objective-C runtime
25354features.  It is not intended to teach you Objective-C, there are
25355several resources on the Internet that present the language.  Questions
25356and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
25357
25358* Menu:
25359
25360* Executing code before main::
25361* Type encoding::
25362* Garbage Collection::
25363* Constant string objects::
25364* compatibility_alias::
25365
25366
25367File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
25368
253697.1 `+load': Executing code before main
25370=======================================
25371
25372The GNU Objective-C runtime provides a way that allows you to execute
25373code before the execution of the program enters the `main' function.
25374The code is executed on a per-class and a per-category basis, through a
25375special class method `+load'.
25376
25377 This facility is very useful if you want to initialize global variables
25378which can be accessed by the program directly, without sending a message
25379to the class first.  The usual way to initialize global variables, in
25380the `+initialize' method, might not be useful because `+initialize' is
25381only called when the first message is sent to a class object, which in
25382some cases could be too late.
25383
25384 Suppose for example you have a `FileStream' class that declares
25385`Stdin', `Stdout' and `Stderr' as global variables, like below:
25386
25387
25388     FileStream *Stdin = nil;
25389     FileStream *Stdout = nil;
25390     FileStream *Stderr = nil;
25391
25392     @implementation FileStream
25393
25394     + (void)initialize
25395     {
25396         Stdin = [[FileStream new] initWithFd:0];
25397         Stdout = [[FileStream new] initWithFd:1];
25398         Stderr = [[FileStream new] initWithFd:2];
25399     }
25400
25401     /* Other methods here */
25402     @end
25403
25404 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
25405in `+initialize' occurs too late.  The programmer can send a message to
25406one of these objects before the variables are actually initialized,
25407thus sending messages to the `nil' object.  The `+initialize' method
25408which actually initializes the global variables is not invoked until
25409the first message is sent to the class object.  The solution would
25410require these variables to be initialized just before entering `main'.
25411
25412 The correct solution of the above problem is to use the `+load' method
25413instead of `+initialize':
25414
25415
25416     @implementation FileStream
25417
25418     + (void)load
25419     {
25420         Stdin = [[FileStream new] initWithFd:0];
25421         Stdout = [[FileStream new] initWithFd:1];
25422         Stderr = [[FileStream new] initWithFd:2];
25423     }
25424
25425     /* Other methods here */
25426     @end
25427
25428 The `+load' is a method that is not overridden by categories.  If a
25429class and a category of it both implement `+load', both methods are
25430invoked.  This allows some additional initializations to be performed in
25431a category.
25432
25433 This mechanism is not intended to be a replacement for `+initialize'.
25434You should be aware of its limitations when you decide to use it
25435instead of `+initialize'.
25436
25437* Menu:
25438
25439* What you can and what you cannot do in +load::
25440
25441
25442File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
25443
254447.1.1 What you can and what you cannot do in `+load'
25445----------------------------------------------------
25446
25447The `+load' implementation in the GNU runtime guarantees you the
25448following things:
25449
25450   * you can write whatever C code you like;
25451
25452   * you can send messages to Objective-C constant strings (`@"this is a
25453     constant string"');
25454
25455   * you can allocate and send messages to objects whose class is
25456     implemented in the same file;
25457
25458   * the `+load' implementation of all super classes of a class are
25459     executed before the `+load' of that class is executed;
25460
25461   * the `+load' implementation of a class is executed before the
25462     `+load' implementation of any category.
25463
25464
25465 In particular, the following things, even if they can work in a
25466particular case, are not guaranteed:
25467
25468   * allocation of or sending messages to arbitrary objects;
25469
25470   * allocation of or sending messages to objects whose classes have a
25471     category implemented in the same file;
25472
25473
25474 You should make no assumptions about receiving `+load' in sibling
25475classes when you write `+load' of a class.  The order in which sibling
25476classes receive `+load' is not guaranteed.
25477
25478 The order in which `+load' and `+initialize' are called could be
25479problematic if this matters.  If you don't allocate objects inside
25480`+load', it is guaranteed that `+load' is called before `+initialize'.
25481If you create an object inside `+load' the `+initialize' method of
25482object's class is invoked even if `+load' was not invoked.  Note if you
25483explicitly call `+load' on a class, `+initialize' will be called first.
25484To avoid possible problems try to implement only one of these methods.
25485
25486 The `+load' method is also invoked when a bundle is dynamically loaded
25487into your running program.  This happens automatically without any
25488intervening operation from you.  When you write bundles and you need to
25489write `+load' you can safely create and send messages to objects whose
25490classes already exist in the running program.  The same restrictions as
25491above apply to classes defined in bundle.
25492
25493
25494File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
25495
254967.2 Type encoding
25497=================
25498
25499The Objective-C compiler generates type encodings for all the types.
25500These type encodings are used at runtime to find out information about
25501selectors and methods and about objects and classes.
25502
25503 The types are encoded in the following way:
25504
25505`_Bool'            `B'
25506`char'             `c'
25507`unsigned char'    `C'
25508`short'            `s'
25509`unsigned short'   `S'
25510`int'              `i'
25511`unsigned int'     `I'
25512`long'             `l'
25513`unsigned long'    `L'
25514`long long'        `q'
25515`unsigned long     `Q'
25516long'
25517`float'            `f'
25518`double'           `d'
25519`void'             `v'
25520`id'               `@'
25521`Class'            `#'
25522`SEL'              `:'
25523`char*'            `*'
25524unknown type       `?'
25525Complex types      `j' followed by the inner type.  For example
25526                   `_Complex double' is encoded as "jd".
25527bit-fields         `b' followed by the starting position of the
25528                   bit-field, the type of the bit-field and the size of
25529                   the bit-field (the bit-fields encoding was changed
25530                   from the NeXT's compiler encoding, see below)
25531
25532 The encoding of bit-fields has changed to allow bit-fields to be
25533properly handled by the runtime functions that compute sizes and
25534alignments of types that contain bit-fields.  The previous encoding
25535contained only the size of the bit-field.  Using only this information
25536it is not possible to reliably compute the size occupied by the
25537bit-field.  This is very important in the presence of the Boehm's
25538garbage collector because the objects are allocated using the typed
25539memory facility available in this collector.  The typed memory
25540allocation requires information about where the pointers are located
25541inside the object.
25542
25543 The position in the bit-field is the position, counting in bits, of the
25544bit closest to the beginning of the structure.
25545
25546 The non-atomic types are encoded as follows:
25547
25548pointers       `^' followed by the pointed type.
25549arrays         `[' followed by the number of elements in the array
25550               followed by the type of the elements followed by `]'
25551structures     `{' followed by the name of the structure (or `?' if the
25552               structure is unnamed), the `=' sign, the type of the
25553               members and by `}'
25554unions         `(' followed by the name of the structure (or `?' if the
25555               union is unnamed), the `=' sign, the type of the members
25556               followed by `)'
25557
25558 Here are some types and their encodings, as they are generated by the
25559compiler on an i386 machine:
25560
25561
25562Objective-C type   Compiler encoding
25563     int a[10];    `[10i]'
25564     struct {      `{?=i[3f]b128i3b131i2c}'
25565       int i;
25566       float f[3];
25567       int a:3;
25568       int b:2;
25569       char c;
25570     }
25571
25572
25573 In addition to the types the compiler also encodes the type
25574specifiers.  The table below describes the encoding of the current
25575Objective-C type specifiers:
25576
25577
25578Specifier          Encoding
25579`const'            `r'
25580`in'               `n'
25581`inout'            `N'
25582`out'              `o'
25583`bycopy'           `O'
25584`oneway'           `V'
25585
25586
25587 The type specifiers are encoded just before the type.  Unlike types
25588however, the type specifiers are only encoded when they appear in method
25589argument types.
25590
25591
25592File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
25593
255947.3 Garbage Collection
25595======================
25596
25597Support for a new memory management policy has been added by using a
25598powerful conservative garbage collector, known as the
25599Boehm-Demers-Weiser conservative garbage collector.  It is available
25600from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
25601
25602 To enable the support for it you have to configure the compiler using
25603an additional argument, `--enable-objc-gc'.  You need to have garbage
25604collector installed before building the compiler.  This will build an
25605additional runtime library which has several enhancements to support
25606the garbage collector.  The new library has a new name, `libobjc_gc.a'
25607to not conflict with the non-garbage-collected library.
25608
25609 When the garbage collector is used, the objects are allocated using the
25610so-called typed memory allocation mechanism available in the
25611Boehm-Demers-Weiser collector.  This mode requires precise information
25612on where pointers are located inside objects.  This information is
25613computed once per class, immediately after the class has been
25614initialized.
25615
25616 There is a new runtime function `class_ivar_set_gcinvisible()' which
25617can be used to declare a so-called "weak pointer" reference.  Such a
25618pointer is basically hidden for the garbage collector; this can be
25619useful in certain situations, especially when you want to keep track of
25620the allocated objects, yet allow them to be collected.  This kind of
25621pointers can only be members of objects, you cannot declare a global
25622pointer as a weak reference.  Every type which is a pointer type can be
25623declared a weak pointer, including `id', `Class' and `SEL'.
25624
25625 Here is an example of how to use this feature.  Suppose you want to
25626implement a class whose instances hold a weak pointer reference; the
25627following class does this:
25628
25629
25630     @interface WeakPointer : Object
25631     {
25632         const void* weakPointer;
25633     }
25634
25635     - initWithPointer:(const void*)p;
25636     - (const void*)weakPointer;
25637     @end
25638
25639
25640     @implementation WeakPointer
25641
25642     + (void)initialize
25643     {
25644       class_ivar_set_gcinvisible (self, "weakPointer", YES);
25645     }
25646
25647     - initWithPointer:(const void*)p
25648     {
25649       weakPointer = p;
25650       return self;
25651     }
25652
25653     - (const void*)weakPointer
25654     {
25655       return weakPointer;
25656     }
25657
25658     @end
25659
25660 Weak pointers are supported through a new type character specifier
25661represented by the `!' character.  The `class_ivar_set_gcinvisible()'
25662function adds or removes this specifier to the string type description
25663of the instance variable named as argument.
25664
25665
25666File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
25667
256687.4 Constant string objects
25669===========================
25670
25671GNU Objective-C provides constant string objects that are generated
25672directly by the compiler.  You declare a constant string object by
25673prefixing a C constant string with the character `@':
25674
25675       id myString = @"this is a constant string object";
25676
25677 The constant string objects are by default instances of the
25678`NXConstantString' class which is provided by the GNU Objective-C
25679runtime.  To get the definition of this class you must include the
25680`objc/NXConstStr.h' header file.
25681
25682 User defined libraries may want to implement their own constant string
25683class.  To be able to support them, the GNU Objective-C compiler
25684provides a new command line options
25685`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
25686to a strict structure, the same as `NXConstantString''s structure:
25687
25688
25689     @interface MyConstantStringClass
25690     {
25691       Class isa;
25692       char *c_string;
25693       unsigned int len;
25694     }
25695     @end
25696
25697 `NXConstantString' inherits from `Object'; user class libraries may
25698choose to inherit the customized constant string class from a different
25699class than `Object'.  There is no requirement in the methods the
25700constant string class has to implement, but the final ivar layout of
25701the class must be the compatible with the given structure.
25702
25703 When the compiler creates the statically allocated constant string
25704object, the `c_string' field will be filled by the compiler with the
25705string; the `length' field will be filled by the compiler with the
25706string length; the `isa' pointer will be filled with `NULL' by the
25707compiler, and it will later be fixed up automatically at runtime by the
25708GNU Objective-C runtime library to point to the class which was set by
25709the `-fconstant-string-class' option when the object file is loaded (if
25710you wonder how it works behind the scenes, the name of the class to
25711use, and the list of static objects to fixup, are stored by the
25712compiler in the object file in a place where the GNU runtime library
25713will find them at runtime).
25714
25715 As a result, when a file is compiled with the
25716`-fconstant-string-class' option, all the constant string objects will
25717be instances of the class specified as argument to this option.  It is
25718possible to have multiple compilation units referring to different
25719constant string classes, neither the compiler nor the linker impose any
25720restrictions in doing this.
25721
25722
25723File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
25724
257257.5 compatibility_alias
25726=======================
25727
25728This is a feature of the Objective-C compiler rather than of the
25729runtime, anyway since it is documented nowhere and its existence was
25730forgotten, we are documenting it here.
25731
25732 The keyword `@compatibility_alias' allows you to define a class name
25733as equivalent to another class name.  For example:
25734
25735     @compatibility_alias WOApplication GSWApplication;
25736
25737 tells the compiler that each time it encounters `WOApplication' as a
25738class name, it should replace it with `GSWApplication' (that is,
25739`WOApplication' is just an alias for `GSWApplication').
25740
25741 There are some constraints on how this can be used--
25742
25743   * `WOApplication' (the alias) must not be an existing class;
25744
25745   * `GSWApplication' (the real class) must be an existing class.
25746
25747
25748
25749File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
25750
257518 Binary Compatibility
25752**********************
25753
25754Binary compatibility encompasses several related concepts:
25755
25756"application binary interface (ABI)"
25757     The set of runtime conventions followed by all of the tools that
25758     deal with binary representations of a program, including
25759     compilers, assemblers, linkers, and language runtime support.
25760     Some ABIs are formal with a written specification, possibly
25761     designed by multiple interested parties.  Others are simply the
25762     way things are actually done by a particular set of tools.
25763
25764"ABI conformance"
25765     A compiler conforms to an ABI if it generates code that follows
25766     all of the specifications enumerated by that ABI.  A library
25767     conforms to an ABI if it is implemented according to that ABI.  An
25768     application conforms to an ABI if it is built using tools that
25769     conform to that ABI and does not contain source code that
25770     specifically changes behavior specified by the ABI.
25771
25772"calling conventions"
25773     Calling conventions are a subset of an ABI that specify of how
25774     arguments are passed and function results are returned.
25775
25776"interoperability"
25777     Different sets of tools are interoperable if they generate files
25778     that can be used in the same program.  The set of tools includes
25779     compilers, assemblers, linkers, libraries, header files, startup
25780     files, and debuggers.  Binaries produced by different sets of
25781     tools are not interoperable unless they implement the same ABI.
25782     This applies to different versions of the same tools as well as
25783     tools from different vendors.
25784
25785"intercallability"
25786     Whether a function in a binary built by one set of tools can call a
25787     function in a binary built by a different set of tools is a subset
25788     of interoperability.
25789
25790"implementation-defined features"
25791     Language standards include lists of implementation-defined
25792     features whose behavior can vary from one implementation to
25793     another.  Some of these features are normally covered by a
25794     platform's ABI and others are not.  The features that are not
25795     covered by an ABI generally affect how a program behaves, but not
25796     intercallability.
25797
25798"compatibility"
25799     Conformance to the same ABI and the same behavior of
25800     implementation-defined features are both relevant for
25801     compatibility.
25802
25803 The application binary interface implemented by a C or C++ compiler
25804affects code generation and runtime support for:
25805
25806   * size and alignment of data types
25807
25808   * layout of structured types
25809
25810   * calling conventions
25811
25812   * register usage conventions
25813
25814   * interfaces for runtime arithmetic support
25815
25816   * object file formats
25817
25818 In addition, the application binary interface implemented by a C++
25819compiler affects code generation and runtime support for:
25820   * name mangling
25821
25822   * exception handling
25823
25824   * invoking constructors and destructors
25825
25826   * layout, alignment, and padding of classes
25827
25828   * layout and alignment of virtual tables
25829
25830 Some GCC compilation options cause the compiler to generate code that
25831does not conform to the platform's default ABI.  Other options cause
25832different program behavior for implementation-defined features that are
25833not covered by an ABI.  These options are provided for consistency with
25834other compilers that do not follow the platform's default ABI or the
25835usual behavior of implementation-defined features for the platform.  Be
25836very careful about using such options.
25837
25838 Most platforms have a well-defined ABI that covers C code, but ABIs
25839that cover C++ functionality are not yet common.
25840
25841 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
25842written, vendor-neutral C++ ABI that was designed to be specific to
2584364-bit Itanium but also includes generic specifications that apply to
25844any platform.  This C++ ABI is also implemented by other compiler
25845vendors on some platforms, notably GNU/Linux and BSD systems.  We have
25846tried hard to provide a stable ABI that will be compatible with future
25847GCC releases, but it is possible that we will encounter problems that
25848make this difficult.  Such problems could include different
25849interpretations of the C++ ABI by different vendors, bugs in the ABI, or
25850bugs in the implementation of the ABI in different compilers.  GCC's
25851`-Wabi' switch warns when G++ generates code that is probably not
25852compatible with the C++ ABI.
25853
25854 The C++ library used with a C++ compiler includes the Standard C++
25855Library, with functionality defined in the C++ Standard, plus language
25856runtime support.  The runtime support is included in a C++ ABI, but
25857there is no formal ABI for the Standard C++ Library.  Two
25858implementations of that library are interoperable if one follows the
25859de-facto ABI of the other and if they are both built with the same
25860compiler, or with compilers that conform to the same ABI for C++
25861compiler and runtime support.
25862
25863 When G++ and another C++ compiler conform to the same C++ ABI, but the
25864implementations of the Standard C++ Library that they normally use do
25865not follow the same ABI for the Standard C++ Library, object files
25866built with those compilers can be used in the same program only if they
25867use the same C++ library.  This requires specifying the location of the
25868C++ library header files when invoking the compiler whose usual library
25869is not being used.  The location of GCC's C++ header files depends on
25870how the GCC build was configured, but can be seen by using the G++ `-v'
25871option.  With default configuration options for G++ 3.3 the compile
25872line for a different C++ compiler needs to include
25873
25874         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
25875
25876 Similarly, compiling code with G++ that must use a C++ library other
25877than the GNU C++ library requires specifying the location of the header
25878files for that other library.
25879
25880 The most straightforward way to link a program to use a particular C++
25881library is to use a C++ driver that specifies that C++ library by
25882default.  The `g++' driver, for example, tells the linker where to find
25883GCC's C++ library (`libstdc++') plus the other libraries and startup
25884files it needs, in the proper order.
25885
25886 If a program must use a different C++ library and it's not possible to
25887do the final link using a C++ driver that uses that library by default,
25888it is necessary to tell `g++' the location and name of that library.
25889It might also be necessary to specify different startup files and other
25890runtime support libraries, and to suppress the use of GCC's support
25891libraries with one or more of the options `-nostdlib', `-nostartfiles',
25892and `-nodefaultlibs'.
25893
25894
25895File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
25896
258979 `gcov'--a Test Coverage Program
25898*********************************
25899
25900`gcov' is a tool you can use in conjunction with GCC to test code
25901coverage in your programs.
25902
25903* Menu:
25904
25905* Gcov Intro::         	        Introduction to gcov.
25906* Invoking Gcov::       	How to use gcov.
25907* Gcov and Optimization::       Using gcov with GCC optimization.
25908* Gcov Data Files::             The files used by gcov.
25909* Cross-profiling::             Data file relocation.
25910
25911
25912File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
25913
259149.1 Introduction to `gcov'
25915==========================
25916
25917`gcov' is a test coverage program.  Use it in concert with GCC to
25918analyze your programs to help create more efficient, faster running
25919code and to discover untested parts of your program.  You can use
25920`gcov' as a profiling tool to help discover where your optimization
25921efforts will best affect your code.  You can also use `gcov' along with
25922the other profiling tool, `gprof', to assess which parts of your code
25923use the greatest amount of computing time.
25924
25925 Profiling tools help you analyze your code's performance.  Using a
25926profiler such as `gcov' or `gprof', you can find out some basic
25927performance statistics, such as:
25928
25929   * how often each line of code executes
25930
25931   * what lines of code are actually executed
25932
25933   * how much computing time each section of code uses
25934
25935 Once you know these things about how your code works when compiled, you
25936can look at each module to see which modules should be optimized.
25937`gcov' helps you determine where to work on optimization.
25938
25939 Software developers also use coverage testing in concert with
25940testsuites, to make sure software is actually good enough for a release.
25941Testsuites can verify that a program works as expected; a coverage
25942program tests to see how much of the program is exercised by the
25943testsuite.  Developers can then determine what kinds of test cases need
25944to be added to the testsuites to create both better testing and a better
25945final product.
25946
25947 You should compile your code without optimization if you plan to use
25948`gcov' because the optimization, by combining some lines of code into
25949one function, may not give you as much information as you need to look
25950for `hot spots' where the code is using a great deal of computer time.
25951Likewise, because `gcov' accumulates statistics by line (at the lowest
25952resolution), it works best with a programming style that places only
25953one statement on each line.  If you use complicated macros that expand
25954to loops or to other control structures, the statistics are less
25955helpful--they only report on the line where the macro call appears.  If
25956your complex macros behave like functions, you can replace them with
25957inline functions to solve this problem.
25958
25959 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
25960many times each line of a source file `SOURCEFILE.c' has executed.  You
25961can use these logfiles along with `gprof' to aid in fine-tuning the
25962performance of your programs.  `gprof' gives timing information you can
25963use along with the information you get from `gcov'.
25964
25965 `gcov' works only on code compiled with GCC.  It is not compatible
25966with any other profiling or test coverage mechanism.
25967
25968
25969File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
25970
259719.2 Invoking `gcov'
25972===================
25973
25974     gcov [OPTIONS] SOURCEFILE
25975
25976 `gcov' accepts the following options:
25977
25978`-h'
25979`--help'
25980     Display help about using `gcov' (on the standard output), and exit
25981     without doing any further processing.
25982
25983`-v'
25984`--version'
25985     Display the `gcov' version number (on the standard output), and
25986     exit without doing any further processing.
25987
25988`-a'
25989`--all-blocks'
25990     Write individual execution counts for every basic block.  Normally
25991     gcov outputs execution counts only for the main blocks of a line.
25992     With this option you can determine if blocks within a single line
25993     are not being executed.
25994
25995`-b'
25996`--branch-probabilities'
25997     Write branch frequencies to the output file, and write branch
25998     summary info to the standard output.  This option allows you to
25999     see how often each branch in your program was taken.
26000     Unconditional branches will not be shown, unless the `-u' option
26001     is given.
26002
26003`-c'
26004`--branch-counts'
26005     Write branch frequencies as the number of branches taken, rather
26006     than the percentage of branches taken.
26007
26008`-n'
26009`--no-output'
26010     Do not create the `gcov' output file.
26011
26012`-l'
26013`--long-file-names'
26014     Create long file names for included source files.  For example, if
26015     the header file `x.h' contains code, and was included in the file
26016     `a.c', then running `gcov' on the file `a.c' will produce an
26017     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
26018     can be useful if `x.h' is included in multiple source files.  If
26019     you use the `-p' option, both the including and included file
26020     names will be complete path names.
26021
26022`-p'
26023`--preserve-paths'
26024     Preserve complete path information in the names of generated
26025     `.gcov' files.  Without this option, just the filename component is
26026     used.  With this option, all directories are used, with `/'
26027     characters translated to `#' characters, `.' directory components
26028     removed and `..' components renamed to `^'.  This is useful if
26029     sourcefiles are in several different directories.  It also affects
26030     the `-l' option.
26031
26032`-f'
26033`--function-summaries'
26034     Output summaries for each function in addition to the file level
26035     summary.
26036
26037`-o DIRECTORY|FILE'
26038`--object-directory DIRECTORY'
26039`--object-file FILE'
26040     Specify either the directory containing the gcov data files, or the
26041     object path name.  The `.gcno', and `.gcda' data files are
26042     searched for using this option.  If a directory is specified, the
26043     data files are in that directory and named after the source file
26044     name, without its extension.  If a file is specified here, the
26045     data files are named after that file, without its extension.  If
26046     this option is not supplied, it defaults to the current directory.
26047
26048`-u'
26049`--unconditional-branches'
26050     When branch probabilities are given, include those of
26051     unconditional branches.  Unconditional branches are normally not
26052     interesting.
26053
26054
26055 `gcov' should be run with the current directory the same as that when
26056you invoked the compiler.  Otherwise it will not be able to locate the
26057source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
26058current directory.  These contain the coverage information of the
26059source file they correspond to.  One `.gcov' file is produced for each
26060source file containing code, which was compiled to produce the data
26061files.  The MANGLEDNAME part of the output file name is usually simply
26062the source file name, but can be something more complicated if the `-l'
26063or `-p' options are given.  Refer to those options for details.
26064
26065 The `.gcov' files contain the `:' separated fields along with program
26066source code.  The format is
26067
26068     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
26069
26070 Additional block information may succeed each line, when requested by
26071command line option.  The EXECUTION_COUNT is `-' for lines containing
26072no code and `#####' for lines which were never executed.  Some lines of
26073information at the start have LINE_NUMBER of zero.
26074
26075 The preamble lines are of the form
26076
26077     -:0:TAG:VALUE
26078
26079 The ordering and number of these preamble lines will be augmented as
26080`gcov' development progresses -- do not rely on them remaining
26081unchanged.  Use TAG to locate a particular preamble line.
26082
26083 The additional block information is of the form
26084
26085     TAG INFORMATION
26086
26087 The INFORMATION is human readable, but designed to be simple enough
26088for machine parsing too.
26089
26090 When printing percentages, 0% and 100% are only printed when the values
26091are _exactly_ 0% and 100% respectively.  Other values which would
26092conventionally be rounded to 0% or 100% are instead printed as the
26093nearest non-boundary value.
26094
26095 When using `gcov', you must first compile your program with two
26096special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
26097compiler to generate additional information needed by gcov (basically a
26098flow graph of the program) and also includes additional code in the
26099object files for generating the extra profiling information needed by
26100gcov.  These additional files are placed in the directory where the
26101object file is located.
26102
26103 Running the program will cause profile output to be generated.  For
26104each source file compiled with `-fprofile-arcs', an accompanying
26105`.gcda' file will be placed in the object file directory.
26106
26107 Running `gcov' with your program's source file names as arguments will
26108now produce a listing of the code along with frequency of execution for
26109each line.  For example, if your program is called `tmp.c', this is
26110what you see when you use the basic `gcov' facility:
26111
26112     $ gcc -fprofile-arcs -ftest-coverage tmp.c
26113     $ a.out
26114     $ gcov tmp.c
26115     90.00% of 10 source lines executed in file tmp.c
26116     Creating tmp.c.gcov.
26117
26118 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
26119
26120             -:    0:Source:tmp.c
26121             -:    0:Graph:tmp.gcno
26122             -:    0:Data:tmp.gcda
26123             -:    0:Runs:1
26124             -:    0:Programs:1
26125             -:    1:#include <stdio.h>
26126             -:    2:
26127             -:    3:int main (void)
26128             1:    4:{
26129             1:    5:  int i, total;
26130             -:    6:
26131             1:    7:  total = 0;
26132             -:    8:
26133            11:    9:  for (i = 0; i < 10; i++)
26134            10:   10:    total += i;
26135             -:   11:
26136             1:   12:  if (total != 45)
26137         #####:   13:    printf ("Failure\n");
26138             -:   14:  else
26139             1:   15:    printf ("Success\n");
26140             1:   16:  return 0;
26141             -:   17:}
26142
26143 When you use the `-a' option, you will get individual block counts,
26144and the output looks like this:
26145
26146             -:    0:Source:tmp.c
26147             -:    0:Graph:tmp.gcno
26148             -:    0:Data:tmp.gcda
26149             -:    0:Runs:1
26150             -:    0:Programs:1
26151             -:    1:#include <stdio.h>
26152             -:    2:
26153             -:    3:int main (void)
26154             1:    4:{
26155             1:    4-block  0
26156             1:    5:  int i, total;
26157             -:    6:
26158             1:    7:  total = 0;
26159             -:    8:
26160            11:    9:  for (i = 0; i < 10; i++)
26161            11:    9-block  0
26162            10:   10:    total += i;
26163            10:   10-block  0
26164             -:   11:
26165             1:   12:  if (total != 45)
26166             1:   12-block  0
26167         #####:   13:    printf ("Failure\n");
26168         $$$$$:   13-block  0
26169             -:   14:  else
26170             1:   15:    printf ("Success\n");
26171             1:   15-block  0
26172             1:   16:  return 0;
26173             1:   16-block  0
26174             -:   17:}
26175
26176 In this mode, each basic block is only shown on one line - the last
26177line of the block.  A multi-line block will only contribute to the
26178execution count of that last line, and other lines will not be shown to
26179contain code, unless previous blocks end on those lines.  The total
26180execution count of a line is shown and subsequent lines show the
26181execution counts for individual blocks that end on that line.  After
26182each block, the branch and call counts of the block will be shown, if
26183the `-b' option is given.
26184
26185 Because of the way GCC instruments calls, a call count can be shown
26186after a line with no individual blocks.  As you can see, line 13
26187contains a basic block that was not executed.
26188
26189 When you use the `-b' option, your output looks like this:
26190
26191     $ gcov -b tmp.c
26192     90.00% of 10 source lines executed in file tmp.c
26193     80.00% of 5 branches executed in file tmp.c
26194     80.00% of 5 branches taken at least once in file tmp.c
26195     50.00% of 2 calls executed in file tmp.c
26196     Creating tmp.c.gcov.
26197
26198 Here is a sample of a resulting `tmp.c.gcov' file:
26199
26200             -:    0:Source:tmp.c
26201             -:    0:Graph:tmp.gcno
26202             -:    0:Data:tmp.gcda
26203             -:    0:Runs:1
26204             -:    0:Programs:1
26205             -:    1:#include <stdio.h>
26206             -:    2:
26207             -:    3:int main (void)
26208     function main called 1 returned 1 blocks executed 75%
26209             1:    4:{
26210             1:    5:  int i, total;
26211             -:    6:
26212             1:    7:  total = 0;
26213             -:    8:
26214            11:    9:  for (i = 0; i < 10; i++)
26215     branch  0 taken 91% (fallthrough)
26216     branch  1 taken 9%
26217            10:   10:    total += i;
26218             -:   11:
26219             1:   12:  if (total != 45)
26220     branch  0 taken 0% (fallthrough)
26221     branch  1 taken 100%
26222         #####:   13:    printf ("Failure\n");
26223     call    0 never executed
26224             -:   14:  else
26225             1:   15:    printf ("Success\n");
26226     call    0 called 1 returned 100%
26227             1:   16:  return 0;
26228             -:   17:}
26229
26230 For each function, a line is printed showing how many times the
26231function is called, how many times it returns and what percentage of the
26232function's blocks were executed.
26233
26234 For each basic block, a line is printed after the last line of the
26235basic block describing the branch or call that ends the basic block.
26236There can be multiple branches and calls listed for a single source
26237line if there are multiple basic blocks that end on that line.  In this
26238case, the branches and calls are each given a number.  There is no
26239simple way to map these branches and calls back to source constructs.
26240In general, though, the lowest numbered branch or call will correspond
26241to the leftmost construct on the source line.
26242
26243 For a branch, if it was executed at least once, then a percentage
26244indicating the number of times the branch was taken divided by the
26245number of times the branch was executed will be printed.  Otherwise, the
26246message "never executed" is printed.
26247
26248 For a call, if it was executed at least once, then a percentage
26249indicating the number of times the call returned divided by the number
26250of times the call was executed will be printed.  This will usually be
26251100%, but may be less for functions that call `exit' or `longjmp', and
26252thus may not return every time they are called.
26253
26254 The execution counts are cumulative.  If the example program were
26255executed again without removing the `.gcda' file, the count for the
26256number of times each line in the source was executed would be added to
26257the results of the previous run(s).  This is potentially useful in
26258several ways.  For example, it could be used to accumulate data over a
26259number of program runs as part of a test verification suite, or to
26260provide more accurate long-term information over a large number of
26261program runs.
26262
26263 The data in the `.gcda' files is saved immediately before the program
26264exits.  For each source file compiled with `-fprofile-arcs', the
26265profiling code first attempts to read in an existing `.gcda' file; if
26266the file doesn't match the executable (differing number of basic block
26267counts) it will ignore the contents of the file.  It then adds in the
26268new execution counts and finally writes the data to the file.
26269
26270
26271File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
26272
262739.3 Using `gcov' with GCC Optimization
26274======================================
26275
26276If you plan to use `gcov' to help optimize your code, you must first
26277compile your program with two special GCC options: `-fprofile-arcs
26278-ftest-coverage'.  Aside from that, you can use any other GCC options;
26279but if you want to prove that every single line in your program was
26280executed, you should not compile with optimization at the same time.
26281On some machines the optimizer can eliminate some simple code lines by
26282combining them with other lines.  For example, code like this:
26283
26284     if (a != b)
26285       c = 1;
26286     else
26287       c = 0;
26288
26289can be compiled into one instruction on some machines.  In this case,
26290there is no way for `gcov' to calculate separate execution counts for
26291each line because there isn't separate code for each line.  Hence the
26292`gcov' output looks like this if you compiled the program with
26293optimization:
26294
26295           100:   12:if (a != b)
26296           100:   13:  c = 1;
26297           100:   14:else
26298           100:   15:  c = 0;
26299
26300 The output shows that this block of code, combined by optimization,
26301executed 100 times.  In one sense this result is correct, because there
26302was only one instruction representing all four of these lines.  However,
26303the output does not indicate how many times the result was 0 and how
26304many times the result was 1.
26305
26306 Inlineable functions can create unexpected line counts.  Line counts
26307are shown for the source code of the inlineable function, but what is
26308shown depends on where the function is inlined, or if it is not inlined
26309at all.
26310
26311 If the function is not inlined, the compiler must emit an out of line
26312copy of the function, in any object file that needs it.  If `fileA.o'
26313and `fileB.o' both contain out of line bodies of a particular
26314inlineable function, they will also both contain coverage counts for
26315that function.  When `fileA.o' and `fileB.o' are linked together, the
26316linker will, on many systems, select one of those out of line bodies
26317for all calls to that function, and remove or ignore the other.
26318Unfortunately, it will not remove the coverage counters for the unused
26319function body.  Hence when instrumented, all but one use of that
26320function will show zero counts.
26321
26322 If the function is inlined in several places, the block structure in
26323each location might not be the same.  For instance, a condition might
26324now be calculable at compile time in some instances.  Because the
26325coverage of all the uses of the inline function will be shown for the
26326same source lines, the line counts themselves might seem inconsistent.
26327
26328
26329File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
26330
263319.4 Brief description of `gcov' data files
26332==========================================
26333
26334`gcov' uses two files for profiling.  The names of these files are
26335derived from the original _object_ file by substituting the file suffix
26336with either `.gcno', or `.gcda'.  All of these files are placed in the
26337same directory as the object file, and contain data stored in a
26338platform-independent format.
26339
26340 The `.gcno' file is generated when the source file is compiled with
26341the GCC `-ftest-coverage' option.  It contains information to
26342reconstruct the basic block graphs and assign source line numbers to
26343blocks.
26344
26345 The `.gcda' file is generated when a program containing object files
26346built with the GCC `-fprofile-arcs' option is executed.  A separate
26347`.gcda' file is created for each object file compiled with this option.
26348It contains arc transition counts, and some summary information.
26349
26350 The full details of the file format is specified in `gcov-io.h', and
26351functions provided in that header file should be used to access the
26352coverage files.
26353
26354
26355File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
26356
263579.5 Data file relocation to support cross-profiling
26358===================================================
26359
26360Running the program will cause profile output to be generated.  For each
26361source file compiled with `-fprofile-arcs', an accompanying `.gcda'
26362file will be placed in the object file directory. That implicitly
26363requires running the program on the same system as it was built or
26364having the same absolute directory structure on the target system. The
26365program will try to create the needed directory structure, if it is not
26366already present.
26367
26368 To support cross-profiling, a program compiled with `-fprofile-arcs'
26369can relocate the data files based on two environment variables:
26370
26371   * GCOV_PREFIX contains the prefix to add to the absolute paths in
26372     the object file. Prefix must be absolute as well, otherwise its
26373     value is ignored. The default is no prefix.
26374
26375   * GCOV_PREFIX_STRIP indicates the how many initial directory names
26376     to strip off the hardwired absolute paths. Default value is 0.
26377
26378     _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is
26379     undefined, empty or non-absolute.
26380
26381 For example, if the object file `/user/build/foo.o' was built with
26382`-fprofile-arcs', the final executable will try to create the data file
26383`/user/build/foo.gcda' when running on the target system.  This will
26384fail if the corresponding directory does not exist and it is unable to
26385create it.  This can be overcome by, for example, setting the
26386environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
26387Such a setting will name the data file `/target/run/build/foo.gcda'.
26388
26389 You must move the data files to the expected directory tree in order to
26390use them for profile directed optimizations (`--use-profile'), or to
26391use the `gcov' tool.
26392
26393
26394File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
26395
2639610 Known Causes of Trouble with GCC
26397***********************************
26398
26399This section describes known problems that affect users of GCC.  Most
26400of these are not GCC bugs per se--if they were, we would fix them.  But
26401the result for a user may be like the result of a bug.
26402
26403 Some of these problems are due to bugs in other software, some are
26404missing features that are too much work to add, and some are places
26405where people's opinions differ as to what is best.
26406
26407* Menu:
26408
26409* Actual Bugs::		      Bugs we will fix later.
26410* Cross-Compiler Problems::   Common problems of cross compiling with GCC.
26411* Interoperation::      Problems using GCC with other compilers,
26412			   and with certain linkers, assemblers and debuggers.
26413* Incompatibilities::   GCC is incompatible with traditional C.
26414* Fixed Headers::       GCC uses corrected versions of system header files.
26415                           This is necessary, but doesn't always work smoothly.
26416* Standard Libraries::  GCC uses the system C library, which might not be
26417                           compliant with the ISO C standard.
26418* Disappointments::     Regrettable things we can't change, but not quite bugs.
26419* C++ Misunderstandings::     Common misunderstandings with GNU C++.
26420* Protoize Caveats::    Things to watch out for when using `protoize'.
26421* Non-bugs::		Things we think are right, but some others disagree.
26422* Warnings and Errors:: Which problems in your code get warnings,
26423                         and which get errors.
26424
26425
26426File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
26427
2642810.1 Actual Bugs We Haven't Fixed Yet
26429=====================================
26430
26431   * The `fixincludes' script interacts badly with automounters; if the
26432     directory of system header files is automounted, it tends to be
26433     unmounted while `fixincludes' is running.  This would seem to be a
26434     bug in the automounter.  We don't know any good way to work around
26435     it.
26436
26437   * The `fixproto' script will sometimes add prototypes for the
26438     `sigsetjmp' and `siglongjmp' functions that reference the
26439     `jmp_buf' type before that type is defined.  To work around this,
26440     edit the offending file and place the typedef in front of the
26441     prototypes.
26442
26443
26444File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
26445
2644610.2 Cross-Compiler Problems
26447============================
26448
26449You may run into problems with cross compilation on certain machines,
26450for several reasons.
26451
26452   * At present, the program `mips-tfile' which adds debug support to
26453     object files on MIPS systems does not work in a cross compile
26454     environment.
26455
26456
26457File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
26458
2645910.3 Interoperation
26460===================
26461
26462This section lists various difficulties encountered in using GCC
26463together with other compilers or with the assemblers, linkers,
26464libraries and debuggers on certain systems.
26465
26466   * On many platforms, GCC supports a different ABI for C++ than do
26467     other compilers, so the object files compiled by GCC cannot be
26468     used with object files generated by another C++ compiler.
26469
26470     An area where the difference is most apparent is name mangling.
26471     The use of different name mangling is intentional, to protect you
26472     from more subtle problems.  Compilers differ as to many internal
26473     details of C++ implementation, including: how class instances are
26474     laid out, how multiple inheritance is implemented, and how virtual
26475     function calls are handled.  If the name encoding were made the
26476     same, your programs would link against libraries provided from
26477     other compilers--but the programs would then crash when run.
26478     Incompatible libraries are then detected at link time, rather than
26479     at run time.
26480
26481   * On some BSD systems, including some versions of Ultrix, use of
26482     profiling causes static variable destructors (currently used only
26483     in C++) not to be run.
26484
26485   * On some SGI systems, when you use `-lgl_s' as an option, it gets
26486     translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
26487     does not happen when you use GCC.  You must specify all three
26488     options explicitly.
26489
26490   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
26491     boundary, and it expects every `double' to be so aligned.  The Sun
26492     compiler usually gives `double' values 8-byte alignment, with one
26493     exception: function arguments of type `double' may not be aligned.
26494
26495     As a result, if a function compiled with Sun CC takes the address
26496     of an argument of type `double' and passes this pointer of type
26497     `double *' to a function compiled with GCC, dereferencing the
26498     pointer may cause a fatal signal.
26499
26500     One way to solve this problem is to compile your entire program
26501     with GCC.  Another solution is to modify the function that is
26502     compiled with Sun CC to copy the argument into a local variable;
26503     local variables are always properly aligned.  A third solution is
26504     to modify the function that uses the pointer to dereference it via
26505     the following function `access_double' instead of directly with
26506     `*':
26507
26508          inline double
26509          access_double (double *unaligned_ptr)
26510          {
26511            union d2i { double d; int i[2]; };
26512
26513            union d2i *p = (union d2i *) unaligned_ptr;
26514            union d2i u;
26515
26516            u.i[0] = p->i[0];
26517            u.i[1] = p->i[1];
26518
26519            return u.d;
26520          }
26521
26522     Storing into the pointer can be done likewise with the same union.
26523
26524   * On Solaris, the `malloc' function in the `libmalloc.a' library may
26525     allocate memory that is only 4 byte aligned.  Since GCC on the
26526     SPARC assumes that doubles are 8 byte aligned, this may result in a
26527     fatal signal if doubles are stored in memory allocated by the
26528     `libmalloc.a' library.
26529
26530     The solution is to not use the `libmalloc.a' library.  Use instead
26531     `malloc' and related functions from `libc.a'; they do not have
26532     this problem.
26533
26534   * On the HP PA machine, ADB sometimes fails to work on functions
26535     compiled with GCC.  Specifically, it fails to work on functions
26536     that use `alloca' or variable-size arrays.  This is because GCC
26537     doesn't generate HP-UX unwind descriptors for such functions.  It
26538     may even be impossible to generate them.
26539
26540   * Debugging (`-g') is not supported on the HP PA machine, unless you
26541     use the preliminary GNU tools.
26542
26543   * Taking the address of a label may generate errors from the HP-UX
26544     PA assembler.  GAS for the PA does not have this problem.
26545
26546   * Using floating point parameters for indirect calls to static
26547     functions will not work when using the HP assembler.  There simply
26548     is no way for GCC to specify what registers hold arguments for
26549     static functions when using the HP assembler.  GAS for the PA does
26550     not have this problem.
26551
26552   * In extremely rare cases involving some very large functions you may
26553     receive errors from the HP linker complaining about an out of
26554     bounds unconditional branch offset.  This used to occur more often
26555     in previous versions of GCC, but is now exceptionally rare.  If
26556     you should run into it, you can work around by making your
26557     function smaller.
26558
26559   * GCC compiled code sometimes emits warnings from the HP-UX
26560     assembler of the form:
26561
26562          (warning) Use of GR3 when
26563            frame >= 8192 may cause conflict.
26564
26565     These warnings are harmless and can be safely ignored.
26566
26567   * In extremely rare cases involving some very large functions you may
26568     receive errors from the AIX Assembler complaining about a
26569     displacement that is too large.  If you should run into it, you
26570     can work around by making your function smaller.
26571
26572   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
26573     semantics which merges global symbols between libraries and
26574     applications, especially necessary for C++ streams functionality.
26575     This is not the default behavior of AIX shared libraries and
26576     dynamic linking.  `libstdc++.a' is built on AIX with
26577     "runtime-linking" enabled so that symbol merging can occur.  To
26578     utilize this feature, the application linked with `libstdc++.a'
26579     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
26580     impose this because this option may interfere with the semantics
26581     of the user program and users may not always use `g++' to link his
26582     or her application.  Applications are not required to use the
26583     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
26584     library which is not dependent on the symbol merging semantics
26585     will continue to function correctly.
26586
26587   * An application can interpose its own definition of functions for
26588     functions invoked by `libstdc++.a' with "runtime-linking" enabled
26589     on AIX.  To accomplish this the application must be linked with
26590     "runtime-linking" option and the functions explicitly must be
26591     exported by the application (`-Wl,-brtl,-bE:exportfile').
26592
26593   * AIX on the RS/6000 provides support (NLS) for environments outside
26594     of the United States.  Compilers and assemblers use NLS to support
26595     locale-specific representations of various objects including
26596     floating-point numbers (`.' vs `,' for separating decimal
26597     fractions).  There have been problems reported where the library
26598     linked with GCC does not produce the same floating-point formats
26599     that the assembler accepts.  If you have this problem, set the
26600     `LANG' environment variable to `C' or `En_US'.
26601
26602   * Even if you specify `-fdollars-in-identifiers', you cannot
26603     successfully use `$' in identifiers on the RS/6000 due to a
26604     restriction in the IBM assembler.  GAS supports these identifiers.
26605
26606   * On Ultrix, the Fortran compiler expects registers 2 through 5 to
26607     be saved by function calls.  However, the C compiler uses
26608     conventions compatible with BSD Unix: registers 2 through 5 may be
26609     clobbered by function calls.
26610
26611     GCC uses the same convention as the Ultrix C compiler.  You can use
26612     these options to produce code compatible with the Fortran compiler:
26613
26614          -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
26615
26616
26617File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
26618
2661910.4 Incompatibilities of GCC
26620=============================
26621
26622There are several noteworthy incompatibilities between GNU C and K&R
26623(non-ISO) versions of C.
26624
26625   * GCC normally makes string constants read-only.  If several
26626     identical-looking string constants are used, GCC stores only one
26627     copy of the string.
26628
26629     One consequence is that you cannot call `mktemp' with a string
26630     constant argument.  The function `mktemp' always alters the string
26631     its argument points to.
26632
26633     Another consequence is that `sscanf' does not work on some very
26634     old systems when passed a string constant as its format control
26635     string or input.  This is because `sscanf' incorrectly tries to
26636     write into the string constant.  Likewise `fscanf' and `scanf'.
26637
26638     The solution to these problems is to change the program to use
26639     `char'-array variables with initialization strings for these
26640     purposes instead of string constants.
26641
26642   * `-2147483648' is positive.
26643
26644     This is because 2147483648 cannot fit in the type `int', so
26645     (following the ISO C rules) its data type is `unsigned long int'.
26646     Negating this value yields 2147483648 again.
26647
26648   * GCC does not substitute macro arguments when they appear inside of
26649     string constants.  For example, the following macro in GCC
26650
26651          #define foo(a) "a"
26652
26653     will produce output `"a"' regardless of what the argument A is.
26654
26655   * When you use `setjmp' and `longjmp', the only automatic variables
26656     guaranteed to remain valid are those declared `volatile'.  This is
26657     a consequence of automatic register allocation.  Consider this
26658     function:
26659
26660          jmp_buf j;
26661
26662          foo ()
26663          {
26664            int a, b;
26665
26666            a = fun1 ();
26667            if (setjmp (j))
26668              return a;
26669
26670            a = fun2 ();
26671            /* `longjmp (j)' may occur in `fun3'. */
26672            return a + fun3 ();
26673          }
26674
26675     Here `a' may or may not be restored to its first value when the
26676     `longjmp' occurs.  If `a' is allocated in a register, then its
26677     first value is restored; otherwise, it keeps the last value stored
26678     in it.
26679
26680     If you use the `-W' option with the `-O' option, you will get a
26681     warning when GCC thinks such a problem might be possible.
26682
26683   * Programs that use preprocessing directives in the middle of macro
26684     arguments do not work with GCC.  For example, a program like this
26685     will not work:
26686
26687          foobar (
26688          #define luser
26689                  hack)
26690
26691     ISO C does not permit such a construct.
26692
26693   * K&R compilers allow comments to cross over an inclusion boundary
26694     (i.e. started in an include file and ended in the including file).
26695
26696   * Declarations of external variables and functions within a block
26697     apply only to the block containing the declaration.  In other
26698     words, they have the same scope as any other declaration in the
26699     same place.
26700
26701     In some other C compilers, a `extern' declaration affects all the
26702     rest of the file even if it happens within a block.
26703
26704   * In traditional C, you can combine `long', etc., with a typedef
26705     name, as shown here:
26706
26707          typedef int foo;
26708          typedef long foo bar;
26709
26710     In ISO C, this is not allowed: `long' and other type modifiers
26711     require an explicit `int'.
26712
26713   * PCC allows typedef names to be used as function parameters.
26714
26715   * Traditional C allows the following erroneous pair of declarations
26716     to appear together in a given scope:
26717
26718          typedef int foo;
26719          typedef foo foo;
26720
26721   * GCC treats all characters of identifiers as significant.
26722     According to K&R-1 (2.2), "No more than the first eight characters
26723     are significant, although more may be used.".  Also according to
26724     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
26725     the first character must be a letter.  The underscore _ counts as
26726     a letter.", but GCC also allows dollar signs in identifiers.
26727
26728   * PCC allows whitespace in the middle of compound assignment
26729     operators such as `+='.  GCC, following the ISO standard, does not
26730     allow this.
26731
26732   * GCC complains about unterminated character constants inside of
26733     preprocessing conditionals that fail.  Some programs have English
26734     comments enclosed in conditionals that are guaranteed to fail; if
26735     these comments contain apostrophes, GCC will probably report an
26736     error.  For example, this code would produce an error:
26737
26738          #if 0
26739          You can't expect this to work.
26740          #endif
26741
26742     The best solution to such a problem is to put the text into an
26743     actual C comment delimited by `/*...*/'.
26744
26745   * Many user programs contain the declaration `long time ();'.  In the
26746     past, the system header files on many systems did not actually
26747     declare `time', so it did not matter what type your program
26748     declared it to return.  But in systems with ISO C headers, `time'
26749     is declared to return `time_t', and if that is not the same as
26750     `long', then `long time ();' is erroneous.
26751
26752     The solution is to change your program to use appropriate system
26753     headers (`<time.h>' on systems with ISO C headers) and not to
26754     declare `time' if the system header files declare it, or failing
26755     that to use `time_t' as the return type of `time'.
26756
26757   * When compiling functions that return `float', PCC converts it to a
26758     double.  GCC actually returns a `float'.  If you are concerned
26759     with PCC compatibility, you should declare your functions to return
26760     `double'; you might as well say what you mean.
26761
26762   * When compiling functions that return structures or unions, GCC
26763     output code normally uses a method different from that used on most
26764     versions of Unix.  As a result, code compiled with GCC cannot call
26765     a structure-returning function compiled with PCC, and vice versa.
26766
26767     The method used by GCC is as follows: a structure or union which is
26768     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
26769     union with any other size is stored into an address supplied by
26770     the caller (usually in a special, fixed register, but on some
26771     machines it is passed on the stack).  The target hook
26772     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
26773
26774     By contrast, PCC on most target machines returns structures and
26775     unions of any size by copying the data into an area of static
26776     storage, and then returning the address of that storage as if it
26777     were a pointer value.  The caller must copy the data from that
26778     memory area to the place where the value is wanted.  GCC does not
26779     use this method because it is slower and nonreentrant.
26780
26781     On some newer machines, PCC uses a reentrant convention for all
26782     structure and union returning.  GCC on most of these machines uses
26783     a compatible convention when returning structures and unions in
26784     memory, but still returns small structures and unions in registers.
26785
26786     You can tell GCC to use a compatible convention for all structure
26787     and union returning with the option `-fpcc-struct-return'.
26788
26789   * GCC complains about program fragments such as `0x74ae-0x4000'
26790     which appear to be two hexadecimal constants separated by the minus
26791     operator.  Actually, this string is a single "preprocessing token".
26792     Each such token must correspond to one token in C.  Since this
26793     does not, GCC prints an error message.  Although it may appear
26794     obvious that what is meant is an operator and two values, the ISO
26795     C standard specifically requires that this be treated as erroneous.
26796
26797     A "preprocessing token" is a "preprocessing number" if it begins
26798     with a digit and is followed by letters, underscores, digits,
26799     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
26800     character sequences.  (In strict C89 mode, the sequences `p+',
26801     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
26802
26803     To make the above program fragment valid, place whitespace in
26804     front of the minus sign.  This whitespace will end the
26805     preprocessing number.
26806
26807
26808File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
26809
2681010.5 Fixed Header Files
26811=======================
26812
26813GCC needs to install corrected versions of some system header files.
26814This is because most target systems have some header files that won't
26815work with GCC unless they are changed.  Some have bugs, some are
26816incompatible with ISO C, and some depend on special features of other
26817compilers.
26818
26819 Installing GCC automatically creates and installs the fixed header
26820files, by running a program called `fixincludes'.  Normally, you don't
26821need to pay attention to this.  But there are cases where it doesn't do
26822the right thing automatically.
26823
26824   * If you update the system's header files, such as by installing a
26825     new system version, the fixed header files of GCC are not
26826     automatically updated.  They can be updated using the `mkheaders'
26827     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
26828
26829   * On some systems, header file directories contain machine-specific
26830     symbolic links in certain places.  This makes it possible to share
26831     most of the header files among hosts running the same version of
26832     the system on different machine models.
26833
26834     The programs that fix the header files do not understand this
26835     special way of using symbolic links; therefore, the directory of
26836     fixed header files is good only for the machine model used to
26837     build it.
26838
26839     It is possible to make separate sets of fixed header files for the
26840     different machine models, and arrange a structure of symbolic
26841     links so as to use the proper set, but you'll have to do this by
26842     hand.
26843
26844
26845File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
26846
2684710.6 Standard Libraries
26848=======================
26849
26850GCC by itself attempts to be a conforming freestanding implementation.
26851*Note Language Standards Supported by GCC: Standards, for details of
26852what this means.  Beyond the library facilities required of such an
26853implementation, the rest of the C library is supplied by the vendor of
26854the operating system.  If that C library doesn't conform to the C
26855standards, then your programs might get warnings (especially when using
26856`-Wall') that you don't expect.
26857
26858 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
26859while the C standard says that `sprintf' returns an `int'.  The
26860`fixincludes' program could make the prototype for this function match
26861the Standard, but that would be wrong, since the function will still
26862return `char *'.
26863
26864 If you need a Standard compliant library, then you need to find one, as
26865GCC does not provide one.  The GNU C library (called `glibc') provides
26866ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
26867HURD-based GNU systems; no recent version of it supports other systems,
26868though some very old versions did.  Version 2.2 of the GNU C library
26869includes nearly complete C99 support.  You could also ask your
26870operating system vendor if newer libraries are available.
26871
26872
26873File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
26874
2687510.7 Disappointments and Misunderstandings
26876==========================================
26877
26878These problems are perhaps regrettable, but we don't know any practical
26879way around them.
26880
26881   * Certain local variables aren't recognized by debuggers when you
26882     compile with optimization.
26883
26884     This occurs because sometimes GCC optimizes the variable out of
26885     existence.  There is no way to tell the debugger how to compute the
26886     value such a variable "would have had", and it is not clear that
26887     would be desirable anyway.  So GCC simply does not mention the
26888     eliminated variable when it writes debugging information.
26889
26890     You have to expect a certain amount of disagreement between the
26891     executable and your source code, when you use optimization.
26892
26893   * Users often think it is a bug when GCC reports an error for code
26894     like this:
26895
26896          int foo (struct mumble *);
26897
26898          struct mumble { ... };
26899
26900          int foo (struct mumble *x)
26901          { ... }
26902
26903     This code really is erroneous, because the scope of `struct
26904     mumble' in the prototype is limited to the argument list
26905     containing it.  It does not refer to the `struct mumble' defined
26906     with file scope immediately below--they are two unrelated types
26907     with similar names in different scopes.
26908
26909     But in the definition of `foo', the file-scope type is used
26910     because that is available to be inherited.  Thus, the definition
26911     and the prototype do not match, and you get an error.
26912
26913     This behavior may seem silly, but it's what the ISO standard
26914     specifies.  It is easy enough for you to make your code work by
26915     moving the definition of `struct mumble' above the prototype.
26916     It's not worth being incompatible with ISO C just to avoid an
26917     error for the example shown above.
26918
26919   * Accesses to bit-fields even in volatile objects works by accessing
26920     larger objects, such as a byte or a word.  You cannot rely on what
26921     size of object is accessed in order to read or write the
26922     bit-field; it may even vary for a given bit-field according to the
26923     precise usage.
26924
26925     If you care about controlling the amount of memory that is
26926     accessed, use volatile but do not use bit-fields.
26927
26928   * GCC comes with shell scripts to fix certain known problems in
26929     system header files.  They install corrected copies of various
26930     header files in a special directory where only GCC will normally
26931     look for them.  The scripts adapt to various systems by searching
26932     all the system header files for the problem cases that we know
26933     about.
26934
26935     If new system header files are installed, nothing automatically
26936     arranges to update the corrected header files.  They can be
26937     updated using the `mkheaders' script installed in
26938     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
26939
26940   * On 68000 and x86 systems, for instance, you can get paradoxical
26941     results if you test the precise values of floating point numbers.
26942     For example, you can find that a floating point value which is not
26943     a NaN is not equal to itself.  This results from the fact that the
26944     floating point registers hold a few more bits of precision than
26945     fit in a `double' in memory.  Compiled code moves values between
26946     memory and floating point registers at its convenience, and moving
26947     them into memory truncates them.
26948
26949     You can partially avoid this problem by using the `-ffloat-store'
26950     option (*note Optimize Options::).
26951
26952   * On AIX and other platforms without weak symbol support, templates
26953     need to be instantiated explicitly and symbols for static members
26954     of templates will not be generated.
26955
26956   * On AIX, GCC scans object files and library archives for static
26957     constructors and destructors when linking an application before the
26958     linker prunes unreferenced symbols.  This is necessary to prevent
26959     the AIX linker from mistakenly assuming that static constructor or
26960     destructor are unused and removing them before the scanning can
26961     occur.  All static constructors and destructors found will be
26962     referenced even though the modules in which they occur may not be
26963     used by the program.  This may lead to both increased executable
26964     size and unexpected symbol references.
26965
26966
26967File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
26968
2696910.8 Common Misunderstandings with GNU C++
26970==========================================
26971
26972C++ is a complex language and an evolving one, and its standard
26973definition (the ISO C++ standard) was only recently completed.  As a
26974result, your C++ compiler may occasionally surprise you, even when its
26975behavior is correct.  This section discusses some areas that frequently
26976give rise to questions of this sort.
26977
26978* Menu:
26979
26980* Static Definitions::  Static member declarations are not definitions
26981* Name lookup::         Name lookup, templates, and accessing members of base classes
26982* Temporaries::         Temporaries may vanish before you expect
26983* Copy Assignment::     Copy Assignment operators copy virtual bases twice
26984
26985
26986File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
26987
2698810.8.1 Declare _and_ Define Static Members
26989------------------------------------------
26990
26991When a class has static data members, it is not enough to _declare_ the
26992static member; you must also _define_ it.  For example:
26993
26994     class Foo
26995     {
26996       ...
26997       void method();
26998       static int bar;
26999     };
27000
27001 This declaration only establishes that the class `Foo' has an `int'
27002named `Foo::bar', and a member function named `Foo::method'.  But you
27003still need to define _both_ `method' and `bar' elsewhere.  According to
27004the ISO standard, you must supply an initializer in one (and only one)
27005source file, such as:
27006
27007     int Foo::bar = 0;
27008
27009 Other C++ compilers may not correctly implement the standard behavior.
27010As a result, when you switch to `g++' from one of these compilers, you
27011may discover that a program that appeared to work correctly in fact
27012does not conform to the standard: `g++' reports as undefined symbols
27013any static data members that lack definitions.
27014
27015
27016File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
27017
2701810.8.2 Name lookup, templates, and accessing members of base classes
27019--------------------------------------------------------------------
27020
27021The C++ standard prescribes that all names that are not dependent on
27022template parameters are bound to their present definitions when parsing
27023a template function or class.(1)  Only names that are dependent are
27024looked up at the point of instantiation.  For example, consider
27025
27026       void foo(double);
27027
27028       struct A {
27029         template <typename T>
27030         void f () {
27031           foo (1);        // 1
27032           int i = N;      // 2
27033           T t;
27034           t.bar();        // 3
27035           foo (t);        // 4
27036         }
27037
27038         static const int N;
27039       };
27040
27041 Here, the names `foo' and `N' appear in a context that does not depend
27042on the type of `T'.  The compiler will thus require that they are
27043defined in the context of use in the template, not only before the
27044point of instantiation, and will here use `::foo(double)' and `A::N',
27045respectively.  In particular, it will convert the integer value to a
27046`double' when passing it to `::foo(double)'.
27047
27048 Conversely, `bar' and the call to `foo' in the fourth marked line are
27049used in contexts that do depend on the type of `T', so they are only
27050looked up at the point of instantiation, and you can provide
27051declarations for them after declaring the template, but before
27052instantiating it.  In particular, if you instantiate `A::f<int>', the
27053last line will call an overloaded `::foo(int)' if one was provided,
27054even if after the declaration of `struct A'.
27055
27056 This distinction between lookup of dependent and non-dependent names is
27057called two-stage (or dependent) name lookup.  G++ implements it since
27058version 3.4.
27059
27060 Two-stage name lookup sometimes leads to situations with behavior
27061different from non-template codes.  The most common is probably this:
27062
27063       template <typename T> struct Base {
27064         int i;
27065       };
27066
27067       template <typename T> struct Derived : public Base<T> {
27068         int get_i() { return i; }
27069       };
27070
27071 In `get_i()', `i' is not used in a dependent context, so the compiler
27072will look for a name declared at the enclosing namespace scope (which
27073is the global scope here).  It will not look into the base class, since
27074that is dependent and you may declare specializations of `Base' even
27075after declaring `Derived', so the compiler can't really know what `i'
27076would refer to.  If there is no global variable `i', then you will get
27077an error message.
27078
27079 In order to make it clear that you want the member of the base class,
27080you need to defer lookup until instantiation time, at which the base
27081class is known.  For this, you need to access `i' in a dependent
27082context, by either using `this->i' (remember that `this' is of type
27083`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
27084Alternatively, `Base<T>::i' might be brought into scope by a
27085`using'-declaration.
27086
27087 Another, similar example involves calling member functions of a base
27088class:
27089
27090       template <typename T> struct Base {
27091           int f();
27092       };
27093
27094       template <typename T> struct Derived : Base<T> {
27095           int g() { return f(); };
27096       };
27097
27098 Again, the call to `f()' is not dependent on template arguments (there
27099are no arguments that depend on the type `T', and it is also not
27100otherwise specified that the call should be in a dependent context).
27101Thus a global declaration of such a function must be available, since
27102the one in the base class is not visible until instantiation time.  The
27103compiler will consequently produce the following error message:
27104
27105       x.cc: In member function `int Derived<T>::g()':
27106       x.cc:6: error: there are no arguments to `f' that depend on a template
27107          parameter, so a declaration of `f' must be available
27108       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
27109          allowing the use of an undeclared name is deprecated)
27110
27111 To make the code valid either use `this->f()', or `Base<T>::f()'.
27112Using the `-fpermissive' flag will also let the compiler accept the
27113code, by marking all function calls for which no declaration is visible
27114at the time of definition of the template for later lookup at
27115instantiation time, as if it were a dependent call.  We do not
27116recommend using `-fpermissive' to work around invalid code, and it will
27117also only catch cases where functions in base classes are called, not
27118where variables in base classes are used (as in the example above).
27119
27120 Note that some compilers (including G++ versions prior to 3.4) get
27121these examples wrong and accept above code without an error.  Those
27122compilers do not implement two-stage name lookup correctly.
27123
27124 ---------- Footnotes ----------
27125
27126 (1) The C++ standard just uses the term "dependent" for names that
27127depend on the type or value of template parameters.  This shorter term
27128will also be used in the rest of this section.
27129
27130
27131File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
27132
2713310.8.3 Temporaries May Vanish Before You Expect
27134-----------------------------------------------
27135
27136It is dangerous to use pointers or references to _portions_ of a
27137temporary object.  The compiler may very well delete the object before
27138you expect it to, leaving a pointer to garbage.  The most common place
27139where this problem crops up is in classes like string classes,
27140especially ones that define a conversion function to type `char *' or
27141`const char *'--which is one reason why the standard `string' class
27142requires you to call the `c_str' member function.  However, any class
27143that returns a pointer to some internal structure is potentially
27144subject to this problem.
27145
27146 For example, a program may use a function `strfunc' that returns
27147`string' objects, and another function `charfunc' that operates on
27148pointers to `char':
27149
27150     string strfunc ();
27151     void charfunc (const char *);
27152
27153     void
27154     f ()
27155     {
27156       const char *p = strfunc().c_str();
27157       ...
27158       charfunc (p);
27159       ...
27160       charfunc (p);
27161     }
27162
27163In this situation, it may seem reasonable to save a pointer to the C
27164string returned by the `c_str' member function and use that rather than
27165call `c_str' repeatedly.  However, the temporary string created by the
27166call to `strfunc' is destroyed after `p' is initialized, at which point
27167`p' is left pointing to freed memory.
27168
27169 Code like this may run successfully under some other compilers,
27170particularly obsolete cfront-based compilers that delete temporaries
27171along with normal local variables.  However, the GNU C++ behavior is
27172standard-conforming, so if your program depends on late destruction of
27173temporaries it is not portable.
27174
27175 The safe way to write such code is to give the temporary a name, which
27176forces it to remain until the end of the scope of the name.  For
27177example:
27178
27179     const string& tmp = strfunc ();
27180     charfunc (tmp.c_str ());
27181
27182
27183File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
27184
2718510.8.4 Implicit Copy-Assignment for Virtual Bases
27186-------------------------------------------------
27187
27188When a base class is virtual, only one subobject of the base class
27189belongs to each full object.  Also, the constructors and destructors are
27190invoked only once, and called from the most-derived class.  However,
27191such objects behave unspecified when being assigned.  For example:
27192
27193     struct Base{
27194       char *name;
27195       Base(char *n) : name(strdup(n)){}
27196       Base& operator= (const Base& other){
27197        free (name);
27198        name = strdup (other.name);
27199       }
27200     };
27201
27202     struct A:virtual Base{
27203       int val;
27204       A():Base("A"){}
27205     };
27206
27207     struct B:virtual Base{
27208       int bval;
27209       B():Base("B"){}
27210     };
27211
27212     struct Derived:public A, public B{
27213       Derived():Base("Derived"){}
27214     };
27215
27216     void func(Derived &d1, Derived &d2)
27217     {
27218       d1 = d2;
27219     }
27220
27221 The C++ standard specifies that `Base::Base' is only called once when
27222constructing or copy-constructing a Derived object.  It is unspecified
27223whether `Base::operator=' is called more than once when the implicit
27224copy-assignment for Derived objects is invoked (as it is inside `func'
27225in the example).
27226
27227 G++ implements the "intuitive" algorithm for copy-assignment: assign
27228all direct bases, then assign all members.  In that algorithm, the
27229virtual base subobject can be encountered more than once.  In the
27230example, copying proceeds in the following order: `val', `name' (via
27231`strdup'), `bval', and `name' again.
27232
27233 If application code relies on copy-assignment, a user-defined
27234copy-assignment operator removes any uncertainties.  With such an
27235operator, the application can define whether and how the virtual base
27236subobject is assigned.
27237
27238
27239File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
27240
2724110.9 Caveats of using `protoize'
27242================================
27243
27244The conversion programs `protoize' and `unprotoize' can sometimes
27245change a source file in a way that won't work unless you rearrange it.
27246
27247   * `protoize' can insert references to a type name or type tag before
27248     the definition, or in a file where they are not defined.
27249
27250     If this happens, compiler error messages should show you where the
27251     new references are, so fixing the file by hand is straightforward.
27252
27253   * There are some C constructs which `protoize' cannot figure out.
27254     For example, it can't determine argument types for declaring a
27255     pointer-to-function variable; this you must do by hand.  `protoize'
27256     inserts a comment containing `???' each time it finds such a
27257     variable; so you can find all such variables by searching for this
27258     string.  ISO C does not require declaring the argument types of
27259     pointer-to-function types.
27260
27261   * Using `unprotoize' can easily introduce bugs.  If the program
27262     relied on prototypes to bring about conversion of arguments, these
27263     conversions will not take place in the program without prototypes.
27264     One case in which you can be sure `unprotoize' is safe is when you
27265     are removing prototypes that were made with `protoize'; if the
27266     program worked before without any prototypes, it will work again
27267     without them.
27268
27269     You can find all the places where this problem might occur by
27270     compiling the program with the `-Wconversion' option.  It prints a
27271     warning whenever an argument is converted.
27272
27273   * Both conversion programs can be confused if there are macro calls
27274     in and around the text to be converted.  In other words, the
27275     standard syntax for a declaration or definition must not result
27276     from expanding a macro.  This problem is inherent in the design of
27277     C and cannot be fixed.  If only a few functions have confusing
27278     macro calls, you can easily convert them manually.
27279
27280   * `protoize' cannot get the argument types for a function whose
27281     definition was not actually compiled due to preprocessing
27282     conditionals.  When this happens, `protoize' changes nothing in
27283     regard to such a function.  `protoize' tries to detect such
27284     instances and warn about them.
27285
27286     You can generally work around this problem by using `protoize' step
27287     by step, each time specifying a different set of `-D' options for
27288     compilation, until all of the functions have been converted.
27289     There is no automatic way to verify that you have got them all,
27290     however.
27291
27292   * Confusion may result if there is an occasion to convert a function
27293     declaration or definition in a region of source code where there
27294     is more than one formal parameter list present.  Thus, attempts to
27295     convert code containing multiple (conditionally compiled) versions
27296     of a single function header (in the same vicinity) may not produce
27297     the desired (or expected) results.
27298
27299     If you plan on converting source files which contain such code, it
27300     is recommended that you first make sure that each conditionally
27301     compiled region of source code which contains an alternative
27302     function header also contains at least one additional follower
27303     token (past the final right parenthesis of the function header).
27304     This should circumvent the problem.
27305
27306   * `unprotoize' can become confused when trying to convert a function
27307     definition or declaration which contains a declaration for a
27308     pointer-to-function formal argument which has the same name as the
27309     function being defined or declared.  We recommend you avoid such
27310     choices of formal parameter names.
27311
27312   * You might also want to correct some of the indentation by hand and
27313     break long lines.  (The conversion programs don't write lines
27314     longer than eighty characters in any case.)
27315
27316
27317File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
27318
2731910.10 Certain Changes We Don't Want to Make
27320===========================================
27321
27322This section lists changes that people frequently request, but which we
27323do not make because we think GCC is better without them.
27324
27325   * Checking the number and type of arguments to a function which has
27326     an old-fashioned definition and no prototype.
27327
27328     Such a feature would work only occasionally--only for calls that
27329     appear in the same file as the called function, following the
27330     definition.  The only way to check all calls reliably is to add a
27331     prototype for the function.  But adding a prototype eliminates the
27332     motivation for this feature.  So the feature is not worthwhile.
27333
27334   * Warning about using an expression whose type is signed as a shift
27335     count.
27336
27337     Shift count operands are probably signed more often than unsigned.
27338     Warning about this would cause far more annoyance than good.
27339
27340   * Warning about assigning a signed value to an unsigned variable.
27341
27342     Such assignments must be very common; warning about them would
27343     cause more annoyance than good.
27344
27345   * Warning when a non-void function value is ignored.
27346
27347     C contains many standard functions that return a value that most
27348     programs choose to ignore.  One obvious example is `printf'.
27349     Warning about this practice only leads the defensive programmer to
27350     clutter programs with dozens of casts to `void'.  Such casts are
27351     required so frequently that they become visual noise.  Writing
27352     those casts becomes so automatic that they no longer convey useful
27353     information about the intentions of the programmer.  For functions
27354     where the return value should never be ignored, use the
27355     `warn_unused_result' function attribute (*note Function
27356     Attributes::).
27357
27358   * Making `-fshort-enums' the default.
27359
27360     This would cause storage layout to be incompatible with most other
27361     C compilers.  And it doesn't seem very important, given that you
27362     can get the same result in other ways.  The case where it matters
27363     most is when the enumeration-valued object is inside a structure,
27364     and in that case you can specify a field width explicitly.
27365
27366   * Making bit-fields unsigned by default on particular machines where
27367     "the ABI standard" says to do so.
27368
27369     The ISO C standard leaves it up to the implementation whether a
27370     bit-field declared plain `int' is signed or not.  This in effect
27371     creates two alternative dialects of C.
27372
27373     The GNU C compiler supports both dialects; you can specify the
27374     signed dialect with `-fsigned-bitfields' and the unsigned dialect
27375     with `-funsigned-bitfields'.  However, this leaves open the
27376     question of which dialect to use by default.
27377
27378     Currently, the preferred dialect makes plain bit-fields signed,
27379     because this is simplest.  Since `int' is the same as `signed int'
27380     in every other context, it is cleanest for them to be the same in
27381     bit-fields as well.
27382
27383     Some computer manufacturers have published Application Binary
27384     Interface standards which specify that plain bit-fields should be
27385     unsigned.  It is a mistake, however, to say anything about this
27386     issue in an ABI.  This is because the handling of plain bit-fields
27387     distinguishes two dialects of C.  Both dialects are meaningful on
27388     every type of machine.  Whether a particular object file was
27389     compiled using signed bit-fields or unsigned is of no concern to
27390     other object files, even if they access the same bit-fields in the
27391     same data structures.
27392
27393     A given program is written in one or the other of these two
27394     dialects.  The program stands a chance to work on most any machine
27395     if it is compiled with the proper dialect.  It is unlikely to work
27396     at all if compiled with the wrong dialect.
27397
27398     Many users appreciate the GNU C compiler because it provides an
27399     environment that is uniform across machines.  These users would be
27400     inconvenienced if the compiler treated plain bit-fields
27401     differently on certain machines.
27402
27403     Occasionally users write programs intended only for a particular
27404     machine type.  On these occasions, the users would benefit if the
27405     GNU C compiler were to support by default the same dialect as the
27406     other compilers on that machine.  But such applications are rare.
27407     And users writing a program to run on more than one type of
27408     machine cannot possibly benefit from this kind of compatibility.
27409
27410     This is why GCC does and will treat plain bit-fields in the same
27411     fashion on all types of machines (by default).
27412
27413     There are some arguments for making bit-fields unsigned by default
27414     on all machines.  If, for example, this becomes a universal de
27415     facto standard, it would make sense for GCC to go along with it.
27416     This is something to be considered in the future.
27417
27418     (Of course, users strongly concerned about portability should
27419     indicate explicitly in each bit-field whether it is signed or not.
27420     In this way, they write programs which have the same meaning in
27421     both C dialects.)
27422
27423   * Undefining `__STDC__' when `-ansi' is not used.
27424
27425     Currently, GCC defines `__STDC__' unconditionally.  This provides
27426     good results in practice.
27427
27428     Programmers normally use conditionals on `__STDC__' to ask whether
27429     it is safe to use certain features of ISO C, such as function
27430     prototypes or ISO token concatenation.  Since plain `gcc' supports
27431     all the features of ISO C, the correct answer to these questions is
27432     "yes".
27433
27434     Some users try to use `__STDC__' to check for the availability of
27435     certain library facilities.  This is actually incorrect usage in
27436     an ISO C program, because the ISO C standard says that a conforming
27437     freestanding implementation should define `__STDC__' even though it
27438     does not have the library facilities.  `gcc -ansi -pedantic' is a
27439     conforming freestanding implementation, and it is therefore
27440     required to define `__STDC__', even though it does not come with
27441     an ISO C library.
27442
27443     Sometimes people say that defining `__STDC__' in a compiler that
27444     does not completely conform to the ISO C standard somehow violates
27445     the standard.  This is illogical.  The standard is a standard for
27446     compilers that claim to support ISO C, such as `gcc -ansi'--not
27447     for other compilers such as plain `gcc'.  Whatever the ISO C
27448     standard says is relevant to the design of plain `gcc' without
27449     `-ansi' only for pragmatic reasons, not as a requirement.
27450
27451     GCC normally defines `__STDC__' to be 1, and in addition defines
27452     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
27453     option for strict conformance to some version of ISO C.  On some
27454     hosts, system include files use a different convention, where
27455     `__STDC__' is normally 0, but is 1 if the user specifies strict
27456     conformance to the C Standard.  GCC follows the host convention
27457     when processing system include files, but when processing user
27458     files it follows the usual GNU C convention.
27459
27460   * Undefining `__STDC__' in C++.
27461
27462     Programs written to compile with C++-to-C translators get the
27463     value of `__STDC__' that goes with the C compiler that is
27464     subsequently used.  These programs must test `__STDC__' to
27465     determine what kind of C preprocessor that compiler uses: whether
27466     they should concatenate tokens in the ISO C fashion or in the
27467     traditional fashion.
27468
27469     These programs work properly with GNU C++ if `__STDC__' is defined.
27470     They would not work otherwise.
27471
27472     In addition, many header files are written to provide prototypes
27473     in ISO C but not in traditional C.  Many of these header files can
27474     work without change in C++ provided `__STDC__' is defined.  If
27475     `__STDC__' is not defined, they will all fail, and will all need
27476     to be changed to test explicitly for C++ as well.
27477
27478   * Deleting "empty" loops.
27479
27480     Historically, GCC has not deleted "empty" loops under the
27481     assumption that the most likely reason you would put one in a
27482     program is to have a delay, so deleting them will not make real
27483     programs run any faster.
27484
27485     However, the rationale here is that optimization of a nonempty loop
27486     cannot produce an empty one. This held for carefully written C
27487     compiled with less powerful optimizers but is not always the case
27488     for carefully written C++ or with more powerful optimizers.  Thus
27489     GCC will remove operations from loops whenever it can determine
27490     those operations are not externally visible (apart from the time
27491     taken to execute them, of course).  In case the loop can be proved
27492     to be finite, GCC will also remove the loop itself.
27493
27494     Be aware of this when performing timing tests, for instance the
27495     following loop can be completely removed, provided
27496     `some_expression' can provably not change any global state.
27497
27498          {
27499             int sum = 0;
27500             int ix;
27501
27502             for (ix = 0; ix != 10000; ix++)
27503                sum += some_expression;
27504          }
27505
27506     Even though `sum' is accumulated in the loop, no use is made of
27507     that summation, so the accumulation can be removed.
27508
27509   * Making side effects happen in the same order as in some other
27510     compiler.
27511
27512     It is never safe to depend on the order of evaluation of side
27513     effects.  For example, a function call like this may very well
27514     behave differently from one compiler to another:
27515
27516          void func (int, int);
27517
27518          int i = 2;
27519          func (i++, i++);
27520
27521     There is no guarantee (in either the C or the C++ standard language
27522     definitions) that the increments will be evaluated in any
27523     particular order.  Either increment might happen first.  `func'
27524     might get the arguments `2, 3', or it might get `3, 2', or even
27525     `2, 2'.
27526
27527   * Making certain warnings into errors by default.
27528
27529     Some ISO C testsuites report failure when the compiler does not
27530     produce an error message for a certain program.
27531
27532     ISO C requires a "diagnostic" message for certain kinds of invalid
27533     programs, but a warning is defined by GCC to count as a
27534     diagnostic.  If GCC produces a warning but not an error, that is
27535     correct ISO C support.  If testsuites call this "failure", they
27536     should be run with the GCC option `-pedantic-errors', which will
27537     turn these warnings into errors.
27538
27539
27540
27541File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
27542
2754310.11 Warning Messages and Error Messages
27544=========================================
27545
27546The GNU compiler can produce two kinds of diagnostics: errors and
27547warnings.  Each kind has a different purpose:
27548
27549     "Errors" report problems that make it impossible to compile your
27550     program.  GCC reports errors with the source file name and line
27551     number where the problem is apparent.
27552
27553     "Warnings" report other unusual conditions in your code that _may_
27554     indicate a problem, although compilation can (and does) proceed.
27555     Warning messages also report the source file name and line number,
27556     but include the text `warning:' to distinguish them from error
27557     messages.
27558
27559 Warnings may indicate danger points where you should check to make sure
27560that your program really does what you intend; or the use of obsolete
27561features; or the use of nonstandard features of GNU C or C++.  Many
27562warnings are issued only if you ask for them, with one of the `-W'
27563options (for instance, `-Wall' requests a variety of useful warnings).
27564
27565 GCC always tries to compile your program if possible; it never
27566gratuitously rejects a program whose meaning is clear merely because
27567(for instance) it fails to conform to a standard.  In some cases,
27568however, the C and C++ standards specify that certain extensions are
27569forbidden, and a diagnostic _must_ be issued by a conforming compiler.
27570The `-pedantic' option tells GCC to issue warnings in such cases;
27571`-pedantic-errors' says to make them errors instead.  This does not
27572mean that _all_ non-ISO constructs get warnings or errors.
27573
27574 *Note Options to Request or Suppress Warnings: Warning Options, for
27575more detail on these and related command-line options.
27576
27577
27578File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
27579
2758011 Reporting Bugs
27581*****************
27582
27583Your bug reports play an essential role in making GCC reliable.
27584
27585 When you encounter a problem, the first thing to do is to see if it is
27586already known.  *Note Trouble::.  If it isn't known, then you should
27587report the problem.
27588
27589* Menu:
27590
27591* Criteria:  Bug Criteria.   Have you really found a bug?
27592* Reporting: Bug Reporting.  How to report a bug effectively.
27593* Known: Trouble.            Known problems.
27594* Help: Service.             Where to ask for help.
27595
27596
27597File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
27598
2759911.1 Have You Found a Bug?
27600==========================
27601
27602If you are not sure whether you have found a bug, here are some
27603guidelines:
27604
27605   * If the compiler gets a fatal signal, for any input whatever, that
27606     is a compiler bug.  Reliable compilers never crash.
27607
27608   * If the compiler produces invalid assembly code, for any input
27609     whatever (except an `asm' statement), that is a compiler bug,
27610     unless the compiler reports errors (not just warnings) which would
27611     ordinarily prevent the assembler from being run.
27612
27613   * If the compiler produces valid assembly code that does not
27614     correctly execute the input source code, that is a compiler bug.
27615
27616     However, you must double-check to make sure, because you may have a
27617     program whose behavior is undefined, which happened by chance to
27618     give the desired results with another C or C++ compiler.
27619
27620     For example, in many nonoptimizing compilers, you can write `x;'
27621     at the end of a function instead of `return x;', with the same
27622     results.  But the value of the function is undefined if `return'
27623     is omitted; it is not a bug when GCC produces different results.
27624
27625     Problems often result from expressions with two increment
27626     operators, as in `f (*p++, *p++)'.  Your previous compiler might
27627     have interpreted that expression the way you intended; GCC might
27628     interpret it another way.  Neither compiler is wrong.  The bug is
27629     in your code.
27630
27631     After you have localized the error to a single source line, it
27632     should be easy to check for these things.  If your program is
27633     correct and well defined, you have found a compiler bug.
27634
27635   * If the compiler produces an error message for valid input, that is
27636     a compiler bug.
27637
27638   * If the compiler does not produce an error message for invalid
27639     input, that is a compiler bug.  However, you should note that your
27640     idea of "invalid input" might be someone else's idea of "an
27641     extension" or "support for traditional practice".
27642
27643   * If you are an experienced user of one of the languages GCC
27644     supports, your suggestions for improvement of GCC are welcome in
27645     any case.
27646
27647
27648File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
27649
2765011.2 How and where to Report Bugs
27651=================================
27652
27653Bugs should be reported to the GCC bug database.  Please refer to
27654`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
27655submit bug reports.  Copies of this file in HTML (`bugs.html') and
27656plain text (`BUGS') are also part of GCC releases.
27657
27658
27659File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
27660
2766112 How To Get Help with GCC
27662***************************
27663
27664If you need help installing, using or changing GCC, there are two ways
27665to find it:
27666
27667   * Send a message to a suitable network mailing list.  First try
27668     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
27669     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
27670     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
27671     GCC, please report it following the instructions at *note Bug
27672     Reporting::.
27673
27674   * Look in the service directory for someone who might help you for a
27675     fee.  The service directory is found at
27676     `http://www.gnu.org/prep/service.html'.
27677
27678 For further information, see `http://gcc.gnu.org/faq.html#support'.
27679
27680
27681File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
27682
2768313 Contributing to GCC Development
27684**********************************
27685
27686If you would like to help pretest GCC releases to assure they work well,
27687current development sources are available by SVN (see
27688`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
27689available for FTP; see `http://gcc.gnu.org/snapshots.html'.
27690
27691 If you would like to work on improvements to GCC, please read the
27692advice at these URLs:
27693
27694     `http://gcc.gnu.org/contribute.html'
27695     `http://gcc.gnu.org/contributewhy.html'
27696
27697for information on how to make useful contributions and avoid
27698duplication of effort.  Suggested projects are listed at
27699`http://gcc.gnu.org/projects/'.
27700
27701
27702File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
27703
27704Funding Free Software
27705*********************
27706
27707If you want to have more free software a few years from now, it makes
27708sense for you to help encourage people to contribute funds for its
27709development.  The most effective approach known is to encourage
27710commercial redistributors to donate.
27711
27712 Users of free software systems can boost the pace of development by
27713encouraging for-a-fee distributors to donate part of their selling price
27714to free software developers--the Free Software Foundation, and others.
27715
27716 The way to convince distributors to do this is to demand it and expect
27717it from them.  So when you compare distributors, judge them partly by
27718how much they give to free software development.  Show distributors
27719they must compete to be the one who gives the most.
27720
27721 To make this approach work, you must insist on numbers that you can
27722compare, such as, "We will donate ten dollars to the Frobnitz project
27723for each disk sold."  Don't be satisfied with a vague promise, such as
27724"A portion of the profits are donated," since it doesn't give a basis
27725for comparison.
27726
27727 Even a precise fraction "of the profits from this disk" is not very
27728meaningful, since creative accounting and unrelated business decisions
27729can greatly alter what fraction of the sales price counts as profit.
27730If the price you pay is $50, ten percent of the profit is probably less
27731than a dollar; it might be a few cents, or nothing at all.
27732
27733 Some redistributors do development work themselves.  This is useful
27734too; but to keep everyone honest, you need to inquire how much they do,
27735and what kind.  Some kinds of development make much more long-term
27736difference than others.  For example, maintaining a separate version of
27737a program contributes very little; maintaining the standard version of a
27738program for the whole community contributes much.  Easy new ports
27739contribute little, since someone else would surely do them; difficult
27740ports such as adding a new CPU to the GNU Compiler Collection
27741contribute more; major new features or packages contribute the most.
27742
27743 By establishing the idea that supporting further development is "the
27744proper thing to do" when distributing free software for a fee, we can
27745assure a steady flow of resources into making more free software.
27746
27747     Copyright (C) 1994 Free Software Foundation, Inc.
27748     Verbatim copying and redistribution of this section is permitted
27749     without royalty; alteration is not permitted.
27750
27751
27752File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
27753
27754The GNU Project and GNU/Linux
27755*****************************
27756
27757The GNU Project was launched in 1984 to develop a complete Unix-like
27758operating system which is free software: the GNU system.  (GNU is a
27759recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
27760Variants of the GNU operating system, which use the kernel Linux, are
27761now widely used; though these systems are often referred to as "Linux",
27762they are more accurately called GNU/Linux systems.
27763
27764 For more information, see:
27765     `http://www.gnu.org/'
27766     `http://www.gnu.org/gnu/linux-and-gnu.html'
27767
27768
27769File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
27770
27771GNU GENERAL PUBLIC LICENSE
27772**************************
27773
27774                         Version 2, June 1991
27775
27776     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
27777     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
27778
27779     Everyone is permitted to copy and distribute verbatim copies
27780     of this license document, but changing it is not allowed.
27781
27782Preamble
27783========
27784
27785The licenses for most software are designed to take away your freedom
27786to share and change it.  By contrast, the GNU General Public License is
27787intended to guarantee your freedom to share and change free
27788software--to make sure the software is free for all its users.  This
27789General Public License applies to most of the Free Software
27790Foundation's software and to any other program whose authors commit to
27791using it.  (Some other Free Software Foundation software is covered by
27792the GNU Library General Public License instead.)  You can apply it to
27793your programs, too.
27794
27795 When we speak of free software, we are referring to freedom, not
27796price.  Our General Public Licenses are designed to make sure that you
27797have the freedom to distribute copies of free software (and charge for
27798this service if you wish), that you receive source code or can get it
27799if you want it, that you can change the software or use pieces of it in
27800new free programs; and that you know you can do these things.
27801
27802 To protect your rights, we need to make restrictions that forbid
27803anyone to deny you these rights or to ask you to surrender the rights.
27804These restrictions translate to certain responsibilities for you if you
27805distribute copies of the software, or if you modify it.
27806
27807 For example, if you distribute copies of such a program, whether
27808gratis or for a fee, you must give the recipients all the rights that
27809you have.  You must make sure that they, too, receive or can get the
27810source code.  And you must show them these terms so they know their
27811rights.
27812
27813 We protect your rights with two steps: (1) copyright the software, and
27814(2) offer you this license which gives you legal permission to copy,
27815distribute and/or modify the software.
27816
27817 Also, for each author's protection and ours, we want to make certain
27818that everyone understands that there is no warranty for this free
27819software.  If the software is modified by someone else and passed on, we
27820want its recipients to know that what they have is not the original, so
27821that any problems introduced by others will not reflect on the original
27822authors' reputations.
27823
27824 Finally, any free program is threatened constantly by software
27825patents.  We wish to avoid the danger that redistributors of a free
27826program will individually obtain patent licenses, in effect making the
27827program proprietary.  To prevent this, we have made it clear that any
27828patent must be licensed for everyone's free use or not licensed at all.
27829
27830 The precise terms and conditions for copying, distribution and
27831modification follow.
27832
27833    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
27834  0. This License applies to any program or other work which contains a
27835     notice placed by the copyright holder saying it may be distributed
27836     under the terms of this General Public License.  The "Program",
27837     below, refers to any such program or work, and a "work based on
27838     the Program" means either the Program or any derivative work under
27839     copyright law: that is to say, a work containing the Program or a
27840     portion of it, either verbatim or with modifications and/or
27841     translated into another language.  (Hereinafter, translation is
27842     included without limitation in the term "modification".)  Each
27843     licensee is addressed as "you".
27844
27845     Activities other than copying, distribution and modification are
27846     not covered by this License; they are outside its scope.  The act
27847     of running the Program is not restricted, and the output from the
27848     Program is covered only if its contents constitute a work based on
27849     the Program (independent of having been made by running the
27850     Program).  Whether that is true depends on what the Program does.
27851
27852  1. You may copy and distribute verbatim copies of the Program's
27853     source code as you receive it, in any medium, provided that you
27854     conspicuously and appropriately publish on each copy an appropriate
27855     copyright notice and disclaimer of warranty; keep intact all the
27856     notices that refer to this License and to the absence of any
27857     warranty; and give any other recipients of the Program a copy of
27858     this License along with the Program.
27859
27860     You may charge a fee for the physical act of transferring a copy,
27861     and you may at your option offer warranty protection in exchange
27862     for a fee.
27863
27864  2. You may modify your copy or copies of the Program or any portion
27865     of it, thus forming a work based on the Program, and copy and
27866     distribute such modifications or work under the terms of Section 1
27867     above, provided that you also meet all of these conditions:
27868
27869       a. You must cause the modified files to carry prominent notices
27870          stating that you changed the files and the date of any change.
27871
27872       b. You must cause any work that you distribute or publish, that
27873          in whole or in part contains or is derived from the Program
27874          or any part thereof, to be licensed as a whole at no charge
27875          to all third parties under the terms of this License.
27876
27877       c. If the modified program normally reads commands interactively
27878          when run, you must cause it, when started running for such
27879          interactive use in the most ordinary way, to print or display
27880          an announcement including an appropriate copyright notice and
27881          a notice that there is no warranty (or else, saying that you
27882          provide a warranty) and that users may redistribute the
27883          program under these conditions, and telling the user how to
27884          view a copy of this License.  (Exception: if the Program
27885          itself is interactive but does not normally print such an
27886          announcement, your work based on the Program is not required
27887          to print an announcement.)
27888
27889     These requirements apply to the modified work as a whole.  If
27890     identifiable sections of that work are not derived from the
27891     Program, and can be reasonably considered independent and separate
27892     works in themselves, then this License, and its terms, do not
27893     apply to those sections when you distribute them as separate
27894     works.  But when you distribute the same sections as part of a
27895     whole which is a work based on the Program, the distribution of
27896     the whole must be on the terms of this License, whose permissions
27897     for other licensees extend to the entire whole, and thus to each
27898     and every part regardless of who wrote it.
27899
27900     Thus, it is not the intent of this section to claim rights or
27901     contest your rights to work written entirely by you; rather, the
27902     intent is to exercise the right to control the distribution of
27903     derivative or collective works based on the Program.
27904
27905     In addition, mere aggregation of another work not based on the
27906     Program with the Program (or with a work based on the Program) on
27907     a volume of a storage or distribution medium does not bring the
27908     other work under the scope of this License.
27909
27910  3. You may copy and distribute the Program (or a work based on it,
27911     under Section 2) in object code or executable form under the terms
27912     of Sections 1 and 2 above provided that you also do one of the
27913     following:
27914
27915       a. Accompany it with the complete corresponding machine-readable
27916          source code, which must be distributed under the terms of
27917          Sections 1 and 2 above on a medium customarily used for
27918          software interchange; or,
27919
27920       b. Accompany it with a written offer, valid for at least three
27921          years, to give any third party, for a charge no more than your
27922          cost of physically performing source distribution, a complete
27923          machine-readable copy of the corresponding source code, to be
27924          distributed under the terms of Sections 1 and 2 above on a
27925          medium customarily used for software interchange; or,
27926
27927       c. Accompany it with the information you received as to the offer
27928          to distribute corresponding source code.  (This alternative is
27929          allowed only for noncommercial distribution and only if you
27930          received the program in object code or executable form with
27931          such an offer, in accord with Subsection b above.)
27932
27933     The source code for a work means the preferred form of the work for
27934     making modifications to it.  For an executable work, complete
27935     source code means all the source code for all modules it contains,
27936     plus any associated interface definition files, plus the scripts
27937     used to control compilation and installation of the executable.
27938     However, as a special exception, the source code distributed need
27939     not include anything that is normally distributed (in either
27940     source or binary form) with the major components (compiler,
27941     kernel, and so on) of the operating system on which the executable
27942     runs, unless that component itself accompanies the executable.
27943
27944     If distribution of executable or object code is made by offering
27945     access to copy from a designated place, then offering equivalent
27946     access to copy the source code from the same place counts as
27947     distribution of the source code, even though third parties are not
27948     compelled to copy the source along with the object code.
27949
27950  4. You may not copy, modify, sublicense, or distribute the Program
27951     except as expressly provided under this License.  Any attempt
27952     otherwise to copy, modify, sublicense or distribute the Program is
27953     void, and will automatically terminate your rights under this
27954     License.  However, parties who have received copies, or rights,
27955     from you under this License will not have their licenses
27956     terminated so long as such parties remain in full compliance.
27957
27958  5. You are not required to accept this License, since you have not
27959     signed it.  However, nothing else grants you permission to modify
27960     or distribute the Program or its derivative works.  These actions
27961     are prohibited by law if you do not accept this License.
27962     Therefore, by modifying or distributing the Program (or any work
27963     based on the Program), you indicate your acceptance of this
27964     License to do so, and all its terms and conditions for copying,
27965     distributing or modifying the Program or works based on it.
27966
27967  6. Each time you redistribute the Program (or any work based on the
27968     Program), the recipient automatically receives a license from the
27969     original licensor to copy, distribute or modify the Program
27970     subject to these terms and conditions.  You may not impose any
27971     further restrictions on the recipients' exercise of the rights
27972     granted herein.  You are not responsible for enforcing compliance
27973     by third parties to this License.
27974
27975  7. If, as a consequence of a court judgment or allegation of patent
27976     infringement or for any other reason (not limited to patent
27977     issues), conditions are imposed on you (whether by court order,
27978     agreement or otherwise) that contradict the conditions of this
27979     License, they do not excuse you from the conditions of this
27980     License.  If you cannot distribute so as to satisfy simultaneously
27981     your obligations under this License and any other pertinent
27982     obligations, then as a consequence you may not distribute the
27983     Program at all.  For example, if a patent license would not permit
27984     royalty-free redistribution of the Program by all those who
27985     receive copies directly or indirectly through you, then the only
27986     way you could satisfy both it and this License would be to refrain
27987     entirely from distribution of the Program.
27988
27989     If any portion of this section is held invalid or unenforceable
27990     under any particular circumstance, the balance of the section is
27991     intended to apply and the section as a whole is intended to apply
27992     in other circumstances.
27993
27994     It is not the purpose of this section to induce you to infringe any
27995     patents or other property right claims or to contest validity of
27996     any such claims; this section has the sole purpose of protecting
27997     the integrity of the free software distribution system, which is
27998     implemented by public license practices.  Many people have made
27999     generous contributions to the wide range of software distributed
28000     through that system in reliance on consistent application of that
28001     system; it is up to the author/donor to decide if he or she is
28002     willing to distribute software through any other system and a
28003     licensee cannot impose that choice.
28004
28005     This section is intended to make thoroughly clear what is believed
28006     to be a consequence of the rest of this License.
28007
28008  8. If the distribution and/or use of the Program is restricted in
28009     certain countries either by patents or by copyrighted interfaces,
28010     the original copyright holder who places the Program under this
28011     License may add an explicit geographical distribution limitation
28012     excluding those countries, so that distribution is permitted only
28013     in or among countries not thus excluded.  In such case, this
28014     License incorporates the limitation as if written in the body of
28015     this License.
28016
28017  9. The Free Software Foundation may publish revised and/or new
28018     versions of the General Public License from time to time.  Such
28019     new versions will be similar in spirit to the present version, but
28020     may differ in detail to address new problems or concerns.
28021
28022     Each version is given a distinguishing version number.  If the
28023     Program specifies a version number of this License which applies
28024     to it and "any later version", you have the option of following
28025     the terms and conditions either of that version or of any later
28026     version published by the Free Software Foundation.  If the Program
28027     does not specify a version number of this License, you may choose
28028     any version ever published by the Free Software Foundation.
28029
28030 10. If you wish to incorporate parts of the Program into other free
28031     programs whose distribution conditions are different, write to the
28032     author to ask for permission.  For software which is copyrighted
28033     by the Free Software Foundation, write to the Free Software
28034     Foundation; we sometimes make exceptions for this.  Our decision
28035     will be guided by the two goals of preserving the free status of
28036     all derivatives of our free software and of promoting the sharing
28037     and reuse of software generally.
28038
28039                                NO WARRANTY
28040 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
28041     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
28042     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
28043     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
28044     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
28045     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
28046     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
28047     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
28048     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
28049     SERVICING, REPAIR OR CORRECTION.
28050
28051 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
28052     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
28053     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
28054     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
28055     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
28056     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
28057     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
28058     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
28059     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
28060     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
28061
28062                      END OF TERMS AND CONDITIONS
28063Appendix: How to Apply These Terms to Your New Programs
28064=======================================================
28065
28066If you develop a new program, and you want it to be of the greatest
28067possible use to the public, the best way to achieve this is to make it
28068free software which everyone can redistribute and change under these
28069terms.
28070
28071 To do so, attach the following notices to the program.  It is safest
28072to attach them to the start of each source file to most effectively
28073convey the exclusion of warranty; and each file should have at least
28074the "copyright" line and a pointer to where the full notice is found.
28075
28076     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
28077     Copyright (C) YEAR  NAME OF AUTHOR
28078
28079     This program is free software; you can redistribute it and/or modify
28080     it under the terms of the GNU General Public License as published by
28081     the Free Software Foundation; either version 2 of the License, or
28082     (at your option) any later version.
28083
28084     This program is distributed in the hope that it will be useful,
28085     but WITHOUT ANY WARRANTY; without even the implied warranty of
28086     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28087     GNU General Public License for more details.
28088
28089     You should have received a copy of the GNU General Public License
28090     along with this program; if not, write to the Free Software
28091     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
28092
28093 Also add information on how to contact you by electronic and paper
28094mail.
28095
28096 If the program is interactive, make it output a short notice like this
28097when it starts in an interactive mode:
28098
28099     Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
28100     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
28101     type `show w'.
28102     This is free software, and you are welcome to redistribute it
28103     under certain conditions; type `show c' for details.
28104
28105 The hypothetical commands `show w' and `show c' should show the
28106appropriate parts of the General Public License.  Of course, the
28107commands you use may be called something other than `show w' and `show
28108c'; they could even be mouse-clicks or menu items--whatever suits your
28109program.
28110
28111 You should also get your employer (if you work as a programmer) or your
28112school, if any, to sign a "copyright disclaimer" for the program, if
28113necessary.  Here is a sample; alter the names:
28114
28115     Yoyodyne, Inc., hereby disclaims all copyright interest in the program
28116     `Gnomovision' (which makes passes at compilers) written by James Hacker.
28117
28118     SIGNATURE OF TY COON, 1 April 1989
28119     Ty Coon, President of Vice
28120
28121 This General Public License does not permit incorporating your program
28122into proprietary programs.  If your program is a subroutine library,
28123you may consider it more useful to permit linking proprietary
28124applications with the library.  If this is what you want to do, use the
28125GNU Library General Public License instead of this License.
28126
28127
28128File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
28129
28130GNU Free Documentation License
28131******************************
28132
28133                      Version 1.2, November 2002
28134
28135     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
28136     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
28137
28138     Everyone is permitted to copy and distribute verbatim copies
28139     of this license document, but changing it is not allowed.
28140
28141  0. PREAMBLE
28142
28143     The purpose of this License is to make a manual, textbook, or other
28144     functional and useful document "free" in the sense of freedom: to
28145     assure everyone the effective freedom to copy and redistribute it,
28146     with or without modifying it, either commercially or
28147     noncommercially.  Secondarily, this License preserves for the
28148     author and publisher a way to get credit for their work, while not
28149     being considered responsible for modifications made by others.
28150
28151     This License is a kind of "copyleft", which means that derivative
28152     works of the document must themselves be free in the same sense.
28153     It complements the GNU General Public License, which is a copyleft
28154     license designed for free software.
28155
28156     We have designed this License in order to use it for manuals for
28157     free software, because free software needs free documentation: a
28158     free program should come with manuals providing the same freedoms
28159     that the software does.  But this License is not limited to
28160     software manuals; it can be used for any textual work, regardless
28161     of subject matter or whether it is published as a printed book.
28162     We recommend this License principally for works whose purpose is
28163     instruction or reference.
28164
28165  1. APPLICABILITY AND DEFINITIONS
28166
28167     This License applies to any manual or other work, in any medium,
28168     that contains a notice placed by the copyright holder saying it
28169     can be distributed under the terms of this License.  Such a notice
28170     grants a world-wide, royalty-free license, unlimited in duration,
28171     to use that work under the conditions stated herein.  The
28172     "Document", below, refers to any such manual or work.  Any member
28173     of the public is a licensee, and is addressed as "you".  You
28174     accept the license if you copy, modify or distribute the work in a
28175     way requiring permission under copyright law.
28176
28177     A "Modified Version" of the Document means any work containing the
28178     Document or a portion of it, either copied verbatim, or with
28179     modifications and/or translated into another language.
28180
28181     A "Secondary Section" is a named appendix or a front-matter section
28182     of the Document that deals exclusively with the relationship of the
28183     publishers or authors of the Document to the Document's overall
28184     subject (or to related matters) and contains nothing that could
28185     fall directly within that overall subject.  (Thus, if the Document
28186     is in part a textbook of mathematics, a Secondary Section may not
28187     explain any mathematics.)  The relationship could be a matter of
28188     historical connection with the subject or with related matters, or
28189     of legal, commercial, philosophical, ethical or political position
28190     regarding them.
28191
28192     The "Invariant Sections" are certain Secondary Sections whose
28193     titles are designated, as being those of Invariant Sections, in
28194     the notice that says that the Document is released under this
28195     License.  If a section does not fit the above definition of
28196     Secondary then it is not allowed to be designated as Invariant.
28197     The Document may contain zero Invariant Sections.  If the Document
28198     does not identify any Invariant Sections then there are none.
28199
28200     The "Cover Texts" are certain short passages of text that are
28201     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
28202     that says that the Document is released under this License.  A
28203     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
28204     be at most 25 words.
28205
28206     A "Transparent" copy of the Document means a machine-readable copy,
28207     represented in a format whose specification is available to the
28208     general public, that is suitable for revising the document
28209     straightforwardly with generic text editors or (for images
28210     composed of pixels) generic paint programs or (for drawings) some
28211     widely available drawing editor, and that is suitable for input to
28212     text formatters or for automatic translation to a variety of
28213     formats suitable for input to text formatters.  A copy made in an
28214     otherwise Transparent file format whose markup, or absence of
28215     markup, has been arranged to thwart or discourage subsequent
28216     modification by readers is not Transparent.  An image format is
28217     not Transparent if used for any substantial amount of text.  A
28218     copy that is not "Transparent" is called "Opaque".
28219
28220     Examples of suitable formats for Transparent copies include plain
28221     ASCII without markup, Texinfo input format, LaTeX input format,
28222     SGML or XML using a publicly available DTD, and
28223     standard-conforming simple HTML, PostScript or PDF designed for
28224     human modification.  Examples of transparent image formats include
28225     PNG, XCF and JPG.  Opaque formats include proprietary formats that
28226     can be read and edited only by proprietary word processors, SGML or
28227     XML for which the DTD and/or processing tools are not generally
28228     available, and the machine-generated HTML, PostScript or PDF
28229     produced by some word processors for output purposes only.
28230
28231     The "Title Page" means, for a printed book, the title page itself,
28232     plus such following pages as are needed to hold, legibly, the
28233     material this License requires to appear in the title page.  For
28234     works in formats which do not have any title page as such, "Title
28235     Page" means the text near the most prominent appearance of the
28236     work's title, preceding the beginning of the body of the text.
28237
28238     A section "Entitled XYZ" means a named subunit of the Document
28239     whose title either is precisely XYZ or contains XYZ in parentheses
28240     following text that translates XYZ in another language.  (Here XYZ
28241     stands for a specific section name mentioned below, such as
28242     "Acknowledgements", "Dedications", "Endorsements", or "History".)
28243     To "Preserve the Title" of such a section when you modify the
28244     Document means that it remains a section "Entitled XYZ" according
28245     to this definition.
28246
28247     The Document may include Warranty Disclaimers next to the notice
28248     which states that this License applies to the Document.  These
28249     Warranty Disclaimers are considered to be included by reference in
28250     this License, but only as regards disclaiming warranties: any other
28251     implication that these Warranty Disclaimers may have is void and
28252     has no effect on the meaning of this License.
28253
28254  2. VERBATIM COPYING
28255
28256     You may copy and distribute the Document in any medium, either
28257     commercially or noncommercially, provided that this License, the
28258     copyright notices, and the license notice saying this License
28259     applies to the Document are reproduced in all copies, and that you
28260     add no other conditions whatsoever to those of this License.  You
28261     may not use technical measures to obstruct or control the reading
28262     or further copying of the copies you make or distribute.  However,
28263     you may accept compensation in exchange for copies.  If you
28264     distribute a large enough number of copies you must also follow
28265     the conditions in section 3.
28266
28267     You may also lend copies, under the same conditions stated above,
28268     and you may publicly display copies.
28269
28270  3. COPYING IN QUANTITY
28271
28272     If you publish printed copies (or copies in media that commonly
28273     have printed covers) of the Document, numbering more than 100, and
28274     the Document's license notice requires Cover Texts, you must
28275     enclose the copies in covers that carry, clearly and legibly, all
28276     these Cover Texts: Front-Cover Texts on the front cover, and
28277     Back-Cover Texts on the back cover.  Both covers must also clearly
28278     and legibly identify you as the publisher of these copies.  The
28279     front cover must present the full title with all words of the
28280     title equally prominent and visible.  You may add other material
28281     on the covers in addition.  Copying with changes limited to the
28282     covers, as long as they preserve the title of the Document and
28283     satisfy these conditions, can be treated as verbatim copying in
28284     other respects.
28285
28286     If the required texts for either cover are too voluminous to fit
28287     legibly, you should put the first ones listed (as many as fit
28288     reasonably) on the actual cover, and continue the rest onto
28289     adjacent pages.
28290
28291     If you publish or distribute Opaque copies of the Document
28292     numbering more than 100, you must either include a
28293     machine-readable Transparent copy along with each Opaque copy, or
28294     state in or with each Opaque copy a computer-network location from
28295     which the general network-using public has access to download
28296     using public-standard network protocols a complete Transparent
28297     copy of the Document, free of added material.  If you use the
28298     latter option, you must take reasonably prudent steps, when you
28299     begin distribution of Opaque copies in quantity, to ensure that
28300     this Transparent copy will remain thus accessible at the stated
28301     location until at least one year after the last time you
28302     distribute an Opaque copy (directly or through your agents or
28303     retailers) of that edition to the public.
28304
28305     It is requested, but not required, that you contact the authors of
28306     the Document well before redistributing any large number of
28307     copies, to give them a chance to provide you with an updated
28308     version of the Document.
28309
28310  4. MODIFICATIONS
28311
28312     You may copy and distribute a Modified Version of the Document
28313     under the conditions of sections 2 and 3 above, provided that you
28314     release the Modified Version under precisely this License, with
28315     the Modified Version filling the role of the Document, thus
28316     licensing distribution and modification of the Modified Version to
28317     whoever possesses a copy of it.  In addition, you must do these
28318     things in the Modified Version:
28319
28320       A. Use in the Title Page (and on the covers, if any) a title
28321          distinct from that of the Document, and from those of
28322          previous versions (which should, if there were any, be listed
28323          in the History section of the Document).  You may use the
28324          same title as a previous version if the original publisher of
28325          that version gives permission.
28326
28327       B. List on the Title Page, as authors, one or more persons or
28328          entities responsible for authorship of the modifications in
28329          the Modified Version, together with at least five of the
28330          principal authors of the Document (all of its principal
28331          authors, if it has fewer than five), unless they release you
28332          from this requirement.
28333
28334       C. State on the Title page the name of the publisher of the
28335          Modified Version, as the publisher.
28336
28337       D. Preserve all the copyright notices of the Document.
28338
28339       E. Add an appropriate copyright notice for your modifications
28340          adjacent to the other copyright notices.
28341
28342       F. Include, immediately after the copyright notices, a license
28343          notice giving the public permission to use the Modified
28344          Version under the terms of this License, in the form shown in
28345          the Addendum below.
28346
28347       G. Preserve in that license notice the full lists of Invariant
28348          Sections and required Cover Texts given in the Document's
28349          license notice.
28350
28351       H. Include an unaltered copy of this License.
28352
28353       I. Preserve the section Entitled "History", Preserve its Title,
28354          and add to it an item stating at least the title, year, new
28355          authors, and publisher of the Modified Version as given on
28356          the Title Page.  If there is no section Entitled "History" in
28357          the Document, create one stating the title, year, authors,
28358          and publisher of the Document as given on its Title Page,
28359          then add an item describing the Modified Version as stated in
28360          the previous sentence.
28361
28362       J. Preserve the network location, if any, given in the Document
28363          for public access to a Transparent copy of the Document, and
28364          likewise the network locations given in the Document for
28365          previous versions it was based on.  These may be placed in
28366          the "History" section.  You may omit a network location for a
28367          work that was published at least four years before the
28368          Document itself, or if the original publisher of the version
28369          it refers to gives permission.
28370
28371       K. For any section Entitled "Acknowledgements" or "Dedications",
28372          Preserve the Title of the section, and preserve in the
28373          section all the substance and tone of each of the contributor
28374          acknowledgements and/or dedications given therein.
28375
28376       L. Preserve all the Invariant Sections of the Document,
28377          unaltered in their text and in their titles.  Section numbers
28378          or the equivalent are not considered part of the section
28379          titles.
28380
28381       M. Delete any section Entitled "Endorsements".  Such a section
28382          may not be included in the Modified Version.
28383
28384       N. Do not retitle any existing section to be Entitled
28385          "Endorsements" or to conflict in title with any Invariant
28386          Section.
28387
28388       O. Preserve any Warranty Disclaimers.
28389
28390     If the Modified Version includes new front-matter sections or
28391     appendices that qualify as Secondary Sections and contain no
28392     material copied from the Document, you may at your option
28393     designate some or all of these sections as invariant.  To do this,
28394     add their titles to the list of Invariant Sections in the Modified
28395     Version's license notice.  These titles must be distinct from any
28396     other section titles.
28397
28398     You may add a section Entitled "Endorsements", provided it contains
28399     nothing but endorsements of your Modified Version by various
28400     parties--for example, statements of peer review or that the text
28401     has been approved by an organization as the authoritative
28402     definition of a standard.
28403
28404     You may add a passage of up to five words as a Front-Cover Text,
28405     and a passage of up to 25 words as a Back-Cover Text, to the end
28406     of the list of Cover Texts in the Modified Version.  Only one
28407     passage of Front-Cover Text and one of Back-Cover Text may be
28408     added by (or through arrangements made by) any one entity.  If the
28409     Document already includes a cover text for the same cover,
28410     previously added by you or by arrangement made by the same entity
28411     you are acting on behalf of, you may not add another; but you may
28412     replace the old one, on explicit permission from the previous
28413     publisher that added the old one.
28414
28415     The author(s) and publisher(s) of the Document do not by this
28416     License give permission to use their names for publicity for or to
28417     assert or imply endorsement of any Modified Version.
28418
28419  5. COMBINING DOCUMENTS
28420
28421     You may combine the Document with other documents released under
28422     this License, under the terms defined in section 4 above for
28423     modified versions, provided that you include in the combination
28424     all of the Invariant Sections of all of the original documents,
28425     unmodified, and list them all as Invariant Sections of your
28426     combined work in its license notice, and that you preserve all
28427     their Warranty Disclaimers.
28428
28429     The combined work need only contain one copy of this License, and
28430     multiple identical Invariant Sections may be replaced with a single
28431     copy.  If there are multiple Invariant Sections with the same name
28432     but different contents, make the title of each such section unique
28433     by adding at the end of it, in parentheses, the name of the
28434     original author or publisher of that section if known, or else a
28435     unique number.  Make the same adjustment to the section titles in
28436     the list of Invariant Sections in the license notice of the
28437     combined work.
28438
28439     In the combination, you must combine any sections Entitled
28440     "History" in the various original documents, forming one section
28441     Entitled "History"; likewise combine any sections Entitled
28442     "Acknowledgements", and any sections Entitled "Dedications".  You
28443     must delete all sections Entitled "Endorsements."
28444
28445  6. COLLECTIONS OF DOCUMENTS
28446
28447     You may make a collection consisting of the Document and other
28448     documents released under this License, and replace the individual
28449     copies of this License in the various documents with a single copy
28450     that is included in the collection, provided that you follow the
28451     rules of this License for verbatim copying of each of the
28452     documents in all other respects.
28453
28454     You may extract a single document from such a collection, and
28455     distribute it individually under this License, provided you insert
28456     a copy of this License into the extracted document, and follow
28457     this License in all other respects regarding verbatim copying of
28458     that document.
28459
28460  7. AGGREGATION WITH INDEPENDENT WORKS
28461
28462     A compilation of the Document or its derivatives with other
28463     separate and independent documents or works, in or on a volume of
28464     a storage or distribution medium, is called an "aggregate" if the
28465     copyright resulting from the compilation is not used to limit the
28466     legal rights of the compilation's users beyond what the individual
28467     works permit.  When the Document is included in an aggregate, this
28468     License does not apply to the other works in the aggregate which
28469     are not themselves derivative works of the Document.
28470
28471     If the Cover Text requirement of section 3 is applicable to these
28472     copies of the Document, then if the Document is less than one half
28473     of the entire aggregate, the Document's Cover Texts may be placed
28474     on covers that bracket the Document within the aggregate, or the
28475     electronic equivalent of covers if the Document is in electronic
28476     form.  Otherwise they must appear on printed covers that bracket
28477     the whole aggregate.
28478
28479  8. TRANSLATION
28480
28481     Translation is considered a kind of modification, so you may
28482     distribute translations of the Document under the terms of section
28483     4.  Replacing Invariant Sections with translations requires special
28484     permission from their copyright holders, but you may include
28485     translations of some or all Invariant Sections in addition to the
28486     original versions of these Invariant Sections.  You may include a
28487     translation of this License, and all the license notices in the
28488     Document, and any Warranty Disclaimers, provided that you also
28489     include the original English version of this License and the
28490     original versions of those notices and disclaimers.  In case of a
28491     disagreement between the translation and the original version of
28492     this License or a notice or disclaimer, the original version will
28493     prevail.
28494
28495     If a section in the Document is Entitled "Acknowledgements",
28496     "Dedications", or "History", the requirement (section 4) to
28497     Preserve its Title (section 1) will typically require changing the
28498     actual title.
28499
28500  9. TERMINATION
28501
28502     You may not copy, modify, sublicense, or distribute the Document
28503     except as expressly provided for under this License.  Any other
28504     attempt to copy, modify, sublicense or distribute the Document is
28505     void, and will automatically terminate your rights under this
28506     License.  However, parties who have received copies, or rights,
28507     from you under this License will not have their licenses
28508     terminated so long as such parties remain in full compliance.
28509
28510 10. FUTURE REVISIONS OF THIS LICENSE
28511
28512     The Free Software Foundation may publish new, revised versions of
28513     the GNU Free Documentation License from time to time.  Such new
28514     versions will be similar in spirit to the present version, but may
28515     differ in detail to address new problems or concerns.  See
28516     `http://www.gnu.org/copyleft/'.
28517
28518     Each version of the License is given a distinguishing version
28519     number.  If the Document specifies that a particular numbered
28520     version of this License "or any later version" applies to it, you
28521     have the option of following the terms and conditions either of
28522     that specified version or of any later version that has been
28523     published (not as a draft) by the Free Software Foundation.  If
28524     the Document does not specify a version number of this License,
28525     you may choose any version ever published (not as a draft) by the
28526     Free Software Foundation.
28527
28528ADDENDUM: How to use this License for your documents
28529====================================================
28530
28531To use this License in a document you have written, include a copy of
28532the License in the document and put the following copyright and license
28533notices just after the title page:
28534
28535       Copyright (C)  YEAR  YOUR NAME.
28536       Permission is granted to copy, distribute and/or modify this document
28537       under the terms of the GNU Free Documentation License, Version 1.2
28538       or any later version published by the Free Software Foundation;
28539       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
28540       Texts.  A copy of the license is included in the section entitled ``GNU
28541       Free Documentation License''.
28542
28543 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
28544replace the "with...Texts." line with this:
28545
28546         with the Invariant Sections being LIST THEIR TITLES, with
28547         the Front-Cover Texts being LIST, and with the Back-Cover Texts
28548         being LIST.
28549
28550 If you have Invariant Sections without Cover Texts, or some other
28551combination of the three, merge those two alternatives to suit the
28552situation.
28553
28554 If your document contains nontrivial examples of program code, we
28555recommend releasing these examples in parallel under your choice of
28556free software license, such as the GNU General Public License, to
28557permit their use in free software.
28558
28559
28560File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
28561
28562Contributors to GCC
28563*******************
28564
28565The GCC project would like to thank its many contributors.  Without
28566them the project would not have been nearly as successful as it has
28567been.  Any omissions in this list are accidental.  Feel free to contact
28568<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
28569some of your contributions are not listed.  Please keep this list in
28570alphabetical order.
28571
28572   * Analog Devices helped implement the support for complex data types
28573     and iterators.
28574
28575   * John David Anglin for threading-related fixes and improvements to
28576     libstdc++-v3, and the HP-UX port.
28577
28578   * James van Artsdalen wrote the code that makes efficient use of the
28579     Intel 80387 register stack.
28580
28581   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
28582     Series port.
28583
28584   * Alasdair Baird for various bug fixes.
28585
28586   * Giovanni Bajo for analyzing lots of complicated C++ problem
28587     reports.
28588
28589   * Peter Barada for his work to improve code generation for new
28590     ColdFire cores.
28591
28592   * Gerald Baumgartner added the signature extension to the C++ front
28593     end.
28594
28595   * Godmar Back for his Java improvements and encouragement.
28596
28597   * Scott Bambrough for help porting the Java compiler.
28598
28599   * Wolfgang Bangerth for processing tons of bug reports.
28600
28601   * Jon Beniston for his Microsoft Windows port of Java.
28602
28603   * Daniel Berlin for better DWARF2 support, faster/better
28604     optimizations, improved alias analysis, plus migrating GCC to
28605     Bugzilla.
28606
28607   * Geoff Berry for his Java object serialization work and various
28608     patches.
28609
28610   * Uros Bizjak for the implementation of x87 math built-in functions
28611     and for various middle end and i386 back end improvements and
28612     bugfixes.
28613
28614   * Eric Blake for helping to make GCJ and libgcj conform to the
28615     specifications.
28616
28617   * Janne Blomqvist for contributions to GNU Fortran.
28618
28619   * Segher Boessenkool for various fixes.
28620
28621   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
28622     other Java work.
28623
28624   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
28625     miscellaneous clean-ups.
28626
28627   * Steven Bosscher for integrating the GNU Fortran front end into GCC
28628     and for contributing to the tree-ssa branch.
28629
28630   * Eric Botcazou for fixing middle- and backend bugs left and right.
28631
28632   * Per Bothner for his direction via the steering committee and
28633     various improvements to the infrastructure for supporting new
28634     languages.  Chill front end implementation.  Initial
28635     implementations of cpplib, fix-header, config.guess, libio, and
28636     past C++ library (libg++) maintainer.  Dreaming up, designing and
28637     implementing much of GCJ.
28638
28639   * Devon Bowen helped port GCC to the Tahoe.
28640
28641   * Don Bowman for mips-vxworks contributions.
28642
28643   * Dave Brolley for work on cpplib and Chill.
28644
28645   * Paul Brook for work on the ARM architecture and maintaining GNU
28646     Fortran.
28647
28648   * Robert Brown implemented the support for Encore 32000 systems.
28649
28650   * Christian Bruel for improvements to local store elimination.
28651
28652   * Herman A.J. ten Brugge for various fixes.
28653
28654   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
28655     FAQ.
28656
28657   * Joe Buck for his direction via the steering committee.
28658
28659   * Craig Burley for leadership of the G77 Fortran effort.
28660
28661   * Stephan Buys for contributing Doxygen notes for libstdc++.
28662
28663   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
28664     to the C++ strings, streambufs and formatted I/O, hard detective
28665     work on the frustrating localization issues, and keeping up with
28666     the problem reports.
28667
28668   * John Carr for his alias work, SPARC hacking, infrastructure
28669     improvements, previous contributions to the steering committee,
28670     loop optimizations, etc.
28671
28672   * Stephane Carrez for 68HC11 and 68HC12 ports.
28673
28674   * Steve Chamberlain for support for the Renesas SH and H8 processors
28675     and the PicoJava processor, and for GCJ config fixes.
28676
28677   * Glenn Chambers for help with the GCJ FAQ.
28678
28679   * John-Marc Chandonia for various libgcj patches.
28680
28681   * Scott Christley for his Objective-C contributions.
28682
28683   * Eric Christopher for his Java porting help and clean-ups.
28684
28685   * Branko Cibej for more warning contributions.
28686
28687   * The GNU Classpath project for all of their merged runtime code.
28688
28689   * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
28690     other random hacking.
28691
28692   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
28693
28694   * R. Kelley Cook for making GCC buildable from a read-only directory
28695     as well as other miscellaneous build process and documentation
28696     clean-ups.
28697
28698   * Ralf Corsepius for SH testing and minor bugfixing.
28699
28700   * Stan Cox for care and feeding of the x86 port and lots of behind
28701     the scenes hacking.
28702
28703   * Alex Crain provided changes for the 3b1.
28704
28705   * Ian Dall for major improvements to the NS32k port.
28706
28707   * Paul Dale for his work to add uClinux platform support to the m68k
28708     backend.
28709
28710   * Dario Dariol contributed the four varieties of sample programs
28711     that print a copy of their source.
28712
28713   * Russell Davidson for fstream and stringstream fixes in libstdc++.
28714
28715   * Bud Davis for work on the G77 and GNU Fortran compilers.
28716
28717   * Mo DeJong for GCJ and libgcj bug fixes.
28718
28719   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
28720     various bug fixes, and the M32C port.
28721
28722   * Arnaud Desitter for helping to debug GNU Fortran.
28723
28724   * Gabriel Dos Reis for contributions to G++, contributions and
28725     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
28726     including `valarray<>', `complex<>', maintaining the numerics
28727     library (including that pesky `<limits>' :-) and keeping
28728     up-to-date anything to do with numbers.
28729
28730   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
28731     ISO C99 support, CFG dumping support, etc., plus support of the
28732     C++ runtime libraries including for all kinds of C interface
28733     issues, contributing and maintaining `complex<>', sanity checking
28734     and disbursement, configuration architecture, libio maintenance,
28735     and early math work.
28736
28737   * Zdenek Dvorak for a new loop unroller and various fixes.
28738
28739   * Richard Earnshaw for his ongoing work with the ARM.
28740
28741   * David Edelsohn for his direction via the steering committee,
28742     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
28743     loop changes, doing the entire AIX port of libstdc++ with his bare
28744     hands, and for ensuring GCC properly keeps working on AIX.
28745
28746   * Kevin Ediger for the floating point formatting of num_put::do_put
28747     in libstdc++.
28748
28749   * Phil Edwards for libstdc++ work including configuration hackery,
28750     documentation maintainer, chief breaker of the web pages, the
28751     occasional iostream bug fix, and work on shared library symbol
28752     versioning.
28753
28754   * Paul Eggert for random hacking all over GCC.
28755
28756   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
28757     configuration support for locales and fstream-related fixes.
28758
28759   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
28760     iostreams.
28761
28762   * Christian Ehrhardt for dealing with bug reports.
28763
28764   * Ben Elliston for his work to move the Objective-C runtime into its
28765     own subdirectory and for his work on autoconf.
28766
28767   * Marc Espie for OpenBSD support.
28768
28769   * Doug Evans for much of the global optimization framework, arc,
28770     m32r, and SPARC work.
28771
28772   * Christopher Faylor for his work on the Cygwin port and for caring
28773     and feeding the gcc.gnu.org box and saving its users tons of spam.
28774
28775   * Fred Fish for BeOS support and Ada fixes.
28776
28777   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
28778
28779   * Peter Gerwinski for various bug fixes and the Pascal front end.
28780
28781   * Kaveh R. Ghazi for his direction via the steering committee,
28782     amazing work to make `-W -Wall -W* -Werror' useful, and
28783     continuously testing GCC on a plethora of platforms.  Kaveh
28784     extends his gratitude to the CAIP Center at Rutgers University for
28785     providing him with computing resources to work on Free Software
28786     since the late 1980s.
28787
28788   * John Gilmore for a donation to the FSF earmarked improving GNU
28789     Java.
28790
28791   * Judy Goldberg for c++ contributions.
28792
28793   * Torbjorn Granlund for various fixes and the c-torture testsuite,
28794     multiply- and divide-by-constant optimization, improved long long
28795     support, improved leaf function register allocation, and his
28796     direction via the steering committee.
28797
28798   * Anthony Green for his `-Os' contributions and Java front end work.
28799
28800   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
28801     Java code.
28802
28803   * Michael K. Gschwind contributed the port to the PDP-11.
28804
28805   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
28806     the support for Dwarf symbolic debugging information, and much of
28807     the support for System V Release 4.  He has also worked heavily on
28808     the Intel 386 and 860 support.
28809
28810   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
28811     GCSE.
28812
28813   * Bruno Haible for improvements in the runtime overhead for EH, new
28814     warnings and assorted bug fixes.
28815
28816   * Andrew Haley for his amazing Java compiler and library efforts.
28817
28818   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
28819     series 300.
28820
28821   * Michael Hayes for various thankless work he's done trying to get
28822     the c30/c40 ports functional.  Lots of loop and unroll
28823     improvements and fixes.
28824
28825   * Dara Hazeghi for wading through myriads of target-specific bug
28826     reports.
28827
28828   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
28829
28830   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
28831     work, loop opts, and generally fixing lots of old problems we've
28832     ignored for years, flow rewrite and lots of further stuff,
28833     including reviewing tons of patches.
28834
28835   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
28836     various fixes.
28837
28838   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
28839     contributed the support for the Sony NEWS machine.
28840
28841   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
28842     various fixes.
28843
28844   * Katherine Holcomb for work on GNU Fortran.
28845
28846   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
28847     of testing and bug fixing, particularly of GCC configury code.
28848
28849   * Steve Holmgren for MachTen patches.
28850
28851   * Jan Hubicka for his x86 port improvements.
28852
28853   * Falk Hueffner for working on C and optimization bug reports.
28854
28855   * Bernardo Innocenti for his m68k work, including merging of
28856     ColdFire improvements and uClinux support.
28857
28858   * Christian Iseli for various bug fixes.
28859
28860   * Kamil Iskra for general m68k hacking.
28861
28862   * Lee Iverson for random fixes and MIPS testing.
28863
28864   * Andreas Jaeger for testing and benchmarking of GCC and various bug
28865     fixes.
28866
28867   * Jakub Jelinek for his SPARC work and sibling call optimizations as
28868     well as lots of bug fixes and test cases, and for improving the
28869     Java build system.
28870
28871   * Janis Johnson for ia64 testing and fixes, her quality improvement
28872     sidetracks, and web page maintenance.
28873
28874   * Kean Johnston for SCO OpenServer support and various fixes.
28875
28876   * Tim Josling for the sample language treelang based originally on
28877     Richard Kenner's "toy" language.
28878
28879   * Nicolai Josuttis for additional libstdc++ documentation.
28880
28881   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
28882     target.
28883
28884   * Steven G. Kargl for work on GNU Fortran.
28885
28886   * David Kashtan of SRI adapted GCC to VMS.
28887
28888   * Ryszard Kabatek for many, many libstdc++ bug fixes and
28889     optimizations of strings, especially member functions, and for
28890     auto_ptr fixes.
28891
28892   * Geoffrey Keating for his ongoing work to make the PPC work for
28893     GNU/Linux and his automatic regression tester.
28894
28895   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
28896     work in just about every part of libstdc++.
28897
28898   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
28899     MIL-STD-1750A.
28900
28901   * Richard Kenner of the New York University Ultracomputer Research
28902     Laboratory wrote the machine descriptions for the AMD 29000, the
28903     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
28904     support for instruction attributes.  He also made changes to
28905     better support RISC processors including changes to common
28906     subexpression elimination, strength reduction, function calling
28907     sequence handling, and condition code support, in addition to
28908     generalizing the code for frame pointer elimination and delay slot
28909     scheduling.  Richard Kenner was also the head maintainer of GCC
28910     for several years.
28911
28912   * Mumit Khan for various contributions to the Cygwin and Mingw32
28913     ports and maintaining binary releases for Microsoft Windows hosts,
28914     and for massive libstdc++ porting work to Cygwin/Mingw32.
28915
28916   * Robin Kirkham for cpu32 support.
28917
28918   * Mark Klein for PA improvements.
28919
28920   * Thomas Koenig for various bug fixes.
28921
28922   * Bruce Korb for the new and improved fixincludes code.
28923
28924   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
28925     effort.
28926
28927   * Charles LaBrec contributed the support for the Integrated Solutions
28928     68020 system.
28929
28930   * Asher Langton and Mike Kumbera for contributing Cray pointer
28931     support to GNU Fortran, and for other GNU Fortran improvements.
28932
28933   * Jeff Law for his direction via the steering committee,
28934     coordinating the entire egcs project and GCC 2.95, rolling out
28935     snapshots and releases, handling merges from GCC2, reviewing tons
28936     of patches that might have fallen through the cracks else, and
28937     random but extensive hacking.
28938
28939   * Marc Lehmann for his direction via the steering committee and
28940     helping with analysis and improvements of x86 performance.
28941
28942   * Victor Leikehman for work on GNU Fortran.
28943
28944   * Ted Lemon wrote parts of the RTL reader and printer.
28945
28946   * Kriang Lerdsuwanakij for C++ improvements including template as
28947     template parameter support, and many C++ fixes.
28948
28949   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
28950     and random work on the Java front end.
28951
28952   * Alain Lichnewsky ported GCC to the MIPS CPU.
28953
28954   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
28955     and patches.
28956
28957   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
28958
28959   * Weiwen Liu for testing and various bug fixes.
28960
28961   * Dave Love for his ongoing work with the Fortran front end and
28962     runtime libraries.
28963
28964   * Martin von Lo"wis for internal consistency checking infrastructure,
28965     various C++ improvements including namespace support, and tons of
28966     assistance with libstdc++/compiler merges.
28967
28968   * H.J. Lu for his previous contributions to the steering committee,
28969     many x86 bug reports, prototype patches, and keeping the GNU/Linux
28970     ports working.
28971
28972   * Greg McGary for random fixes and (someday) bounded pointers.
28973
28974   * Andrew MacLeod for his ongoing work in building a real EH system,
28975     various code generation improvements, work on the global
28976     optimizer, etc.
28977
28978   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
28979     hacking improvements to compile-time performance, overall
28980     knowledge and direction in the area of instruction scheduling, and
28981     design and implementation of the automaton based instruction
28982     scheduler.
28983
28984   * Bob Manson for his behind the scenes work on dejagnu.
28985
28986   * Philip Martin for lots of libstdc++ string and vector iterator
28987     fixes and improvements, and string clean up and testsuites.
28988
28989   * All of the Mauve project contributors, for Java test code.
28990
28991   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
28992
28993   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
28994
28995   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
28996     powerpc, haifa, ECOFF debug support, and other assorted hacking.
28997
28998   * Jason Merrill for his direction via the steering committee and
28999     leading the G++ effort.
29000
29001   * Martin Michlmayr for testing GCC on several architectures using the
29002     entire Debian archive.
29003
29004   * David Miller for his direction via the steering committee, lots of
29005     SPARC work, improvements in jump.c and interfacing with the Linux
29006     kernel developers.
29007
29008   * Gary Miller ported GCC to Charles River Data Systems machines.
29009
29010   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
29011     the entire libstdc++ testsuite namespace-compatible.
29012
29013   * Mark Mitchell for his direction via the steering committee,
29014     mountains of C++ work, load/store hoisting out of loops, alias
29015     analysis improvements, ISO C `restrict' support, and serving as
29016     release manager for GCC 3.x.
29017
29018   * Alan Modra for various GNU/Linux bits and testing.
29019
29020   * Toon Moene for his direction via the steering committee, Fortran
29021     maintenance, and his ongoing work to make us make Fortran run fast.
29022
29023   * Jason Molenda for major help in the care and feeding of all the
29024     services on the gcc.gnu.org (formerly egcs.cygnus.com)
29025     machine--mail, web services, ftp services, etc etc.  Doing all
29026     this work on scrap paper and the backs of envelopes would have
29027     been... difficult.
29028
29029   * Catherine Moore for fixing various ugly problems we have sent her
29030     way, including the haifa bug which was killing the Alpha & PowerPC
29031     Linux kernels.
29032
29033   * Mike Moreton for his various Java patches.
29034
29035   * David Mosberger-Tang for various Alpha improvements, and for the
29036     initial IA-64 port.
29037
29038   * Stephen Moshier contributed the floating point emulator that
29039     assists in cross-compilation and permits support for floating
29040     point numbers wider than 64 bits and for ISO C99 support.
29041
29042   * Bill Moyer for his behind the scenes work on various issues.
29043
29044   * Philippe De Muyter for his work on the m68k port.
29045
29046   * Joseph S. Myers for his work on the PDP-11 port, format checking
29047     and ISO C99 support, and continuous emphasis on (and contributions
29048     to) documentation.
29049
29050   * Nathan Myers for his work on libstdc++-v3: architecture and
29051     authorship through the first three snapshots, including
29052     implementation of locale infrastructure, string, shadow C headers,
29053     and the initial project documentation (DESIGN, CHECKLIST, and so
29054     forth).  Later, more work on MT-safe string and shadow headers.
29055
29056   * Felix Natter for documentation on porting libstdc++.
29057
29058   * Nathanael Nerode for cleaning up the configuration/build process.
29059
29060   * NeXT, Inc. donated the front end that supports the Objective-C
29061     language.
29062
29063   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
29064     the search engine setup, various documentation fixes and other
29065     small fixes.
29066
29067   * Geoff Noer for his work on getting cygwin native builds working.
29068
29069   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
29070     tracking web pages and assorted fixes.
29071
29072   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
29073     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
29074     related infrastructure improvements.
29075
29076   * Alexandre Oliva for various build infrastructure improvements,
29077     scripts and amazing testing work, including keeping libtool issues
29078     sane and happy.
29079
29080   * Stefan Olsson for work on mt_alloc.
29081
29082   * Melissa O'Neill for various NeXT fixes.
29083
29084   * Rainer Orth for random MIPS work, including improvements to GCC's
29085     o32 ABI support, improvements to dejagnu's MIPS support, Java
29086     configuration clean-ups and porting work, etc.
29087
29088   * Hartmut Penner for work on the s390 port.
29089
29090   * Paul Petersen wrote the machine description for the Alliant FX/8.
29091
29092   * Alexandre Petit-Bianco for implementing much of the Java compiler
29093     and continued Java maintainership.
29094
29095   * Matthias Pfaller for major improvements to the NS32k port.
29096
29097   * Gerald Pfeifer for his direction via the steering committee,
29098     pointing out lots of problems we need to solve, maintenance of the
29099     web pages, and taking care of documentation maintenance in general.
29100
29101   * Andrew Pinski for processing bug reports by the dozen.
29102
29103   * Ovidiu Predescu for his work on the Objective-C front end and
29104     runtime libraries.
29105
29106   * Jerry Quinn for major performance improvements in C++ formatted
29107     I/O.
29108
29109   * Ken Raeburn for various improvements to checker, MIPS ports and
29110     various cleanups in the compiler.
29111
29112   * Rolf W. Rasmussen for hacking on AWT.
29113
29114   * David Reese of Sun Microsystems contributed to the Solaris on
29115     PowerPC port.
29116
29117   * Volker Reichelt for keeping up with the problem reports.
29118
29119   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
29120     hacking.
29121
29122   * Loren J. Rittle for improvements to libstdc++-v3 including the
29123     FreeBSD port, threading fixes, thread-related configury changes,
29124     critical threading documentation, and solutions to really tricky
29125     I/O problems, as well as keeping GCC properly working on FreeBSD
29126     and continuous testing.
29127
29128   * Craig Rodrigues for processing tons of bug reports.
29129
29130   * Ola Ro"nnerup for work on mt_alloc.
29131
29132   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
29133
29134   * David Ronis inspired and encouraged Craig to rewrite the G77
29135     documentation in texinfo format by contributing a first pass at a
29136     translation of the old `g77-0.5.16/f/DOC' file.
29137
29138   * Ken Rose for fixes to GCC's delay slot filling code.
29139
29140   * Paul Rubin wrote most of the preprocessor.
29141
29142   * Pe'tur Runo'lfsson for major performance improvements in C++
29143     formatted I/O and large file support in C++ filebuf.
29144
29145   * Chip Salzenberg for libstdc++ patches and improvements to locales,
29146     traits, Makefiles, libio, libtool hackery, and "long long" support.
29147
29148   * Juha Sarlin for improvements to the H8 code generator.
29149
29150   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
29151     300.
29152
29153   * Roger Sayle for improvements to constant folding and GCC's RTL
29154     optimizers as well as for fixing numerous bugs.
29155
29156   * Bradley Schatz for his work on the GCJ FAQ.
29157
29158   * Peter Schauer wrote the code to allow debugging to work on the
29159     Alpha.
29160
29161   * William Schelter did most of the work on the Intel 80386 support.
29162
29163   * Tobias Schlu"ter for work on GNU Fortran.
29164
29165   * Bernd Schmidt for various code generation improvements and major
29166     work in the reload pass as well a serving as release manager for
29167     GCC 2.95.3.
29168
29169   * Peter Schmid for constant testing of libstdc++--especially
29170     application testing, going above and beyond what was requested for
29171     the release criteria--and libstdc++ header file tweaks.
29172
29173   * Jason Schroeder for jcf-dump patches.
29174
29175   * Andreas Schwab for his work on the m68k port.
29176
29177   * Lars Segerlund for work on GNU Fortran.
29178
29179   * Joel Sherrill for his direction via the steering committee, RTEMS
29180     contributions and RTEMS testing.
29181
29182   * Nathan Sidwell for many C++ fixes/improvements.
29183
29184   * Jeffrey Siegal for helping RMS with the original design of GCC,
29185     some code which handles the parse tree and RTL data structures,
29186     constant folding and help with the original VAX & m68k ports.
29187
29188   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
29189     from the LWG (thereby keeping GCC in line with updates from the
29190     ISO).
29191
29192   * Franz Sirl for his ongoing work with making the PPC port stable
29193     for GNU/Linux.
29194
29195   * Andrey Slepuhin for assorted AIX hacking.
29196
29197   * Christopher Smith did the port for Convex machines.
29198
29199   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
29200
29201   * Randy Smith finished the Sun FPA support.
29202
29203   * Scott Snyder for queue, iterator, istream, and string fixes and
29204     libstdc++ testsuite entries.  Also for providing the patch to G77
29205     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
29206     `LOGICAL*1'.
29207
29208   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
29209
29210   * Richard Stallman, for writing the original GCC and launching the
29211     GNU project.
29212
29213   * Jan Stein of the Chalmers Computer Society provided support for
29214     Genix, as well as part of the 32000 machine description.
29215
29216   * Nigel Stephens for various mips16 related fixes/improvements.
29217
29218   * Jonathan Stone wrote the machine description for the Pyramid
29219     computer.
29220
29221   * Graham Stott for various infrastructure improvements.
29222
29223   * John Stracke for his Java HTTP protocol fixes.
29224
29225   * Mike Stump for his Elxsi port, G++ contributions over the years
29226     and more recently his vxworks contributions
29227
29228   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
29229
29230   * Shigeya Suzuki for this fixes for the bsdi platforms.
29231
29232   * Ian Lance Taylor for his mips16 work, general configury hacking,
29233     fixincludes, etc.
29234
29235   * Holger Teutsch provided the support for the Clipper CPU.
29236
29237   * Gary Thomas for his ongoing work to make the PPC work for
29238     GNU/Linux.
29239
29240   * Philipp Thomas for random bug fixes throughout the compiler
29241
29242   * Jason Thorpe for thread support in libstdc++ on NetBSD.
29243
29244   * Kresten Krab Thorup wrote the run time support for the Objective-C
29245     language and the fantastic Java bytecode interpreter.
29246
29247   * Michael Tiemann for random bug fixes, the first instruction
29248     scheduler, initial C++ support, function integration, NS32k, SPARC
29249     and M88k machine description work, delay slot scheduling.
29250
29251   * Andreas Tobler for his work porting libgcj to Darwin.
29252
29253   * Teemu Torma for thread safe exception handling support.
29254
29255   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
29256     definitions, and of the VAX machine description.
29257
29258   * Tom Tromey for internationalization support and for his many Java
29259     contributions and libgcj maintainership.
29260
29261   * Lassi Tuura for improvements to config.guess to determine HP
29262     processor types.
29263
29264   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
29265
29266   * Andy Vaught for the design and initial implementation of the GNU
29267     Fortran front end.
29268
29269   * Brent Verner for work with the libstdc++ cshadow files and their
29270     associated configure steps.
29271
29272   * Todd Vierling for contributions for NetBSD ports.
29273
29274   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
29275     guidance.
29276
29277   * Dean Wakerley for converting the install documentation from HTML
29278     to texinfo in time for GCC 3.0.
29279
29280   * Krister Walfridsson for random bug fixes.
29281
29282   * Feng Wang for contributions to GNU Fortran.
29283
29284   * Stephen M. Webb for time and effort on making libstdc++ shadow
29285     files work with the tricky Solaris 8+ headers, and for pushing the
29286     build-time header tree.
29287
29288   * John Wehle for various improvements for the x86 code generator,
29289     related infrastructure improvements to help x86 code generation,
29290     value range propagation and other work, WE32k port.
29291
29292   * Ulrich Weigand for work on the s390 port.
29293
29294   * Zack Weinberg for major work on cpplib and various other bug fixes.
29295
29296   * Matt Welsh for help with Linux Threads support in GCJ.
29297
29298   * Urban Widmark for help fixing java.io.
29299
29300   * Mark Wielaard for new Java library code and his work integrating
29301     with Classpath.
29302
29303   * Dale Wiles helped port GCC to the Tahoe.
29304
29305   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
29306
29307   * Jim Wilson for his direction via the steering committee, tackling
29308     hard problems in various places that nobody else wanted to work
29309     on, strength reduction and other loop optimizations.
29310
29311   * Paul Woegerer and Tal Agmon for the CRX port.
29312
29313   * Carlo Wood for various fixes.
29314
29315   * Tom Wood for work on the m88k port.
29316
29317   * Canqun Yang for work on GNU Fortran.
29318
29319   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
29320     description for the Tron architecture (specifically, the Gmicro).
29321
29322   * Kevin Zachmann helped port GCC to the Tahoe.
29323
29324   * Ayal Zaks for Swing Modulo Scheduling (SMS).
29325
29326   * Xiaoqiang Zhang for work on GNU Fortran.
29327
29328   * Gilles Zunino for help porting Java to Irix.
29329
29330
29331 The following people are recognized for their contributions to GNAT,
29332the Ada front end of GCC:
29333   * Bernard Banner
29334
29335   * Romain Berrendonner
29336
29337   * Geert Bosch
29338
29339   * Emmanuel Briot
29340
29341   * Joel Brobecker
29342
29343   * Ben Brosgol
29344
29345   * Vincent Celier
29346
29347   * Arnaud Charlet
29348
29349   * Chien Chieng
29350
29351   * Cyrille Comar
29352
29353   * Cyrille Crozes
29354
29355   * Robert Dewar
29356
29357   * Gary Dismukes
29358
29359   * Robert Duff
29360
29361   * Ed Falis
29362
29363   * Ramon Fernandez
29364
29365   * Sam Figueroa
29366
29367   * Vasiliy Fofanov
29368
29369   * Michael Friess
29370
29371   * Franco Gasperoni
29372
29373   * Ted Giering
29374
29375   * Matthew Gingell
29376
29377   * Laurent Guerby
29378
29379   * Jerome Guitton
29380
29381   * Olivier Hainque
29382
29383   * Jerome Hugues
29384
29385   * Hristian Kirtchev
29386
29387   * Jerome Lambourg
29388
29389   * Bruno Leclerc
29390
29391   * Albert Lee
29392
29393   * Sean McNeil
29394
29395   * Javier Miranda
29396
29397   * Laurent Nana
29398
29399   * Pascal Obry
29400
29401   * Dong-Ik Oh
29402
29403   * Laurent Pautet
29404
29405   * Brett Porter
29406
29407   * Thomas Quinot
29408
29409   * Nicolas Roche
29410
29411   * Pat Rogers
29412
29413   * Jose Ruiz
29414
29415   * Douglas Rupp
29416
29417   * Sergey Rybin
29418
29419   * Gail Schenker
29420
29421   * Ed Schonberg
29422
29423   * Nicolas Setton
29424
29425   * Samuel Tardieu
29426
29427
29428 The following people are recognized for their contributions of new
29429features, bug reports, testing and integration of classpath/libgcj for
29430GCC version 4.1:
29431   * Lillian Angel for `JTree' implementation and lots Free Swing
29432     additions and bugfixes.
29433
29434   * Wolfgang Baer for `GapContent' bugfixes.
29435
29436   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
29437     event fixes, lots of Free Swing work including `JTable' editing.
29438
29439   * Stuart Ballard for RMI constant fixes.
29440
29441   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
29442
29443   * Gary Benson for `MessageFormat' fixes.
29444
29445   * Daniel Bonniot for `Serialization' fixes.
29446
29447   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
29448     and `DOM xml:id' support.
29449
29450   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
29451
29452   * Archie Cobbs for build fixes, VM interface updates,
29453     `URLClassLoader' updates.
29454
29455   * Kelley Cook for build fixes.
29456
29457   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
29458
29459   * David Daney for `BitSet' bugfixes, `HttpURLConnection' rewrite and
29460     improvements.
29461
29462   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
29463     2D support. Lots of imageio framework additions, lots of AWT and
29464     Free Swing bugfixes.
29465
29466   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
29467     fixes, better `Proxy' support, bugfixes and IKVM integration.
29468
29469   * Santiago Gala for `AccessControlContext' fixes.
29470
29471   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
29472     improvements.
29473
29474   * David Gilbert for `basic' and `metal' icon and plaf support and
29475     lots of documenting, Lots of Free Swing and metal theme additions.
29476     `MetalIconFactory' implementation.
29477
29478   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
29479
29480   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
29481     build speedups.
29482
29483   * Kim Ho for `JFileChooser' implementation.
29484
29485   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
29486     updates, `Serialization' fixes, `Properties' XML support and
29487     generic branch work, VMIntegration guide update.
29488
29489   * Bastiaan Huisman for `TimeZone' bugfixing.
29490
29491   * Andreas Jaeger for mprec updates.
29492
29493   * Paul Jenner for better `-Werror' support.
29494
29495   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
29496
29497   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
29498     bugfixes all over. Lots of Free Swing work including styled text.
29499
29500   * Simon Kitching for `String' cleanups and optimization suggestions.
29501
29502   * Michael Koch for configuration fixes, `Locale' updates, bug and
29503     build fixes.
29504
29505   * Guilhem Lavaux for configuration, thread and channel fixes and
29506     Kaffe integration. JCL native `Pointer' updates. Logger bugfixes.
29507
29508   * David Lichteblau for JCL support library global/local reference
29509     cleanups.
29510
29511   * Aaron Luchko for JDWP updates and documentation fixes.
29512
29513   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
29514     features.
29515
29516   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
29517     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
29518     and implementing the Qt4 peers.
29519
29520   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
29521     `SystemLogger' and `FileHandler' rotate implementations, NIO
29522     `FileChannel.map' support, security and policy updates.
29523
29524   * Bryce McKinlay for RMI work.
29525
29526   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
29527     testing and documenting.
29528
29529   * Kalle Olavi Niemitalo for build fixes.
29530
29531   * Rainer Orth for build fixes.
29532
29533   * Andrew Overholt for `File' locking fixes.
29534
29535   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
29536
29537   * Olga Rodimina for `MenuSelectionManager' implementation.
29538
29539   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
29540
29541   * Julian Scheid for documentation updates and gjdoc support.
29542
29543   * Christian Schlichtherle for zip fixes and cleanups.
29544
29545   * Robert Schuster for documentation updates and beans fixes,
29546     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
29547     and URL, AWT and Free Swing bugfixes.
29548
29549   * Keith Seitz for lots of JDWP work.
29550
29551   * Christian Thalinger for 64-bit cleanups, Configuration and VM
29552     interface fixes and `CACAO' integration, `fdlibm' updates.
29553
29554   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
29555
29556   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
29557     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
29558
29559   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
29560     integration. `Qt4' build infrastructure, `SHA1PRNG' and
29561     `GdkPixbugDecoder' updates.
29562
29563   * Tom Tromey for Eclipse integration, generics work, lots of bugfixes
29564     and gcj integration including coordinating The Big Merge.
29565
29566   * Mark Wielaard for bugfixes, packaging and release management,
29567     `Clipboard' implementation, system call interrupts and network
29568     timeouts and `GdkPixpufDecoder' fixes.
29569
29570
29571 In addition to the above, all of which also contributed time and
29572energy in testing GCC, we would like to thank the following for their
29573contributions to testing:
29574
29575   * Michael Abd-El-Malek
29576
29577   * Thomas Arend
29578
29579   * Bonzo Armstrong
29580
29581   * Steven Ashe
29582
29583   * Chris Baldwin
29584
29585   * David Billinghurst
29586
29587   * Jim Blandy
29588
29589   * Stephane Bortzmeyer
29590
29591   * Horst von Brand
29592
29593   * Frank Braun
29594
29595   * Rodney Brown
29596
29597   * Sidney Cadot
29598
29599   * Bradford Castalia
29600
29601   * Jonathan Corbet
29602
29603   * Ralph Doncaster
29604
29605   * Richard Emberson
29606
29607   * Levente Farkas
29608
29609   * Graham Fawcett
29610
29611   * Mark Fernyhough
29612
29613   * Robert A. French
29614
29615   * Jo"rgen Freyh
29616
29617   * Mark K. Gardner
29618
29619   * Charles-Antoine Gauthier
29620
29621   * Yung Shing Gene
29622
29623   * David Gilbert
29624
29625   * Simon Gornall
29626
29627   * Fred Gray
29628
29629   * John Griffin
29630
29631   * Patrik Hagglund
29632
29633   * Phil Hargett
29634
29635   * Amancio Hasty
29636
29637   * Takafumi Hayashi
29638
29639   * Bryan W. Headley
29640
29641   * Kevin B. Hendricks
29642
29643   * Joep Jansen
29644
29645   * Christian Joensson
29646
29647   * Michel Kern
29648
29649   * David Kidd
29650
29651   * Tobias Kuipers
29652
29653   * Anand Krishnaswamy
29654
29655   * A. O. V. Le Blanc
29656
29657   * llewelly
29658
29659   * Damon Love
29660
29661   * Brad Lucier
29662
29663   * Matthias Klose
29664
29665   * Martin Knoblauch
29666
29667   * Rick Lutowski
29668
29669   * Jesse Macnish
29670
29671   * Stefan Morrell
29672
29673   * Anon A. Mous
29674
29675   * Matthias Mueller
29676
29677   * Pekka Nikander
29678
29679   * Rick Niles
29680
29681   * Jon Olson
29682
29683   * Magnus Persson
29684
29685   * Chris Pollard
29686
29687   * Richard Polton
29688
29689   * Derk Reefman
29690
29691   * David Rees
29692
29693   * Paul Reilly
29694
29695   * Tom Reilly
29696
29697   * Torsten Rueger
29698
29699   * Danny Sadinoff
29700
29701   * Marc Schifer
29702
29703   * Erik Schnetter
29704
29705   * Wayne K. Schroll
29706
29707   * David Schuler
29708
29709   * Vin Shelton
29710
29711   * Tim Souder
29712
29713   * Adam Sulmicki
29714
29715   * Bill Thorson
29716
29717   * George Talbot
29718
29719   * Pedro A. M. Vazquez
29720
29721   * Gregory Warnes
29722
29723   * Ian Watson
29724
29725   * David E. Young
29726
29727   * And many others
29728
29729 And finally we'd like to thank everyone who uses the compiler, submits
29730bug reports and generally reminds us why we're doing this work in the
29731first place.
29732
29733
29734File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
29735
29736Option Index
29737************
29738
29739GCC's command line options are indexed here without any initial `-' or
29740`--'.  Where an option has both positive and negative forms (such as
29741`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
29742indexed under the most appropriate form; it may sometimes be useful to
29743look up both forms.
29744
29745�[index�]
29746* Menu:
29747
29748* ###:                                   Overall Options.    (line  192)
29749* A:                                     Preprocessor Options.
29750                                                             (line  510)
29751* all_load:                              Darwin Options.     (line  103)
29752* allowable_client:                      Darwin Options.     (line  190)
29753* ansi <1>:                              Non-bugs.           (line  107)
29754* ansi <2>:                              Other Builtins.     (line   22)
29755* ansi <3>:                              Preprocessor Options.
29756                                                             (line  324)
29757* ansi <4>:                              C Dialect Options.  (line   11)
29758* ansi:                                  Standards.          (line   13)
29759* arch_errors_fatal:                     Darwin Options.     (line  107)
29760* aux-info:                              C Dialect Options.  (line  119)
29761* b:                                     Target Options.     (line   13)
29762* B:                                     Directory Options.  (line   41)
29763* bcopy-builtin:                         PDP-11 Options.     (line   32)
29764* bind_at_load:                          Darwin Options.     (line  111)
29765* bundle:                                Darwin Options.     (line  116)
29766* bundle_loader:                         Darwin Options.     (line  120)
29767* c:                                     Link Options.       (line   20)
29768* C:                                     Preprocessor Options.
29769                                                             (line  557)
29770* c:                                     Overall Options.    (line  147)
29771* client_name:                           Darwin Options.     (line  190)
29772* combine:                               Overall Options.    (line  203)
29773* compatibility_version:                 Darwin Options.     (line  190)
29774* coverage:                              Debugging Options.  (line  169)
29775* crossjumping:                          Optimize Options.   (line  435)
29776* current_version:                       Darwin Options.     (line  190)
29777* D:                                     Preprocessor Options.
29778                                                             (line   33)
29779* d:                                     Debugging Options.  (line  221)
29780* da:                                    Debugging Options.  (line  387)
29781* dA:                                    Debugging Options.  (line  234)
29782* dB:                                    Debugging Options.  (line  239)
29783* dC:                                    Debugging Options.  (line  249)
29784* dc:                                    Debugging Options.  (line  243)
29785* dD <1>:                                Preprocessor Options.
29786                                                             (line  538)
29787* dD:                                    Debugging Options.  (line  263)
29788* dd:                                    Debugging Options.  (line  257)
29789* dE:                                    Debugging Options.  (line  268)
29790* dead_strip:                            Darwin Options.     (line  190)
29791* dependency-file:                       Darwin Options.     (line  190)
29792* df:                                    Debugging Options.  (line  273)
29793* dG:                                    Debugging Options.  (line  285)
29794* dg:                                    Debugging Options.  (line  280)
29795* dH:                                    Debugging Options.  (line  390)
29796* dh:                                    Debugging Options.  (line  292)
29797* dI:                                    Preprocessor Options.
29798                                                             (line  547)
29799* di:                                    Debugging Options.  (line  296)
29800* dj:                                    Debugging Options.  (line  300)
29801* dk:                                    Debugging Options.  (line  304)
29802* dL:                                    Debugging Options.  (line  313)
29803* dl:                                    Debugging Options.  (line  309)
29804* dM:                                    Preprocessor Options.
29805                                                             (line  526)
29806* dm:                                    Debugging Options.  (line  393)
29807* dM:                                    Debugging Options.  (line  324)
29808* dm:                                    Debugging Options.  (line  320)
29809* dN <1>:                                Preprocessor Options.
29810                                                             (line  544)
29811* dN:                                    Debugging Options.  (line  333)
29812* dn:                                    Debugging Options.  (line  329)
29813* do:                                    Debugging Options.  (line  337)
29814* dP:                                    Debugging Options.  (line  402)
29815* dp:                                    Debugging Options.  (line  397)
29816* dR:                                    Debugging Options.  (line  345)
29817* dr:                                    Debugging Options.  (line  341)
29818* dS:                                    Debugging Options.  (line  354)
29819* ds:                                    Debugging Options.  (line  349)
29820* dT:                                    Debugging Options.  (line  363)
29821* dt:                                    Debugging Options.  (line  358)
29822* dumpmachine:                           Debugging Options.  (line  770)
29823* dumpspecs:                             Debugging Options.  (line  778)
29824* dumpversion:                           Debugging Options.  (line  774)
29825* dv:                                    Debugging Options.  (line  406)
29826* dV:                                    Debugging Options.  (line  368)
29827* dw:                                    Debugging Options.  (line  375)
29828* dx:                                    Debugging Options.  (line  411)
29829* dy:                                    Debugging Options.  (line  415)
29830* dylib_file:                            Darwin Options.     (line  190)
29831* dylinker_install_name:                 Darwin Options.     (line  190)
29832* dynamic:                               Darwin Options.     (line  190)
29833* dynamiclib:                            Darwin Options.     (line  124)
29834* dZ:                                    Debugging Options.  (line  383)
29835* dz:                                    Debugging Options.  (line  379)
29836* E <1>:                                 Link Options.       (line   20)
29837* E:                                     Overall Options.    (line  168)
29838* EB <1>:                                MIPS Options.       (line    7)
29839* EB:                                    ARC Options.        (line   12)
29840* EL <1>:                                MIPS Options.       (line   10)
29841* EL:                                    ARC Options.        (line    9)
29842* exported_symbols_list:                 Darwin Options.     (line  190)
29843* F:                                     Darwin Options.     (line   32)
29844* fabi-version:                          C++ Dialect Options.
29845                                                             (line   20)
29846* falign-functions:                      Optimize Options.   (line  902)
29847* falign-jumps:                          Optimize Options.   (line  952)
29848* falign-labels:                         Optimize Options.   (line  920)
29849* falign-loops:                          Optimize Options.   (line  938)
29850* fargument-alias:                       Code Gen Options.   (line  336)
29851* fargument-noalias:                     Code Gen Options.   (line  336)
29852* fargument-noalias-anything:            Code Gen Options.   (line  336)
29853* fargument-noalias-global:              Code Gen Options.   (line  336)
29854* fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
29855* fbounds-check <1>:                     Code Gen Options.   (line   15)
29856* fbounds-check:                         Optimize Options.   (line  326)
29857* fbranch-probabilities:                 Optimize Options.   (line 1200)
29858* fbranch-target-load-optimize:          Optimize Options.   (line 1308)
29859* fbranch-target-load-optimize2:         Optimize Options.   (line 1314)
29860* fbtr-bb-exclusive:                     Optimize Options.   (line 1318)
29861* fcall-saved <1>:                       Interoperation.     (line  150)
29862* fcall-saved:                           Code Gen Options.   (line  237)
29863* fcall-used:                            Code Gen Options.   (line  223)
29864* fcaller-saves:                         Optimize Options.   (line  579)
29865* fcheck-new:                            C++ Dialect Options.
29866                                                             (line   34)
29867* fcommon:                               Variable Attributes.
29868                                                             (line   92)
29869* fcond-mismatch:                        C Dialect Options.  (line  235)
29870* fconserve-space:                       C++ Dialect Options.
29871                                                             (line   44)
29872* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
29873                                                             (line   30)
29874* fcse-follow-jumps:                     Optimize Options.   (line  363)
29875* fcse-skip-blocks:                      Optimize Options.   (line  372)
29876* fcx-limited-range:                     Optimize Options.   (line 1186)
29877* fdata-sections:                        Optimize Options.   (line 1289)
29878* fdelayed-branch:                       Optimize Options.   (line  488)
29879* fdelete-null-pointer-checks:           Optimize Options.   (line  457)
29880* fdiagnostics-show-location:            Language Independent Options.
29881                                                             (line   21)
29882* fdiagnostics-show-option:              Language Independent Options.
29883                                                             (line   36)
29884* fdollars-in-identifiers <1>:           Interoperation.     (line  146)
29885* fdollars-in-identifiers:               Preprocessor Options.
29886                                                             (line  440)
29887* fdump-class-hierarchy:                 Debugging Options.  (line  441)
29888* fdump-ipa:                             Debugging Options.  (line  448)
29889* fdump-noaddr:                          Debugging Options.  (line  418)
29890* fdump-rtl-all:                         Debugging Options.  (line  387)
29891* fdump-rtl-bbro:                        Debugging Options.  (line  239)
29892* fdump-rtl-btl:                         Debugging Options.  (line  257)
29893* fdump-rtl-bypass:                      Debugging Options.  (line  285)
29894* fdump-rtl-ce1:                         Debugging Options.  (line  249)
29895* fdump-rtl-ce2:                         Debugging Options.  (line  249)
29896* fdump-rtl-ce3:                         Debugging Options.  (line  268)
29897* fdump-rtl-cfg:                         Debugging Options.  (line  273)
29898* fdump-rtl-combine:                     Debugging Options.  (line  243)
29899* fdump-rtl-cse:                         Debugging Options.  (line  349)
29900* fdump-rtl-cse2:                        Debugging Options.  (line  358)
29901* fdump-rtl-dbr:                         Debugging Options.  (line  257)
29902* fdump-rtl-eh:                          Debugging Options.  (line  292)
29903* fdump-rtl-expand:                      Debugging Options.  (line  341)
29904* fdump-rtl-flow2:                       Debugging Options.  (line  375)
29905* fdump-rtl-gcse:                        Debugging Options.  (line  285)
29906* fdump-rtl-greg:                        Debugging Options.  (line  280)
29907* fdump-rtl-jump:                        Debugging Options.  (line  300)
29908* fdump-rtl-life:                        Debugging Options.  (line  273)
29909* fdump-rtl-loop2:                       Debugging Options.  (line  313)
29910* fdump-rtl-lreg:                        Debugging Options.  (line  309)
29911* fdump-rtl-mach:                        Debugging Options.  (line  324)
29912* fdump-rtl-peephole2:                   Debugging Options.  (line  379)
29913* fdump-rtl-postreload:                  Debugging Options.  (line  337)
29914* fdump-rtl-regmove:                     Debugging Options.  (line  333)
29915* fdump-rtl-rnreg:                       Debugging Options.  (line  329)
29916* fdump-rtl-sched:                       Debugging Options.  (line  354)
29917* fdump-rtl-sched2:                      Debugging Options.  (line  345)
29918* fdump-rtl-sibling:                     Debugging Options.  (line  296)
29919* fdump-rtl-sms:                         Debugging Options.  (line  320)
29920* fdump-rtl-stack:                       Debugging Options.  (line  304)
29921* fdump-rtl-tracer:                      Debugging Options.  (line  363)
29922* fdump-rtl-vartrack:                    Debugging Options.  (line  368)
29923* fdump-rtl-vpt:                         Debugging Options.  (line  368)
29924* fdump-rtl-web:                         Debugging Options.  (line  383)
29925* fdump-translation-unit:                Debugging Options.  (line  433)
29926* fdump-tree:                            Debugging Options.  (line  463)
29927* fdump-tree-alias:                      Debugging Options.  (line  551)
29928* fdump-tree-all:                        Debugging Options.  (line  636)
29929* fdump-tree-ccp:                        Debugging Options.  (line  555)
29930* fdump-tree-cfg:                        Debugging Options.  (line  526)
29931* fdump-tree-ch:                         Debugging Options.  (line  538)
29932* fdump-tree-copyprop:                   Debugging Options.  (line  571)
29933* fdump-tree-copyrename:                 Debugging Options.  (line  617)
29934* fdump-tree-dce:                        Debugging Options.  (line  579)
29935* fdump-tree-dom:                        Debugging Options.  (line  597)
29936* fdump-tree-dse:                        Debugging Options.  (line  602)
29937* fdump-tree-forwprop:                   Debugging Options.  (line  612)
29938* fdump-tree-fre:                        Debugging Options.  (line  567)
29939* fdump-tree-gimple:                     Debugging Options.  (line  521)
29940* fdump-tree-mudflap:                    Debugging Options.  (line  583)
29941* fdump-tree-nrv:                        Debugging Options.  (line  622)
29942* fdump-tree-phiopt:                     Debugging Options.  (line  607)
29943* fdump-tree-pre:                        Debugging Options.  (line  563)
29944* fdump-tree-salias:                     Debugging Options.  (line  546)
29945* fdump-tree-sink:                       Debugging Options.  (line  593)
29946* fdump-tree-sra:                        Debugging Options.  (line  588)
29947* fdump-tree-ssa:                        Debugging Options.  (line  542)
29948* fdump-tree-store_copyprop:             Debugging Options.  (line  575)
29949* fdump-tree-storeccp:                   Debugging Options.  (line  559)
29950* fdump-tree-vcg:                        Debugging Options.  (line  530)
29951* fdump-tree-vect:                       Debugging Options.  (line  627)
29952* fdump-tree-vrp:                        Debugging Options.  (line  632)
29953* fdump-unnumbered:                      Debugging Options.  (line  425)
29954* fearly-inlining:                       Optimize Options.   (line  204)
29955* feliminate-dwarf2-dups:                Debugging Options.  (line  125)
29956* feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
29957* feliminate-unused-debug-types:         Debugging Options.  (line  782)
29958* fexceptions:                           Code Gen Options.   (line   34)
29959* fexec-charset:                         Preprocessor Options.
29960                                                             (line  467)
29961* fexpensive-optimizations:              Optimize Options.   (line  470)
29962* fextended-identifiers:                 Preprocessor Options.
29963                                                             (line  443)
29964* ffast-math:                            Optimize Options.   (line 1070)
29965* ffinite-math-only:                     Optimize Options.   (line 1114)
29966* ffix-and-continue:                     Darwin Options.     (line   97)
29967* ffixed:                                Code Gen Options.   (line  211)
29968* ffloat-store <1>:                      Disappointments.    (line   77)
29969* ffloat-store:                          Optimize Options.   (line 1056)
29970* ffor-scope:                            C++ Dialect Options.
29971                                                             (line   86)
29972* fforce-addr:                           Optimize Options.   (line  154)
29973* fforce-mem:                            Optimize Options.   (line  146)
29974* ffreestanding <1>:                     Function Attributes.
29975                                                             (line  314)
29976* ffreestanding <2>:                     Warning Options.    (line   94)
29977* ffreestanding <3>:                     C Dialect Options.  (line  190)
29978* ffreestanding:                         Standards.          (line   81)
29979* ffriend-injection:                     C++ Dialect Options.
29980                                                             (line   56)
29981* ffunction-sections:                    Optimize Options.   (line 1289)
29982* fgcse:                                 Optimize Options.   (line  386)
29983* fgcse-after-reload:                    Optimize Options.   (line  422)
29984* fgcse-las:                             Optimize Options.   (line  415)
29985* fgcse-lm:                              Optimize Options.   (line  397)
29986* fgcse-sm:                              Optimize Options.   (line  406)
29987* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
29988                                                             (line   39)
29989* fgnu89-inline:                         C Dialect Options.  (line   98)
29990* fhosted:                               C Dialect Options.  (line  183)
29991* filelist:                              Darwin Options.     (line  190)
29992* findirect-data:                        Darwin Options.     (line   97)
29993* finhibit-size-directive:               Code Gen Options.   (line  147)
29994* finline-functions:                     Optimize Options.   (line  185)
29995* finline-functions-called-once:         Optimize Options.   (line  196)
29996* finline-limit:                         Optimize Options.   (line  214)
29997* finput-charset:                        Preprocessor Options.
29998                                                             (line  480)
29999* finstrument-functions <1>:             Function Attributes.
30000                                                             (line  508)
30001* finstrument-functions:                 Code Gen Options.   (line  267)
30002* fkeep-inline-functions <1>:            Inline.             (line   58)
30003* fkeep-inline-functions:                Optimize Options.   (line  252)
30004* fkeep-static-consts:                   Optimize Options.   (line  259)
30005* flat_namespace:                        Darwin Options.     (line  190)
30006* fleading-underscore:                   Code Gen Options.   (line  353)
30007* fmem-report:                           Debugging Options.  (line  150)
30008* fmessage-length:                       Language Independent Options.
30009                                                             (line   15)
30010* fmodulo-sched:                         Optimize Options.   (line  288)
30011* fmove-loop-invariants:                 Optimize Options.   (line 1279)
30012* fms-extensions <1>:                    Unnamed Fields.     (line   37)
30013* fms-extensions <2>:                    C++ Dialect Options.
30014                                                             (line  121)
30015* fms-extensions:                        C Dialect Options.  (line  206)
30016* fmudflap:                              Optimize Options.   (line  333)
30017* fmudflapir:                            Optimize Options.   (line  333)
30018* fmudflapth:                            Optimize Options.   (line  333)
30019* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
30020                                                             (line   43)
30021* fno-access-control:                    C++ Dialect Options.
30022                                                             (line   30)
30023* fno-asm:                               C Dialect Options.  (line  135)
30024* fno-branch-count-reg:                  Optimize Options.   (line  293)
30025* fno-builtin <1>:                       Other Builtins.     (line   14)
30026* fno-builtin <2>:                       Function Attributes.
30027                                                             (line  314)
30028* fno-builtin <3>:                       Warning Options.    (line   94)
30029* fno-builtin:                           C Dialect Options.  (line  149)
30030* fno-common <1>:                        Variable Attributes.
30031                                                             (line   92)
30032* fno-common:                            Code Gen Options.   (line  135)
30033* fno-cprop-registers:                   Optimize Options.   (line 1028)
30034* fno-cx-limited-range:                  Optimize Options.   (line 1186)
30035* fno-default-inline <1>:                Inline.             (line   53)
30036* fno-default-inline <2>:                Optimize Options.   (line  131)
30037* fno-default-inline:                    C++ Dialect Options.
30038                                                             (line  233)
30039* fno-defer-pop:                         Optimize Options.   (line  138)
30040* fno-elide-constructors:                C++ Dialect Options.
30041                                                             (line   69)
30042* fno-enforce-eh-specs:                  C++ Dialect Options.
30043                                                             (line   75)
30044* fno-for-scope:                         C++ Dialect Options.
30045                                                             (line   86)
30046* fno-function-cse:                      Optimize Options.   (line  303)
30047* fno-gnu-keywords:                      C++ Dialect Options.
30048                                                             (line   98)
30049* fno-guess-branch-probability:          Optimize Options.   (line  787)
30050* fno-ident:                             Code Gen Options.   (line  144)
30051* fno-implement-inlines <1>:             C++ Interface.      (line   75)
30052* fno-implement-inlines:                 C++ Dialect Options.
30053                                                             (line  115)
30054* fno-implicit-inline-templates:         C++ Dialect Options.
30055                                                             (line  109)
30056* fno-implicit-templates <1>:            Template Instantiation.
30057                                                             (line   87)
30058* fno-implicit-templates:                C++ Dialect Options.
30059                                                             (line  103)
30060* fno-inline:                            Optimize Options.   (line  179)
30061* fno-jump-tables:                       Code Gen Options.   (line  203)
30062* fno-math-errno:                        Optimize Options.   (line 1083)
30063* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
30064                                                             (line   49)
30065* fno-nonansi-builtins:                  C++ Dialect Options.
30066                                                             (line  126)
30067* fno-operator-names:                    C++ Dialect Options.
30068                                                             (line  131)
30069* fno-optional-diags:                    C++ Dialect Options.
30070                                                             (line  135)
30071* fno-peephole:                          Optimize Options.   (line  778)
30072* fno-peephole2:                         Optimize Options.   (line  778)
30073* fno-rtti:                              C++ Dialect Options.
30074                                                             (line  150)
30075* fno-sched-interblock:                  Optimize Options.   (line  514)
30076* fno-sched-spec:                        Optimize Options.   (line  519)
30077* fno-show-column:                       Preprocessor Options.
30078                                                             (line  505)
30079* fno-signed-bitfields:                  C Dialect Options.  (line  268)
30080* fno-stack-limit:                       Code Gen Options.   (line  319)
30081* fno-threadsafe-statics:                C++ Dialect Options.
30082                                                             (line  172)
30083* fno-trapping-math:                     Optimize Options.   (line 1124)
30084* fno-unsigned-bitfields:                C Dialect Options.  (line  268)
30085* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
30086                                                             (line  185)
30087* fno-weak:                              C++ Dialect Options.
30088                                                             (line  218)
30089* fno-working-directory:                 Preprocessor Options.
30090                                                             (line  490)
30091* fno-zero-initialized-in-bss:           Optimize Options.   (line  314)
30092* fnon-call-exceptions:                  Code Gen Options.   (line   48)
30093* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
30094                                                             (line   56)
30095* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
30096                                                             (line   81)
30097* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
30098                                                             (line   85)
30099* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
30100                                                             (line  170)
30101* fomit-frame-pointer:                   Optimize Options.   (line  158)
30102* fopenmp:                               C Dialect Options.  (line  200)
30103* foptimize-register-move:               Optimize Options.   (line  477)
30104* foptimize-sibling-calls:               Optimize Options.   (line  174)
30105* force_cpusubtype_ALL:                  Darwin Options.     (line  129)
30106* force_flat_namespace:                  Darwin Options.     (line  190)
30107* fpack-struct:                          Code Gen Options.   (line  254)
30108* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
30109* fpcc-struct-return:                    Code Gen Options.   (line   70)
30110* fpch-deps:                             Preprocessor Options.
30111                                                             (line  280)
30112* fpch-preprocess:                       Preprocessor Options.
30113                                                             (line  288)
30114* fpeel-loops:                           Optimize Options.   (line 1271)
30115* fpermissive:                           C++ Dialect Options.
30116                                                             (line  140)
30117* fPIC:                                  Code Gen Options.   (line  184)
30118* fpic:                                  Code Gen Options.   (line  163)
30119* fPIE:                                  Code Gen Options.   (line  197)
30120* fpie:                                  Code Gen Options.   (line  197)
30121* fprefetch-loop-arrays:                 Optimize Options.   (line  767)
30122* fpreprocessed:                         Preprocessor Options.
30123                                                             (line  448)
30124* fprofile-arcs <1>:                     Other Builtins.     (line  236)
30125* fprofile-arcs:                         Debugging Options.  (line  154)
30126* fprofile-generate:                     Optimize Options.   (line 1035)
30127* fprofile-use:                          Optimize Options.   (line 1044)
30128* fprofile-values:                       Optimize Options.   (line 1219)
30129* frandom-string:                        Debugging Options.  (line  665)
30130* freg-struct-return:                    Code Gen Options.   (line   88)
30131* fregmove:                              Optimize Options.   (line  477)
30132* frename-registers:                     Optimize Options.   (line 1238)
30133* freorder-blocks:                       Optimize Options.   (line  804)
30134* freorder-blocks-and-partition:         Optimize Options.   (line  810)
30135* freorder-functions:                    Optimize Options.   (line  821)
30136* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
30137                                                             (line  174)
30138* frepo <1>:                             Template Instantiation.
30139                                                             (line   62)
30140* frepo:                                 C++ Dialect Options.
30141                                                             (line  145)
30142* frerun-cse-after-loop:                 Optimize Options.   (line  380)
30143* frounding-math:                        Optimize Options.   (line 1139)
30144* frtl-abstract-sequences:               Optimize Options.   (line 1159)
30145* fsched-spec-load:                      Optimize Options.   (line  524)
30146* fsched-spec-load-dangerous:            Optimize Options.   (line  529)
30147* fsched-stalled-insns:                  Optimize Options.   (line  534)
30148* fsched-stalled-insns-dep:              Optimize Options.   (line  539)
30149* fsched-verbose:                        Debugging Options.  (line  675)
30150* fsched2-use-superblocks:               Optimize Options.   (line  546)
30151* fsched2-use-traces:                    Optimize Options.   (line  557)
30152* fschedule-insns:                       Optimize Options.   (line  495)
30153* fschedule-insns2:                      Optimize Options.   (line  505)
30154* fscheduling-in-modulo-scheduled-loops: Optimize Options.   (line  573)
30155* fsection-anchors:                      Optimize Options.   (line 1334)
30156* fsee:                                  Optimize Options.   (line  569)
30157* fshort-double:                         Code Gen Options.   (line  117)
30158* fshort-enums <1>:                      Non-bugs.           (line   42)
30159* fshort-enums <2>:                      Type Attributes.    (line  112)
30160* fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
30161                                                             (line   43)
30162* fshort-enums:                          Code Gen Options.   (line  106)
30163* fshort-wchar:                          Code Gen Options.   (line  125)
30164* fsignaling-nans:                       Optimize Options.   (line 1166)
30165* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
30166* fsigned-bitfields:                     C Dialect Options.  (line  268)
30167* fsigned-char <1>:                      Characters implementation.
30168                                                             (line   31)
30169* fsigned-char:                          C Dialect Options.  (line  258)
30170* fsingle-precision-constant:            Optimize Options.   (line 1181)
30171* fsplit-ivs-in-unroller:                Optimize Options.   (line  748)
30172* fstack-check:                          Code Gen Options.   (line  304)
30173* fstack-limit-register:                 Code Gen Options.   (line  319)
30174* fstack-limit-symbol:                   Code Gen Options.   (line  319)
30175* fstats:                                C++ Dialect Options.
30176                                                             (line  160)
30177* fstrict-aliasing:                      Optimize Options.   (line  834)
30178* fstrict-overflow:                      Optimize Options.   (line  876)
30179* fsyntax-only:                          Warning Options.    (line   23)
30180* ftabstop:                              Preprocessor Options.
30181                                                             (line  461)
30182* ftemplate-depth:                       C++ Dialect Options.
30183                                                             (line  165)
30184* ftest-coverage:                        Debugging Options.  (line  210)
30185* fthread-jumps:                         Optimize Options.   (line  354)
30186* ftime-report:                          Debugging Options.  (line  146)
30187* ftracer:                               Optimize Options.   (line  731)
30188* ftrapv:                                Code Gen Options.   (line   22)
30189* ftree-vect-loop-version:               Optimize Options.   (line  713)
30190* ftree-vectorizer-verbose:              Debugging Options.  (line  640)
30191* funit-at-a-time:                       Optimize Options.   (line  965)
30192* funroll-all-loops:                     Optimize Options.   (line  742)
30193* funroll-loops:                         Optimize Options.   (line  736)
30194* funsafe-loop-optimizations:            Optimize Options.   (line  427)
30195* funsafe-math-optimizations:            Optimize Options.   (line 1100)
30196* funsigned-bitfields <1>:               Non-bugs.           (line   57)
30197* funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
30198                                                             (line   17)
30199* funsigned-bitfields:                   C Dialect Options.  (line  268)
30200* funsigned-char <1>:                    Characters implementation.
30201                                                             (line   31)
30202* funsigned-char:                        C Dialect Options.  (line  240)
30203* funswitch-loops:                       Optimize Options.   (line 1283)
30204* funwind-tables:                        Code Gen Options.   (line   57)
30205* fuse-cxa-atexit:                       C++ Dialect Options.
30206                                                             (line  178)
30207* fvar-tracking:                         Debugging Options.  (line  718)
30208* fvariable-expansion-in-unroller:       Optimize Options.   (line  762)
30209* fverbose-asm:                          Code Gen Options.   (line  154)
30210* fvisibility:                           Code Gen Options.   (line  372)
30211* fvisibility-inlines-hidden:            C++ Dialect Options.
30212                                                             (line  190)
30213* fvpt:                                  Optimize Options.   (line 1229)
30214* fweb:                                  Optimize Options.   (line 1004)
30215* fwhole-program:                        Optimize Options.   (line 1015)
30216* fwide-exec-charset:                    Preprocessor Options.
30217                                                             (line  472)
30218* fworking-directory:                    Preprocessor Options.
30219                                                             (line  490)
30220* fwrapv:                                Code Gen Options.   (line   26)
30221* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
30222                                                             (line  184)
30223* G <1>:                                 System V Options.   (line   10)
30224* G <2>:                                 RS/6000 and PowerPC Options.
30225                                                             (line  607)
30226* G <3>:                                 MIPS Options.       (line  216)
30227* G:                                     M32R/D Options.     (line   57)
30228* g:                                     Debugging Options.  (line   10)
30229* gcoff:                                 Debugging Options.  (line   70)
30230* gdwarf-2:                              Debugging Options.  (line   88)
30231* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
30232                                                             (line  194)
30233* gfull:                                 Darwin Options.     (line   64)
30234* ggdb:                                  Debugging Options.  (line   38)
30235* gnu-ld:                                HPPA Options.       (line  113)
30236* gstabs:                                Debugging Options.  (line   44)
30237* gstabs+:                               Debugging Options.  (line   64)
30238* gused:                                 Darwin Options.     (line   59)
30239* gvms:                                  Debugging Options.  (line   95)
30240* gxcoff:                                Debugging Options.  (line   75)
30241* gxcoff+:                               Debugging Options.  (line   80)
30242* H:                                     Preprocessor Options.
30243                                                             (line  612)
30244* headerpad_max_install_names:           Darwin Options.     (line  190)
30245* help <1>:                              Preprocessor Options.
30246                                                             (line  604)
30247* help:                                  Overall Options.    (line  219)
30248* hp-ld:                                 HPPA Options.       (line  125)
30249* I <1>:                                 Directory Options.  (line   10)
30250* I:                                     Preprocessor Options.
30251                                                             (line   64)
30252* I- <1>:                                Directory Options.  (line  107)
30253* I-:                                    Preprocessor Options.
30254                                                             (line  361)
30255* idirafter:                             Preprocessor Options.
30256                                                             (line  403)
30257* if-conversion:                         Optimize Options.   (line  442)
30258* if-conversion2:                        Optimize Options.   (line  451)
30259* imacros:                               Preprocessor Options.
30260                                                             (line  394)
30261* image_base:                            Darwin Options.     (line  190)
30262* imultilib:                             Preprocessor Options.
30263                                                             (line  424)
30264* include:                               Preprocessor Options.
30265                                                             (line  383)
30266* init:                                  Darwin Options.     (line  190)
30267* install_name:                          Darwin Options.     (line  190)
30268* iprefix:                               Preprocessor Options.
30269                                                             (line  408)
30270* iquote <1>:                            Directory Options.  (line   31)
30271* iquote:                                Preprocessor Options.
30272                                                             (line  434)
30273* isysroot:                              Preprocessor Options.
30274                                                             (line  420)
30275* isystem:                               Preprocessor Options.
30276                                                             (line  428)
30277* iwithprefix:                           Preprocessor Options.
30278                                                             (line  414)
30279* iwithprefixbefore:                     Preprocessor Options.
30280                                                             (line  414)
30281* keep_private_externs:                  Darwin Options.     (line  190)
30282* L:                                     Directory Options.  (line   37)
30283* l:                                     Link Options.       (line   26)
30284* lobjc:                                 Link Options.       (line   53)
30285* M:                                     Preprocessor Options.
30286                                                             (line  173)
30287* m1:                                    SH Options.         (line    9)
30288* m10:                                   PDP-11 Options.     (line   29)
30289* m128bit-long-double:                   i386 and x86-64 Options.
30290                                                             (line  254)
30291* m16-bit:                               CRIS Options.       (line   69)
30292* m2:                                    SH Options.         (line   12)
30293* m210:                                  MCore Options.      (line   43)
30294* m3:                                    SH Options.         (line   18)
30295* m31:                                   S/390 and zSeries Options.
30296                                                             (line   79)
30297* m32 <1>:                               SPARC Options.      (line  189)
30298* m32 <2>:                               RS/6000 and PowerPC Options.
30299                                                             (line  222)
30300* m32:                                   i386 and x86-64 Options.
30301                                                             (line  464)
30302* m32-bit:                               CRIS Options.       (line   69)
30303* m32r:                                  M32R/D Options.     (line   15)
30304* m32r2:                                 M32R/D Options.     (line    9)
30305* m32rx:                                 M32R/D Options.     (line   12)
30306* m340:                                  MCore Options.      (line   43)
30307* m386:                                  i386 and x86-64 Options.
30308                                                             (line  142)
30309* m3dnow:                                i386 and x86-64 Options.
30310                                                             (line  389)
30311* m3e:                                   SH Options.         (line   21)
30312* m4:                                    SH Options.         (line   35)
30313* m4-nofpu:                              SH Options.         (line   24)
30314* m4-single:                             SH Options.         (line   31)
30315* m4-single-only:                        SH Options.         (line   27)
30316* m40:                                   PDP-11 Options.     (line   23)
30317* m45:                                   PDP-11 Options.     (line   26)
30318* m486:                                  i386 and x86-64 Options.
30319                                                             (line  142)
30320* m4a:                                   SH Options.         (line   50)
30321* m4a-nofpu:                             SH Options.         (line   38)
30322* m4a-single:                            SH Options.         (line   46)
30323* m4a-single-only:                       SH Options.         (line   42)
30324* m4al:                                  SH Options.         (line   53)
30325* m4byte-functions:                      MCore Options.      (line   27)
30326* m5200:                                 M680x0 Options.     (line   59)
30327* m64 <1>:                               SPARC Options.      (line  189)
30328* m64 <2>:                               S/390 and zSeries Options.
30329                                                             (line   79)
30330* m64 <3>:                               RS/6000 and PowerPC Options.
30331                                                             (line  222)
30332* m64:                                   i386 and x86-64 Options.
30333                                                             (line  464)
30334* m68000:                                M680x0 Options.     (line   13)
30335* m68020:                                M680x0 Options.     (line   21)
30336* m68020-40:                             M680x0 Options.     (line   70)
30337* m68020-60:                             M680x0 Options.     (line   77)
30338* m68030:                                M680x0 Options.     (line   30)
30339* m68040:                                M680x0 Options.     (line   34)
30340* m68060:                                M680x0 Options.     (line   42)
30341* m6811:                                 M68hc1x Options.    (line   13)
30342* m6812:                                 M68hc1x Options.    (line   18)
30343* m68881:                                M680x0 Options.     (line   25)
30344* m68hc11:                               M68hc1x Options.    (line   13)
30345* m68hc12:                               M68hc1x Options.    (line   18)
30346* m68hcs12:                              M68hc1x Options.    (line   23)
30347* m68S12:                                M68hc1x Options.    (line   23)
30348* m8-bit:                                CRIS Options.       (line   69)
30349* m96bit-long-double:                    i386 and x86-64 Options.
30350                                                             (line  254)
30351* mabi <1>:                              RS/6000 and PowerPC Options.
30352                                                             (line  489)
30353* mabi:                                  ARM Options.        (line   10)
30354* mabi-mmixware:                         MMIX Options.       (line   20)
30355* mabi=32:                               MIPS Options.       (line   89)
30356* mabi=64:                               MIPS Options.       (line   89)
30357* mabi=eabi:                             MIPS Options.       (line   89)
30358* mabi=gnu:                              MMIX Options.       (line   20)
30359* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
30360                                                             (line  502)
30361* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
30362                                                             (line  506)
30363* mabi=n32:                              MIPS Options.       (line   89)
30364* mabi=no-spe:                           RS/6000 and PowerPC Options.
30365                                                             (line  499)
30366* mabi=o64:                              MIPS Options.       (line   89)
30367* mabi=spe:                              RS/6000 and PowerPC Options.
30368                                                             (line  494)
30369* mabicalls:                             MIPS Options.       (line  100)
30370* mabort-on-noreturn:                    ARM Options.        (line  144)
30371* mabshi:                                PDP-11 Options.     (line   55)
30372* mac0:                                  PDP-11 Options.     (line   16)
30373* macc-4:                                FRV Options.        (line  113)
30374* macc-8:                                FRV Options.        (line  116)
30375* maccumulate-outgoing-args:             i386 and x86-64 Options.
30376                                                             (line  415)
30377* madjust-unroll:                        SH Options.         (line  175)
30378* mads:                                  RS/6000 and PowerPC Options.
30379                                                             (line  532)
30380* maix-struct-return:                    RS/6000 and PowerPC Options.
30381                                                             (line  482)
30382* maix32:                                RS/6000 and PowerPC Options.
30383                                                             (line  260)
30384* maix64:                                RS/6000 and PowerPC Options.
30385                                                             (line  260)
30386* malign-300:                            H8/300 Options.     (line   31)
30387* malign-double:                         i386 and x86-64 Options.
30388                                                             (line  238)
30389* malign-int:                            M680x0 Options.     (line  132)
30390* malign-labels:                         FRV Options.        (line  104)
30391* malign-loops:                          M32R/D Options.     (line   73)
30392* malign-natural:                        RS/6000 and PowerPC Options.
30393                                                             (line  299)
30394* malign-power:                          RS/6000 and PowerPC Options.
30395                                                             (line  299)
30396* malloc-cc:                             FRV Options.        (line   25)
30397* malpha-as:                             DEC Alpha Options.  (line  159)
30398* maltivec:                              RS/6000 and PowerPC Options.
30399                                                             (line  164)
30400* mam33:                                 MN10300 Options.    (line   17)
30401* maout:                                 CRIS Options.       (line   92)
30402* mapcs:                                 ARM Options.        (line   22)
30403* mapcs-frame:                           ARM Options.        (line   14)
30404* mapp-regs <1>:                         V850 Options.       (line   57)
30405* mapp-regs:                             SPARC Options.      (line   10)
30406* march <1>:                             S/390 and zSeries Options.
30407                                                             (line  108)
30408* march <2>:                             MT Options.         (line    9)
30409* march <3>:                             MIPS Options.       (line   14)
30410* march <4>:                             i386 and x86-64 Options.
30411                                                             (line  131)
30412* march <5>:                             HPPA Options.       (line    9)
30413* march <6>:                             CRIS Options.       (line   10)
30414* march:                                 ARM Options.        (line  109)
30415* masm=DIALECT:                          i386 and x86-64 Options.
30416                                                             (line  194)
30417* mauto-incdec:                          M68hc1x Options.    (line   26)
30418* mauto-pic:                             IA-64 Options.      (line   50)
30419* mb:                                    SH Options.         (line   58)
30420* mbacc:                                 MT Options.         (line   16)
30421* mbackchain:                            S/390 and zSeries Options.
30422                                                             (line   26)
30423* mbase-addresses:                       MMIX Options.       (line   54)
30424* mbcopy:                                PDP-11 Options.     (line   36)
30425* mbig <1>:                              TMS320C3x/C4x Options.
30426                                                             (line   18)
30427* mbig:                                  RS/6000 and PowerPC Options.
30428                                                             (line  414)
30429* mbig-endian <1>:                       RS/6000 and PowerPC Options.
30430                                                             (line  414)
30431* mbig-endian <2>:                       MCore Options.      (line   39)
30432* mbig-endian <3>:                       IA-64 Options.      (line    9)
30433* mbig-endian:                           ARM Options.        (line   72)
30434* mbig-memory:                           TMS320C3x/C4x Options.
30435                                                             (line   18)
30436* mbig-switch <1>:                       V850 Options.       (line   52)
30437* mbig-switch:                           HPPA Options.       (line   23)
30438* mbigtable:                             SH Options.         (line   74)
30439* mbit-align:                            RS/6000 and PowerPC Options.
30440                                                             (line  368)
30441* mbitfield:                             M680x0 Options.     (line  104)
30442* mbk:                                   TMS320C3x/C4x Options.
30443                                                             (line   27)
30444* mbranch-cheap:                         PDP-11 Options.     (line   65)
30445* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
30446* mbranch-expensive:                     PDP-11 Options.     (line   61)
30447* mbranch-likely:                        MIPS Options.       (line  367)
30448* mbranch-predict:                       MMIX Options.       (line   49)
30449* mbss-plt:                              RS/6000 and PowerPC Options.
30450                                                             (line  181)
30451* mbuild-constants:                      DEC Alpha Options.  (line  142)
30452* mbwx:                                  DEC Alpha Options.  (line  171)
30453* mc68000:                               M680x0 Options.     (line   13)
30454* mc68020:                               M680x0 Options.     (line   21)
30455* mcall-gnu:                             RS/6000 and PowerPC Options.
30456                                                             (line  474)
30457* mcall-linux:                           RS/6000 and PowerPC Options.
30458                                                             (line  470)
30459* mcall-netbsd:                          RS/6000 and PowerPC Options.
30460                                                             (line  478)
30461* mcall-prologues:                       AVR Options.        (line   43)
30462* mcall-solaris:                         RS/6000 and PowerPC Options.
30463                                                             (line  466)
30464* mcall-sysv:                            RS/6000 and PowerPC Options.
30465                                                             (line  453)
30466* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
30467                                                             (line  460)
30468* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
30469                                                             (line  463)
30470* mcallee-super-interworking:            ARM Options.        (line  234)
30471* mcaller-super-interworking:            ARM Options.        (line  240)
30472* mcallgraph-data:                       MCore Options.      (line   31)
30473* mcc-init:                              CRIS Options.       (line   46)
30474* mcfv4e:                                M680x0 Options.     (line   66)
30475* mcheck-zero-division:                  MIPS Options.       (line  254)
30476* mcirrus-fix-invalid-insns:             ARM Options.        (line  187)
30477* mcix:                                  DEC Alpha Options.  (line  171)
30478* mcmodel=embmedany:                     SPARC Options.      (line  211)
30479* mcmodel=kernel:                        i386 and x86-64 Options.
30480                                                             (line  486)
30481* mcmodel=large:                         i386 and x86-64 Options.
30482                                                             (line  498)
30483* mcmodel=medany:                        SPARC Options.      (line  205)
30484* mcmodel=medium:                        i386 and x86-64 Options.
30485                                                             (line  491)
30486* mcmodel=medlow:                        SPARC Options.      (line  194)
30487* mcmodel=medmid:                        SPARC Options.      (line  199)
30488* mcmodel=small:                         i386 and x86-64 Options.
30489                                                             (line  480)
30490* mcond-exec:                            FRV Options.        (line  152)
30491* mcond-move:                            FRV Options.        (line  128)
30492* mconst-align:                          CRIS Options.       (line   60)
30493* mconst16:                              Xtensa Options.     (line   10)
30494* mconstant-gp:                          IA-64 Options.      (line   46)
30495* mcpu <1>:                              TMS320C3x/C4x Options.
30496                                                             (line    9)
30497* mcpu <2>:                              SPARC Options.      (line   96)
30498* mcpu <3>:                              RS/6000 and PowerPC Options.
30499                                                             (line  100)
30500* mcpu <4>:                              i386 and x86-64 Options.
30501                                                             (line  136)
30502* mcpu <5>:                              FRV Options.        (line  212)
30503* mcpu <6>:                              DEC Alpha Options.  (line  223)
30504* mcpu <7>:                              CRIS Options.       (line   10)
30505* mcpu <8>:                              ARM Options.        (line   84)
30506* mcpu:                                  ARC Options.        (line   23)
30507* mcpu32:                                M680x0 Options.     (line   51)
30508* mcpu=:                                 M32C Options.       (line    7)
30509* mcsync-anomaly:                        Blackfin Options.   (line   23)
30510* MD:                                    Preprocessor Options.
30511                                                             (line  261)
30512* mdalign:                               SH Options.         (line   64)
30513* mdata:                                 ARC Options.        (line   30)
30514* mdata-align:                           CRIS Options.       (line   60)
30515* mdb:                                   TMS320C3x/C4x Options.
30516                                                             (line   32)
30517* mdebug <1>:                            S/390 and zSeries Options.
30518                                                             (line  104)
30519* mdebug:                                M32R/D Options.     (line   69)
30520* mdec-asm:                              PDP-11 Options.     (line   78)
30521* mdisable-callt:                        V850 Options.       (line   80)
30522* mdisable-fpregs:                       HPPA Options.       (line   33)
30523* mdisable-indexing:                     HPPA Options.       (line   40)
30524* mdiv:                                  MCore Options.      (line   15)
30525* mdiv=STRATEGY:                         SH Options.         (line  127)
30526* mdivide-breaks:                        MIPS Options.       (line  259)
30527* mdivide-traps:                         MIPS Options.       (line  259)
30528* mdivsi3_libfunc=NAME:                  SH Options.         (line  168)
30529* mdlmzb:                                RS/6000 and PowerPC Options.
30530                                                             (line  362)
30531* mdouble:                               FRV Options.        (line   38)
30532* mdouble-float:                         MIPS Options.       (line  173)
30533* mdp-isr-reload:                        TMS320C3x/C4x Options.
30534                                                             (line   45)
30535* mdsp:                                  MIPS Options.       (line  178)
30536* mdwarf2-asm:                           IA-64 Options.      (line   79)
30537* mdword:                                FRV Options.        (line   32)
30538* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
30539                                                             (line  419)
30540* meabi:                                 RS/6000 and PowerPC Options.
30541                                                             (line  555)
30542* mearly-stop-bits:                      IA-64 Options.      (line   85)
30543* meb:                                   Score Options.      (line    9)
30544* mel:                                   Score Options.      (line   12)
30545* melf <1>:                              MMIX Options.       (line   44)
30546* melf:                                  CRIS Options.       (line   95)
30547* melinux:                               CRIS Options.       (line   99)
30548* melinux-stacksize:                     CRIS Options.       (line   25)
30549* memb:                                  RS/6000 and PowerPC Options.
30550                                                             (line  550)
30551* membedded-data:                        MIPS Options.       (line  225)
30552* memregs=:                              M32C Options.       (line   21)
30553* mep:                                   V850 Options.       (line   16)
30554* mepsilon:                              MMIX Options.       (line   15)
30555* mesa:                                  S/390 and zSeries Options.
30556                                                             (line   87)
30557* metrax100:                             CRIS Options.       (line   31)
30558* metrax4:                               CRIS Options.       (line   31)
30559* mexplicit-relocs <1>:                  MIPS Options.       (line  245)
30560* mexplicit-relocs:                      DEC Alpha Options.  (line  184)
30561* MF:                                    Preprocessor Options.
30562                                                             (line  207)
30563* mfast-fix:                             TMS320C3x/C4x Options.
30564                                                             (line   62)
30565* mfast-indirect-calls:                  HPPA Options.       (line   52)
30566* mfaster-structs:                       SPARC Options.      (line   71)
30567* mfdpic:                                FRV Options.        (line   56)
30568* mfix:                                  DEC Alpha Options.  (line  171)
30569* mfix-and-continue:                     Darwin Options.     (line   97)
30570* mfix-r4000:                            MIPS Options.       (line  309)
30571* mfix-r4400:                            MIPS Options.       (line  323)
30572* mfix-sb1:                              MIPS Options.       (line  351)
30573* mfix-vr4120:                           MIPS Options.       (line  330)
30574* mfix-vr4130:                           MIPS Options.       (line  344)
30575* mfixed-cc:                             FRV Options.        (line   28)
30576* mfixed-range <1>:                      IA-64 Options.      (line   90)
30577* mfixed-range:                          HPPA Options.       (line   59)
30578* mfloat-abi:                            ARM Options.        (line   59)
30579* mfloat-gprs:                           RS/6000 and PowerPC Options.
30580                                                             (line  205)
30581* mfloat-ieee:                           DEC Alpha Options.  (line  179)
30582* mfloat-vax:                            DEC Alpha Options.  (line  179)
30583* mfloat32:                              PDP-11 Options.     (line   52)
30584* mfloat64:                              PDP-11 Options.     (line   48)
30585* mflush-func:                           MIPS Options.       (line  357)
30586* mflush-func=NAME:                      M32R/D Options.     (line   94)
30587* mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
30588* mfmovd:                                SH Options.         (line   78)
30589* mfp:                                   ARM Options.        (line  119)
30590* mfp-exceptions:                        MIPS Options.       (line  378)
30591* mfp-reg:                               DEC Alpha Options.  (line   25)
30592* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
30593* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
30594* mfp32:                                 MIPS Options.       (line  156)
30595* mfp64:                                 MIPS Options.       (line  159)
30596* mfpe:                                  ARM Options.        (line  119)
30597* mfpr-32:                               FRV Options.        (line   13)
30598* mfpr-64:                               FRV Options.        (line   16)
30599* mfprnd:                                RS/6000 and PowerPC Options.
30600                                                             (line   25)
30601* mfpu <1>:                              SPARC Options.      (line   20)
30602* mfpu <2>:                              PDP-11 Options.     (line    9)
30603* mfpu:                                  ARM Options.        (line  119)
30604* mfull-toc:                             RS/6000 and PowerPC Options.
30605                                                             (line  233)
30606* mfused-madd <1>:                       Xtensa Options.     (line   19)
30607* mfused-madd <2>:                       S/390 and zSeries Options.
30608                                                             (line  128)
30609* mfused-madd <3>:                       RS/6000 and PowerPC Options.
30610                                                             (line  349)
30611* mfused-madd:                           MIPS Options.       (line  294)
30612* mg:                                    VAX Options.        (line   17)
30613* MG:                                    Preprocessor Options.
30614                                                             (line  216)
30615* mgas <1>:                              HPPA Options.       (line   75)
30616* mgas:                                  DEC Alpha Options.  (line  159)
30617* mgettrcost=NUMBER:                     SH Options.         (line  190)
30618* mglibc:                                GNU/Linux Options.  (line    9)
30619* mgnu:                                  VAX Options.        (line   13)
30620* mgnu-as:                               IA-64 Options.      (line   18)
30621* mgnu-ld:                               IA-64 Options.      (line   23)
30622* mgotplt:                               CRIS Options.       (line   86)
30623* mgp32:                                 MIPS Options.       (line  150)
30624* mgp64:                                 MIPS Options.       (line  153)
30625* mgpr-32:                               FRV Options.        (line    7)
30626* mgpr-64:                               FRV Options.        (line   10)
30627* mgprel-ro:                             FRV Options.        (line   79)
30628* mh:                                    H8/300 Options.     (line   14)
30629* mhard-float <1>:                       SPARC Options.      (line   20)
30630* mhard-float <2>:                       S/390 and zSeries Options.
30631                                                             (line   11)
30632* mhard-float <3>:                       RS/6000 and PowerPC Options.
30633                                                             (line  311)
30634* mhard-float <4>:                       MIPS Options.       (line  162)
30635* mhard-float <5>:                       FRV Options.        (line   19)
30636* mhard-float:                           ARM Options.        (line   41)
30637* mhard-quad-float:                      SPARC Options.      (line   41)
30638* mhardlit:                              MCore Options.      (line   10)
30639* mhitachi:                              SH Options.         (line   81)
30640* mid-shared-library:                    Blackfin Options.   (line   39)
30641* mieee <1>:                             SH Options.         (line   96)
30642* mieee:                                 DEC Alpha Options.  (line   39)
30643* mieee-conformant:                      DEC Alpha Options.  (line  134)
30644* mieee-fp:                              i386 and x86-64 Options.
30645                                                             (line  200)
30646* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
30647* milp32:                                IA-64 Options.      (line  114)
30648* mimpure-text:                          SPARC Options.      (line   81)
30649* mindexed-addressing:                   SH Options.         (line  180)
30650* minit-stack:                           AVR Options.        (line   35)
30651* minline-all-stringops:                 i386 and x86-64 Options.
30652                                                             (line  436)
30653* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
30654* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
30655* minline-int-divide-max-throughput:     IA-64 Options.      (line   66)
30656* minline-int-divide-min-latency:        IA-64 Options.      (line   62)
30657* minline-plt:                           FRV Options.        (line   64)
30658* minline-sqrt-max-throughput:           IA-64 Options.      (line   74)
30659* minline-sqrt-min-latency:              IA-64 Options.      (line   70)
30660* minmax:                                M68hc1x Options.    (line   31)
30661* minsert-sched-nops:                    RS/6000 and PowerPC Options.
30662                                                             (line  441)
30663* mint16:                                PDP-11 Options.     (line   40)
30664* mint32 <1>:                            PDP-11 Options.     (line   44)
30665* mint32:                                H8/300 Options.     (line   28)
30666* mint8:                                 AVR Options.        (line   53)
30667* minvalid-symbols:                      SH Options.         (line  213)
30668* mips1:                                 MIPS Options.       (line   59)
30669* mips16:                                MIPS Options.       (line   81)
30670* mips2:                                 MIPS Options.       (line   62)
30671* mips3:                                 MIPS Options.       (line   65)
30672* mips32:                                MIPS Options.       (line   71)
30673* mips32r2:                              MIPS Options.       (line   74)
30674* mips3d:                                MIPS Options.       (line  190)
30675* mips4:                                 MIPS Options.       (line   68)
30676* mips64:                                MIPS Options.       (line   77)
30677* misel:                                 RS/6000 and PowerPC Options.
30678                                                             (line  187)
30679* misize:                                SH Options.         (line  103)
30680* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
30681* mjump-in-delay:                        HPPA Options.       (line   28)
30682* mkernel:                               Darwin Options.     (line   75)
30683* mknuthdiv:                             MMIX Options.       (line   33)
30684* ml:                                    SH Options.         (line   61)
30685* mlarge-data:                           DEC Alpha Options.  (line  195)
30686* mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
30687                                                             (line  280)
30688* mlarge-text:                           DEC Alpha Options.  (line  213)
30689* mlibfuncs:                             MMIX Options.       (line   10)
30690* mlibrary-pic:                          FRV Options.        (line  110)
30691* mlinked-fp:                            FRV Options.        (line   94)
30692* mlinker-opt:                           HPPA Options.       (line   85)
30693* mlinux:                                CRIS Options.       (line  104)
30694* mlittle:                               RS/6000 and PowerPC Options.
30695                                                             (line  408)
30696* mlittle-endian <1>:                    SPARC Options.      (line  183)
30697* mlittle-endian <2>:                    RS/6000 and PowerPC Options.
30698                                                             (line  408)
30699* mlittle-endian <3>:                    MCore Options.      (line   39)
30700* mlittle-endian <4>:                    IA-64 Options.      (line   13)
30701* mlittle-endian:                        ARM Options.        (line   68)
30702* mlong-calls <1>:                       V850 Options.       (line   10)
30703* mlong-calls <2>:                       MIPS Options.       (line  280)
30704* mlong-calls <3>:                       M68hc1x Options.    (line   35)
30705* mlong-calls <4>:                       FRV Options.        (line   99)
30706* mlong-calls <5>:                       Blackfin Options.   (line   57)
30707* mlong-calls:                           ARM Options.        (line  149)
30708* mlong-double-128:                      S/390 and zSeries Options.
30709                                                             (line   20)
30710* mlong-double-64:                       S/390 and zSeries Options.
30711                                                             (line   20)
30712* mlong-load-store:                      HPPA Options.       (line   66)
30713* mlong32:                               MIPS Options.       (line  199)
30714* mlong64:                               MIPS Options.       (line  194)
30715* mlongcall:                             RS/6000 and PowerPC Options.
30716                                                             (line  621)
30717* mlongcalls:                            Xtensa Options.     (line   60)
30718* mloop-unsigned:                        TMS320C3x/C4x Options.
30719                                                             (line   94)
30720* mlow-64k:                              Blackfin Options.   (line   32)
30721* mlp64:                                 IA-64 Options.      (line  114)
30722* MM:                                    Preprocessor Options.
30723                                                             (line  197)
30724* mmac <1>:                              Score Options.      (line   21)
30725* mmac:                                  CRX Options.        (line    9)
30726* mmad:                                  MIPS Options.       (line  289)
30727* mmangle-cpu:                           ARC Options.        (line   15)
30728* mmax:                                  DEC Alpha Options.  (line  171)
30729* mmax-stack-frame:                      CRIS Options.       (line   22)
30730* mmcu:                                  AVR Options.        (line    9)
30731* MMD:                                   Preprocessor Options.
30732                                                             (line  276)
30733* mmedia:                                FRV Options.        (line   44)
30734* mmemcpy:                               MIPS Options.       (line  274)
30735* mmemory-latency:                       DEC Alpha Options.  (line  266)
30736* mmemparm:                              TMS320C3x/C4x Options.
30737                                                             (line  109)
30738* mmfcrf:                                RS/6000 and PowerPC Options.
30739                                                             (line   25)
30740* mminimal-toc:                          RS/6000 and PowerPC Options.
30741                                                             (line  233)
30742* mmmx:                                  i386 and x86-64 Options.
30743                                                             (line  389)
30744* mmodel=large:                          M32R/D Options.     (line   33)
30745* mmodel=medium:                         M32R/D Options.     (line   27)
30746* mmodel=small:                          M32R/D Options.     (line   18)
30747* mmpyi:                                 TMS320C3x/C4x Options.
30748                                                             (line   53)
30749* mmul-bug-workaround:                   CRIS Options.       (line   36)
30750* mmuladd:                               FRV Options.        (line   50)
30751* mmulhw:                                RS/6000 and PowerPC Options.
30752                                                             (line  355)
30753* mmult-bug:                             MN10300 Options.    (line    9)
30754* mmulti-cond-exec:                      FRV Options.        (line  176)
30755* mmultiple:                             RS/6000 and PowerPC Options.
30756                                                             (line  317)
30757* mmvcle:                                S/390 and zSeries Options.
30758                                                             (line   97)
30759* mmvme:                                 RS/6000 and PowerPC Options.
30760                                                             (line  527)
30761* mn:                                    H8/300 Options.     (line   20)
30762* mnested-cond-exec:                     FRV Options.        (line  189)
30763* mnew-mnemonics:                        RS/6000 and PowerPC Options.
30764                                                             (line   85)
30765* mnhwloop:                              Score Options.      (line   15)
30766* mno-3dnow:                             i386 and x86-64 Options.
30767                                                             (line  389)
30768* mno-4byte-functions:                   MCore Options.      (line   27)
30769* mno-abicalls:                          MIPS Options.       (line  100)
30770* mno-abshi:                             PDP-11 Options.     (line   58)
30771* mno-ac0:                               PDP-11 Options.     (line   20)
30772* mno-align-double:                      i386 and x86-64 Options.
30773                                                             (line  238)
30774* mno-align-int:                         M680x0 Options.     (line  132)
30775* mno-align-loops:                       M32R/D Options.     (line   76)
30776* mno-align-stringops:                   i386 and x86-64 Options.
30777                                                             (line  431)
30778* mno-altivec:                           RS/6000 and PowerPC Options.
30779                                                             (line  164)
30780* mno-am33:                              MN10300 Options.    (line   20)
30781* mno-app-regs <1>:                      V850 Options.       (line   61)
30782* mno-app-regs:                          SPARC Options.      (line   10)
30783* mno-bacc:                              MT Options.         (line   19)
30784* mno-backchain:                         S/390 and zSeries Options.
30785                                                             (line   26)
30786* mno-base-addresses:                    MMIX Options.       (line   54)
30787* mno-bit-align:                         RS/6000 and PowerPC Options.
30788                                                             (line  368)
30789* mno-bk:                                TMS320C3x/C4x Options.
30790                                                             (line   27)
30791* mno-branch-likely:                     MIPS Options.       (line  367)
30792* mno-branch-predict:                    MMIX Options.       (line   49)
30793* mno-bwx:                               DEC Alpha Options.  (line  171)
30794* mno-callgraph-data:                    MCore Options.      (line   31)
30795* mno-check-zero-division:               MIPS Options.       (line  254)
30796* mno-cirrus-fix-invalid-insns:          ARM Options.        (line  187)
30797* mno-cix:                               DEC Alpha Options.  (line  171)
30798* mno-cond-exec:                         FRV Options.        (line  158)
30799* mno-cond-move:                         FRV Options.        (line  134)
30800* mno-const-align:                       CRIS Options.       (line   60)
30801* mno-const16:                           Xtensa Options.     (line   10)
30802* mno-crt0 <1>:                          MT Options.         (line   25)
30803* mno-crt0:                              MN10300 Options.    (line   31)
30804* mno-csync-anomaly:                     Blackfin Options.   (line   28)
30805* mno-data-align:                        CRIS Options.       (line   60)
30806* mno-db:                                TMS320C3x/C4x Options.
30807                                                             (line   32)
30808* mno-debug:                             S/390 and zSeries Options.
30809                                                             (line  104)
30810* mno-div:                               MCore Options.      (line   15)
30811* mno-dlmzb:                             RS/6000 and PowerPC Options.
30812                                                             (line  362)
30813* mno-double:                            FRV Options.        (line   41)
30814* mno-dsp:                               MIPS Options.       (line  178)
30815* mno-dwarf2-asm:                        IA-64 Options.      (line   79)
30816* mno-dword:                             FRV Options.        (line   35)
30817* mno-eabi:                              RS/6000 and PowerPC Options.
30818                                                             (line  555)
30819* mno-early-stop-bits:                   IA-64 Options.      (line   85)
30820* mno-eflags:                            FRV Options.        (line  125)
30821* mno-embedded-data:                     MIPS Options.       (line  225)
30822* mno-ep:                                V850 Options.       (line   16)
30823* mno-epsilon:                           MMIX Options.       (line   15)
30824* mno-explicit-relocs <1>:               MIPS Options.       (line  245)
30825* mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
30826* mno-fancy-math-387:                    i386 and x86-64 Options.
30827                                                             (line  227)
30828* mno-fast-fix:                          TMS320C3x/C4x Options.
30829                                                             (line   62)
30830* mno-faster-structs:                    SPARC Options.      (line   71)
30831* mno-fix:                               DEC Alpha Options.  (line  171)
30832* mno-fix-r4000:                         MIPS Options.       (line  309)
30833* mno-fix-r4400:                         MIPS Options.       (line  323)
30834* mno-float32:                           PDP-11 Options.     (line   48)
30835* mno-float64:                           PDP-11 Options.     (line   52)
30836* mno-flush-func:                        M32R/D Options.     (line   99)
30837* mno-flush-trap:                        M32R/D Options.     (line   91)
30838* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
30839                                                             (line  233)
30840* mno-fp-regs:                           DEC Alpha Options.  (line   25)
30841* mno-fp-ret-in-387:                     i386 and x86-64 Options.
30842                                                             (line  217)
30843* mno-fprnd:                             RS/6000 and PowerPC Options.
30844                                                             (line   25)
30845* mno-fpu:                               SPARC Options.      (line   25)
30846* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
30847* mno-fused-madd <2>:                    S/390 and zSeries Options.
30848                                                             (line  128)
30849* mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
30850                                                             (line  349)
30851* mno-fused-madd:                        MIPS Options.       (line  294)
30852* mno-gnu-as:                            IA-64 Options.      (line   18)
30853* mno-gnu-ld:                            IA-64 Options.      (line   23)
30854* mno-gotplt:                            CRIS Options.       (line   86)
30855* mno-hardlit:                           MCore Options.      (line   10)
30856* mno-id-shared-library:                 Blackfin Options.   (line   45)
30857* mno-ieee-fp:                           i386 and x86-64 Options.
30858                                                             (line  200)
30859* mno-int16:                             PDP-11 Options.     (line   44)
30860* mno-int32:                             PDP-11 Options.     (line   40)
30861* mno-interrupts:                        AVR Options.        (line   39)
30862* mno-isel:                              RS/6000 and PowerPC Options.
30863                                                             (line  187)
30864* mno-knuthdiv:                          MMIX Options.       (line   33)
30865* mno-libfuncs:                          MMIX Options.       (line   10)
30866* mno-long-calls <1>:                    V850 Options.       (line   10)
30867* mno-long-calls <2>:                    MIPS Options.       (line  280)
30868* mno-long-calls <3>:                    M68hc1x Options.    (line   35)
30869* mno-long-calls <4>:                    HPPA Options.       (line  138)
30870* mno-long-calls <5>:                    Blackfin Options.   (line   57)
30871* mno-long-calls:                        ARM Options.        (line  149)
30872* mno-longcall:                          RS/6000 and PowerPC Options.
30873                                                             (line  621)
30874* mno-longcalls:                         Xtensa Options.     (line   60)
30875* mno-loop-unsigned:                     TMS320C3x/C4x Options.
30876                                                             (line   94)
30877* mno-low-64k:                           Blackfin Options.   (line   36)
30878* mno-mad:                               MIPS Options.       (line  289)
30879* mno-max:                               DEC Alpha Options.  (line  171)
30880* mno-media:                             FRV Options.        (line   47)
30881* mno-memcpy:                            MIPS Options.       (line  274)
30882* mno-mfcrf:                             RS/6000 and PowerPC Options.
30883                                                             (line   25)
30884* mno-mips16:                            MIPS Options.       (line   81)
30885* mno-mips3d:                            MIPS Options.       (line  190)
30886* mno-mmx:                               i386 and x86-64 Options.
30887                                                             (line  389)
30888* mno-mpyi:                              TMS320C3x/C4x Options.
30889                                                             (line   53)
30890* mno-mul-bug-workaround:                CRIS Options.       (line   36)
30891* mno-muladd:                            FRV Options.        (line   53)
30892* mno-mulhw:                             RS/6000 and PowerPC Options.
30893                                                             (line  355)
30894* mno-mult-bug:                          MN10300 Options.    (line   13)
30895* mno-multi-cond-exec:                   FRV Options.        (line  183)
30896* mno-multiple:                          RS/6000 and PowerPC Options.
30897                                                             (line  317)
30898* mno-mvcle:                             S/390 and zSeries Options.
30899                                                             (line   97)
30900* mno-nested-cond-exec:                  FRV Options.        (line  195)
30901* mno-optimize-membar:                   FRV Options.        (line  205)
30902* mno-pack:                              FRV Options.        (line  122)
30903* mno-packed-stack:                      S/390 and zSeries Options.
30904                                                             (line   46)
30905* mno-paired-single:                     MIPS Options.       (line  183)
30906* mno-parallel-insns:                    TMS320C3x/C4x Options.
30907                                                             (line  115)
30908* mno-parallel-mpy:                      TMS320C3x/C4x Options.
30909                                                             (line  120)
30910* mno-pic:                               IA-64 Options.      (line   26)
30911* mno-popcntb:                           RS/6000 and PowerPC Options.
30912                                                             (line   25)
30913* mno-power:                             RS/6000 and PowerPC Options.
30914                                                             (line   25)
30915* mno-power2:                            RS/6000 and PowerPC Options.
30916                                                             (line   25)
30917* mno-powerpc:                           RS/6000 and PowerPC Options.
30918                                                             (line   25)
30919* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
30920                                                             (line   25)
30921* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
30922                                                             (line   25)
30923* mno-powerpc64:                         RS/6000 and PowerPC Options.
30924                                                             (line   25)
30925* mno-prolog-function:                   V850 Options.       (line   23)
30926* mno-prologue-epilogue:                 CRIS Options.       (line   76)
30927* mno-prototype:                         RS/6000 and PowerPC Options.
30928                                                             (line  511)
30929* mno-push-args:                         i386 and x86-64 Options.
30930                                                             (line  408)
30931* mno-register-names:                    IA-64 Options.      (line   37)
30932* mno-regnames:                          RS/6000 and PowerPC Options.
30933                                                             (line  615)
30934* mno-relax-immediate:                   MCore Options.      (line   19)
30935* mno-relocatable:                       RS/6000 and PowerPC Options.
30936                                                             (line  385)
30937* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
30938                                                             (line  393)
30939* mno-rptb:                              TMS320C3x/C4x Options.
30940                                                             (line   72)
30941* mno-rpts:                              TMS320C3x/C4x Options.
30942                                                             (line   81)
30943* mno-scc:                               FRV Options.        (line  146)
30944* mno-sched-ar-data-spec:                IA-64 Options.      (line  128)
30945* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  149)
30946* mno-sched-br-data-spec:                IA-64 Options.      (line  121)
30947* mno-sched-br-in-data-spec:             IA-64 Options.      (line  142)
30948* mno-sched-control-ldc:                 IA-64 Options.      (line  168)
30949* mno-sched-control-spec:                IA-64 Options.      (line  135)
30950* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  194)
30951* mno-sched-in-control-spec:             IA-64 Options.      (line  156)
30952* mno-sched-ldc:                         IA-64 Options.      (line  162)
30953* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  187)
30954* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  180)
30955* mno-sched-prolog:                      ARM Options.        (line   32)
30956* mno-sched-spec-verbose:                IA-64 Options.      (line  176)
30957* mno-sdata <1>:                         RS/6000 and PowerPC Options.
30958                                                             (line  602)
30959* mno-sdata:                             IA-64 Options.      (line   42)
30960* mno-side-effects:                      CRIS Options.       (line   51)
30961* mno-single-exit:                       MMIX Options.       (line   66)
30962* mno-slow-bytes:                        MCore Options.      (line   35)
30963* mno-small-exec:                        S/390 and zSeries Options.
30964                                                             (line   72)
30965* mno-soft-float:                        DEC Alpha Options.  (line   10)
30966* mno-space-regs:                        HPPA Options.       (line   45)
30967* mno-spe:                               RS/6000 and PowerPC Options.
30968                                                             (line  196)
30969* mno-specld-anomaly:                    Blackfin Options.   (line   19)
30970* mno-split:                             PDP-11 Options.     (line   71)
30971* mno-split-addresses:                   MIPS Options.       (line  239)
30972* mno-sse:                               i386 and x86-64 Options.
30973                                                             (line  389)
30974* mno-stack-align:                       CRIS Options.       (line   60)
30975* mno-stack-bias:                        SPARC Options.      (line  220)
30976* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
30977                                                             (line  380)
30978* mno-strict-align:                      M680x0 Options.     (line  152)
30979* mno-string:                            RS/6000 and PowerPC Options.
30980                                                             (line  328)
30981* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
30982                                                             (line  233)
30983* mno-svr3-shlib:                        i386 and x86-64 Options.
30984                                                             (line  287)
30985* mno-swdiv:                             RS/6000 and PowerPC Options.
30986                                                             (line  154)
30987* mno-sym32:                             MIPS Options.       (line  209)
30988* mno-tablejump:                         AVR Options.        (line   47)
30989* mno-target-align:                      Xtensa Options.     (line   47)
30990* mno-text-section-literals:             Xtensa Options.     (line   35)
30991* mno-toc:                               RS/6000 and PowerPC Options.
30992                                                             (line  402)
30993* mno-toplevel-symbols:                  MMIX Options.       (line   40)
30994* mno-tpf-trace:                         S/390 and zSeries Options.
30995                                                             (line  122)
30996* mno-unaligned-doubles:                 SPARC Options.      (line   59)
30997* mno-uninit-const-in-rodata:            MIPS Options.       (line  233)
30998* mno-update:                            RS/6000 and PowerPC Options.
30999                                                             (line  339)
31000* mno-v8plus:                            SPARC Options.      (line  168)
31001* mno-vis:                               SPARC Options.      (line  175)
31002* mno-vliw-branch:                       FRV Options.        (line  170)
31003* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
31004* mno-vrsave:                            RS/6000 and PowerPC Options.
31005                                                             (line  173)
31006* mno-wide-bitfields:                    MCore Options.      (line   23)
31007* mno-xgot:                              MIPS Options.       (line  127)
31008* mno-xl-compat:                         RS/6000 and PowerPC Options.
31009                                                             (line  268)
31010* mno-zero-extend:                       MMIX Options.       (line   27)
31011* mnobitfield:                           M680x0 Options.     (line  100)
31012* mnomacsave:                            SH Options.         (line   92)
31013* mnominmax:                             M68hc1x Options.    (line   31)
31014* mnop-fun-dllimport:                    ARM Options.        (line  174)
31015* mold-mnemonics:                        RS/6000 and PowerPC Options.
31016                                                             (line   85)
31017* momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
31018                                                             (line  443)
31019* momit-leaf-frame-pointer:              Blackfin Options.   (line    7)
31020* mone-byte-bool:                        Darwin Options.     (line   83)
31021* moptimize-membar:                      FRV Options.        (line  201)
31022* MP:                                    Preprocessor Options.
31023                                                             (line  226)
31024* mpa-risc-1-0:                          HPPA Options.       (line   19)
31025* mpa-risc-1-1:                          HPPA Options.       (line   19)
31026* mpa-risc-2-0:                          HPPA Options.       (line   19)
31027* mpack:                                 FRV Options.        (line  119)
31028* mpacked-stack:                         S/390 and zSeries Options.
31029                                                             (line   46)
31030* mpadstruct:                            SH Options.         (line  106)
31031* mpaired-single:                        MIPS Options.       (line  183)
31032* mparallel-insns:                       TMS320C3x/C4x Options.
31033                                                             (line  115)
31034* mparallel-mpy:                         TMS320C3x/C4x Options.
31035                                                             (line  120)
31036* mparanoid:                             TMS320C3x/C4x Options.
31037                                                             (line   45)
31038* mpcrel:                                M680x0 Options.     (line  144)
31039* mpdebug:                               CRIS Options.       (line   40)
31040* mpe:                                   RS/6000 and PowerPC Options.
31041                                                             (line  288)
31042* mpentium:                              i386 and x86-64 Options.
31043                                                             (line  142)
31044* mpentiumpro:                           i386 and x86-64 Options.
31045                                                             (line  142)
31046* mpic-register:                         ARM Options.        (line  183)
31047* mpoke-function-name:                   ARM Options.        (line  197)
31048* mpopcntb:                              RS/6000 and PowerPC Options.
31049                                                             (line   25)
31050* mportable-runtime:                     HPPA Options.       (line   71)
31051* mpower:                                RS/6000 and PowerPC Options.
31052                                                             (line   25)
31053* mpower2:                               RS/6000 and PowerPC Options.
31054                                                             (line   25)
31055* mpowerpc:                              RS/6000 and PowerPC Options.
31056                                                             (line   25)
31057* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
31058                                                             (line   25)
31059* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
31060                                                             (line   25)
31061* mpowerpc64:                            RS/6000 and PowerPC Options.
31062                                                             (line   25)
31063* mprefergot:                            SH Options.         (line  113)
31064* mpreferred-stack-boundary:             i386 and x86-64 Options.
31065                                                             (line  351)
31066* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
31067                                                             (line  425)
31068* mprolog-function:                      V850 Options.       (line   23)
31069* mprologue-epilogue:                    CRIS Options.       (line   76)
31070* mprototype:                            RS/6000 and PowerPC Options.
31071                                                             (line  511)
31072* mpt-fixed:                             SH Options.         (line  194)
31073* mpush-args <1>:                        i386 and x86-64 Options.
31074                                                             (line  408)
31075* mpush-args:                            CRX Options.        (line   13)
31076* MQ:                                    Preprocessor Options.
31077                                                             (line  252)
31078* mregister-names:                       IA-64 Options.      (line   37)
31079* mregnames:                             RS/6000 and PowerPC Options.
31080                                                             (line  615)
31081* mregparm <1>:                          TMS320C3x/C4x Options.
31082                                                             (line  109)
31083* mregparm:                              i386 and x86-64 Options.
31084                                                             (line  316)
31085* mrelax <1>:                            SH Options.         (line   70)
31086* mrelax <2>:                            MN10300 Options.    (line   34)
31087* mrelax:                                H8/300 Options.     (line    9)
31088* mrelax-immediate:                      MCore Options.      (line   19)
31089* mrelocatable:                          RS/6000 and PowerPC Options.
31090                                                             (line  385)
31091* mrelocatable-lib:                      RS/6000 and PowerPC Options.
31092                                                             (line  393)
31093* mreturn-pointer-on-d0:                 MN10300 Options.    (line   24)
31094* mrodata:                               ARC Options.        (line   30)
31095* mrptb:                                 TMS320C3x/C4x Options.
31096                                                             (line   72)
31097* mrpts:                                 TMS320C3x/C4x Options.
31098                                                             (line   81)
31099* mrtd <1>:                              Function Attributes.
31100                                                             (line  100)
31101* mrtd <2>:                              M680x0 Options.     (line  109)
31102* mrtd:                                  i386 and x86-64 Options.
31103                                                             (line  292)
31104* ms:                                    H8/300 Options.     (line   17)
31105* ms2600:                                H8/300 Options.     (line   24)
31106* mscc:                                  FRV Options.        (line  140)
31107* msched-ar-data-spec:                   IA-64 Options.      (line  128)
31108* msched-ar-in-data-spec:                IA-64 Options.      (line  149)
31109* msched-br-data-spec:                   IA-64 Options.      (line  121)
31110* msched-br-in-data-spec:                IA-64 Options.      (line  142)
31111* msched-control-ldc:                    IA-64 Options.      (line  168)
31112* msched-control-spec:                   IA-64 Options.      (line  135)
31113* msched-costly-dep:                     RS/6000 and PowerPC Options.
31114                                                             (line  432)
31115* msched-count-spec-in-critical-path:    IA-64 Options.      (line  194)
31116* msched-in-control-spec:                IA-64 Options.      (line  156)
31117* msched-ldc:                            IA-64 Options.      (line  162)
31118* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  187)
31119* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  180)
31120* msched-spec-verbose:                   IA-64 Options.      (line  176)
31121* mschedule:                             HPPA Options.       (line   78)
31122* mscore5:                               Score Options.      (line   25)
31123* mscore5u:                              Score Options.      (line   28)
31124* mscore7:                               Score Options.      (line   31)
31125* mscore7d:                              Score Options.      (line   34)
31126* msda:                                  V850 Options.       (line   40)
31127* msdata <1>:                            RS/6000 and PowerPC Options.
31128                                                             (line  589)
31129* msdata:                                IA-64 Options.      (line   42)
31130* msdata-data:                           RS/6000 and PowerPC Options.
31131                                                             (line  594)
31132* msdata=default:                        RS/6000 and PowerPC Options.
31133                                                             (line  589)
31134* msdata=eabi:                           RS/6000 and PowerPC Options.
31135                                                             (line  569)
31136* msdata=none <1>:                       RS/6000 and PowerPC Options.
31137                                                             (line  602)
31138* msdata=none:                           M32R/D Options.     (line   40)
31139* msdata=sdata:                          M32R/D Options.     (line   49)
31140* msdata=sysv:                           RS/6000 and PowerPC Options.
31141                                                             (line  580)
31142* msdata=use:                            M32R/D Options.     (line   53)
31143* msecure-plt:                           RS/6000 and PowerPC Options.
31144                                                             (line  176)
31145* mshared-library-id:                    Blackfin Options.   (line   49)
31146* mshort <1>:                            M68hc1x Options.    (line   40)
31147* mshort:                                M680x0 Options.     (line   94)
31148* msim <1>:                              Xstormy16 Options.  (line    9)
31149* msim <2>:                              RS/6000 and PowerPC Options.
31150                                                             (line  521)
31151* msim <3>:                              MT Options.         (line   22)
31152* msim:                                  M32C Options.       (line   13)
31153* msingle-exit:                          MMIX Options.       (line   66)
31154* msingle-float:                         MIPS Options.       (line  169)
31155* msingle-pic-base:                      ARM Options.        (line  177)
31156* msio:                                  HPPA Options.       (line  107)
31157* msize:                                 AVR Options.        (line   32)
31158* mslow-bytes:                           MCore Options.      (line   35)
31159* msmall:                                TMS320C3x/C4x Options.
31160                                                             (line   18)
31161* msmall-data:                           DEC Alpha Options.  (line  195)
31162* msmall-exec:                           S/390 and zSeries Options.
31163                                                             (line   72)
31164* msmall-memory:                         TMS320C3x/C4x Options.
31165                                                             (line   18)
31166* msmall-text:                           DEC Alpha Options.  (line  213)
31167* msoft-float <1>:                       SPARC Options.      (line   25)
31168* msoft-float <2>:                       S/390 and zSeries Options.
31169                                                             (line   11)
31170* msoft-float <3>:                       RS/6000 and PowerPC Options.
31171                                                             (line  311)
31172* msoft-float <4>:                       PDP-11 Options.     (line   13)
31173* msoft-float <5>:                       MIPS Options.       (line  165)
31174* msoft-float <6>:                       M680x0 Options.     (line   84)
31175* msoft-float <7>:                       i386 and x86-64 Options.
31176                                                             (line  205)
31177* msoft-float <8>:                       HPPA Options.       (line   91)
31178* msoft-float <9>:                       FRV Options.        (line   22)
31179* msoft-float <10>:                      DEC Alpha Options.  (line   10)
31180* msoft-float:                           ARM Options.        (line   45)
31181* msoft-quad-float:                      SPARC Options.      (line   45)
31182* msoft-reg-count:                       M68hc1x Options.    (line   43)
31183* mspace <1>:                            V850 Options.       (line   30)
31184* mspace:                                SH Options.         (line  110)
31185* mspe:                                  RS/6000 and PowerPC Options.
31186                                                             (line  196)
31187* mspecld-anomaly:                       Blackfin Options.   (line   14)
31188* msplit:                                PDP-11 Options.     (line   68)
31189* msplit-addresses:                      MIPS Options.       (line  239)
31190* msse:                                  i386 and x86-64 Options.
31191                                                             (line  389)
31192* msseregparm:                           i386 and x86-64 Options.
31193                                                             (line  327)
31194* mstack-align:                          CRIS Options.       (line   60)
31195* mstack-bias:                           SPARC Options.      (line  220)
31196* mstack-guard:                          S/390 and zSeries Options.
31197                                                             (line  148)
31198* mstack-size:                           S/390 and zSeries Options.
31199                                                             (line  148)
31200* mstackrealign:                         i386 and x86-64 Options.
31201                                                             (line  337)
31202* mstrict-align <1>:                     RS/6000 and PowerPC Options.
31203                                                             (line  380)
31204* mstrict-align:                         M680x0 Options.     (line  152)
31205* mstring:                               RS/6000 and PowerPC Options.
31206                                                             (line  328)
31207* mstructure-size-boundary:              ARM Options.        (line  129)
31208* msvr3-shlib:                           i386 and x86-64 Options.
31209                                                             (line  287)
31210* msvr4-struct-return:                   RS/6000 and PowerPC Options.
31211                                                             (line  485)
31212* mswdiv:                                RS/6000 and PowerPC Options.
31213                                                             (line  154)
31214* msym32:                                MIPS Options.       (line  209)
31215* mt:                                    IA-64 Options.      (line  106)
31216* MT:                                    Preprocessor Options.
31217                                                             (line  238)
31218* mtarget-align:                         Xtensa Options.     (line   47)
31219* mtda:                                  V850 Options.       (line   34)
31220* mtext:                                 ARC Options.        (line   30)
31221* mtext-section-literals:                Xtensa Options.     (line   35)
31222* mthreads:                              i386 and x86-64 Options.
31223                                                             (line  423)
31224* mthumb:                                ARM Options.        (line  218)
31225* mthumb-interwork:                      ARM Options.        (line   25)
31226* mti:                                   TMS320C3x/C4x Options.
31227                                                             (line  102)
31228* mtiny-stack:                           AVR Options.        (line   50)
31229* mtls-direct-seg-refs:                  i386 and x86-64 Options.
31230                                                             (line  451)
31231* mtls-size:                             IA-64 Options.      (line   97)
31232* mtoc:                                  RS/6000 and PowerPC Options.
31233                                                             (line  402)
31234* mtomcat-stats:                         FRV Options.        (line  209)
31235* mtoplevel-symbols:                     MMIX Options.       (line   40)
31236* mtp:                                   ARM Options.        (line  246)
31237* mtpcs-frame:                           ARM Options.        (line  222)
31238* mtpcs-leaf-frame:                      ARM Options.        (line  228)
31239* mtpf-trace:                            S/390 and zSeries Options.
31240                                                             (line  122)
31241* mtrap-precision:                       DEC Alpha Options.  (line  109)
31242* mtune <1>:                             SPARC Options.      (line  156)
31243* mtune <2>:                             S/390 and zSeries Options.
31244                                                             (line  115)
31245* mtune <3>:                             RS/6000 and PowerPC Options.
31246                                                             (line  144)
31247* mtune <4>:                             MIPS Options.       (line   44)
31248* mtune <5>:                             IA-64 Options.      (line  101)
31249* mtune <6>:                             i386 and x86-64 Options.
31250                                                             (line   10)
31251* mtune <7>:                             DEC Alpha Options.  (line  262)
31252* mtune <8>:                             CRIS Options.       (line   16)
31253* mtune:                                 ARM Options.        (line   99)
31254* muclibc:                               GNU/Linux Options.  (line   13)
31255* muls:                                  Score Options.      (line   18)
31256* multcost=NUMBER:                       SH Options.         (line  124)
31257* multi_module:                          Darwin Options.     (line  190)
31258* multilib-library-pic:                  FRV Options.        (line   89)
31259* multiply_defined:                      Darwin Options.     (line  190)
31260* multiply_defined_unused:               Darwin Options.     (line  190)
31261* munaligned-doubles:                    SPARC Options.      (line   59)
31262* muninit-const-in-rodata:               MIPS Options.       (line  233)
31263* munix:                                 VAX Options.        (line    9)
31264* munix-asm:                             PDP-11 Options.     (line   74)
31265* mupdate:                               RS/6000 and PowerPC Options.
31266                                                             (line  339)
31267* musermode:                             SH Options.         (line  118)
31268* mv850:                                 V850 Options.       (line   49)
31269* mv850e:                                V850 Options.       (line   69)
31270* mv850e1:                               V850 Options.       (line   64)
31271* mv8plus:                               SPARC Options.      (line  168)
31272* mvis:                                  SPARC Options.      (line  175)
31273* mvliw-branch:                          FRV Options.        (line  164)
31274* mvms-return-codes:                     DEC Alpha/VMS Options.
31275                                                             (line    9)
31276* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
31277* mvr4130-align:                         MIPS Options.       (line  388)
31278* mvrsave:                               RS/6000 and PowerPC Options.
31279                                                             (line  173)
31280* mvxworks:                              RS/6000 and PowerPC Options.
31281                                                             (line  542)
31282* mwarn-dynamicstack:                    S/390 and zSeries Options.
31283                                                             (line  141)
31284* mwarn-framesize:                       S/390 and zSeries Options.
31285                                                             (line  133)
31286* mwide-bitfields:                       MCore Options.      (line   23)
31287* mwindiss:                              RS/6000 and PowerPC Options.
31288                                                             (line  546)
31289* mwords-little-endian:                  ARM Options.        (line   76)
31290* mxgot:                                 MIPS Options.       (line  127)
31291* mxl-compat:                            RS/6000 and PowerPC Options.
31292                                                             (line  268)
31293* myellowknife:                          RS/6000 and PowerPC Options.
31294                                                             (line  537)
31295* mzarch:                                S/390 and zSeries Options.
31296                                                             (line   87)
31297* mzda:                                  V850 Options.       (line   45)
31298* mzero-extend:                          MMIX Options.       (line   27)
31299* no-integrated-cpp:                     C Dialect Options.  (line  217)
31300* no-red-zone:                           i386 and x86-64 Options.
31301                                                             (line  472)
31302* no_dead_strip_inits_and_terms:         Darwin Options.     (line  190)
31303* noall_load:                            Darwin Options.     (line  190)
31304* nocpp:                                 MIPS Options.       (line  304)
31305* nodefaultlibs:                         Link Options.       (line   62)
31306* nofixprebinding:                       Darwin Options.     (line  190)
31307* nolibdld:                              HPPA Options.       (line  190)
31308* nomultidefs:                           Darwin Options.     (line  190)
31309* noprebind:                             Darwin Options.     (line  190)
31310* noseglinkedit:                         Darwin Options.     (line  190)
31311* nostartfiles:                          Link Options.       (line   57)
31312* nostdinc:                              Preprocessor Options.
31313                                                             (line  373)
31314* nostdinc++ <1>:                        Preprocessor Options.
31315                                                             (line  378)
31316* nostdinc++:                            C++ Dialect Options.
31317                                                             (line  225)
31318* nostdlib:                              Link Options.       (line   71)
31319* o:                                     Preprocessor Options.
31320                                                             (line   72)
31321* O:                                     Optimize Options.   (line   32)
31322* o:                                     Overall Options.    (line  175)
31323* O0:                                    Optimize Options.   (line  104)
31324* O1:                                    Optimize Options.   (line   32)
31325* O2:                                    Optimize Options.   (line   63)
31326* O3:                                    Optimize Options.   (line   99)
31327* Os:                                    Optimize Options.   (line  107)
31328* P:                                     Preprocessor Options.
31329                                                             (line  551)
31330* p:                                     Debugging Options.  (line  130)
31331* pagezero_size:                         Darwin Options.     (line  190)
31332* param:                                 Optimize Options.   (line 1358)
31333* pass-exit-codes:                       Overall Options.    (line  133)
31334* pedantic <1>:                          Warnings and Errors.
31335                                                             (line   25)
31336* pedantic <2>:                          Alternate Keywords. (line   29)
31337* pedantic <3>:                          C Extensions.       (line    6)
31338* pedantic <4>:                          Preprocessor Options.
31339                                                             (line  163)
31340* pedantic <5>:                          Warning Options.    (line   27)
31341* pedantic:                              Standards.          (line   13)
31342* pedantic-errors <1>:                   Warnings and Errors.
31343                                                             (line   25)
31344* pedantic-errors <2>:                   Non-bugs.           (line  216)
31345* pedantic-errors <3>:                   Preprocessor Options.
31346                                                             (line  168)
31347* pedantic-errors <4>:                   Warning Options.    (line   69)
31348* pedantic-errors:                       Standards.          (line   13)
31349* pg:                                    Debugging Options.  (line  136)
31350* pie:                                   Link Options.       (line   92)
31351* pipe:                                  Overall Options.    (line  197)
31352* prebind:                               Darwin Options.     (line  190)
31353* prebind_all_twolevel_modules:          Darwin Options.     (line  190)
31354* preprocessor:                          Preprocessor Options.
31355                                                             (line   24)
31356* print-file-name:                       Debugging Options.  (line  728)
31357* print-libgcc-file-name:                Debugging Options.  (line  749)
31358* print-multi-directory:                 Debugging Options.  (line  734)
31359* print-multi-lib:                       Debugging Options.  (line  739)
31360* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
31361                                                             (line  244)
31362* print-prog-name:                       Debugging Options.  (line  746)
31363* print-search-dirs:                     Debugging Options.  (line  757)
31364* private_bundle:                        Darwin Options.     (line  190)
31365* pthread <1>:                           SPARC Options.      (line  240)
31366* pthread <2>:                           RS/6000 and PowerPC Options.
31367                                                             (line  653)
31368* pthread:                               IA-64 Options.      (line  106)
31369* pthreads:                              SPARC Options.      (line  234)
31370* Q:                                     Debugging Options.  (line  142)
31371* Qn:                                    System V Options.   (line   18)
31372* Qy:                                    System V Options.   (line   14)
31373* rdynamic:                              Link Options.       (line   98)
31374* read_only_relocs:                      Darwin Options.     (line  190)
31375* remap:                                 Preprocessor Options.
31376                                                             (line  599)
31377* s:                                     Link Options.       (line  105)
31378* S <1>:                                 Link Options.       (line   20)
31379* S:                                     Overall Options.    (line  158)
31380* save-temps:                            Debugging Options.  (line  690)
31381* sectalign:                             Darwin Options.     (line  190)
31382* sectcreate:                            Darwin Options.     (line  190)
31383* sectobjectsymbols:                     Darwin Options.     (line  190)
31384* sectorder:                             Darwin Options.     (line  190)
31385* seg1addr:                              Darwin Options.     (line  190)
31386* seg_addr_table:                        Darwin Options.     (line  190)
31387* seg_addr_table_filename:               Darwin Options.     (line  190)
31388* segaddr:                               Darwin Options.     (line  190)
31389* seglinkedit:                           Darwin Options.     (line  190)
31390* segprot:                               Darwin Options.     (line  190)
31391* segs_read_only_addr:                   Darwin Options.     (line  190)
31392* segs_read_write_addr:                  Darwin Options.     (line  190)
31393* shared:                                Link Options.       (line  114)
31394* shared-libgcc:                         Link Options.       (line  122)
31395* sim:                                   CRIS Options.       (line  108)
31396* sim2:                                  CRIS Options.       (line  114)
31397* single_module:                         Darwin Options.     (line  190)
31398* specs:                                 Directory Options.  (line   84)
31399* static <1>:                            HPPA Options.       (line  194)
31400* static <2>:                            Darwin Options.     (line  190)
31401* static:                                Link Options.       (line  109)
31402* static-libgcc:                         Link Options.       (line  122)
31403* std <1>:                               Non-bugs.           (line  107)
31404* std <2>:                               Other Builtins.     (line   22)
31405* std <3>:                               C Dialect Options.  (line   47)
31406* std:                                   Standards.          (line   13)
31407* std=:                                  Preprocessor Options.
31408                                                             (line  324)
31409* sub_library:                           Darwin Options.     (line  190)
31410* sub_umbrella:                          Darwin Options.     (line  190)
31411* symbolic:                              Link Options.       (line  157)
31412* sysroot:                               Directory Options.  (line   92)
31413* target-help <1>:                       Preprocessor Options.
31414                                                             (line  604)
31415* target-help:                           Overall Options.    (line  228)
31416* threads <1>:                           SPARC Options.      (line  228)
31417* threads:                               HPPA Options.       (line  207)
31418* time:                                  Debugging Options.  (line  704)
31419* tls:                                   FRV Options.        (line   75)
31420* TLS:                                   FRV Options.        (line   72)
31421* traditional <1>:                       Incompatibilities.  (line    6)
31422* traditional:                           C Dialect Options.  (line  229)
31423* traditional-cpp <1>:                   Preprocessor Options.
31424                                                             (line  582)
31425* traditional-cpp:                       C Dialect Options.  (line  229)
31426* trigraphs <1>:                         Preprocessor Options.
31427                                                             (line  586)
31428* trigraphs:                             C Dialect Options.  (line  213)
31429* twolevel_namespace:                    Darwin Options.     (line  190)
31430* u:                                     Link Options.       (line  179)
31431* U:                                     Preprocessor Options.
31432                                                             (line   56)
31433* umbrella:                              Darwin Options.     (line  190)
31434* undef:                                 Preprocessor Options.
31435                                                             (line   60)
31436* undefined:                             Darwin Options.     (line  190)
31437* unexported_symbols_list:               Darwin Options.     (line  190)
31438* V:                                     Target Options.     (line   24)
31439* v <1>:                                 Preprocessor Options.
31440                                                             (line  608)
31441* v:                                     Overall Options.    (line  186)
31442* version <1>:                           Preprocessor Options.
31443                                                             (line  621)
31444* version:                               Overall Options.    (line  232)
31445* W:                                     Incompatibilities.  (line   64)
31446* w:                                     Preprocessor Options.
31447                                                             (line  159)
31448* W:                                     Warning Options.    (line  569)
31449* w:                                     Warning Options.    (line   73)
31450* Wa:                                    Assembler Options.  (line    9)
31451* Wabi:                                  C++ Dialect Options.
31452                                                             (line  239)
31453* Waddress:                              Warning Options.    (line  837)
31454* Waggregate-return:                     Warning Options.    (line  850)
31455* Wall <1>:                              Standard Libraries. (line    6)
31456* Wall <2>:                              Preprocessor Options.
31457                                                             (line   78)
31458* Wall:                                  Warning Options.    (line  553)
31459* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
31460                                                             (line  198)
31461* Wattributes:                           Warning Options.    (line  855)
31462* Wbad-function-cast:                    Warning Options.    (line  785)
31463* Wcast-align:                           Warning Options.    (line  799)
31464* Wcast-qual:                            Warning Options.    (line  794)
31465* Wchar-subscripts:                      Warning Options.    (line   79)
31466* Wcomment <1>:                          Preprocessor Options.
31467                                                             (line   86)
31468* Wcomment:                              Warning Options.    (line   84)
31469* Wcomments:                             Preprocessor Options.
31470                                                             (line   86)
31471* Wconversion <1>:                       Protoize Caveats.   (line   31)
31472* Wconversion:                           Warning Options.    (line  817)
31473* Wctor-dtor-privacy:                    C++ Dialect Options.
31474                                                             (line  317)
31475* Wdeclaration-after-statement:          Warning Options.    (line  751)
31476* Wdisabled-optimization:                Warning Options.    (line 1104)
31477* Wdiv-by-zero:                          Warning Options.    (line  643)
31478* weak_reference_mismatches:             Darwin Options.     (line  190)
31479* Weffc++:                               C++ Dialect Options.
31480                                                             (line  343)
31481* Wendif-labels <1>:                     Preprocessor Options.
31482                                                             (line  136)
31483* Wendif-labels:                         Warning Options.    (line  761)
31484* Werror <1>:                            Preprocessor Options.
31485                                                             (line  149)
31486* Werror:                                Warning Options.    (line 1119)
31487* Werror-implicit-function-declaration:  Warning Options.    (line  198)
31488* Werror=:                               Warning Options.    (line 1122)
31489* Wextra:                                Warning Options.    (line  569)
31490* Wfatal-errors:                         Warning Options.    (line   89)
31491* Wfloat-equal:                          Warning Options.    (line  659)
31492* Wformat <1>:                           Function Attributes.
31493                                                             (line  281)
31494* Wformat:                               Warning Options.    (line   94)
31495* Wformat-nonliteral <1>:                Function Attributes.
31496                                                             (line  334)
31497* Wformat-nonliteral:                    Warning Options.    (line  151)
31498* Wformat-security:                      Warning Options.    (line  156)
31499* Wformat-y2k:                           Warning Options.    (line  129)
31500* Wformat=2:                             Warning Options.    (line  167)
31501* whatsloaded:                           Darwin Options.     (line  190)
31502* whyload:                               Darwin Options.     (line  190)
31503* Wimplicit:                             Warning Options.    (line  204)
31504* Wimplicit-function-declaration:        Warning Options.    (line  198)
31505* Wimplicit-int:                         Warning Options.    (line  193)
31506* Wimport:                               Preprocessor Options.
31507                                                             (line  109)
31508* Winit-self:                            Warning Options.    (line  179)
31509* Winline <1>:                           Inline.             (line   42)
31510* Winline:                               Warning Options.    (line 1048)
31511* Winvalid-pch:                          Warning Options.    (line 1083)
31512* Wl:                                    Link Options.       (line  175)
31513* Wlarger-than:                          Warning Options.    (line  770)
31514* Wlong-long:                            Warning Options.    (line 1087)
31515* Wmain:                                 Warning Options.    (line  208)
31516* Wmissing-braces:                       Warning Options.    (line  214)
31517* Wmissing-declarations:                 Warning Options.    (line  877)
31518* Wmissing-field-initializers:           Warning Options.    (line  883)
31519* Wmissing-format-attribute:             Warning Options.    (line  909)
31520* Wmissing-include-dirs:                 Warning Options.    (line  224)
31521* Wmissing-noreturn:                     Warning Options.    (line  901)
31522* Wmissing-prototypes:                   Warning Options.    (line  871)
31523* Wmultichar:                            Warning Options.    (line  928)
31524* Wnested-externs:                       Warning Options.    (line 1023)
31525* Wno-address:                           Warning Options.    (line  837)
31526* Wno-attributes:                        Warning Options.    (line  855)
31527* Wno-deprecated:                        C++ Dialect Options.
31528                                                             (line  373)
31529* Wno-deprecated-declarations:           Warning Options.    (line  977)
31530* Wno-div-by-zero:                       Warning Options.    (line  643)
31531* Wno-endif-labels:                      Warning Options.    (line  761)
31532* Wno-format-extra-args:                 Warning Options.    (line  133)
31533* Wno-format-zero-length:                Warning Options.    (line  147)
31534* Wno-import:                            Warning Options.    (line   76)
31535* Wno-int-to-pointer-cast:               Warning Options.    (line 1075)
31536* Wno-invalid-offsetof:                  Warning Options.    (line 1061)
31537* Wno-long-long:                         Warning Options.    (line 1087)
31538* Wno-multichar:                         Warning Options.    (line  928)
31539* Wno-non-template-friend:               C++ Dialect Options.
31540                                                             (line  384)
31541* Wno-overflow:                          Warning Options.    (line  983)
31542* Wno-pmf-conversions <1>:               Bound member functions.
31543                                                             (line   35)
31544* Wno-pmf-conversions:                   C++ Dialect Options.
31545                                                             (line  425)
31546* Wno-pointer-sign:                      Warning Options.    (line 1113)
31547* Wno-pointer-to-int-cast:               Warning Options.    (line 1079)
31548* Wno-pragmas:                           Warning Options.    (line  481)
31549* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
31550                                                             (line  202)
31551* Wno-variadic-macros:                   Warning Options.    (line 1093)
31552* Wno-volatile-register-var:             Warning Options.    (line 1099)
31553* Wnon-virtual-dtor:                     C++ Dialect Options.
31554                                                             (line  322)
31555* Wnonnull:                              Warning Options.    (line  172)
31556* Wnormalized:                           Warning Options.    (line  934)
31557* Wold-style-cast:                       C++ Dialect Options.
31558                                                             (line  400)
31559* Wold-style-definition:                 Warning Options.    (line  867)
31560* Woverlength-strings:                   Warning Options.    (line 1141)
31561* Woverloaded-virtual:                   C++ Dialect Options.
31562                                                             (line  406)
31563* Woverride-init:                        Warning Options.    (line  986)
31564* Wp:                                    Preprocessor Options.
31565                                                             (line   13)
31566* Wpacked:                               Warning Options.    (line  994)
31567* Wpadded:                               Warning Options.    (line 1011)
31568* Wparentheses:                          Warning Options.    (line  227)
31569* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
31570* Wpointer-arith:                        Warning Options.    (line  779)
31571* Wpointer-sign:                         Warning Options.    (line 1113)
31572* Wpragmas:                              Warning Options.    (line  481)
31573* Wredundant-decls:                      Warning Options.    (line 1018)
31574* Wreorder:                              C++ Dialect Options.
31575                                                             (line  327)
31576* Wreturn-type:                          Warning Options.    (line  319)
31577* Wselector:                             Objective-C and Objective-C++ Dialect Options.
31578                                                             (line  212)
31579* Wsequence-point:                       Warning Options.    (line  273)
31580* Wshadow:                               Warning Options.    (line  765)
31581* Wsign-compare:                         Warning Options.    (line  830)
31582* Wsign-promo:                           C++ Dialect Options.
31583                                                             (line  429)
31584* Wstack-protector:                      Warning Options.    (line 1136)
31585* Wstrict-aliasing:                      Warning Options.    (line  486)
31586* Wstrict-aliasing=2:                    Warning Options.    (line  493)
31587* Wstrict-null-sentinel:                 C++ Dialect Options.
31588                                                             (line  377)
31589* Wstrict-overflow:                      Warning Options.    (line  502)
31590* Wstrict-prototypes:                    Warning Options.    (line  861)
31591* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
31592                                                             (line  224)
31593* Wswitch:                               Warning Options.    (line  338)
31594* Wswitch-enum:                          Warning Options.    (line  349)
31595* Wswitch-switch:                        Warning Options.    (line  346)
31596* Wsystem-headers <1>:                   Preprocessor Options.
31597                                                             (line  153)
31598* Wsystem-headers:                       Warning Options.    (line  648)
31599* Wtraditional <1>:                      Preprocessor Options.
31600                                                             (line  103)
31601* Wtraditional:                          Warning Options.    (line  674)
31602* Wtrigraphs <1>:                        Preprocessor Options.
31603                                                             (line   91)
31604* Wtrigraphs:                            Warning Options.    (line  355)
31605* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
31606                                                             (line  232)
31607* Wundef <1>:                            Preprocessor Options.
31608                                                             (line  112)
31609* Wundef:                                Warning Options.    (line  758)
31610* Wuninitialized:                        Warning Options.    (line  400)
31611* Wunknown-pragmas:                      Warning Options.    (line  474)
31612* Wunreachable-code:                     Warning Options.    (line 1026)
31613* Wunsafe-loop-optimizations:            Warning Options.    (line  773)
31614* Wunused:                               Warning Options.    (line  393)
31615* Wunused-function:                      Warning Options.    (line  360)
31616* Wunused-label:                         Warning Options.    (line  365)
31617* Wunused-macros:                        Preprocessor Options.
31618                                                             (line  117)
31619* Wunused-parameter:                     Warning Options.    (line  372)
31620* Wunused-value:                         Warning Options.    (line  387)
31621* Wunused-variable:                      Warning Options.    (line  379)
31622* Wvariadic-macros:                      Warning Options.    (line 1093)
31623* Wvolatile-register-var:                Warning Options.    (line 1099)
31624* Wwrite-strings:                        Warning Options.    (line  805)
31625* x <1>:                                 Preprocessor Options.
31626                                                             (line  308)
31627* x:                                     Overall Options.    (line  109)
31628* Xassembler:                            Assembler Options.  (line   13)
31629* Xlinker:                               Link Options.       (line  163)
31630* Ym:                                    System V Options.   (line   26)
31631* YP:                                    System V Options.   (line   22)
31632
31633
31634File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
31635
31636Keyword Index
31637*************
31638
31639�[index�]
31640* Menu:
31641
31642* ! in constraint:                       Multi-Alternative.  (line   33)
31643* # in constraint:                       Modifiers.          (line   57)
31644* #pragma:                               Pragmas.            (line    6)
31645* #pragma implementation:                C++ Interface.      (line   39)
31646* #pragma implementation, implied:       C++ Interface.      (line   46)
31647* #pragma interface:                     C++ Interface.      (line   20)
31648* #pragma, reason for not using:         Function Attributes.
31649                                                             (line  916)
31650* $:                                     Dollar Signs.       (line    6)
31651* % in constraint:                       Modifiers.          (line   45)
31652* %include:                              Spec Files.         (line   27)
31653* %include_noerr:                        Spec Files.         (line   31)
31654* %rename:                               Spec Files.         (line   35)
31655* & in constraint:                       Modifiers.          (line   25)
31656* ':                                     Incompatibilities.  (line  116)
31657* * in constraint:                       Modifiers.          (line   62)
31658* + in constraint:                       Modifiers.          (line   12)
31659* -lgcc, use with -nodefaultlibs:        Link Options.       (line   79)
31660* -lgcc, use with -nostdlib:             Link Options.       (line   79)
31661* -nodefaultlibs and unresolved references: Link Options.    (line   79)
31662* -nostdlib and unresolved references:   Link Options.       (line   79)
31663* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
31664                                                             (line  607)
31665* //:                                    C++ Comments.       (line    6)
31666* 0 in constraint:                       Simple Constraints. (line  115)
31667* < in constraint:                       Simple Constraints. (line   46)
31668* = in constraint:                       Modifiers.          (line    8)
31669* > in constraint:                       Simple Constraints. (line   50)
31670* ? in constraint:                       Multi-Alternative.  (line   27)
31671* ?: extensions:                         Conditionals.       (line    6)
31672* ?: side effect:                        Conditionals.       (line   20)
31673* _ in variables in macros:              Typeof.             (line   42)
31674* __builtin___fprintf_chk:               Object Size Checking.
31675                                                             (line    6)
31676* __builtin___memcpy_chk:                Object Size Checking.
31677                                                             (line    6)
31678* __builtin___memmove_chk:               Object Size Checking.
31679                                                             (line    6)
31680* __builtin___mempcpy_chk:               Object Size Checking.
31681                                                             (line    6)
31682* __builtin___memset_chk:                Object Size Checking.
31683                                                             (line    6)
31684* __builtin___printf_chk:                Object Size Checking.
31685                                                             (line    6)
31686* __builtin___snprintf_chk:              Object Size Checking.
31687                                                             (line    6)
31688* __builtin___sprintf_chk:               Object Size Checking.
31689                                                             (line    6)
31690* __builtin___stpcpy_chk:                Object Size Checking.
31691                                                             (line    6)
31692* __builtin___strcat_chk:                Object Size Checking.
31693                                                             (line    6)
31694* __builtin___strcpy_chk:                Object Size Checking.
31695                                                             (line    6)
31696* __builtin___strncat_chk:               Object Size Checking.
31697                                                             (line    6)
31698* __builtin___strncpy_chk:               Object Size Checking.
31699                                                             (line    6)
31700* __builtin___vfprintf_chk:              Object Size Checking.
31701                                                             (line    6)
31702* __builtin___vprintf_chk:               Object Size Checking.
31703                                                             (line    6)
31704* __builtin___vsnprintf_chk:             Object Size Checking.
31705                                                             (line    6)
31706* __builtin___vsprintf_chk:              Object Size Checking.
31707                                                             (line    6)
31708* __builtin_apply:                       Constructing Calls. (line   31)
31709* __builtin_apply_args:                  Constructing Calls. (line   20)
31710* __builtin_choose_expr:                 Other Builtins.     (line  150)
31711* __builtin_clz:                         Other Builtins.     (line  383)
31712* __builtin_clzl:                        Other Builtins.     (line  401)
31713* __builtin_clzll:                       Other Builtins.     (line  421)
31714* __builtin_constant_p:                  Other Builtins.     (line  190)
31715* __builtin_ctz:                         Other Builtins.     (line  387)
31716* __builtin_ctzl:                        Other Builtins.     (line  405)
31717* __builtin_ctzll:                       Other Builtins.     (line  425)
31718* __builtin_expect:                      Other Builtins.     (line  236)
31719* __builtin_ffs:                         Other Builtins.     (line  379)
31720* __builtin_ffsl:                        Other Builtins.     (line  397)
31721* __builtin_ffsll:                       Other Builtins.     (line  417)
31722* __builtin_frame_address:               Return Address.     (line   34)
31723* __builtin_huge_val:                    Other Builtins.     (line  300)
31724* __builtin_huge_valf:                   Other Builtins.     (line  305)
31725* __builtin_huge_vall:                   Other Builtins.     (line  308)
31726* __builtin_inf:                         Other Builtins.     (line  312)
31727* __builtin_infd128:                     Other Builtins.     (line  322)
31728* __builtin_infd32:                      Other Builtins.     (line  316)
31729* __builtin_infd64:                      Other Builtins.     (line  319)
31730* __builtin_inff:                        Other Builtins.     (line  326)
31731* __builtin_infl:                        Other Builtins.     (line  331)
31732* __builtin_isgreater:                   Other Builtins.     (line    6)
31733* __builtin_isgreaterequal:              Other Builtins.     (line    6)
31734* __builtin_isless:                      Other Builtins.     (line    6)
31735* __builtin_islessequal:                 Other Builtins.     (line    6)
31736* __builtin_islessgreater:               Other Builtins.     (line    6)
31737* __builtin_isunordered:                 Other Builtins.     (line    6)
31738* __builtin_nan:                         Other Builtins.     (line  335)
31739* __builtin_nand128:                     Other Builtins.     (line  357)
31740* __builtin_nand32:                      Other Builtins.     (line  351)
31741* __builtin_nand64:                      Other Builtins.     (line  354)
31742* __builtin_nanf:                        Other Builtins.     (line  361)
31743* __builtin_nanl:                        Other Builtins.     (line  364)
31744* __builtin_nans:                        Other Builtins.     (line  368)
31745* __builtin_nansf:                       Other Builtins.     (line  372)
31746* __builtin_nansl:                       Other Builtins.     (line  375)
31747* __builtin_object_size:                 Object Size Checking.
31748                                                             (line    6)
31749* __builtin_offsetof:                    Offsetof.           (line    6)
31750* __builtin_parity:                      Other Builtins.     (line  394)
31751* __builtin_parityl:                     Other Builtins.     (line  413)
31752* __builtin_parityll:                    Other Builtins.     (line  433)
31753* __builtin_popcount:                    Other Builtins.     (line  391)
31754* __builtin_popcountl:                   Other Builtins.     (line  409)
31755* __builtin_popcountll:                  Other Builtins.     (line  429)
31756* __builtin_powi:                        Other Builtins.     (line    6)
31757* __builtin_powif:                       Other Builtins.     (line    6)
31758* __builtin_powil:                       Other Builtins.     (line    6)
31759* __builtin_prefetch:                    Other Builtins.     (line  261)
31760* __builtin_return:                      Constructing Calls. (line   48)
31761* __builtin_return_address:              Return Address.     (line   11)
31762* __builtin_types_compatible_p:          Other Builtins.     (line  104)
31763* __complex__ keyword:                   Complex.            (line    6)
31764* __declspec(dllexport):                 Function Attributes.
31765                                                             (line  161)
31766* __declspec(dllimport):                 Function Attributes.
31767                                                             (line  193)
31768* __extension__:                         Alternate Keywords. (line   29)
31769* __func__ identifier:                   Function Names.     (line    6)
31770* __FUNCTION__ identifier:               Function Names.     (line    6)
31771* __imag__ keyword:                      Complex.            (line   27)
31772* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
31773* __real__ keyword:                      Complex.            (line   27)
31774* __STDC_HOSTED__:                       Standards.          (line    6)
31775* __sync_add_and_fetch:                  Atomic Builtins.    (line   57)
31776* __sync_and_and_fetch:                  Atomic Builtins.    (line   57)
31777* __sync_bool_compare_and_swap:          Atomic Builtins.    (line   65)
31778* __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
31779* __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
31780* __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
31781* __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
31782* __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
31783* __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
31784* __sync_lock_release:                   Atomic Builtins.    (line   95)
31785* __sync_lock_test_and_set:              Atomic Builtins.    (line   77)
31786* __sync_nand_and_fetch:                 Atomic Builtins.    (line   57)
31787* __sync_or_and_fetch:                   Atomic Builtins.    (line   57)
31788* __sync_sub_and_fetch:                  Atomic Builtins.    (line   57)
31789* __sync_synchronize:                    Atomic Builtins.    (line   74)
31790* __sync_val_compare_and_swap:           Atomic Builtins.    (line   65)
31791* __sync_xor_and_fetch:                  Atomic Builtins.    (line   57)
31792* __thread:                              Thread-Local.       (line    6)
31793* _Complex keyword:                      Complex.            (line    6)
31794* _Decimal128 data type:                 Decimal Float.      (line    6)
31795* _Decimal32 data type:                  Decimal Float.      (line    6)
31796* _Decimal64 data type:                  Decimal Float.      (line    6)
31797* _exit:                                 Other Builtins.     (line    6)
31798* _Exit:                                 Other Builtins.     (line    6)
31799* ABI:                                   Compatibility.      (line    6)
31800* abort:                                 Other Builtins.     (line    6)
31801* abs:                                   Other Builtins.     (line    6)
31802* accessing volatiles:                   Volatiles.          (line    6)
31803* acos:                                  Other Builtins.     (line    6)
31804* acosf:                                 Other Builtins.     (line    6)
31805* acosh:                                 Other Builtins.     (line    6)
31806* acoshf:                                Other Builtins.     (line    6)
31807* acoshl:                                Other Builtins.     (line    6)
31808* acosl:                                 Other Builtins.     (line    6)
31809* Ada:                                   G++ and GCC.        (line    6)
31810* address constraints:                   Simple Constraints. (line  142)
31811* address of a label:                    Labels as Values.   (line    6)
31812* address_operand:                       Simple Constraints. (line  146)
31813* alias attribute:                       Function Attributes.
31814                                                             (line   33)
31815* aliasing of parameters:                Code Gen Options.   (line  332)
31816* aligned attribute <1>:                 Type Attributes.    (line   30)
31817* aligned attribute:                     Variable Attributes.
31818                                                             (line   23)
31819* alignment:                             Alignment.          (line    6)
31820* alloca:                                Other Builtins.     (line    6)
31821* alloca vs variable-length arrays:      Variable Length.    (line   27)
31822* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
31823                                                             (line  497)
31824* alternate keywords:                    Alternate Keywords. (line    6)
31825* always_inline function attribute:      Function Attributes.
31826                                                             (line   46)
31827* AMD x86-64 Options:                    i386 and x86-64 Options.
31828                                                             (line    6)
31829* AMD1:                                  Standards.          (line    6)
31830* ANSI C:                                Standards.          (line    6)
31831* ANSI C standard:                       Standards.          (line    6)
31832* ANSI C89:                              Standards.          (line    6)
31833* ANSI support:                          C Dialect Options.  (line   10)
31834* ANSI X3.159-1989:                      Standards.          (line    6)
31835* apostrophes:                           Incompatibilities.  (line  116)
31836* application binary interface:          Compatibility.      (line    6)
31837* ARC Options:                           ARC Options.        (line    6)
31838* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
31839                                                             (line    6)
31840* ARM options:                           ARM Options.        (line    6)
31841* arrays of length zero:                 Zero Length.        (line    6)
31842* arrays of variable length:             Variable Length.    (line    6)
31843* arrays, non-lvalue:                    Subscripting.       (line    6)
31844* asin:                                  Other Builtins.     (line    6)
31845* asinf:                                 Other Builtins.     (line    6)
31846* asinh:                                 Other Builtins.     (line    6)
31847* asinhf:                                Other Builtins.     (line    6)
31848* asinhl:                                Other Builtins.     (line    6)
31849* asinl:                                 Other Builtins.     (line    6)
31850* asm constraints:                       Constraints.        (line    6)
31851* asm expressions:                       Extended Asm.       (line    6)
31852* assembler instructions:                Extended Asm.       (line    6)
31853* assembler names for identifiers:       Asm Labels.         (line    6)
31854* assembly code, invalid:                Bug Criteria.       (line   12)
31855* atan:                                  Other Builtins.     (line    6)
31856* atan2:                                 Other Builtins.     (line    6)
31857* atan2f:                                Other Builtins.     (line    6)
31858* atan2l:                                Other Builtins.     (line    6)
31859* atanf:                                 Other Builtins.     (line    6)
31860* atanh:                                 Other Builtins.     (line    6)
31861* atanhf:                                Other Builtins.     (line    6)
31862* atanhl:                                Other Builtins.     (line    6)
31863* atanl:                                 Other Builtins.     (line    6)
31864* attribute of types:                    Type Attributes.    (line    6)
31865* attribute of variables:                Variable Attributes.
31866                                                             (line    6)
31867* attribute syntax:                      Attribute Syntax.   (line    6)
31868* autoincrement/decrement addressing:    Simple Constraints. (line   28)
31869* automatic inline for C++ member fns:   Inline.             (line   53)
31870* AVR Options:                           AVR Options.        (line    6)
31871* Backwards Compatibility:               Backwards Compatibility.
31872                                                             (line    6)
31873* base class members:                    Name lookup.        (line    6)
31874* bcmp:                                  Other Builtins.     (line    6)
31875* below100 attribute:                    Variable Attributes.
31876                                                             (line  449)
31877* binary compatibility:                  Compatibility.      (line    6)
31878* Blackfin Options:                      Blackfin Options.   (line    6)
31879* bound pointer to member function:      Bound member functions.
31880                                                             (line    6)
31881* bounds checking:                       Optimize Options.   (line  333)
31882* bug criteria:                          Bug Criteria.       (line    6)
31883* bugs:                                  Bugs.               (line    6)
31884* bugs, known:                           Trouble.            (line    6)
31885* built-in functions <1>:                Other Builtins.     (line    6)
31886* built-in functions:                    C Dialect Options.  (line  149)
31887* bzero:                                 Other Builtins.     (line    6)
31888* C compilation options:                 Invoking GCC.       (line   17)
31889* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
31890* C language extensions:                 C Extensions.       (line    6)
31891* C language, traditional:               C Dialect Options.  (line  227)
31892* C standard:                            Standards.          (line    6)
31893* C standards:                           Standards.          (line    6)
31894* c++:                                   Invoking G++.       (line   13)
31895* C++:                                   G++ and GCC.        (line   30)
31896* C++ comments:                          C++ Comments.       (line    6)
31897* C++ compilation options:               Invoking GCC.       (line   23)
31898* C++ interface and implementation headers: C++ Interface.   (line    6)
31899* C++ language extensions:               C++ Extensions.     (line    6)
31900* C++ member fns, automatically inline:  Inline.             (line   53)
31901* C++ misunderstandings:                 C++ Misunderstandings.
31902                                                             (line    6)
31903* C++ options, command line:             C++ Dialect Options.
31904                                                             (line    6)
31905* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
31906* C++ source file suffixes:              Invoking G++.       (line    6)
31907* C++ static data, declaring and defining: Static Definitions.
31908                                                             (line    6)
31909* C89:                                   Standards.          (line    6)
31910* C90:                                   Standards.          (line    6)
31911* C94:                                   Standards.          (line    6)
31912* C95:                                   Standards.          (line    6)
31913* C99:                                   Standards.          (line    6)
31914* C9X:                                   Standards.          (line    6)
31915* C_INCLUDE_PATH:                        Environment Variables.
31916                                                             (line  124)
31917* cabs:                                  Other Builtins.     (line    6)
31918* cabsf:                                 Other Builtins.     (line    6)
31919* cabsl:                                 Other Builtins.     (line    6)
31920* cacos:                                 Other Builtins.     (line    6)
31921* cacosf:                                Other Builtins.     (line    6)
31922* cacosh:                                Other Builtins.     (line    6)
31923* cacoshf:                               Other Builtins.     (line    6)
31924* cacoshl:                               Other Builtins.     (line    6)
31925* cacosl:                                Other Builtins.     (line    6)
31926* calling functions through the function vector on the H8/300 processors: Function Attributes.
31927                                                             (line  373)
31928* calloc:                                Other Builtins.     (line    6)
31929* carg:                                  Other Builtins.     (line    6)
31930* cargf:                                 Other Builtins.     (line    6)
31931* cargl:                                 Other Builtins.     (line    6)
31932* case labels in initializers:           Designated Inits.   (line    6)
31933* case ranges:                           Case Ranges.        (line    6)
31934* casin:                                 Other Builtins.     (line    6)
31935* casinf:                                Other Builtins.     (line    6)
31936* casinh:                                Other Builtins.     (line    6)
31937* casinhf:                               Other Builtins.     (line    6)
31938* casinhl:                               Other Builtins.     (line    6)
31939* casinl:                                Other Builtins.     (line    6)
31940* cast to a union:                       Cast to Union.      (line    6)
31941* catan:                                 Other Builtins.     (line    6)
31942* catanf:                                Other Builtins.     (line    6)
31943* catanh:                                Other Builtins.     (line    6)
31944* catanhf:                               Other Builtins.     (line    6)
31945* catanhl:                               Other Builtins.     (line    6)
31946* catanl:                                Other Builtins.     (line    6)
31947* cbrt:                                  Other Builtins.     (line    6)
31948* cbrtf:                                 Other Builtins.     (line    6)
31949* cbrtl:                                 Other Builtins.     (line    6)
31950* ccos:                                  Other Builtins.     (line    6)
31951* ccosf:                                 Other Builtins.     (line    6)
31952* ccosh:                                 Other Builtins.     (line    6)
31953* ccoshf:                                Other Builtins.     (line    6)
31954* ccoshl:                                Other Builtins.     (line    6)
31955* ccosl:                                 Other Builtins.     (line    6)
31956* ceil:                                  Other Builtins.     (line    6)
31957* ceilf:                                 Other Builtins.     (line    6)
31958* ceill:                                 Other Builtins.     (line    6)
31959* cexp:                                  Other Builtins.     (line    6)
31960* cexpf:                                 Other Builtins.     (line    6)
31961* cexpl:                                 Other Builtins.     (line    6)
31962* character set, execution:              Preprocessor Options.
31963                                                             (line  467)
31964* character set, input:                  Preprocessor Options.
31965                                                             (line  480)
31966* character set, input normalization:    Warning Options.    (line  934)
31967* character set, wide execution:         Preprocessor Options.
31968                                                             (line  472)
31969* cimag:                                 Other Builtins.     (line    6)
31970* cimagf:                                Other Builtins.     (line    6)
31971* cimagl:                                Other Builtins.     (line    6)
31972* cleanup attribute:                     Variable Attributes.
31973                                                             (line   76)
31974* clog:                                  Other Builtins.     (line    6)
31975* clogf:                                 Other Builtins.     (line    6)
31976* clogl:                                 Other Builtins.     (line    6)
31977* COBOL:                                 G++ and GCC.        (line   23)
31978* code generation conventions:           Code Gen Options.   (line    6)
31979* code, mixed with declarations:         Mixed Declarations. (line    6)
31980* command options:                       Invoking GCC.       (line    6)
31981* comments, C++ style:                   C++ Comments.       (line    6)
31982* common attribute:                      Variable Attributes.
31983                                                             (line   92)
31984* comparison of signed and unsigned values, warning: Warning Options.
31985                                                             (line  830)
31986* compiler bugs, reporting:              Bug Reporting.      (line    6)
31987* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
31988* compiler options, C++:                 C++ Dialect Options.
31989                                                             (line    6)
31990* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
31991                                                             (line    6)
31992* compiler version, specifying:          Target Options.     (line    6)
31993* COMPILER_PATH:                         Environment Variables.
31994                                                             (line   85)
31995* complex conjugation:                   Complex.            (line   34)
31996* complex numbers:                       Complex.            (line    6)
31997* compound literals:                     Compound Literals.  (line    6)
31998* computed gotos:                        Labels as Values.   (line    6)
31999* conditional expressions, extensions:   Conditionals.       (line    6)
32000* conflicting types:                     Disappointments.    (line   21)
32001* conj:                                  Other Builtins.     (line    6)
32002* conjf:                                 Other Builtins.     (line    6)
32003* conjl:                                 Other Builtins.     (line    6)
32004* const applied to function:             Function Attributes.
32005                                                             (line    6)
32006* const function attribute:              Function Attributes.
32007                                                             (line  106)
32008* constants in constraints:              Simple Constraints. (line   58)
32009* constraint modifier characters:        Modifiers.          (line    6)
32010* constraint, matching:                  Simple Constraints. (line  127)
32011* constraints, asm:                      Constraints.        (line    6)
32012* constraints, machine specific:         Machine Constraints.
32013                                                             (line    6)
32014* constructing calls:                    Constructing Calls. (line    6)
32015* constructor expressions:               Compound Literals.  (line    6)
32016* constructor function attribute:        Function Attributes.
32017                                                             (line  132)
32018* contributors:                          Contributors.       (line    6)
32019* copysign:                              Other Builtins.     (line    6)
32020* copysignf:                             Other Builtins.     (line    6)
32021* copysignl:                             Other Builtins.     (line    6)
32022* core dump:                             Bug Criteria.       (line    9)
32023* cos:                                   Other Builtins.     (line    6)
32024* cosf:                                  Other Builtins.     (line    6)
32025* cosh:                                  Other Builtins.     (line    6)
32026* coshf:                                 Other Builtins.     (line    6)
32027* coshl:                                 Other Builtins.     (line    6)
32028* cosl:                                  Other Builtins.     (line    6)
32029* CPATH:                                 Environment Variables.
32030                                                             (line  123)
32031* CPLUS_INCLUDE_PATH:                    Environment Variables.
32032                                                             (line  125)
32033* cpow:                                  Other Builtins.     (line    6)
32034* cpowf:                                 Other Builtins.     (line    6)
32035* cpowl:                                 Other Builtins.     (line    6)
32036* cproj:                                 Other Builtins.     (line    6)
32037* cprojf:                                Other Builtins.     (line    6)
32038* cprojl:                                Other Builtins.     (line    6)
32039* creal:                                 Other Builtins.     (line    6)
32040* crealf:                                Other Builtins.     (line    6)
32041* creall:                                Other Builtins.     (line    6)
32042* CRIS Options:                          CRIS Options.       (line    6)
32043* cross compiling:                       Target Options.     (line    6)
32044* CRX Options:                           CRX Options.        (line    6)
32045* csin:                                  Other Builtins.     (line    6)
32046* csinf:                                 Other Builtins.     (line    6)
32047* csinh:                                 Other Builtins.     (line    6)
32048* csinhf:                                Other Builtins.     (line    6)
32049* csinhl:                                Other Builtins.     (line    6)
32050* csinl:                                 Other Builtins.     (line    6)
32051* csqrt:                                 Other Builtins.     (line    6)
32052* csqrtf:                                Other Builtins.     (line    6)
32053* csqrtl:                                Other Builtins.     (line    6)
32054* ctan:                                  Other Builtins.     (line    6)
32055* ctanf:                                 Other Builtins.     (line    6)
32056* ctanh:                                 Other Builtins.     (line    6)
32057* ctanhf:                                Other Builtins.     (line    6)
32058* ctanhl:                                Other Builtins.     (line    6)
32059* ctanl:                                 Other Builtins.     (line    6)
32060* Darwin options:                        Darwin Options.     (line    6)
32061* dcgettext:                             Other Builtins.     (line    6)
32062* DD integer suffix:                     Decimal Float.      (line    6)
32063* dd integer suffix:                     Decimal Float.      (line    6)
32064* deallocating variable length arrays:   Variable Length.    (line   23)
32065* debugging information options:         Debugging Options.  (line    6)
32066* decimal floating types:                Decimal Float.      (line    6)
32067* declaration scope:                     Incompatibilities.  (line   80)
32068* declarations inside expressions:       Statement Exprs.    (line    6)
32069* declarations, mixed with code:         Mixed Declarations. (line    6)
32070* declaring attributes of functions:     Function Attributes.
32071                                                             (line    6)
32072* declaring static data in C++:          Static Definitions. (line    6)
32073* defining static data in C++:           Static Definitions. (line    6)
32074* dependencies for make as output:       Environment Variables.
32075                                                             (line  151)
32076* dependencies, make:                    Preprocessor Options.
32077                                                             (line  173)
32078* DEPENDENCIES_OUTPUT:                   Environment Variables.
32079                                                             (line  150)
32080* dependent name lookup:                 Name lookup.        (line    6)
32081* deprecated attribute:                  Variable Attributes.
32082                                                             (line  100)
32083* deprecated attribute.:                 Function Attributes.
32084                                                             (line  143)
32085* designated initializers:               Designated Inits.   (line    6)
32086* designator lists:                      Designated Inits.   (line   94)
32087* designators:                           Designated Inits.   (line   61)
32088* destructor function attribute:         Function Attributes.
32089                                                             (line  132)
32090* DF integer suffix:                     Decimal Float.      (line    6)
32091* df integer suffix:                     Decimal Float.      (line    6)
32092* dgettext:                              Other Builtins.     (line    6)
32093* diagnostic messages:                   Language Independent Options.
32094                                                             (line    6)
32095* dialect options:                       C Dialect Options.  (line    6)
32096* digits in constraint:                  Simple Constraints. (line  115)
32097* directory options:                     Directory Options.  (line    6)
32098* DL integer suffix:                     Decimal Float.      (line    6)
32099* dl integer suffix:                     Decimal Float.      (line    6)
32100* dollar signs in identifier names:      Dollar Signs.       (line    6)
32101* double-word arithmetic:                Long Long.          (line    6)
32102* downward funargs:                      Nested Functions.   (line    6)
32103* drem:                                  Other Builtins.     (line    6)
32104* dremf:                                 Other Builtins.     (line    6)
32105* dreml:                                 Other Builtins.     (line    6)
32106* E in constraint:                       Simple Constraints. (line   77)
32107* earlyclobber operand:                  Modifiers.          (line   25)
32108* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
32109                                                             (line  240)
32110* empty structures:                      Empty Structures.   (line    6)
32111* environment variables:                 Environment Variables.
32112                                                             (line    6)
32113* erf:                                   Other Builtins.     (line    6)
32114* erfc:                                  Other Builtins.     (line    6)
32115* erfcf:                                 Other Builtins.     (line    6)
32116* erfcl:                                 Other Builtins.     (line    6)
32117* erff:                                  Other Builtins.     (line    6)
32118* erfl:                                  Other Builtins.     (line    6)
32119* error messages:                        Warnings and Errors.
32120                                                             (line    6)
32121* escaped newlines:                      Escaped Newlines.   (line    6)
32122* exception handler functions on the Blackfin processor: Function Attributes.
32123                                                             (line  250)
32124* exclamation point:                     Multi-Alternative.  (line   33)
32125* exit:                                  Other Builtins.     (line    6)
32126* exp:                                   Other Builtins.     (line    6)
32127* exp10:                                 Other Builtins.     (line    6)
32128* exp10f:                                Other Builtins.     (line    6)
32129* exp10l:                                Other Builtins.     (line    6)
32130* exp2:                                  Other Builtins.     (line    6)
32131* exp2f:                                 Other Builtins.     (line    6)
32132* exp2l:                                 Other Builtins.     (line    6)
32133* expf:                                  Other Builtins.     (line    6)
32134* expl:                                  Other Builtins.     (line    6)
32135* explicit register variables:           Explicit Reg Vars.  (line    6)
32136* expm1:                                 Other Builtins.     (line    6)
32137* expm1f:                                Other Builtins.     (line    6)
32138* expm1l:                                Other Builtins.     (line    6)
32139* expressions containing statements:     Statement Exprs.    (line    6)
32140* expressions, constructor:              Compound Literals.  (line    6)
32141* extended asm:                          Extended Asm.       (line    6)
32142* extensible constraints:                Simple Constraints. (line  151)
32143* extensions, ?::                        Conditionals.       (line    6)
32144* extensions, C language:                C Extensions.       (line    6)
32145* extensions, C++ language:              C++ Extensions.     (line    6)
32146* external declaration scope:            Incompatibilities.  (line   80)
32147* externally_visible attribute.:         Function Attributes.
32148                                                             (line  907)
32149* F in constraint:                       Simple Constraints. (line   82)
32150* fabs:                                  Other Builtins.     (line    6)
32151* fabsf:                                 Other Builtins.     (line    6)
32152* fabsl:                                 Other Builtins.     (line    6)
32153* fatal signal:                          Bug Criteria.       (line    9)
32154* fdim:                                  Other Builtins.     (line    6)
32155* fdimf:                                 Other Builtins.     (line    6)
32156* fdiml:                                 Other Builtins.     (line    6)
32157* FDL, GNU Free Documentation License:   GNU Free Documentation License.
32158                                                             (line    6)
32159* ffs:                                   Other Builtins.     (line    6)
32160* file name suffix:                      Overall Options.    (line   14)
32161* file names:                            Link Options.       (line   10)
32162* flatten function attribute:            Function Attributes.
32163                                                             (line   91)
32164* flexible array members:                Zero Length.        (line    6)
32165* float as function value type:          Incompatibilities.  (line  141)
32166* floating point precision <1>:          Disappointments.    (line   68)
32167* floating point precision:              Optimize Options.   (line 1060)
32168* floor:                                 Other Builtins.     (line    6)
32169* floorf:                                Other Builtins.     (line    6)
32170* floorl:                                Other Builtins.     (line    6)
32171* fma:                                   Other Builtins.     (line    6)
32172* fmaf:                                  Other Builtins.     (line    6)
32173* fmal:                                  Other Builtins.     (line    6)
32174* fmax:                                  Other Builtins.     (line    6)
32175* fmaxf:                                 Other Builtins.     (line    6)
32176* fmaxl:                                 Other Builtins.     (line    6)
32177* fmin:                                  Other Builtins.     (line    6)
32178* fminf:                                 Other Builtins.     (line    6)
32179* fminl:                                 Other Builtins.     (line    6)
32180* fmod:                                  Other Builtins.     (line    6)
32181* fmodf:                                 Other Builtins.     (line    6)
32182* fmodl:                                 Other Builtins.     (line    6)
32183* force_align_arg_pointer attribute:     Function Attributes.
32184                                                             (line  636)
32185* format function attribute:             Function Attributes.
32186                                                             (line  281)
32187* format_arg function attribute:         Function Attributes.
32188                                                             (line  334)
32189* Fortran:                               G++ and GCC.        (line    6)
32190* forwarding calls:                      Constructing Calls. (line    6)
32191* fprintf:                               Other Builtins.     (line    6)
32192* fprintf_unlocked:                      Other Builtins.     (line    6)
32193* fputs:                                 Other Builtins.     (line    6)
32194* fputs_unlocked:                        Other Builtins.     (line    6)
32195* freestanding environment:              Standards.          (line    6)
32196* freestanding implementation:           Standards.          (line    6)
32197* frexp:                                 Other Builtins.     (line    6)
32198* frexpf:                                Other Builtins.     (line    6)
32199* frexpl:                                Other Builtins.     (line    6)
32200* FRV Options:                           FRV Options.        (line    6)
32201* fscanf:                                Other Builtins.     (line    6)
32202* fscanf, and constant strings:          Incompatibilities.  (line   17)
32203* function addressability on the M32R/D: Function Attributes.
32204                                                             (line  457)
32205* function attributes:                   Function Attributes.
32206                                                             (line    6)
32207* function pointers, arithmetic:         Pointer Arith.      (line    6)
32208* function prototype declarations:       Function Prototypes.
32209                                                             (line    6)
32210* function without a prologue/epilogue code: Function Attributes.
32211                                                             (line  485)
32212* function, size of pointer to:          Pointer Arith.      (line    6)
32213* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
32214                                                             (line  428)
32215* functions in arbitrary sections:       Function Attributes.
32216                                                             (line    6)
32217* functions that are passed arguments in registers on the 386: Function Attributes.
32218                                                             (line    6)
32219* functions that behave like malloc:     Function Attributes.
32220                                                             (line    6)
32221* functions that do not pop the argument stack on the 386: Function Attributes.
32222                                                             (line    6)
32223* functions that do pop the argument stack on the 386: Function Attributes.
32224                                                             (line  100)
32225* functions that have no side effects:   Function Attributes.
32226                                                             (line    6)
32227* functions that never return:           Function Attributes.
32228                                                             (line    6)
32229* functions that pop the argument stack on the 386: Function Attributes.
32230                                                             (line    6)
32231* functions that return more than once:  Function Attributes.
32232                                                             (line    6)
32233* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
32234                                                             (line  491)
32235* functions which handle memory bank switching: Function Attributes.
32236                                                             (line  256)
32237* functions with non-null pointer arguments: Function Attributes.
32238                                                             (line    6)
32239* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
32240                                                             (line    6)
32241* g in constraint:                       Simple Constraints. (line  108)
32242* G in constraint:                       Simple Constraints. (line   86)
32243* g++:                                   Invoking G++.       (line   13)
32244* G++:                                   G++ and GCC.        (line   30)
32245* gamma:                                 Other Builtins.     (line    6)
32246* gammaf:                                Other Builtins.     (line    6)
32247* gammal:                                Other Builtins.     (line    6)
32248* GCC:                                   G++ and GCC.        (line    6)
32249* GCC command options:                   Invoking GCC.       (line    6)
32250* GCC_EXEC_PREFIX:                       Environment Variables.
32251                                                             (line   52)
32252* gcc_struct:                            Type Attributes.    (line  302)
32253* gcc_struct attribute:                  Variable Attributes.
32254                                                             (line  313)
32255* gcov:                                  Debugging Options.  (line  168)
32256* gettext:                               Other Builtins.     (line    6)
32257* global offset table:                   Code Gen Options.   (line  163)
32258* global register after longjmp:         Global Reg Vars.    (line   66)
32259* global register variables:             Global Reg Vars.    (line    6)
32260* GNAT:                                  G++ and GCC.        (line   30)
32261* GNU C Compiler:                        G++ and GCC.        (line    6)
32262* GNU Compiler Collection:               G++ and GCC.        (line    6)
32263* gnu_inline function attribute:         Function Attributes.
32264                                                             (line   51)
32265* goto with computed label:              Labels as Values.   (line    6)
32266* gp-relative references (MIPS):         MIPS Options.       (line  216)
32267* gprof:                                 Debugging Options.  (line  135)
32268* grouping options:                      Invoking GCC.       (line   26)
32269* H in constraint:                       Simple Constraints. (line   86)
32270* hardware models and configurations, specifying: Submodel Options.
32271                                                             (line    6)
32272* hex floats:                            Hex Floats.         (line    6)
32273* hosted environment <1>:                C Dialect Options.  (line  183)
32274* hosted environment:                    Standards.          (line    6)
32275* hosted implementation:                 Standards.          (line    6)
32276* HPPA Options:                          HPPA Options.       (line    6)
32277* hypot:                                 Other Builtins.     (line    6)
32278* hypotf:                                Other Builtins.     (line    6)
32279* hypotl:                                Other Builtins.     (line    6)
32280* I in constraint:                       Simple Constraints. (line   69)
32281* i in constraint:                       Simple Constraints. (line   58)
32282* i386 Options:                          i386 and x86-64 Options.
32283                                                             (line    6)
32284* IA-64 Options:                         IA-64 Options.      (line    6)
32285* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
32286                                                             (line    6)
32287* identifier names, dollar signs in:     Dollar Signs.       (line    6)
32288* identifiers, names in assembler code:  Asm Labels.         (line    6)
32289* ilogb:                                 Other Builtins.     (line    6)
32290* ilogbf:                                Other Builtins.     (line    6)
32291* ilogbl:                                Other Builtins.     (line    6)
32292* imaxabs:                               Other Builtins.     (line    6)
32293* implementation-defined behavior, C language: C Implementation.
32294                                                             (line    6)
32295* implied #pragma implementation:        C++ Interface.      (line   46)
32296* incompatibilities of GCC:              Incompatibilities.  (line    6)
32297* increment operators:                   Bug Criteria.       (line   17)
32298* index:                                 Other Builtins.     (line    6)
32299* indirect calls on ARM:                 Function Attributes.
32300                                                             (line  418)
32301* indirect calls on MIPS:                Function Attributes.
32302                                                             (line  440)
32303* init_priority attribute:               C++ Attributes.     (line    9)
32304* initializations in expressions:        Compound Literals.  (line    6)
32305* initializers with labeled elements:    Designated Inits.   (line    6)
32306* initializers, non-constant:            Initializers.       (line    6)
32307* inline automatic for C++ member fns:   Inline.             (line   53)
32308* inline functions:                      Inline.             (line    6)
32309* inline functions, omission of:         Inline.             (line   58)
32310* inlining and C++ pragmas:              C++ Interface.      (line   66)
32311* installation trouble:                  Trouble.            (line    6)
32312* integrating function code:             Inline.             (line    6)
32313* Intel 386 Options:                     i386 and x86-64 Options.
32314                                                             (line    6)
32315* interface and implementation headers, C++: C++ Interface.  (line    6)
32316* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
32317* interrupt handler functions:           Function Attributes.
32318                                                             (line  384)
32319* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
32320                                                             (line  406)
32321* introduction:                          Top.                (line    6)
32322* invalid assembly code:                 Bug Criteria.       (line   12)
32323* invalid input:                         Bug Criteria.       (line   42)
32324* invoking g++:                          Invoking G++.       (line   21)
32325* isalnum:                               Other Builtins.     (line    6)
32326* isalpha:                               Other Builtins.     (line    6)
32327* isascii:                               Other Builtins.     (line    6)
32328* isblank:                               Other Builtins.     (line    6)
32329* iscntrl:                               Other Builtins.     (line    6)
32330* isdigit:                               Other Builtins.     (line    6)
32331* isgraph:                               Other Builtins.     (line    6)
32332* islower:                               Other Builtins.     (line    6)
32333* ISO 9899:                              Standards.          (line    6)
32334* ISO C:                                 Standards.          (line    6)
32335* ISO C standard:                        Standards.          (line    6)
32336* ISO C90:                               Standards.          (line    6)
32337* ISO C94:                               Standards.          (line    6)
32338* ISO C95:                               Standards.          (line    6)
32339* ISO C99:                               Standards.          (line    6)
32340* ISO C9X:                               Standards.          (line    6)
32341* ISO support:                           C Dialect Options.  (line   10)
32342* ISO/IEC 9899:                          Standards.          (line    6)
32343* isprint:                               Other Builtins.     (line    6)
32344* ispunct:                               Other Builtins.     (line    6)
32345* isspace:                               Other Builtins.     (line    6)
32346* isupper:                               Other Builtins.     (line    6)
32347* iswalnum:                              Other Builtins.     (line    6)
32348* iswalpha:                              Other Builtins.     (line    6)
32349* iswblank:                              Other Builtins.     (line    6)
32350* iswcntrl:                              Other Builtins.     (line    6)
32351* iswdigit:                              Other Builtins.     (line    6)
32352* iswgraph:                              Other Builtins.     (line    6)
32353* iswlower:                              Other Builtins.     (line    6)
32354* iswprint:                              Other Builtins.     (line    6)
32355* iswpunct:                              Other Builtins.     (line    6)
32356* iswspace:                              Other Builtins.     (line    6)
32357* iswupper:                              Other Builtins.     (line    6)
32358* iswxdigit:                             Other Builtins.     (line    6)
32359* isxdigit:                              Other Builtins.     (line    6)
32360* j0:                                    Other Builtins.     (line    6)
32361* j0f:                                   Other Builtins.     (line    6)
32362* j0l:                                   Other Builtins.     (line    6)
32363* j1:                                    Other Builtins.     (line    6)
32364* j1f:                                   Other Builtins.     (line    6)
32365* j1l:                                   Other Builtins.     (line    6)
32366* Java:                                  G++ and GCC.        (line    6)
32367* java_interface attribute:              C++ Attributes.     (line   29)
32368* jn:                                    Other Builtins.     (line    6)
32369* jnf:                                   Other Builtins.     (line    6)
32370* jnl:                                   Other Builtins.     (line    6)
32371* keywords, alternate:                   Alternate Keywords. (line    6)
32372* known causes of trouble:               Trouble.            (line    6)
32373* labeled elements in initializers:      Designated Inits.   (line    6)
32374* labels as values:                      Labels as Values.   (line    6)
32375* labs:                                  Other Builtins.     (line    6)
32376* LANG:                                  Environment Variables.
32377                                                             (line   21)
32378* language dialect options:              C Dialect Options.  (line    6)
32379* LC_ALL:                                Environment Variables.
32380                                                             (line   21)
32381* LC_CTYPE:                              Environment Variables.
32382                                                             (line   21)
32383* LC_MESSAGES:                           Environment Variables.
32384                                                             (line   21)
32385* ldexp:                                 Other Builtins.     (line    6)
32386* ldexpf:                                Other Builtins.     (line    6)
32387* ldexpl:                                Other Builtins.     (line    6)
32388* length-zero arrays:                    Zero Length.        (line    6)
32389* lgamma:                                Other Builtins.     (line    6)
32390* lgammaf:                               Other Builtins.     (line    6)
32391* lgammal:                               Other Builtins.     (line    6)
32392* Libraries:                             Link Options.       (line   24)
32393* LIBRARY_PATH:                          Environment Variables.
32394                                                             (line   91)
32395* link options:                          Link Options.       (line    6)
32396* LL integer suffix:                     Long Long.          (line    6)
32397* llabs:                                 Other Builtins.     (line    6)
32398* llrint:                                Other Builtins.     (line    6)
32399* llrintf:                               Other Builtins.     (line    6)
32400* llrintl:                               Other Builtins.     (line    6)
32401* llround:                               Other Builtins.     (line    6)
32402* llroundf:                              Other Builtins.     (line    6)
32403* llroundl:                              Other Builtins.     (line    6)
32404* load address instruction:              Simple Constraints. (line  142)
32405* local labels:                          Local Labels.       (line    6)
32406* local variables in macros:             Typeof.             (line   42)
32407* local variables, specifying registers: Local Reg Vars.     (line    6)
32408* locale:                                Environment Variables.
32409                                                             (line   21)
32410* locale definition:                     Environment Variables.
32411                                                             (line  100)
32412* log:                                   Other Builtins.     (line    6)
32413* log10:                                 Other Builtins.     (line    6)
32414* log10f:                                Other Builtins.     (line    6)
32415* log10l:                                Other Builtins.     (line    6)
32416* log1p:                                 Other Builtins.     (line    6)
32417* log1pf:                                Other Builtins.     (line    6)
32418* log1pl:                                Other Builtins.     (line    6)
32419* log2:                                  Other Builtins.     (line    6)
32420* log2f:                                 Other Builtins.     (line    6)
32421* log2l:                                 Other Builtins.     (line    6)
32422* logb:                                  Other Builtins.     (line    6)
32423* logbf:                                 Other Builtins.     (line    6)
32424* logbl:                                 Other Builtins.     (line    6)
32425* logf:                                  Other Builtins.     (line    6)
32426* logl:                                  Other Builtins.     (line    6)
32427* long long data types:                  Long Long.          (line    6)
32428* longjmp:                               Global Reg Vars.    (line   66)
32429* longjmp incompatibilities:             Incompatibilities.  (line   39)
32430* longjmp warnings:                      Warning Options.    (line  457)
32431* lrint:                                 Other Builtins.     (line    6)
32432* lrintf:                                Other Builtins.     (line    6)
32433* lrintl:                                Other Builtins.     (line    6)
32434* lround:                                Other Builtins.     (line    6)
32435* lroundf:                               Other Builtins.     (line    6)
32436* lroundl:                               Other Builtins.     (line    6)
32437* m in constraint:                       Simple Constraints. (line   17)
32438* M32C options:                          M32C Options.       (line    6)
32439* M32R/D options:                        M32R/D Options.     (line    6)
32440* M680x0 options:                        M680x0 Options.     (line    6)
32441* M68hc1x options:                       M68hc1x Options.    (line    6)
32442* machine dependent options:             Submodel Options.   (line    6)
32443* machine specific constraints:          Machine Constraints.
32444                                                             (line    6)
32445* macro with variable arguments:         Variadic Macros.    (line    6)
32446* macros containing asm:                 Extended Asm.       (line  239)
32447* macros, inline alternative:            Inline.             (line    6)
32448* macros, local labels:                  Local Labels.       (line    6)
32449* macros, local variables in:            Typeof.             (line   42)
32450* macros, statements in expressions:     Statement Exprs.    (line    6)
32451* macros, types of arguments:            Typeof.             (line    6)
32452* make:                                  Preprocessor Options.
32453                                                             (line  173)
32454* malloc:                                Other Builtins.     (line    6)
32455* malloc attribute:                      Function Attributes.
32456                                                             (line  447)
32457* matching constraint:                   Simple Constraints. (line  127)
32458* MCore options:                         MCore Options.      (line    6)
32459* member fns, automatically inline:      Inline.             (line   53)
32460* memcmp:                                Other Builtins.     (line    6)
32461* memcpy:                                Other Builtins.     (line    6)
32462* memory references in constraints:      Simple Constraints. (line   17)
32463* mempcpy:                               Other Builtins.     (line    6)
32464* memset:                                Other Builtins.     (line    6)
32465* Mercury:                               G++ and GCC.        (line   23)
32466* message formatting:                    Language Independent Options.
32467                                                             (line    6)
32468* messages, warning:                     Warning Options.    (line    6)
32469* messages, warning and error:           Warnings and Errors.
32470                                                             (line    6)
32471* middle-operands, omitted:              Conditionals.       (line    6)
32472* MIPS options:                          MIPS Options.       (line    6)
32473* misunderstandings in C++:              C++ Misunderstandings.
32474                                                             (line    6)
32475* mixed declarations and code:           Mixed Declarations. (line    6)
32476* mktemp, and constant strings:          Incompatibilities.  (line   13)
32477* MMIX Options:                          MMIX Options.       (line    6)
32478* MN10300 options:                       MN10300 Options.    (line    6)
32479* mode attribute:                        Variable Attributes.
32480                                                             (line  118)
32481* modf:                                  Other Builtins.     (line    6)
32482* modff:                                 Other Builtins.     (line    6)
32483* modfl:                                 Other Builtins.     (line    6)
32484* modifiers in constraints:              Modifiers.          (line    6)
32485* ms_struct:                             Type Attributes.    (line  302)
32486* ms_struct attribute:                   Variable Attributes.
32487                                                             (line  313)
32488* MT options:                            MT Options.         (line    6)
32489* mudflap:                               Optimize Options.   (line  333)
32490* multiple alternative constraints:      Multi-Alternative.  (line    6)
32491* multiprecision arithmetic:             Long Long.          (line    6)
32492* n in constraint:                       Simple Constraints. (line   63)
32493* names used in assembler code:          Asm Labels.         (line    6)
32494* naming convention, implementation headers: C++ Interface.  (line   46)
32495* nearbyint:                             Other Builtins.     (line    6)
32496* nearbyintf:                            Other Builtins.     (line    6)
32497* nearbyintl:                            Other Builtins.     (line    6)
32498* nested functions:                      Nested Functions.   (line    6)
32499* newlines (escaped):                    Escaped Newlines.   (line    6)
32500* nextafter:                             Other Builtins.     (line    6)
32501* nextafterf:                            Other Builtins.     (line    6)
32502* nextafterl:                            Other Builtins.     (line    6)
32503* nexttoward:                            Other Builtins.     (line    6)
32504* nexttowardf:                           Other Builtins.     (line    6)
32505* nexttowardl:                           Other Builtins.     (line    6)
32506* NFC:                                   Warning Options.    (line  934)
32507* NFKC:                                  Warning Options.    (line  934)
32508* NMI handler functions on the Blackfin processor: Function Attributes.
32509                                                             (line  502)
32510* no_instrument_function function attribute: Function Attributes.
32511                                                             (line  508)
32512* nocommon attribute:                    Variable Attributes.
32513                                                             (line   92)
32514* noinline function attribute:           Function Attributes.
32515                                                             (line  513)
32516* non-constant initializers:             Initializers.       (line    6)
32517* non-static inline function:            Inline.             (line   70)
32518* nonnull function attribute:            Function Attributes.
32519                                                             (line  517)
32520* noreturn function attribute:           Function Attributes.
32521                                                             (line  540)
32522* nothrow function attribute:            Function Attributes.
32523                                                             (line  582)
32524* o in constraint:                       Simple Constraints. (line   21)
32525* OBJC_INCLUDE_PATH:                     Environment Variables.
32526                                                             (line  126)
32527* Objective-C <1>:                       Standards.          (line  110)
32528* Objective-C:                           G++ and GCC.        (line    6)
32529* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
32530                                                             (line    6)
32531* Objective-C++ <1>:                     Standards.          (line  110)
32532* Objective-C++:                         G++ and GCC.        (line    6)
32533* offsettable address:                   Simple Constraints. (line   21)
32534* old-style function definitions:        Function Prototypes.
32535                                                             (line    6)
32536* omitted middle-operands:               Conditionals.       (line    6)
32537* open coding:                           Inline.             (line    6)
32538* openmp parallel:                       C Dialect Options.  (line  200)
32539* operand constraints, asm:              Constraints.        (line    6)
32540* optimize options:                      Optimize Options.   (line    6)
32541* options to control diagnostics formatting: Language Independent Options.
32542                                                             (line    6)
32543* options to control warnings:           Warning Options.    (line    6)
32544* options, C++:                          C++ Dialect Options.
32545                                                             (line    6)
32546* options, code generation:              Code Gen Options.   (line    6)
32547* options, debugging:                    Debugging Options.  (line    6)
32548* options, dialect:                      C Dialect Options.  (line    6)
32549* options, directory search:             Directory Options.  (line    6)
32550* options, GCC command:                  Invoking GCC.       (line    6)
32551* options, grouping:                     Invoking GCC.       (line   26)
32552* options, linking:                      Link Options.       (line    6)
32553* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
32554                                                             (line    6)
32555* options, optimization:                 Optimize Options.   (line    6)
32556* options, order:                        Invoking GCC.       (line   30)
32557* options, preprocessor:                 Preprocessor Options.
32558                                                             (line    6)
32559* order of evaluation, side effects:     Non-bugs.           (line  196)
32560* order of options:                      Invoking GCC.       (line   30)
32561* other register constraints:            Simple Constraints. (line  151)
32562* output file option:                    Overall Options.    (line  174)
32563* overloaded virtual fn, warning:        C++ Dialect Options.
32564                                                             (line  406)
32565* p in constraint:                       Simple Constraints. (line  142)
32566* packed attribute:                      Variable Attributes.
32567                                                             (line  129)
32568* parameter forward declaration:         Variable Length.    (line   60)
32569* parameters, aliased:                   Code Gen Options.   (line  332)
32570* Pascal:                                G++ and GCC.        (line   23)
32571* PDP-11 Options:                        PDP-11 Options.     (line    6)
32572* PIC:                                   Code Gen Options.   (line  163)
32573* pmf:                                   Bound member functions.
32574                                                             (line    6)
32575* pointer arguments:                     Function Attributes.
32576                                                             (line  111)
32577* pointer to member function:            Bound member functions.
32578                                                             (line    6)
32579* portions of temporary objects, pointers to: Temporaries.   (line    6)
32580* pow:                                   Other Builtins.     (line    6)
32581* pow10:                                 Other Builtins.     (line    6)
32582* pow10f:                                Other Builtins.     (line    6)
32583* pow10l:                                Other Builtins.     (line    6)
32584* PowerPC options:                       PowerPC Options.    (line    6)
32585* powf:                                  Other Builtins.     (line    6)
32586* powl:                                  Other Builtins.     (line    6)
32587* pragma, align:                         Solaris Pragmas.    (line   11)
32588* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
32589* pragma, extern_prefix:                 Symbol-Renaming Pragmas.
32590                                                             (line   19)
32591* pragma, fini:                          Solaris Pragmas.    (line   19)
32592* pragma, init:                          Solaris Pragmas.    (line   24)
32593* pragma, long_calls:                    ARM Pragmas.        (line   11)
32594* pragma, long_calls_off:                ARM Pragmas.        (line   17)
32595* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
32596                                                             (line   14)
32597* pragma, mark:                          Darwin Pragmas.     (line   11)
32598* pragma, memregs:                       M32C Pragmas.       (line    7)
32599* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
32600* pragma, options align:                 Darwin Pragmas.     (line   14)
32601* pragma, reason for not using:          Function Attributes.
32602                                                             (line  916)
32603* pragma, redefine_extname:              Symbol-Renaming Pragmas.
32604                                                             (line   14)
32605* pragma, segment:                       Darwin Pragmas.     (line   21)
32606* pragma, unused:                        Darwin Pragmas.     (line   24)
32607* pragma, visibility:                    Visibility Pragmas. (line    8)
32608* pragma, weak:                          Weak Pragmas.       (line   10)
32609* pragmas:                               Pragmas.            (line    6)
32610* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
32611* pragmas, interface and implementation: C++ Interface.      (line    6)
32612* pragmas, warning of unknown:           Warning Options.    (line  474)
32613* precompiled headers:                   Precompiled Headers.
32614                                                             (line    6)
32615* preprocessing numbers:                 Incompatibilities.  (line  173)
32616* preprocessing tokens:                  Incompatibilities.  (line  173)
32617* preprocessor options:                  Preprocessor Options.
32618                                                             (line    6)
32619* printf:                                Other Builtins.     (line    6)
32620* printf_unlocked:                       Other Builtins.     (line    6)
32621* prof:                                  Debugging Options.  (line  129)
32622* promotion of formal parameters:        Function Prototypes.
32623                                                             (line    6)
32624* pure function attribute:               Function Attributes.
32625                                                             (line  590)
32626* push address instruction:              Simple Constraints. (line  142)
32627* putchar:                               Other Builtins.     (line    6)
32628* puts:                                  Other Builtins.     (line    6)
32629* qsort, and global register variables:  Global Reg Vars.    (line   42)
32630* question mark:                         Multi-Alternative.  (line   27)
32631* r in constraint:                       Simple Constraints. (line   54)
32632* ranges in case statements:             Case Ranges.        (line    6)
32633* read-only strings:                     Incompatibilities.  (line    9)
32634* register variable after longjmp:       Global Reg Vars.    (line   66)
32635* registers:                             Extended Asm.       (line    6)
32636* registers for local variables:         Local Reg Vars.     (line    6)
32637* registers in constraints:              Simple Constraints. (line   54)
32638* registers, global allocation:          Explicit Reg Vars.  (line    6)
32639* registers, global variables in:        Global Reg Vars.    (line    6)
32640* regparm attribute:                     Function Attributes.
32641                                                             (line  612)
32642* relocation truncated to fit (MIPS):    MIPS Options.       (line  135)
32643* remainder:                             Other Builtins.     (line    6)
32644* remainderf:                            Other Builtins.     (line    6)
32645* remainderl:                            Other Builtins.     (line    6)
32646* remquo:                                Other Builtins.     (line    6)
32647* remquof:                               Other Builtins.     (line    6)
32648* remquol:                               Other Builtins.     (line    6)
32649* reordering, warning:                   C++ Dialect Options.
32650                                                             (line  327)
32651* reporting bugs:                        Bugs.               (line    6)
32652* rest argument (in macro):              Variadic Macros.    (line    6)
32653* restricted pointers:                   Restricted Pointers.
32654                                                             (line    6)
32655* restricted references:                 Restricted Pointers.
32656                                                             (line    6)
32657* restricted this pointer:               Restricted Pointers.
32658                                                             (line    6)
32659* returns_twice attribute:               Function Attributes.
32660                                                             (line  649)
32661* rindex:                                Other Builtins.     (line    6)
32662* rint:                                  Other Builtins.     (line    6)
32663* rintf:                                 Other Builtins.     (line    6)
32664* rintl:                                 Other Builtins.     (line    6)
32665* round:                                 Other Builtins.     (line    6)
32666* roundf:                                Other Builtins.     (line    6)
32667* roundl:                                Other Builtins.     (line    6)
32668* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
32669                                                             (line    6)
32670* RTTI:                                  Vague Linkage.      (line   43)
32671* run-time options:                      Code Gen Options.   (line    6)
32672* s in constraint:                       Simple Constraints. (line   90)
32673* S/390 and zSeries Options:             S/390 and zSeries Options.
32674                                                             (line    6)
32675* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
32676                                                             (line  658)
32677* scalb:                                 Other Builtins.     (line    6)
32678* scalbf:                                Other Builtins.     (line    6)
32679* scalbl:                                Other Builtins.     (line    6)
32680* scalbln:                               Other Builtins.     (line    6)
32681* scalblnf:                              Other Builtins.     (line    6)
32682* scalbn:                                Other Builtins.     (line    6)
32683* scalbnf:                               Other Builtins.     (line    6)
32684* scanf, and constant strings:           Incompatibilities.  (line   17)
32685* scanfnl:                               Other Builtins.     (line    6)
32686* scope of a variable length array:      Variable Length.    (line   23)
32687* scope of declaration:                  Disappointments.    (line   21)
32688* scope of external declarations:        Incompatibilities.  (line   80)
32689* Score Options:                         Score Options.      (line    6)
32690* search path:                           Directory Options.  (line    6)
32691* section function attribute:            Function Attributes.
32692                                                             (line  663)
32693* section variable attribute:            Variable Attributes.
32694                                                             (line  144)
32695* sentinel function attribute:           Function Attributes.
32696                                                             (line  679)
32697* setjmp:                                Global Reg Vars.    (line   66)
32698* setjmp incompatibilities:              Incompatibilities.  (line   39)
32699* shared strings:                        Incompatibilities.  (line    9)
32700* shared variable attribute:             Variable Attributes.
32701                                                             (line  189)
32702* side effect in ?::                     Conditionals.       (line   20)
32703* side effects, macro argument:          Statement Exprs.    (line   35)
32704* side effects, order of evaluation:     Non-bugs.           (line  196)
32705* signal handler functions on the AVR processors: Function Attributes.
32706                                                             (line  710)
32707* signbit:                               Other Builtins.     (line    6)
32708* signbitf:                              Other Builtins.     (line    6)
32709* signbitl:                              Other Builtins.     (line    6)
32710* signed and unsigned values, comparison warning: Warning Options.
32711                                                             (line  830)
32712* significand:                           Other Builtins.     (line    6)
32713* significandf:                          Other Builtins.     (line    6)
32714* significandl:                          Other Builtins.     (line    6)
32715* simple constraints:                    Simple Constraints. (line    6)
32716* sin:                                   Other Builtins.     (line    6)
32717* sincos:                                Other Builtins.     (line    6)
32718* sincosf:                               Other Builtins.     (line    6)
32719* sincosl:                               Other Builtins.     (line    6)
32720* sinf:                                  Other Builtins.     (line    6)
32721* sinh:                                  Other Builtins.     (line    6)
32722* sinhf:                                 Other Builtins.     (line    6)
32723* sinhl:                                 Other Builtins.     (line    6)
32724* sinl:                                  Other Builtins.     (line    6)
32725* sizeof:                                Typeof.             (line    6)
32726* smaller data references:               M32R/D Options.     (line   57)
32727* smaller data references (MIPS):        MIPS Options.       (line  216)
32728* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
32729                                                             (line  607)
32730* snprintf:                              Other Builtins.     (line    6)
32731* SPARC options:                         SPARC Options.      (line    6)
32732* Spec Files:                            Spec Files.         (line    6)
32733* specified registers:                   Explicit Reg Vars.  (line    6)
32734* specifying compiler version and target machine: Target Options.
32735                                                             (line    6)
32736* specifying hardware config:            Submodel Options.   (line    6)
32737* specifying machine version:            Target Options.     (line    6)
32738* specifying registers for local variables: Local Reg Vars.  (line    6)
32739* speed of compilation:                  Precompiled Headers.
32740                                                             (line    6)
32741* sprintf:                               Other Builtins.     (line    6)
32742* sqrt:                                  Other Builtins.     (line    6)
32743* sqrtf:                                 Other Builtins.     (line    6)
32744* sqrtl:                                 Other Builtins.     (line    6)
32745* sscanf:                                Other Builtins.     (line    6)
32746* sscanf, and constant strings:          Incompatibilities.  (line   17)
32747* sseregparm attribute:                  Function Attributes.
32748                                                             (line  629)
32749* statements inside expressions:         Statement Exprs.    (line    6)
32750* static data in C++, declaring and defining: Static Definitions.
32751                                                             (line    6)
32752* stpcpy:                                Other Builtins.     (line    6)
32753* stpncpy:                               Other Builtins.     (line    6)
32754* strcasecmp:                            Other Builtins.     (line    6)
32755* strcat:                                Other Builtins.     (line    6)
32756* strchr:                                Other Builtins.     (line    6)
32757* strcmp:                                Other Builtins.     (line    6)
32758* strcpy:                                Other Builtins.     (line    6)
32759* strcspn:                               Other Builtins.     (line    6)
32760* strdup:                                Other Builtins.     (line    6)
32761* strfmon:                               Other Builtins.     (line    6)
32762* strftime:                              Other Builtins.     (line    6)
32763* string constants:                      Incompatibilities.  (line    9)
32764* strlen:                                Other Builtins.     (line    6)
32765* strncasecmp:                           Other Builtins.     (line    6)
32766* strncat:                               Other Builtins.     (line    6)
32767* strncmp:                               Other Builtins.     (line    6)
32768* strncpy:                               Other Builtins.     (line    6)
32769* strndup:                               Other Builtins.     (line    6)
32770* strpbrk:                               Other Builtins.     (line    6)
32771* strrchr:                               Other Builtins.     (line    6)
32772* strspn:                                Other Builtins.     (line    6)
32773* strstr:                                Other Builtins.     (line    6)
32774* struct:                                Unnamed Fields.     (line    6)
32775* structures:                            Incompatibilities.  (line  146)
32776* structures, constructor expression:    Compound Literals.  (line    6)
32777* submodel options:                      Submodel Options.   (line    6)
32778* subscripting:                          Subscripting.       (line    6)
32779* subscripting and function values:      Subscripting.       (line    6)
32780* suffixes for C++ source:               Invoking G++.       (line    6)
32781* SUNPRO_DEPENDENCIES:                   Environment Variables.
32782                                                             (line  166)
32783* suppressing warnings:                  Warning Options.    (line    6)
32784* surprises in C++:                      C++ Misunderstandings.
32785                                                             (line    6)
32786* syntax checking:                       Warning Options.    (line   22)
32787* system headers, warnings from:         Warning Options.    (line  648)
32788* tan:                                   Other Builtins.     (line    6)
32789* tanf:                                  Other Builtins.     (line    6)
32790* tanh:                                  Other Builtins.     (line    6)
32791* tanhf:                                 Other Builtins.     (line    6)
32792* tanhl:                                 Other Builtins.     (line    6)
32793* tanl:                                  Other Builtins.     (line    6)
32794* target machine, specifying:            Target Options.     (line    6)
32795* target options:                        Target Options.     (line    6)
32796* TC1:                                   Standards.          (line    6)
32797* TC2:                                   Standards.          (line    6)
32798* Technical Corrigenda:                  Standards.          (line    6)
32799* Technical Corrigendum 1:               Standards.          (line    6)
32800* Technical Corrigendum 2:               Standards.          (line    6)
32801* template instantiation:                Template Instantiation.
32802                                                             (line    6)
32803* temporaries, lifetime of:              Temporaries.        (line    6)
32804* tgamma:                                Other Builtins.     (line    6)
32805* tgammaf:                               Other Builtins.     (line    6)
32806* tgammal:                               Other Builtins.     (line    6)
32807* Thread-Local Storage:                  Thread-Local.       (line    6)
32808* thunks:                                Nested Functions.   (line    6)
32809* tiny data section on the H8/300H and H8S: Function Attributes.
32810                                                             (line  732)
32811* TLS:                                   Thread-Local.       (line    6)
32812* tls_model attribute:                   Variable Attributes.
32813                                                             (line  213)
32814* TMPDIR:                                Environment Variables.
32815                                                             (line   45)
32816* TMS320C3x/C4x Options:                 TMS320C3x/C4x Options.
32817                                                             (line    6)
32818* toascii:                               Other Builtins.     (line    6)
32819* tolower:                               Other Builtins.     (line    6)
32820* toupper:                               Other Builtins.     (line    6)
32821* towlower:                              Other Builtins.     (line    6)
32822* towupper:                              Other Builtins.     (line    6)
32823* traditional C language:                C Dialect Options.  (line  227)
32824* treelang <1>:                          Standards.          (line  123)
32825* treelang:                              G++ and GCC.        (line    6)
32826* trunc:                                 Other Builtins.     (line    6)
32827* truncf:                                Other Builtins.     (line    6)
32828* truncl:                                Other Builtins.     (line    6)
32829* two-stage name lookup:                 Name lookup.        (line    6)
32830* type alignment:                        Alignment.          (line    6)
32831* type attributes:                       Type Attributes.    (line    6)
32832* type_info:                             Vague Linkage.      (line   43)
32833* typedef names as function parameters:  Incompatibilities.  (line   97)
32834* typeof:                                Typeof.             (line    6)
32835* ULL integer suffix:                    Long Long.          (line    6)
32836* Ultrix calling convention:             Interoperation.     (line  150)
32837* undefined behavior:                    Bug Criteria.       (line   17)
32838* undefined function value:              Bug Criteria.       (line   17)
32839* underscores in variables in macros:    Typeof.             (line   42)
32840* union:                                 Unnamed Fields.     (line    6)
32841* union, casting to a:                   Cast to Union.      (line    6)
32842* unions:                                Incompatibilities.  (line  146)
32843* unknown pragmas, warning:              Warning Options.    (line  474)
32844* unresolved references and -nodefaultlibs: Link Options.    (line   79)
32845* unresolved references and -nostdlib:   Link Options.       (line   79)
32846* unused attribute.:                     Function Attributes.
32847                                                             (line  744)
32848* used attribute.:                       Function Attributes.
32849                                                             (line  749)
32850* User stack pointer in interrupts on the Blackfin: Function Attributes.
32851                                                             (line  413)
32852* V in constraint:                       Simple Constraints. (line   41)
32853* V850 Options:                          V850 Options.       (line    6)
32854* vague linkage:                         Vague Linkage.      (line    6)
32855* value after longjmp:                   Global Reg Vars.    (line   66)
32856* variable addressability on the IA-64:  Function Attributes.
32857                                                             (line  457)
32858* variable addressability on the M32R/D: Variable Attributes.
32859                                                             (line  294)
32860* variable alignment:                    Alignment.          (line    6)
32861* variable attributes:                   Variable Attributes.
32862                                                             (line    6)
32863* variable number of arguments:          Variadic Macros.    (line    6)
32864* variable-length array scope:           Variable Length.    (line   23)
32865* variable-length arrays:                Variable Length.    (line    6)
32866* variables in specified registers:      Explicit Reg Vars.  (line    6)
32867* variables, local, in macros:           Typeof.             (line   42)
32868* variadic macros:                       Variadic Macros.    (line    6)
32869* VAX calling convention:                Interoperation.     (line  150)
32870* VAX options:                           VAX Options.        (line    6)
32871* vfprintf:                              Other Builtins.     (line    6)
32872* vfscanf:                               Other Builtins.     (line    6)
32873* visibility attribute:                  Function Attributes.
32874                                                             (line  755)
32875* VLAs:                                  Variable Length.    (line    6)
32876* void pointers, arithmetic:             Pointer Arith.      (line    6)
32877* void, size of pointer to:              Pointer Arith.      (line    6)
32878* volatile access:                       Volatiles.          (line    6)
32879* volatile applied to function:          Function Attributes.
32880                                                             (line    6)
32881* volatile read:                         Volatiles.          (line    6)
32882* volatile write:                        Volatiles.          (line    6)
32883* vprintf:                               Other Builtins.     (line    6)
32884* vscanf:                                Other Builtins.     (line    6)
32885* vsnprintf:                             Other Builtins.     (line    6)
32886* vsprintf:                              Other Builtins.     (line    6)
32887* vsscanf:                               Other Builtins.     (line    6)
32888* vtable:                                Vague Linkage.      (line   28)
32889* warn_unused_result attribute:          Function Attributes.
32890                                                             (line  849)
32891* warning for comparison of signed and unsigned values: Warning Options.
32892                                                             (line  830)
32893* warning for overloaded virtual fn:     C++ Dialect Options.
32894                                                             (line  406)
32895* warning for reordering of member initializers: C++ Dialect Options.
32896                                                             (line  327)
32897* warning for unknown pragmas:           Warning Options.    (line  474)
32898* warning messages:                      Warning Options.    (line    6)
32899* warnings from system headers:          Warning Options.    (line  648)
32900* warnings vs errors:                    Warnings and Errors.
32901                                                             (line    6)
32902* weak attribute:                        Function Attributes.
32903                                                             (line  866)
32904* weakref attribute:                     Function Attributes.
32905                                                             (line  875)
32906* whitespace:                            Incompatibilities.  (line  112)
32907* X in constraint:                       Simple Constraints. (line  112)
32908* X3.159-1989:                           Standards.          (line    6)
32909* x86-64 options:                        x86-64 Options.     (line    6)
32910* x86-64 Options:                        i386 and x86-64 Options.
32911                                                             (line    6)
32912* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
32913* Xtensa Options:                        Xtensa Options.     (line    6)
32914* y0:                                    Other Builtins.     (line    6)
32915* y0f:                                   Other Builtins.     (line    6)
32916* y0l:                                   Other Builtins.     (line    6)
32917* y1:                                    Other Builtins.     (line    6)
32918* y1f:                                   Other Builtins.     (line    6)
32919* y1l:                                   Other Builtins.     (line    6)
32920* yn:                                    Other Builtins.     (line    6)
32921* ynf:                                   Other Builtins.     (line    6)
32922* ynl:                                   Other Builtins.     (line    6)
32923* zero-length arrays:                    Zero Length.        (line    6)
32924* zero-size structures:                  Empty Structures.   (line    6)
32925* zSeries options:                       zSeries Options.    (line    6)
32926
32927
32928
32929Tag Table:
32930Node: Top2067
32931Node: G++ and GCC3749
32932Node: Standards5814
32933Node: Invoking GCC12942
32934Node: Option Summary16703
32935Node: Overall Options45263
32936Node: Invoking G++54489
32937Node: C Dialect Options55968
32938Node: C++ Dialect Options68381
32939Node: Objective-C and Objective-C++ Dialect Options87431
32940Node: Language Independent Options99027
32941Node: Warning Options101109
32942Node: Debugging Options152492
32943Node: Optimize Options184360
32944Node: Preprocessor Options264634
32945Ref: Wtrigraphs268598
32946Ref: dashMF273355
32947Ref: fdollars-in-identifiers282513
32948Node: Assembler Options290569
32949Node: Link Options291274
32950Ref: Link Options-Footnote-1299842
32951Node: Directory Options300176
32952Node: Spec Files306238
32953Node: Target Options325544
32954Node: Submodel Options326968
32955Node: ARC Options328598
32956Node: ARM Options329788
32957Node: AVR Options341399
32958Node: Blackfin Options343532
32959Node: CRIS Options346300
32960Node: CRX Options350519
32961Node: Darwin Options350944
32962Node: DEC Alpha Options357897
32963Node: DEC Alpha/VMS Options369374
32964Node: FRV Options369759
32965Node: GNU/Linux Options376429
32966Node: H8/300 Options376887
32967Node: HPPA Options377954
32968Node: i386 and x86-64 Options387547
32969Node: IA-64 Options408992
32970Node: M32C Options416309
32971Node: M32R/D Options417600
32972Node: M680x0 Options421187
32973Node: M68hc1x Options428564
32974Node: MCore Options430132
32975Node: MIPS Options431153
32976Node: MMIX Options446236
32977Node: MN10300 Options448718
32978Node: MT Options450136
32979Node: PDP-11 Options451050
32980Node: PowerPC Options452884
32981Node: RS/6000 and PowerPC Options453118
32982Node: S/390 and zSeries Options481787
32983Node: Score Options489102
32984Node: SH Options489930
32985Node: SPARC Options499154
32986Node: System V Options509997
32987Node: TMS320C3x/C4x Options510831
32988Node: V850 Options516356
32989Node: VAX Options519501
32990Node: x86-64 Options520048
32991Node: Xstormy16 Options520262
32992Node: Xtensa Options520551
32993Node: zSeries Options524391
32994Node: Code Gen Options524587
32995Node: Environment Variables545236
32996Node: Precompiled Headers552908
32997Node: Running Protoize559145
32998Node: C Implementation565482
32999Node: Translation implementation567145
33000Node: Environment implementation567719
33001Node: Identifiers implementation568269
33002Node: Characters implementation569323
33003Node: Integers implementation572129
33004Node: Floating point implementation573954
33005Node: Arrays and pointers implementation576883
33006Ref: Arrays and pointers implementation-Footnote-1578318
33007Node: Hints implementation578442
33008Node: Structures unions enumerations and bit-fields implementation579908
33009Node: Qualifiers implementation581871
33010Node: Declarators implementation583643
33011Node: Statements implementation583985
33012Node: Preprocessing directives implementation584312
33013Node: Library functions implementation586417
33014Node: Architecture implementation587057
33015Node: Locale-specific behavior implementation587760
33016Node: C Extensions588065
33017Node: Statement Exprs592463
33018Node: Local Labels596976
33019Node: Labels as Values599955
33020Ref: Labels as Values-Footnote-1602009
33021Node: Nested Functions602192
33022Node: Constructing Calls606086
33023Node: Typeof608422
33024Node: Conditionals611588
33025Node: Long Long612479
33026Node: Complex613980
33027Node: Decimal Float616549
33028Node: Hex Floats618230
33029Node: Zero Length619271
33030Node: Empty Structures622548
33031Node: Variable Length622964
33032Node: Variadic Macros625731
33033Node: Escaped Newlines628113
33034Node: Subscripting628952
33035Node: Pointer Arith629675
33036Node: Initializers630243
33037Node: Compound Literals630739
33038Node: Designated Inits632914
33039Node: Case Ranges636569
33040Node: Cast to Union637252
33041Node: Mixed Declarations638348
33042Node: Function Attributes638854
33043Node: Attribute Syntax682699
33044Node: Function Prototypes693570
33045Node: C++ Comments695351
33046Node: Dollar Signs695870
33047Node: Character Escapes696335
33048Node: Alignment696629
33049Node: Variable Attributes697946
33050Ref: i386 Variable Attributes710969
33051Node: Type Attributes716466
33052Ref: i386 Type Attributes729768
33053Ref: PowerPC Type Attributes730612
33054Node: Inline731465
33055Node: Extended Asm736797
33056Ref: Example of asm with clobbered asm reg742883
33057Node: Constraints756979
33058Node: Simple Constraints757829
33059Node: Multi-Alternative764356
33060Node: Modifiers766073
33061Node: Machine Constraints768967
33062Node: Asm Labels796214
33063Node: Explicit Reg Vars797890
33064Node: Global Reg Vars799498
33065Node: Local Reg Vars804048
33066Node: Alternate Keywords806489
33067Node: Incomplete Enums807917
33068Node: Function Names808674
33069Node: Return Address810864
33070Node: Vector Extensions813661
33071Node: Offsetof817163
33072Node: Atomic Builtins817949
33073Node: Object Size Checking823034
33074Node: Other Builtins828391
33075Node: Target Builtins850479
33076Node: Alpha Built-in Functions851212
33077Node: ARM Built-in Functions854204
33078Node: Blackfin Built-in Functions860911
33079Node: FR-V Built-in Functions861528
33080Node: Argument Types862387
33081Node: Directly-mapped Integer Functions864143
33082Node: Directly-mapped Media Functions865225
33083Node: Raw read/write Functions872257
33084Node: Other Built-in Functions873169
33085Node: X86 Built-in Functions874358
33086Node: MIPS DSP Built-in Functions892481
33087Node: MIPS Paired-Single Support900906
33088Node: Paired-Single Arithmetic902516
33089Node: Paired-Single Built-in Functions903456
33090Node: MIPS-3D Built-in Functions906120
33091Node: PowerPC AltiVec Built-in Functions911489
33092Node: SPARC VIS Built-in Functions1012793
33093Node: Target Format Checks1014452
33094Node: Solaris Format Checks1014859
33095Node: Pragmas1015256
33096Node: ARM Pragmas1015886
33097Node: M32C Pragmas1016489
33098Node: RS/6000 and PowerPC Pragmas1017065
33099Node: Darwin Pragmas1017807
33100Node: Solaris Pragmas1018874
33101Node: Symbol-Renaming Pragmas1020035
33102Node: Structure-Packing Pragmas1022657
33103Node: Weak Pragmas1024288
33104Node: Diagnostic Pragmas1025090
33105Node: Visibility Pragmas1027083
33106Node: Unnamed Fields1027804
33107Node: Thread-Local1029314
33108Node: C99 Thread-Local Edits1031398
33109Node: C++98 Thread-Local Edits1033410
33110Node: C++ Extensions1036855
33111Node: Volatiles1038431
33112Node: Restricted Pointers1041107
33113Node: Vague Linkage1042701
33114Node: C++ Interface1046357
33115Ref: C++ Interface-Footnote-11050654
33116Node: Template Instantiation1050791
33117Node: Bound member functions1057803
33118Node: C++ Attributes1059346
33119Node: Namespace Association1061004
33120Node: Java Exceptions1062422
33121Node: Deprecated Features1063827
33122Node: Backwards Compatibility1066802
33123Node: Objective-C1068157
33124Node: Executing code before main1068738
33125Node: What you can and what you cannot do in +load1071344
33126Node: Type encoding1073511
33127Node: Garbage Collection1076898
33128Node: Constant string objects1079522
33129Node: compatibility_alias1082030
33130Node: Compatibility1082908
33131Node: Gcov1089475
33132Node: Gcov Intro1089999
33133Node: Invoking Gcov1092715
33134Node: Gcov and Optimization1104575
33135Node: Gcov Data Files1107228
33136Node: Cross-profiling1108366
33137Node: Trouble1110192
33138Node: Actual Bugs1111732
33139Node: Cross-Compiler Problems1112472
33140Node: Interoperation1112886
33141Node: Incompatibilities1120484
33142Node: Fixed Headers1128634
33143Node: Standard Libraries1130297
33144Node: Disappointments1131669
33145Node: C++ Misunderstandings1136027
33146Node: Static Definitions1136846
33147Node: Name lookup1137899
33148Ref: Name lookup-Footnote-11142677
33149Node: Temporaries1142864
33150Node: Copy Assignment1144840
33151Node: Protoize Caveats1146647
33152Node: Non-bugs1150609
33153Node: Warnings and Errors1161113
33154Node: Bugs1162877
33155Node: Bug Criteria1163441
33156Node: Bug Reporting1165651
33157Node: Service1166043
33158Node: Contributing1166862
33159Node: Funding1167602
33160Node: GNU Project1170091
33161Node: Copying1170737
33162Node: GNU Free Documentation License1189914
33163Node: Contributors1212320
33164Node: Option Index1248176
33165Node: Keyword Index1384054
33166
33167End Tag Table
33168