xref: /openbsd-src/gnu/gcc/gcc/doc/gcc.info (revision 898184e3e61f9129feb5978fad5a8c6865f00b92)
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          -Wc++-compat -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment
426          -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`-Wformat'
2391     Check calls to `printf' and `scanf', etc., to make sure that the
2392     arguments supplied have types appropriate to the format string
2393     specified, and that the conversions specified in the format string
2394     make sense.  This includes standard functions, and others
2395     specified by format attributes (*note Function Attributes::), in
2396     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2397     extension, not in the C standard) families (or other
2398     target-specific families).  Which functions are checked without
2399     format attributes having been specified depends on the standard
2400     version selected, and such checks of functions without the
2401     attribute specified are disabled by `-ffreestanding' or
2402     `-fno-builtin'.
2403
2404     The formats are checked against the format features supported by
2405     GNU libc version 2.2.  These include all ISO C90 and C99 features,
2406     as well as features from the Single Unix Specification and some
2407     BSD and GNU extensions.  Other library implementations may not
2408     support all these features; GCC does not support warning about
2409     features that go beyond a particular library's limitations.
2410     However, if `-pedantic' is used with `-Wformat', warnings will be
2411     given about format features not in the selected standard version
2412     (but not for `strfmon' formats, since those are not in any version
2413     of the C standard).  *Note Options Controlling C Dialect: C
2414     Dialect Options.
2415
2416     Since `-Wformat' also checks for null format arguments for several
2417     functions, `-Wformat' also implies `-Wnonnull'.
2418
2419     `-Wformat' is included in `-Wall'.  For more control over some
2420     aspects of format checking, the options `-Wformat-y2k',
2421     `-Wno-format-extra-args', `-Wno-format-zero-length',
2422     `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2423     available, but are not included in `-Wall'.
2424
2425`-Wformat-y2k'
2426     If `-Wformat' is specified, also warn about `strftime' formats
2427     which may yield only a two-digit year.
2428
2429`-Wno-format-extra-args'
2430     If `-Wformat' is specified, do not warn about excess arguments to a
2431     `printf' or `scanf' format function.  The C standard specifies
2432     that such arguments are ignored.
2433
2434     Where the unused arguments lie between used arguments that are
2435     specified with `$' operand number specifications, normally
2436     warnings are still given, since the implementation could not know
2437     what type to pass to `va_arg' to skip the unused arguments.
2438     However, in the case of `scanf' formats, this option will suppress
2439     the warning if the unused arguments are all pointers, since the
2440     Single Unix Specification says that such unused arguments are
2441     allowed.
2442
2443`-Wno-format-zero-length'
2444     If `-Wformat' is specified, do not warn about zero-length formats.
2445     The C standard specifies that zero-length formats are allowed.
2446
2447`-Wformat-nonliteral'
2448     If `-Wformat' is specified, also warn if the format string is not a
2449     string literal and so cannot be checked, unless the format function
2450     takes its format arguments as a `va_list'.
2451
2452`-Wformat-security'
2453     If `-Wformat' is specified, also warn about uses of format
2454     functions that represent possible security problems.  At present,
2455     this warns about calls to `printf' and `scanf' functions where the
2456     format string is not a string literal and there are no format
2457     arguments, as in `printf (foo);'.  This may be a security hole if
2458     the format string came from untrusted input and contains `%n'.
2459     (This is currently a subset of what `-Wformat-nonliteral' warns
2460     about, but in future warnings may be added to `-Wformat-security'
2461     that are not included in `-Wformat-nonliteral'.)
2462
2463`-Wformat=2'
2464     Enable `-Wformat' plus format checks not included in `-Wformat'.
2465     Currently equivalent to `-Wformat -Wformat-nonliteral
2466     -Wformat-security -Wformat-y2k'.
2467
2468`-Wnonnull'
2469     Warn about passing a null pointer for arguments marked as
2470     requiring a non-null value by the `nonnull' function attribute.
2471
2472     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
2473     disabled with the `-Wno-nonnull' option.
2474
2475`-Winit-self (C, C++, Objective-C and Objective-C++ only)'
2476     Warn about uninitialized variables which are initialized with
2477     themselves.  Note this option can only be used with the
2478     `-Wuninitialized' option, which in turn only works with `-O1' and
2479     above.
2480
2481     For example, GCC will warn about `i' being uninitialized in the
2482     following snippet only when `-Winit-self' has been specified:
2483          int f()
2484          {
2485            int i = i;
2486            return i;
2487          }
2488
2489`-Wimplicit-int'
2490     Warn when a declaration does not specify a type.  This warning is
2491     enabled by `-Wall'.
2492
2493`-Wimplicit-function-declaration'
2494`-Werror-implicit-function-declaration'
2495     Give a warning (or error) whenever a function is used before being
2496     declared.  The form `-Wno-error-implicit-function-declaration' is
2497     not supported.  This warning is enabled by `-Wall' (as a warning,
2498     not an error).
2499
2500`-Wimplicit'
2501     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
2502     This warning is enabled by `-Wall'.
2503
2504`-Wmain'
2505     Warn if the type of `main' is suspicious.  `main' should be a
2506     function with external linkage, returning int, taking either zero
2507     arguments, two, or three arguments of appropriate types.  This
2508     warning is enabled by `-Wall'.
2509
2510`-Wmissing-braces'
2511     Warn if an aggregate or union initializer is not fully bracketed.
2512     In the following example, the initializer for `a' is not fully
2513     bracketed, but that for `b' is fully bracketed.
2514
2515          int a[2][2] = { 0, 1, 2, 3 };
2516          int b[2][2] = { { 0, 1 }, { 2, 3 } };
2517
2518     This warning is enabled by `-Wall'.
2519
2520`-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
2521     Warn if a user-supplied include directory does not exist.
2522
2523`-Wparentheses'
2524     Warn if parentheses are omitted in certain contexts, such as when
2525     there is an assignment in a context where a truth value is
2526     expected, or when operators are nested whose precedence people
2527     often get confused about.  Only the warning for an assignment used
2528     as a truth value is supported when compiling C++; the other
2529     warnings are only supported when compiling C.
2530
2531     Also warn if a comparison like `x<=y<=z' appears; this is
2532     equivalent to `(x<=y ? 1 : 0) <= z', which is a different
2533     interpretation from that of ordinary mathematical notation.
2534
2535     Also warn about constructions where there may be confusion to which
2536     `if' statement an `else' branch belongs.  Here is an example of
2537     such a case:
2538
2539          {
2540            if (a)
2541              if (b)
2542                foo ();
2543            else
2544              bar ();
2545          }
2546
2547     In C, every `else' branch belongs to the innermost possible `if'
2548     statement, which in this example is `if (b)'.  This is often not
2549     what the programmer expected, as illustrated in the above example
2550     by indentation the programmer chose.  When there is the potential
2551     for this confusion, GCC will issue a warning when this flag is
2552     specified.  To eliminate the warning, add explicit braces around
2553     the innermost `if' statement so there is no way the `else' could
2554     belong to the enclosing `if'.  The resulting code would look like
2555     this:
2556
2557          {
2558            if (a)
2559              {
2560                if (b)
2561                  foo ();
2562                else
2563                  bar ();
2564              }
2565          }
2566
2567     This warning is enabled by `-Wall'.
2568
2569`-Wsequence-point'
2570     Warn about code that may have undefined semantics because of
2571     violations of sequence point rules in the C and C++ standards.
2572
2573     The C and C++ standards defines the order in which expressions in
2574     a C/C++ program are evaluated in terms of "sequence points", which
2575     represent a partial ordering between the execution of parts of the
2576     program: those executed before the sequence point, and those
2577     executed after it.  These occur after the evaluation of a full
2578     expression (one which is not part of a larger expression), after
2579     the evaluation of the first operand of a `&&', `||', `? :' or `,'
2580     (comma) operator, before a function is called (but after the
2581     evaluation of its arguments and the expression denoting the called
2582     function), and in certain other places.  Other than as expressed
2583     by the sequence point rules, the order of evaluation of
2584     subexpressions of an expression is not specified.  All these rules
2585     describe only a partial order rather than a total order, since,
2586     for example, if two functions are called within one expression
2587     with no sequence point between them, the order in which the
2588     functions are called is not specified.  However, the standards
2589     committee have ruled that function calls do not overlap.
2590
2591     It is not specified when between sequence points modifications to
2592     the values of objects take effect.  Programs whose behavior
2593     depends on this have undefined behavior; the C and C++ standards
2594     specify that "Between the previous and next sequence point an
2595     object shall have its stored value modified at most once by the
2596     evaluation of an expression.  Furthermore, the prior value shall
2597     be read only to determine the value to be stored.".  If a program
2598     breaks these rules, the results on any particular implementation
2599     are entirely unpredictable.
2600
2601     Examples of code with undefined behavior are `a = a++;', `a[n] =
2602     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
2603     diagnosed by this option, and it may give an occasional false
2604     positive result, but in general it has been found fairly effective
2605     at detecting this sort of problem in programs.
2606
2607     The standard is worded confusingly, therefore there is some debate
2608     over the precise meaning of the sequence point rules in subtle
2609     cases.  Links to discussions of the problem, including proposed
2610     formal definitions, may be found on the GCC readings page, at
2611     `http://gcc.gnu.org/readings.html'.
2612
2613     This warning is enabled by `-Wall' for C and C++.
2614
2615`-Wreturn-type'
2616     Warn whenever a function is defined with a return-type that
2617     defaults to `int'.  Also warn about any `return' statement with no
2618     return-value in a function whose return-type is not `void'.
2619
2620     For C, also warn if the return type of a function has a type
2621     qualifier such as `const'.  Such a type qualifier has no effect,
2622     since the value returned by a function is not an lvalue.  ISO C
2623     prohibits qualified `void' return types on function definitions,
2624     so such return types always receive a warning even without this
2625     option.
2626
2627     For C++, a function without return type always produces a
2628     diagnostic message, even when `-Wno-return-type' is specified.
2629     The only exceptions are `main' and functions defined in system
2630     headers.
2631
2632     This warning is enabled by `-Wall'.
2633
2634`-Wswitch'
2635     Warn whenever a `switch' statement has an index of enumerated type
2636     and lacks a `case' for one or more of the named codes of that
2637     enumeration.  (The presence of a `default' label prevents this
2638     warning.)  `case' labels outside the enumeration range also
2639     provoke warnings when this option is used.  This warning is
2640     enabled by `-Wall'.
2641
2642`-Wswitch-default'
2643     Warn whenever a `switch' statement does not have a `default' case.
2644
2645`-Wswitch-enum'
2646     Warn whenever a `switch' statement has an index of enumerated type
2647     and lacks a `case' for one or more of the named codes of that
2648     enumeration.  `case' labels outside the enumeration range also
2649     provoke warnings when this option is used.
2650
2651`-Wtrigraphs'
2652     Warn if any trigraphs are encountered that might change the
2653     meaning of the program (trigraphs within comments are not warned
2654     about).  This warning is enabled by `-Wall'.
2655
2656`-Wunused-function'
2657     Warn whenever a static function is declared but not defined or a
2658     non-inline static function is unused.  This warning is enabled by
2659     `-Wall'.
2660
2661`-Wunused-label'
2662     Warn whenever a label is declared but not used.  This warning is
2663     enabled by `-Wall'.
2664
2665     To suppress this warning use the `unused' attribute (*note
2666     Variable Attributes::).
2667
2668`-Wunused-parameter'
2669     Warn whenever a function parameter is unused aside from its
2670     declaration.
2671
2672     To suppress this warning use the `unused' attribute (*note
2673     Variable Attributes::).
2674
2675`-Wunused-variable'
2676     Warn whenever a local variable or non-constant static variable is
2677     unused aside from its declaration.  This warning is enabled by
2678     `-Wall'.
2679
2680     To suppress this warning use the `unused' attribute (*note
2681     Variable Attributes::).
2682
2683`-Wunused-value'
2684     Warn whenever a statement computes a result that is explicitly not
2685     used.  This warning is enabled by `-Wall'.
2686
2687     To suppress this warning cast the expression to `void'.
2688
2689`-Wunused'
2690     All the above `-Wunused' options combined.
2691
2692     In order to get a warning about an unused function parameter, you
2693     must either specify `-Wextra -Wunused' (note that `-Wall' implies
2694     `-Wunused'), or separately specify `-Wunused-parameter'.
2695
2696`-Wuninitialized'
2697     Warn if an automatic variable is used without first being
2698     initialized or if a variable may be clobbered by a `setjmp' call.
2699
2700     These warnings are possible only in optimizing compilation,
2701     because they require data flow information that is computed only
2702     when optimizing.  If you do not specify `-O', you will not get
2703     these warnings. Instead, GCC will issue a warning about
2704     `-Wuninitialized' requiring `-O'.
2705
2706     If you want to warn about code which uses the uninitialized value
2707     of the variable in its own initializer, use the `-Winit-self'
2708     option.
2709
2710     These warnings occur for individual uninitialized or clobbered
2711     elements of structure, union or array variables as well as for
2712     variables which are uninitialized or clobbered as a whole.  They do
2713     not occur for variables or elements declared `volatile'.  Because
2714     these warnings depend on optimization, the exact variables or
2715     elements for which there are warnings will depend on the precise
2716     optimization options and version of GCC used.
2717
2718     Note that there may be no warning about a variable that is used
2719     only to compute a value that itself is never used, because such
2720     computations may be deleted by data flow analysis before the
2721     warnings are printed.
2722
2723     These warnings are made optional because GCC is not smart enough
2724     to see all the reasons why the code might be correct despite
2725     appearing to have an error.  Here is one example of how this can
2726     happen:
2727
2728          {
2729            int x;
2730            switch (y)
2731              {
2732              case 1: x = 1;
2733                break;
2734              case 2: x = 4;
2735                break;
2736              case 3: x = 5;
2737              }
2738            foo (x);
2739          }
2740
2741     If the value of `y' is always 1, 2 or 3, then `x' is always
2742     initialized, but GCC doesn't know this.  Here is another common
2743     case:
2744
2745          {
2746            int save_y;
2747            if (change_y) save_y = y, y = new_y;
2748            ...
2749            if (change_y) y = save_y;
2750          }
2751
2752     This has no bug because `save_y' is used only if it is set.
2753
2754     This option also warns when a non-volatile automatic variable
2755     might be changed by a call to `longjmp'.  These warnings as well
2756     are possible only in optimizing compilation.
2757
2758     The compiler sees only the calls to `setjmp'.  It cannot know
2759     where `longjmp' will be called; in fact, a signal handler could
2760     call it at any point in the code.  As a result, you may get a
2761     warning even when there is in fact no problem because `longjmp'
2762     cannot in fact be called at the place which would cause a problem.
2763
2764     Some spurious warnings can be avoided if you declare all the
2765     functions you use that never return as `noreturn'.  *Note Function
2766     Attributes::.
2767
2768     This warning is enabled by `-Wall'.
2769
2770`-Wunknown-pragmas'
2771     Warn when a #pragma directive is encountered which is not
2772     understood by GCC.  If this command line option is used, warnings
2773     will even be issued for unknown pragmas in system header files.
2774     This is not the case if the warnings were only enabled by the
2775     `-Wall' command line option.
2776
2777`-Wno-pragmas'
2778     Do not warn about misuses of pragmas, such as incorrect parameters,
2779     invalid syntax, or conflicts between pragmas.  See also
2780     `-Wunknown-pragmas'.
2781
2782`-Wstrict-aliasing'
2783     This option is only active when `-fstrict-aliasing' is active.  It
2784     warns about code which might break the strict aliasing rules that
2785     the compiler is using for optimization.  The warning does not
2786     catch all cases, but does attempt to catch the more common
2787     pitfalls.  It is included in `-Wall'.
2788
2789`-Wstrict-aliasing=2'
2790     This option is only active when `-fstrict-aliasing' is active.  It
2791     warns about code which might break the strict aliasing rules that
2792     the compiler is using for optimization.  This warning catches more
2793     cases than `-Wstrict-aliasing', but it will also give a warning
2794     for some ambiguous cases that are safe.
2795
2796`-Wstrict-overflow'
2797
2798`-Wstrict-overflow=N'
2799     This option is only active when `-fstrict-overflow' is active.  It
2800     warns about cases where the compiler optimizes based on the
2801     assumption that signed overflow does not occur.  Note that it does
2802     not warn about all cases where the code might overflow: it only
2803     warns about cases where the compiler implements some optimization.
2804     Thus this warning depends on the optimization level.
2805
2806     An optimization which assumes that signed overflow does not occur
2807     is perfectly safe if the values of the variables involved are such
2808     that overflow never does, in fact, occur.  Therefore this warning
2809     can easily give a false positive: a warning about code which is not
2810     actually a problem.  To help focus on important issues, several
2811     warning levels are defined.  No warnings are issued for the use of
2812     undefined signed overflow when estimating how many iterations a
2813     loop will require, in particular when determining whether a loop
2814     will be executed at all.
2815
2816    `-Wstrict-overflow=1'
2817          Warn about cases which are both questionable and easy to
2818          avoid.  For example: `x + 1 > x'; with `-fstrict-overflow',
2819          the compiler will simplify this to `1'.  This level of
2820          `-Wstrict-overflow' is enabled by `-Wall'; higher levels are
2821          not, and must be explicitly requested.
2822
2823    `-Wstrict-overflow=2'
2824          Also warn about other cases where a comparison is simplified
2825          to a constant.  For example: `abs (x) >= 0'.  This can only be
2826          simplified when `-fstrict-overflow' is in effect, because
2827          `abs (INT_MIN)' overflows to `INT_MIN', which is less than
2828          zero.  `-Wstrict-overflow' (with no level) is the same as
2829          `-Wstrict-overflow=2'.
2830
2831    `-Wstrict-overflow=3'
2832          Also warn about other cases where a comparison is simplified.
2833          For example: `x + 1 > 1' will be simplified to `x > 0'.
2834
2835    `-Wstrict-overflow=4'
2836          Also warn about other simplifications not covered by the
2837          above cases.  For example: `(x * 10) / 5' will be simplified
2838          to `x * 2'.
2839
2840    `-Wstrict-overflow=5'
2841          Also warn about cases where the compiler reduces the
2842          magnitude of a constant involved in a comparison.  For
2843          example: `x + 2 > y' will be simplified to `x + 1 >= y'.
2844          This is reported only at the highest warning level because
2845          this simplification applies to many comparisons, so this
2846          warning level will give a very large number of false
2847          positives.
2848
2849`-Wall'
2850     All of the above `-W' options combined.  This enables all the
2851     warnings about constructions that some users consider
2852     questionable, and that are easy to avoid (or modify to prevent the
2853     warning), even in conjunction with macros.  This also enables some
2854     language-specific warnings described in *Note C++ Dialect
2855     Options:: and *Note Objective-C and Objective-C++ Dialect
2856     Options::.
2857
2858 The following `-W...' options are not implied by `-Wall'.  Some of
2859them warn about constructions that users generally do not consider
2860questionable, but which occasionally you might wish to check for;
2861others warn about constructions that are necessary or hard to avoid in
2862some cases, and there is no simple way to modify the code to suppress
2863the warning.
2864
2865`-Wextra'
2866     (This option used to be called `-W'.  The older name is still
2867     supported, but the newer name is more descriptive.)  Print extra
2868     warning messages for these events:
2869
2870        * A function can return either with or without a value.
2871          (Falling off the end of the function body is considered
2872          returning without a value.)  For example, this function would
2873          evoke such a warning:
2874
2875               foo (a)
2876               {
2877                 if (a > 0)
2878                   return a;
2879               }
2880
2881        * An expression-statement or the left-hand side of a comma
2882          expression contains no side effects.  To suppress the
2883          warning, cast the unused expression to void.  For example, an
2884          expression such as `x[i,j]' will cause a warning, but
2885          `x[(void)i,j]' will not.
2886
2887        * An unsigned value is compared against zero with `<' or `>='.
2888
2889        * Storage-class specifiers like `static' are not the first
2890          things in a declaration.  According to the C Standard, this
2891          usage is obsolescent.
2892
2893        * If `-Wall' or `-Wunused' is also specified, warn about unused
2894          arguments.
2895
2896        * A comparison between signed and unsigned values could produce
2897          an incorrect result when the signed value is converted to
2898          unsigned.  (But don't warn if `-Wno-sign-compare' is also
2899          specified.)
2900
2901        * An aggregate has an initializer which does not initialize all
2902          members.  This warning can be independently controlled by
2903          `-Wmissing-field-initializers'.
2904
2905        * An initialized field without side effects is overridden when
2906          using designated initializers (*note Designated Initializers:
2907          Designated Inits.).  This warning can be independently
2908          controlled by `-Woverride-init'.
2909
2910        * A function parameter is declared without a type specifier in
2911          K&R-style functions:
2912
2913               void foo(bar) { }
2914
2915        * An empty body occurs in an `if' or `else' statement.
2916
2917        * A pointer is compared against integer zero with `<', `<=',
2918          `>', or `>='.
2919
2920        * A variable might be changed by `longjmp' or `vfork'.
2921
2922        * (C++ only) An enumerator and a non-enumerator both appear in
2923          a conditional expression.
2924
2925        * (C++ only) A non-static reference or non-static `const'
2926          member appears in a class without constructors.
2927
2928        * (C++ only) Ambiguous virtual bases.
2929
2930        * (C++ only) Subscripting an array which has been declared
2931          `register'.
2932
2933        * (C++ only) Taking the address of a variable which has been
2934          declared `register'.
2935
2936        * (C++ only) A base class is not initialized in a derived
2937          class' copy constructor.
2938
2939`-Wno-div-by-zero'
2940     Do not warn about compile-time integer division by zero.  Floating
2941     point division by zero is not warned about, as it can be a
2942     legitimate way of obtaining infinities and NaNs.
2943
2944`-Wsystem-headers'
2945     Print warning messages for constructs found in system header files.
2946     Warnings from system headers are normally suppressed, on the
2947     assumption that they usually do not indicate real problems and
2948     would only make the compiler output harder to read.  Using this
2949     command line option tells GCC to emit warnings from system headers
2950     as if they occurred in user code.  However, note that using
2951     `-Wall' in conjunction with this option will _not_ warn about
2952     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
2953     must also be used.
2954
2955`-Wfloat-equal'
2956     Warn if floating point values are used in equality comparisons.
2957
2958     The idea behind this is that sometimes it is convenient (for the
2959     programmer) to consider floating-point values as approximations to
2960     infinitely precise real numbers.  If you are doing this, then you
2961     need to compute (by analyzing the code, or in some other way) the
2962     maximum or likely maximum error that the computation introduces,
2963     and allow for it when performing comparisons (and when producing
2964     output, but that's a different problem).  In particular, instead
2965     of testing for equality, you would check to see whether the two
2966     values have ranges that overlap; and this is done with the
2967     relational operators, so equality comparisons are probably
2968     mistaken.
2969
2970`-Wtraditional (C only)'
2971     Warn about certain constructs that behave differently in
2972     traditional and ISO C.  Also warn about ISO C constructs that have
2973     no traditional C equivalent, and/or problematic constructs which
2974     should be avoided.
2975
2976        * Macro parameters that appear within string literals in the
2977          macro body.  In traditional C macro replacement takes place
2978          within string literals, but does not in ISO C.
2979
2980        * In traditional C, some preprocessor directives did not exist.
2981          Traditional preprocessors would only consider a line to be a
2982          directive if the `#' appeared in column 1 on the line.
2983          Therefore `-Wtraditional' warns about directives that
2984          traditional C understands but would ignore because the `#'
2985          does not appear as the first character on the line.  It also
2986          suggests you hide directives like `#pragma' not understood by
2987          traditional C by indenting them.  Some traditional
2988          implementations would not recognize `#elif', so it suggests
2989          avoiding it altogether.
2990
2991        * A function-like macro that appears without arguments.
2992
2993        * The unary plus operator.
2994
2995        * The `U' integer constant suffix, or the `F' or `L' floating
2996          point constant suffixes.  (Traditional C does support the `L'
2997          suffix on integer constants.)  Note, these suffixes appear in
2998          macros defined in the system headers of most modern systems,
2999          e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
3000          macros in user code might normally lead to spurious warnings,
3001          however GCC's integrated preprocessor has enough context to
3002          avoid warning in these cases.
3003
3004        * A function declared external in one block and then used after
3005          the end of the block.
3006
3007        * A `switch' statement has an operand of type `long'.
3008
3009        * A non-`static' function declaration follows a `static' one.
3010          This construct is not accepted by some traditional C
3011          compilers.
3012
3013        * The ISO type of an integer constant has a different width or
3014          signedness from its traditional type.  This warning is only
3015          issued if the base of the constant is ten.  I.e. hexadecimal
3016          or octal values, which typically represent bit patterns, are
3017          not warned about.
3018
3019        * Usage of ISO string concatenation is detected.
3020
3021        * Initialization of automatic aggregates.
3022
3023        * Identifier conflicts with labels.  Traditional C lacks a
3024          separate namespace for labels.
3025
3026        * Initialization of unions.  If the initializer is zero, the
3027          warning is omitted.  This is done under the assumption that
3028          the zero initializer in user code appears conditioned on e.g.
3029          `__STDC__' to avoid missing initializer warnings and relies
3030          on default initialization to zero in the traditional C case.
3031
3032        * Conversions by prototypes between fixed/floating point values
3033          and vice versa.  The absence of these prototypes when
3034          compiling with traditional C would cause serious problems.
3035          This is a subset of the possible conversion warnings, for the
3036          full set use `-Wconversion'.
3037
3038        * Use of ISO C style function definitions.  This warning
3039          intentionally is _not_ issued for prototype declarations or
3040          variadic functions because these ISO C features will appear
3041          in your code when using libiberty's traditional C
3042          compatibility macros, `PARAMS' and `VPARAMS'.  This warning
3043          is also bypassed for nested functions because that feature is
3044          already a GCC extension and thus not relevant to traditional
3045          C compatibility.
3046
3047`-Wdeclaration-after-statement (C only)'
3048     Warn when a declaration is found after a statement in a block.
3049     This construct, known from C++, was introduced with ISO C99 and is
3050     by default allowed in GCC.  It is not supported by ISO C90 and was
3051     not supported by GCC versions before GCC 3.0.  *Note Mixed
3052     Declarations::.
3053
3054`-Wundef'
3055     Warn if an undefined identifier is evaluated in an `#if' directive.
3056
3057`-Wno-endif-labels'
3058     Do not warn whenever an `#else' or an `#endif' are followed by
3059     text.
3060
3061`-Wshadow'
3062     Warn whenever a local variable shadows another local variable,
3063     parameter or global variable or whenever a built-in function is
3064     shadowed.
3065
3066`-Wlarger-than-LEN'
3067     Warn whenever an object of larger than LEN bytes is defined.
3068
3069`-Wunsafe-loop-optimizations'
3070     Warn if the loop cannot be optimized because the compiler could not
3071     assume anything on the bounds of the loop indices.  With
3072     `-funsafe-loop-optimizations' warn if the compiler made such
3073     assumptions.
3074
3075`-Wpointer-arith'
3076     Warn about anything that depends on the "size of" a function type
3077     or of `void'.  GNU C assigns these types a size of 1, for
3078     convenience in calculations with `void *' pointers and pointers to
3079     functions.
3080
3081`-Wbad-function-cast (C only)'
3082     Warn whenever a function call is cast to a non-matching type.  For
3083     example, warn if `int malloc()' is cast to `anything *'.
3084
3085`-Wc++-compat'
3086     Warn about ISO C constructs that are outside of the common subset
3087     of ISO C and ISO C++, e.g. request for implicit conversion from
3088     `void *' to a pointer to non-`void' type.
3089
3090`-Wcast-qual'
3091     Warn whenever a pointer is cast so as to remove a type qualifier
3092     from the target type.  For example, warn if a `const char *' is
3093     cast to an ordinary `char *'.
3094
3095`-Wcast-align'
3096     Warn whenever a pointer is cast such that the required alignment
3097     of the target is increased.  For example, warn if a `char *' is
3098     cast to an `int *' on machines where integers can only be accessed
3099     at two- or four-byte boundaries.
3100
3101`-Wwrite-strings'
3102     When compiling C, give string constants the type `const
3103     char[LENGTH]' so that copying the address of one into a
3104     non-`const' `char *' pointer will get a warning; when compiling
3105     C++, warn about the deprecated conversion from string literals to
3106     `char *'.  This warning, by default, is enabled for C++ programs.
3107     These warnings will help you find at compile time code that can
3108     try to write into a string constant, but only if you have been
3109     very careful about using `const' in declarations and prototypes.
3110     Otherwise, it will just be a nuisance; this is why we did not make
3111     `-Wall' request these warnings.
3112
3113`-Wconversion'
3114     Warn if a prototype causes a type conversion that is different
3115     from what would happen to the same argument in the absence of a
3116     prototype.  This includes conversions of fixed point to floating
3117     and vice versa, and conversions changing the width or signedness
3118     of a fixed point argument except when the same as the default
3119     promotion.
3120
3121     Also, warn if a negative integer constant expression is implicitly
3122     converted to an unsigned type.  For example, warn about the
3123     assignment `x = -1' if `x' is unsigned.  But do not warn about
3124     explicit casts like `(unsigned) -1'.
3125
3126`-Wsign-compare'
3127     Warn when a comparison between signed and unsigned values could
3128     produce an incorrect result when the signed value is converted to
3129     unsigned.  This warning is also enabled by `-Wextra'; to get the
3130     other warnings of `-Wextra' without this warning, use `-Wextra
3131     -Wno-sign-compare'.
3132
3133`-Waddress'
3134     Warn about suspicious uses of memory addresses. These include using
3135     the address of a function in a conditional expression, such as
3136     `void func(void); if (func)', and comparisons against the memory
3137     address of a string literal, such as `if (x == "abc")'.  Such uses
3138     typically indicate a programmer error: the address of a function
3139     always evaluates to true, so their use in a conditional usually
3140     indicate that the programmer forgot the parentheses in a function
3141     call; and comparisons against string literals result in unspecified
3142     behavior and are not portable in C, so they usually indicate that
3143     the programmer intended to use `strcmp'.  This warning is enabled
3144     by `-Wall'.
3145
3146`-Waggregate-return'
3147     Warn if any functions that return structures or unions are defined
3148     or called.  (In languages where you can return an array, this also
3149     elicits a warning.)
3150
3151`-Wno-attributes'
3152     Do not warn if an unexpected `__attribute__' is used, such as
3153     unrecognized attributes, function attributes applied to variables,
3154     etc.  This will not stop errors for incorrect use of supported
3155     attributes.
3156
3157`-Wstrict-prototypes (C only)'
3158     Warn if a function is declared or defined without specifying the
3159     argument types.  (An old-style function definition is permitted
3160     without a warning if preceded by a declaration which specifies the
3161     argument types.)
3162
3163`-Wold-style-definition (C only)'
3164     Warn if an old-style function definition is used.  A warning is
3165     given even if there is a previous prototype.
3166
3167`-Wmissing-prototypes (C only)'
3168     Warn if a global function is defined without a previous prototype
3169     declaration.  This warning is issued even if the definition itself
3170     provides a prototype.  The aim is to detect global functions that
3171     fail to be declared in header files.
3172
3173`-Wmissing-declarations (C only)'
3174     Warn if a global function is defined without a previous
3175     declaration.  Do so even if the definition itself provides a
3176     prototype.  Use this option to detect global functions that are
3177     not declared in header files.
3178
3179`-Wmissing-field-initializers'
3180     Warn if a structure's initializer has some fields missing.  For
3181     example, the following code would cause such a warning, because
3182     `x.h' is implicitly zero:
3183
3184          struct s { int f, g, h; };
3185          struct s x = { 3, 4 };
3186
3187     This option does not warn about designated initializers, so the
3188     following modification would not trigger a warning:
3189
3190          struct s { int f, g, h; };
3191          struct s x = { .f = 3, .g = 4 };
3192
3193     This warning is included in `-Wextra'.  To get other `-Wextra'
3194     warnings without this one, use `-Wextra
3195     -Wno-missing-field-initializers'.
3196
3197`-Wmissing-noreturn'
3198     Warn about functions which might be candidates for attribute
3199     `noreturn'.  Note these are only possible candidates, not absolute
3200     ones.  Care should be taken to manually verify functions actually
3201     do not ever return before adding the `noreturn' attribute,
3202     otherwise subtle code generation bugs could be introduced.  You
3203     will not get a warning for `main' in hosted C environments.
3204
3205`-Wmissing-format-attribute'
3206     Warn about function pointers which might be candidates for `format'
3207     attributes.  Note these are only possible candidates, not absolute
3208     ones.  GCC will guess that function pointers with `format'
3209     attributes that are used in assignment, initialization, parameter
3210     passing or return statements should have a corresponding `format'
3211     attribute in the resulting type.  I.e. the left-hand side of the
3212     assignment or initialization, the type of the parameter variable,
3213     or the return type of the containing function respectively should
3214     also have a `format' attribute to avoid the warning.
3215
3216     GCC will also warn about function definitions which might be
3217     candidates for `format' attributes.  Again, these are only
3218     possible candidates.  GCC will guess that `format' attributes
3219     might be appropriate for any function that calls a function like
3220     `vprintf' or `vscanf', but this might not always be the case, and
3221     some functions for which `format' attributes are appropriate may
3222     not be detected.
3223
3224`-Wno-multichar'
3225     Do not warn if a multicharacter constant (`'FOOF'') is used.
3226     Usually they indicate a typo in the user's code, as they have
3227     implementation-defined values, and should not be used in portable
3228     code.
3229
3230`-Wnormalized=<none|id|nfc|nfkc>'
3231     In ISO C and ISO C++, two identifiers are different if they are
3232     different sequences of characters.  However, sometimes when
3233     characters outside the basic ASCII character set are used, you can
3234     have two different character sequences that look the same.  To
3235     avoid confusion, the ISO 10646 standard sets out some
3236     "normalization rules" which when applied ensure that two sequences
3237     that look the same are turned into the same sequence.  GCC can
3238     warn you if you are using identifiers which have not been
3239     normalized; this option controls that warning.
3240
3241     There are four levels of warning that GCC supports.  The default is
3242     `-Wnormalized=nfc', which warns about any identifier which is not
3243     in the ISO 10646 "C" normalized form, "NFC".  NFC is the
3244     recommended form for most uses.
3245
3246     Unfortunately, there are some characters which ISO C and ISO C++
3247     allow in identifiers that when turned into NFC aren't allowable as
3248     identifiers.  That is, there's no way to use these symbols in
3249     portable ISO C or C++ and have all your identifiers in NFC.
3250     `-Wnormalized=id' suppresses the warning for these characters.  It
3251     is hoped that future versions of the standards involved will
3252     correct this, which is why this option is not the default.
3253
3254     You can switch the warning off for all characters by writing
3255     `-Wnormalized=none'.  You would only want to do this if you were
3256     using some other normalization scheme (like "D"), because
3257     otherwise you can easily create bugs that are literally impossible
3258     to see.
3259
3260     Some characters in ISO 10646 have distinct meanings but look
3261     identical in some fonts or display methodologies, especially once
3262     formatting has been applied.  For instance `\u207F', "SUPERSCRIPT
3263     LATIN SMALL LETTER N", will display just like a regular `n' which
3264     has been placed in a superscript.  ISO 10646 defines the "NFKC"
3265     normalization scheme to convert all these into a standard form as
3266     well, and GCC will warn if your code is not in NFKC if you use
3267     `-Wnormalized=nfkc'.  This warning is comparable to warning about
3268     every identifier that contains the letter O because it might be
3269     confused with the digit 0, and so is not the default, but may be
3270     useful as a local coding convention if the programming environment
3271     is unable to be fixed to display these characters distinctly.
3272
3273`-Wno-deprecated-declarations'
3274     Do not warn about uses of functions (*note Function Attributes::),
3275     variables (*note Variable Attributes::), and types (*note Type
3276     Attributes::) marked as deprecated by using the `deprecated'
3277     attribute.
3278
3279`-Wno-overflow'
3280     Do not warn about compile-time overflow in constant expressions.
3281
3282`-Woverride-init'
3283     Warn if an initialized field without side effects is overridden
3284     when using designated initializers (*note Designated Initializers:
3285     Designated Inits.).
3286
3287     This warning is included in `-Wextra'.  To get other `-Wextra'
3288     warnings without this one, use `-Wextra -Wno-override-init'.
3289
3290`-Wpacked'
3291     Warn if a structure is given the packed attribute, but the packed
3292     attribute has no effect on the layout or size of the structure.
3293     Such structures may be mis-aligned for little benefit.  For
3294     instance, in this code, the variable `f.x' in `struct bar' will be
3295     misaligned even though `struct bar' does not itself have the
3296     packed attribute:
3297
3298          struct foo {
3299            int x;
3300            char a, b, c, d;
3301          } __attribute__((packed));
3302          struct bar {
3303            char z;
3304            struct foo f;
3305          };
3306
3307`-Wpadded'
3308     Warn if padding is included in a structure, either to align an
3309     element of the structure or to align the whole structure.
3310     Sometimes when this happens it is possible to rearrange the fields
3311     of the structure to reduce the padding and so make the structure
3312     smaller.
3313
3314`-Wredundant-decls'
3315     Warn if anything is declared more than once in the same scope,
3316     even in cases where multiple declaration is valid and changes
3317     nothing.
3318
3319`-Wnested-externs (C only)'
3320     Warn if an `extern' declaration is encountered within a function.
3321
3322`-Wunreachable-code'
3323     Warn if the compiler detects that code will never be executed.
3324
3325     This option is intended to warn when the compiler detects that at
3326     least a whole line of source code will never be executed, because
3327     some condition is never satisfied or because it is after a
3328     procedure that never returns.
3329
3330     It is possible for this option to produce a warning even though
3331     there are circumstances under which part of the affected line can
3332     be executed, so care should be taken when removing
3333     apparently-unreachable code.
3334
3335     For instance, when a function is inlined, a warning may mean that
3336     the line is unreachable in only one inlined copy of the function.
3337
3338     This option is not made part of `-Wall' because in a debugging
3339     version of a program there is often substantial code which checks
3340     correct functioning of the program and is, hopefully, unreachable
3341     because the program does work.  Another common use of unreachable
3342     code is to provide behavior which is selectable at compile-time.
3343
3344`-Winline'
3345     Warn if a function can not be inlined and it was declared as
3346     inline.  Even with this option, the compiler will not warn about
3347     failures to inline functions declared in system headers.
3348
3349     The compiler uses a variety of heuristics to determine whether or
3350     not to inline a function.  For example, the compiler takes into
3351     account the size of the function being inlined and the amount of
3352     inlining that has already been done in the current function.
3353     Therefore, seemingly insignificant changes in the source program
3354     can cause the warnings produced by `-Winline' to appear or
3355     disappear.
3356
3357`-Wno-invalid-offsetof (C++ only)'
3358     Suppress warnings from applying the `offsetof' macro to a non-POD
3359     type.  According to the 1998 ISO C++ standard, applying `offsetof'
3360     to a non-POD type is undefined.  In existing C++ implementations,
3361     however, `offsetof' typically gives meaningful results even when
3362     applied to certain kinds of non-POD types. (Such as a simple
3363     `struct' that fails to be a POD type only by virtue of having a
3364     constructor.)  This flag is for users who are aware that they are
3365     writing nonportable code and who have deliberately chosen to
3366     ignore the warning about it.
3367
3368     The restrictions on `offsetof' may be relaxed in a future version
3369     of the C++ standard.
3370
3371`-Wno-int-to-pointer-cast (C only)'
3372     Suppress warnings from casts to pointer type of an integer of a
3373     different size.
3374
3375`-Wno-pointer-to-int-cast (C only)'
3376     Suppress warnings from casts from a pointer to an integer type of a
3377     different size.
3378
3379`-Winvalid-pch'
3380     Warn if a precompiled header (*note Precompiled Headers::) is
3381     found in the search path but can't be used.
3382
3383`-Wlong-long'
3384     Warn if `long long' type is used.  This is default.  To inhibit
3385     the warning messages, use `-Wno-long-long'.  Flags `-Wlong-long'
3386     and `-Wno-long-long' are taken into account only when `-pedantic'
3387     flag is used.
3388
3389`-Wvariadic-macros'
3390     Warn if variadic macros are used in pedantic ISO C90 mode, or the
3391     GNU alternate syntax when in pedantic ISO C99 mode.  This is
3392     default.  To inhibit the warning messages, use
3393     `-Wno-variadic-macros'.
3394
3395`-Wvolatile-register-var'
3396     Warn if a register variable is declared volatile.  The volatile
3397     modifier does not inhibit all optimizations that may eliminate
3398     reads and/or writes to register variables.
3399
3400`-Wdisabled-optimization'
3401     Warn if a requested optimization pass is disabled.  This warning
3402     does not generally indicate that there is anything wrong with your
3403     code; it merely indicates that GCC's optimizers were unable to
3404     handle the code effectively.  Often, the problem is that your code
3405     is too big or too complex; GCC will refuse to optimize programs
3406     when the optimization itself is likely to take inordinate amounts
3407     of time.
3408
3409`-Wpointer-sign'
3410     Warn for pointer argument passing or assignment with different
3411     signedness.  This option is only supported for C and Objective-C.
3412     It is implied by `-Wall' and by `-pedantic', which can be disabled
3413     with `-Wno-pointer-sign'.
3414
3415`-Werror'
3416     Make all warnings into errors.
3417
3418`-Werror='
3419     Make the specified warning into an errors.  The specifier for a
3420     warning is appended, for example `-Werror=switch' turns the
3421     warnings controlled by `-Wswitch' into errors.  This switch takes
3422     a negative form, to be used to negate `-Werror' for specific
3423     warnings, for example `-Wno-error=switch' makes `-Wswitch'
3424     warnings not be errors, even when `-Werror' is in effect.  You can
3425     use the `-fdiagnostics-show-option' option to have each
3426     controllable warning amended with the option which controls it, to
3427     determine what to use with this option.
3428
3429     Note that specifying `-Werror='FOO automatically implies `-W'FOO.
3430     However, `-Wno-error='FOO does not imply anything.
3431
3432`-Wstack-protector'
3433     This option is only active when `-fstack-protector' is active.  It
3434     warns about functions that will not be protected against stack
3435     smashing.
3436
3437`-Woverlength-strings'
3438     Warn about string constants which are longer than the "minimum
3439     maximum" length specified in the C standard.  Modern compilers
3440     generally allow string constants which are much longer than the
3441     standard's minimum limit, but very portable programs should avoid
3442     using longer strings.
3443
3444     The limit applies _after_ string constant concatenation, and does
3445     not count the trailing NUL.  In C89, the limit was 509 characters;
3446     in C99, it was raised to 4095.  C++98 does not specify a normative
3447     minimum maximum, so we do not diagnose overlength strings in C++.
3448
3449     This option is implied by `-pedantic', and can be disabled with
3450     `-Wno-overlength-strings'.
3451
3452
3453File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
3454
34553.9 Options for Debugging Your Program or GCC
3456=============================================
3457
3458GCC has various special options that are used for debugging either your
3459program or GCC:
3460
3461`-g'
3462     Produce debugging information in the operating system's native
3463     format (stabs, COFF, XCOFF, or DWARF 2).  GDB can work with this
3464     debugging information.
3465
3466     On most systems that use stabs format, `-g' enables use of extra
3467     debugging information that only GDB can use; this extra information
3468     makes debugging work better in GDB but will probably make other
3469     debuggers crash or refuse to read the program.  If you want to
3470     control for certain whether to generate the extra information, use
3471     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
3472     below).
3473
3474     GCC allows you to use `-g' with `-O'.  The shortcuts taken by
3475     optimized code may occasionally produce surprising results: some
3476     variables you declared may not exist at all; flow of control may
3477     briefly move where you did not expect it; some statements may not
3478     be executed because they compute constant results or their values
3479     were already at hand; some statements may execute in different
3480     places because they were moved out of loops.
3481
3482     Nevertheless it proves possible to debug optimized output.  This
3483     makes it reasonable to use the optimizer for programs that might
3484     have bugs.
3485
3486     The following options are useful when GCC is generated with the
3487     capability for more than one debugging format.
3488
3489`-ggdb'
3490     Produce debugging information for use by GDB.  This means to use
3491     the most expressive format available (DWARF 2, stabs, or the
3492     native format if neither of those are supported), including GDB
3493     extensions if at all possible.
3494
3495`-gstabs'
3496     Produce debugging information in stabs format (if that is
3497     supported), without GDB extensions.  This is the format used by
3498     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
3499     systems this option produces stabs debugging output which is not
3500     understood by DBX or SDB.  On System V Release 4 systems this
3501     option requires the GNU assembler.
3502
3503`-feliminate-unused-debug-symbols'
3504     Produce debugging information in stabs format (if that is
3505     supported), for only symbols that are actually used.
3506
3507`-femit-class-debug-always'
3508     Instead of emitting debugging information for a C++ class in only
3509     one object file, emit it in all object files using the class.
3510     This option should be used only with debuggers that are unable to
3511     handle the way GCC normally emits debugging information for
3512     classes because using this option will increase the size of
3513     debugging information by as much as a factor of two.
3514
3515`-gstabs+'
3516     Produce debugging information in stabs format (if that is
3517     supported), using GNU extensions understood only by the GNU
3518     debugger (GDB).  The use of these extensions is likely to make
3519     other debuggers crash or refuse to read the program.
3520
3521`-gcoff'
3522     Produce debugging information in COFF format (if that is
3523     supported).  This is the format used by SDB on most System V
3524     systems prior to System V Release 4.
3525
3526`-gxcoff'
3527     Produce debugging information in XCOFF format (if that is
3528     supported).  This is the format used by the DBX debugger on IBM
3529     RS/6000 systems.
3530
3531`-gxcoff+'
3532     Produce debugging information in XCOFF format (if that is
3533     supported), using GNU extensions understood only by the GNU
3534     debugger (GDB).  The use of these extensions is likely to make
3535     other debuggers crash or refuse to read the program, and may cause
3536     assemblers other than the GNU assembler (GAS) to fail with an
3537     error.
3538
3539`-gdwarf-2'
3540     Produce debugging information in DWARF version 2 format (if that is
3541     supported).  This is the format used by DBX on IRIX 6.  With this
3542     option, GCC uses features of DWARF version 3 when they are useful;
3543     version 3 is upward compatible with version 2, but may still cause
3544     problems for older debuggers.
3545
3546`-gvms'
3547     Produce debugging information in VMS debug format (if that is
3548     supported).  This is the format used by DEBUG on VMS systems.
3549
3550`-gLEVEL'
3551`-ggdbLEVEL'
3552`-gstabsLEVEL'
3553`-gcoffLEVEL'
3554`-gxcoffLEVEL'
3555`-gvmsLEVEL'
3556     Request debugging information and also use LEVEL to specify how
3557     much information.  The default level is 2.
3558
3559     Level 1 produces minimal information, enough for making backtraces
3560     in parts of the program that you don't plan to debug.  This
3561     includes descriptions of functions and external variables, but no
3562     information about local variables and no line numbers.
3563
3564     Level 3 includes extra information, such as all the macro
3565     definitions present in the program.  Some debuggers support macro
3566     expansion when you use `-g3'.
3567
3568     `-gdwarf-2' does not accept a concatenated debug level, because
3569     GCC used to support an option `-gdwarf' that meant to generate
3570     debug information in version 1 of the DWARF format (which is very
3571     different from version 2), and it would have been too confusing.
3572     That debug format is long obsolete, but the option cannot be
3573     changed now.  Instead use an additional `-gLEVEL' option to change
3574     the debug level for DWARF2.
3575
3576`-feliminate-dwarf2-dups'
3577     Compress DWARF2 debugging information by eliminating duplicated
3578     information about each symbol.  This option only makes sense when
3579     generating DWARF2 debugging information with `-gdwarf-2'.
3580
3581`-p'
3582     Generate extra code to write profile information suitable for the
3583     analysis program `prof'.  You must use this option when compiling
3584     the source files you want data about, and you must also use it when
3585     linking.
3586
3587`-pg'
3588     Generate extra code to write profile information suitable for the
3589     analysis program `gprof'.  You must use this option when compiling
3590     the source files you want data about, and you must also use it when
3591     linking.
3592
3593`-Q'
3594     Makes the compiler print out each function name as it is compiled,
3595     and print some statistics about each pass when it finishes.
3596
3597`-ftime-report'
3598     Makes the compiler print some statistics about the time consumed
3599     by each pass when it finishes.
3600
3601`-fmem-report'
3602     Makes the compiler print some statistics about permanent memory
3603     allocation when it finishes.
3604
3605`-fprofile-arcs'
3606     Add code so that program flow "arcs" are instrumented.  During
3607     execution the program records how many times each branch and call
3608     is executed and how many times it is taken or returns.  When the
3609     compiled program exits it saves this data to a file called
3610     `AUXNAME.gcda' for each source file.  The data may be used for
3611     profile-directed optimizations (`-fbranch-probabilities'), or for
3612     test coverage analysis (`-ftest-coverage').  Each object file's
3613     AUXNAME is generated from the name of the output file, if
3614     explicitly specified and it is not the final executable, otherwise
3615     it is the basename of the source file.  In both cases any suffix
3616     is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
3617     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
3618     *Note Cross-profiling::.
3619
3620`--coverage'
3621     This option is used to compile and link code instrumented for
3622     coverage analysis.  The option is a synonym for `-fprofile-arcs'
3623     `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
3624     See the documentation for those options for more details.
3625
3626        * Compile the source files with `-fprofile-arcs' plus
3627          optimization and code generation options.  For test coverage
3628          analysis, use the additional `-ftest-coverage' option.  You
3629          do not need to profile every source file in a program.
3630
3631        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
3632          latter implies the former).
3633
3634        * Run the program on a representative workload to generate the
3635          arc profile information.  This may be repeated any number of
3636          times.  You can run concurrent instances of your program, and
3637          provided that the file system supports locking, the data
3638          files will be correctly updated.  Also `fork' calls are
3639          detected and correctly handled (double counting will not
3640          happen).
3641
3642        * For profile-directed optimizations, compile the source files
3643          again with the same optimization and code generation options
3644          plus `-fbranch-probabilities' (*note Options that Control
3645          Optimization: Optimize Options.).
3646
3647        * For test coverage analysis, use `gcov' to produce human
3648          readable information from the `.gcno' and `.gcda' files.
3649          Refer to the `gcov' documentation for further information.
3650
3651
3652     With `-fprofile-arcs', for each function of your program GCC
3653     creates a program flow graph, then finds a spanning tree for the
3654     graph.  Only arcs that are not on the spanning tree have to be
3655     instrumented: the compiler adds code to count the number of times
3656     that these arcs are executed.  When an arc is the only exit or
3657     only entrance to a block, the instrumentation code can be added to
3658     the block; otherwise, a new basic block must be created to hold
3659     the instrumentation code.
3660
3661`-ftest-coverage'
3662     Produce a notes file that the `gcov' code-coverage utility (*note
3663     `gcov'--a Test Coverage Program: Gcov.) can use to show program
3664     coverage.  Each source file's note file is called `AUXNAME.gcno'.
3665     Refer to the `-fprofile-arcs' option above for a description of
3666     AUXNAME and instructions on how to generate test coverage data.
3667     Coverage data will match the source files more closely, if you do
3668     not optimize.
3669
3670`-dLETTERS'
3671
3672`-fdump-rtl-PASS'
3673     Says to make debugging dumps during compilation at times specified
3674     by LETTERS.    This is used for debugging the RTL-based passes of
3675     the compiler.  The file names for most of the dumps are made by
3676     appending a pass number and a word to the DUMPNAME.  DUMPNAME is
3677     generated from the name of the output file, if explicitly
3678     specified and it is not an executable, otherwise it is the
3679     basename of the source file.
3680
3681     Most debug dumps can be enabled either passing a letter to the `-d'
3682     option, or with a long `-fdump-rtl' switch; here are the possible
3683     letters for use in LETTERS and PASS, and their meanings:
3684
3685    `-dA'
3686          Annotate the assembler output with miscellaneous debugging
3687          information.
3688
3689    `-dB'
3690    `-fdump-rtl-bbro'
3691          Dump after block reordering, to `FILE.148r.bbro'.
3692
3693    `-dc'
3694    `-fdump-rtl-combine'
3695          Dump after instruction combination, to the file
3696          `FILE.129r.combine'.
3697
3698    `-dC'
3699    `-fdump-rtl-ce1'
3700    `-fdump-rtl-ce2'
3701          `-dC' and `-fdump-rtl-ce1' enable dumping after the first if
3702          conversion, to the file `FILE.117r.ce1'.  `-dC' and
3703          `-fdump-rtl-ce2' enable dumping after the second if
3704          conversion, to the file `FILE.130r.ce2'.
3705
3706    `-dd'
3707    `-fdump-rtl-btl'
3708    `-fdump-rtl-dbr'
3709          `-dd' and `-fdump-rtl-btl' enable dumping after branch target
3710          load optimization, to `FILE.31.btl'.  `-dd' and
3711          `-fdump-rtl-dbr' enable dumping after delayed branch
3712          scheduling, to `FILE.36.dbr'.
3713
3714    `-dD'
3715          Dump all macro definitions, at the end of preprocessing, in
3716          addition to normal output.
3717
3718    `-dE'
3719    `-fdump-rtl-ce3'
3720          Dump after the third if conversion, to `FILE.146r.ce3'.
3721
3722    `-df'
3723    `-fdump-rtl-cfg'
3724    `-fdump-rtl-life'
3725          `-df' and `-fdump-rtl-cfg' enable dumping after control and
3726          data flow analysis, to `FILE.116r.cfg'.  `-df' and
3727          `-fdump-rtl-cfg' enable dumping dump after life analysis, to
3728          `FILE.128r.life1' and `FILE.135r.life2'.
3729
3730    `-dg'
3731    `-fdump-rtl-greg'
3732          Dump after global register allocation, to `FILE.139r.greg'.
3733
3734    `-dG'
3735    `-fdump-rtl-gcse'
3736    `-fdump-rtl-bypass'
3737          `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to
3738          `FILE.114r.gcse'.  `-dG' and `-fdump-rtl-bypass' enable
3739          dumping after jump bypassing and control flow optimizations,
3740          to `FILE.115r.bypass'.
3741
3742    `-dh'
3743    `-fdump-rtl-eh'
3744          Dump after finalization of EH handling code, to `FILE.02.eh'.
3745
3746    `-di'
3747    `-fdump-rtl-sibling'
3748          Dump after sibling call optimizations, to `FILE.106r.sibling'.
3749
3750    `-dj'
3751    `-fdump-rtl-jump'
3752          Dump after the first jump optimization, to `FILE.112r.jump'.
3753
3754    `-dk'
3755    `-fdump-rtl-stack'
3756          Dump after conversion from registers to stack, to
3757          `FILE.152r.stack'.
3758
3759    `-dl'
3760    `-fdump-rtl-lreg'
3761          Dump after local register allocation, to `FILE.138r.lreg'.
3762
3763    `-dL'
3764    `-fdump-rtl-loop2'
3765          `-dL' and `-fdump-rtl-loop2' enable dumping after the loop
3766          optimization pass, to `FILE.119r.loop2',
3767          `FILE.120r.loop2_init', `FILE.121r.loop2_invariant', and
3768          `FILE.125r.loop2_done'.
3769
3770    `-dm'
3771    `-fdump-rtl-sms'
3772          Dump after modulo scheduling, to `FILE.136r.sms'.
3773
3774    `-dM'
3775    `-fdump-rtl-mach'
3776          Dump after performing the machine dependent reorganization
3777          pass, to `FILE.155r.mach'.
3778
3779    `-dn'
3780    `-fdump-rtl-rnreg'
3781          Dump after register renumbering, to `FILE.147r.rnreg'.
3782
3783    `-dN'
3784    `-fdump-rtl-regmove'
3785          Dump after the register move pass, to `FILE.132r.regmove'.
3786
3787    `-do'
3788    `-fdump-rtl-postreload'
3789          Dump after post-reload optimizations, to `FILE.24.postreload'.
3790
3791    `-dr'
3792    `-fdump-rtl-expand'
3793          Dump after RTL generation, to `FILE.104r.expand'.
3794
3795    `-dR'
3796    `-fdump-rtl-sched2'
3797          Dump after the second scheduling pass, to `FILE.150r.sched2'.
3798
3799    `-ds'
3800    `-fdump-rtl-cse'
3801          Dump after CSE (including the jump optimization that
3802          sometimes follows CSE), to `FILE.113r.cse'.
3803
3804    `-dS'
3805    `-fdump-rtl-sched'
3806          Dump after the first scheduling pass, to `FILE.21.sched'.
3807
3808    `-dt'
3809    `-fdump-rtl-cse2'
3810          Dump after the second CSE pass (including the jump
3811          optimization that sometimes follows CSE), to `FILE.127r.cse2'.
3812
3813    `-dT'
3814    `-fdump-rtl-tracer'
3815          Dump after running tracer, to `FILE.118r.tracer'.
3816
3817    `-dV'
3818    `-fdump-rtl-vpt'
3819    `-fdump-rtl-vartrack'
3820          `-dV' and `-fdump-rtl-vpt' enable dumping after the value
3821          profile transformations, to `FILE.10.vpt'.  `-dV' and
3822          `-fdump-rtl-vartrack' enable dumping after variable tracking,
3823          to `FILE.154r.vartrack'.
3824
3825    `-dw'
3826    `-fdump-rtl-flow2'
3827          Dump after the second flow pass, to `FILE.142r.flow2'.
3828
3829    `-dz'
3830    `-fdump-rtl-peephole2'
3831          Dump after the peephole pass, to `FILE.145r.peephole2'.
3832
3833    `-dZ'
3834    `-fdump-rtl-web'
3835          Dump after live range splitting, to `FILE.126r.web'.
3836
3837    `-da'
3838    `-fdump-rtl-all'
3839          Produce all the dumps listed above.
3840
3841    `-dH'
3842          Produce a core dump whenever an error occurs.
3843
3844    `-dm'
3845          Print statistics on memory usage, at the end of the run, to
3846          standard error.
3847
3848    `-dp'
3849          Annotate the assembler output with a comment indicating which
3850          pattern and alternative was used.  The length of each
3851          instruction is also printed.
3852
3853    `-dP'
3854          Dump the RTL in the assembler output as a comment before each
3855          instruction.  Also turns on `-dp' annotation.
3856
3857    `-dv'
3858          For each of the other indicated dump files (either with `-d'
3859          or `-fdump-rtl-PASS'), dump a representation of the control
3860          flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
3861
3862    `-dx'
3863          Just generate RTL for a function instead of compiling it.
3864          Usually used with `r' (`-fdump-rtl-expand').
3865
3866    `-dy'
3867          Dump debugging information during parsing, to standard error.
3868
3869`-fdump-noaddr'
3870     When doing debugging dumps (see `-d' option above), suppress
3871     address output.  This makes it more feasible to use diff on
3872     debugging dumps for compiler invocations with different compiler
3873     binaries and/or different text / bss / data / heap / stack / dso
3874     start locations.
3875
3876`-fdump-unnumbered'
3877     When doing debugging dumps (see `-d' option above), suppress
3878     instruction numbers, line number note and address output.  This
3879     makes it more feasible to use diff on debugging dumps for compiler
3880     invocations with different options, in particular with and without
3881     `-g'.
3882
3883`-fdump-translation-unit (C++ only)'
3884`-fdump-translation-unit-OPTIONS (C++ only)'
3885     Dump a representation of the tree structure for the entire
3886     translation unit to a file.  The file name is made by appending
3887     `.tu' to the source file name.  If the `-OPTIONS' form is used,
3888     OPTIONS controls the details of the dump as described for the
3889     `-fdump-tree' options.
3890
3891`-fdump-class-hierarchy (C++ only)'
3892`-fdump-class-hierarchy-OPTIONS (C++ only)'
3893     Dump a representation of each class's hierarchy and virtual
3894     function table layout to a file.  The file name is made by
3895     appending `.class' to the source file name.  If the `-OPTIONS'
3896     form is used, OPTIONS controls the details of the dump as
3897     described for the `-fdump-tree' options.
3898
3899`-fdump-ipa-SWITCH'
3900     Control the dumping at various stages of inter-procedural analysis
3901     language tree to a file.  The file name is generated by appending
3902     a switch specific suffix to the source file name.  The following
3903     dumps are possible:
3904
3905    `all'
3906          Enables all inter-procedural analysis dumps; currently the
3907          only produced dump is the `cgraph' dump.
3908
3909    `cgraph'
3910          Dumps information about call-graph optimization, unused
3911          function removal, and inlining decisions.
3912
3913`-fdump-tree-SWITCH'
3914`-fdump-tree-SWITCH-OPTIONS'
3915     Control the dumping at various stages of processing the
3916     intermediate language tree to a file.  The file name is generated
3917     by appending a switch specific suffix to the source file name.  If
3918     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
3919     options that control the details of the dump.  Not all options are
3920     applicable to all dumps, those which are not meaningful will be
3921     ignored.  The following options are available
3922
3923    `address'
3924          Print the address of each node.  Usually this is not
3925          meaningful as it changes according to the environment and
3926          source file.  Its primary use is for tying up a dump file
3927          with a debug environment.
3928
3929    `slim'
3930          Inhibit dumping of members of a scope or body of a function
3931          merely because that scope has been reached.  Only dump such
3932          items when they are directly reachable by some other path.
3933          When dumping pretty-printed trees, this option inhibits
3934          dumping the bodies of control structures.
3935
3936    `raw'
3937          Print a raw representation of the tree.  By default, trees are
3938          pretty-printed into a C-like representation.
3939
3940    `details'
3941          Enable more detailed dumps (not honored by every dump option).
3942
3943    `stats'
3944          Enable dumping various statistics about the pass (not honored
3945          by every dump option).
3946
3947    `blocks'
3948          Enable showing basic block boundaries (disabled in raw dumps).
3949
3950    `vops'
3951          Enable showing virtual operands for every statement.
3952
3953    `lineno'
3954          Enable showing line numbers for statements.
3955
3956    `uid'
3957          Enable showing the unique ID (`DECL_UID') for each variable.
3958
3959    `all'
3960          Turn on all options, except `raw', `slim' and `lineno'.
3961
3962     The following tree dumps are possible:
3963    `original'
3964          Dump before any tree based optimization, to `FILE.original'.
3965
3966    `optimized'
3967          Dump after all tree based optimization, to `FILE.optimized'.
3968
3969    `inlined'
3970          Dump after function inlining, to `FILE.inlined'.
3971
3972    `gimple'
3973          Dump each function before and after the gimplification pass
3974          to a file.  The file name is made by appending `.gimple' to
3975          the source file name.
3976
3977    `cfg'
3978          Dump the control flow graph of each function to a file.  The
3979          file name is made by appending `.cfg' to the source file name.
3980
3981    `vcg'
3982          Dump the control flow graph of each function to a file in VCG
3983          format.  The file name is made by appending `.vcg' to the
3984          source file name.  Note that if the file contains more than
3985          one function, the generated file cannot be used directly by
3986          VCG.  You will need to cut and paste each function's graph
3987          into its own separate file first.
3988
3989    `ch'
3990          Dump each function after copying loop headers.  The file name
3991          is made by appending `.ch' to the source file name.
3992
3993    `ssa'
3994          Dump SSA related information to a file.  The file name is
3995          made by appending `.ssa' to the source file name.
3996
3997    `salias'
3998          Dump structure aliasing variable information to a file.  This
3999          file name is made by appending `.salias' to the source file
4000          name.
4001
4002    `alias'
4003          Dump aliasing information for each function.  The file name
4004          is made by appending `.alias' to the source file name.
4005
4006    `ccp'
4007          Dump each function after CCP.  The file name is made by
4008          appending `.ccp' to the source file name.
4009
4010    `storeccp'
4011          Dump each function after STORE-CCP.  The file name is made by
4012          appending `.storeccp' to the source file name.
4013
4014    `pre'
4015          Dump trees after partial redundancy elimination.  The file
4016          name is made by appending `.pre' to the source file name.
4017
4018    `fre'
4019          Dump trees after full redundancy elimination.  The file name
4020          is made by appending `.fre' to the source file name.
4021
4022    `copyprop'
4023          Dump trees after copy propagation.  The file name is made by
4024          appending `.copyprop' to the source file name.
4025
4026    `store_copyprop'
4027          Dump trees after store copy-propagation.  The file name is
4028          made by appending `.store_copyprop' to the source file name.
4029
4030    `dce'
4031          Dump each function after dead code elimination.  The file
4032          name is made by appending `.dce' to the source file name.
4033
4034    `mudflap'
4035          Dump each function after adding mudflap instrumentation.  The
4036          file name is made by appending `.mudflap' to the source file
4037          name.
4038
4039    `sra'
4040          Dump each function after performing scalar replacement of
4041          aggregates.  The file name is made by appending `.sra' to the
4042          source file name.
4043
4044    `sink'
4045          Dump each function after performing code sinking.  The file
4046          name is made by appending `.sink' to the source file name.
4047
4048    `dom'
4049          Dump each function after applying dominator tree
4050          optimizations.  The file name is made by appending `.dom' to
4051          the source file name.
4052
4053    `dse'
4054          Dump each function after applying dead store elimination.
4055          The file name is made by appending `.dse' to the source file
4056          name.
4057
4058    `phiopt'
4059          Dump each function after optimizing PHI nodes into
4060          straightline code.  The file name is made by appending
4061          `.phiopt' to the source file name.
4062
4063    `forwprop'
4064          Dump each function after forward propagating single use
4065          variables.  The file name is made by appending `.forwprop' to
4066          the source file name.
4067
4068    `copyrename'
4069          Dump each function after applying the copy rename
4070          optimization.  The file name is made by appending
4071          `.copyrename' to the source file name.
4072
4073    `nrv'
4074          Dump each function after applying the named return value
4075          optimization on generic trees.  The file name is made by
4076          appending `.nrv' to the source file name.
4077
4078    `vect'
4079          Dump each function after applying vectorization of loops.
4080          The file name is made by appending `.vect' to the source file
4081          name.
4082
4083    `vrp'
4084          Dump each function after Value Range Propagation (VRP).  The
4085          file name is made by appending `.vrp' to the source file name.
4086
4087    `all'
4088          Enable all the available tree dumps with the flags provided
4089          in this option.
4090
4091`-ftree-vectorizer-verbose=N'
4092     This option controls the amount of debugging output the vectorizer
4093     prints.  This information is written to standard error, unless
4094     `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
4095     case it is output to the usual dump listing file, `.vect'.  For
4096     N=0 no diagnostic information is reported.  If N=1 the vectorizer
4097     reports each loop that got vectorized, and the total number of
4098     loops that got vectorized.  If N=2 the vectorizer also reports
4099     non-vectorized loops that passed the first analysis phase
4100     (vect_analyze_loop_form) - i.e. countable, inner-most, single-bb,
4101     single-entry/exit loops.  This is the same verbosity level that
4102     `-fdump-tree-vect-stats' uses.  Higher verbosity levels mean
4103     either more information dumped for each reported loop, or same
4104     amount of information reported for more loops: If N=3, alignment
4105     related information is added to the reports.  If N=4,
4106     data-references related information (e.g. memory dependences,
4107     memory access-patterns) is added to the reports.  If N=5, the
4108     vectorizer reports also non-vectorized inner-most loops that did
4109     not pass the first analysis phase (i.e. may not be countable, or
4110     may have complicated control-flow).  If N=6, the vectorizer
4111     reports also non-vectorized nested loops.  For N=7, all the
4112     information the vectorizer generates during its analysis and
4113     transformation is reported.  This is the same verbosity level that
4114     `-fdump-tree-vect-details' uses.
4115
4116`-frandom-seed=STRING'
4117     This option provides a seed that GCC uses when it would otherwise
4118     use random numbers.  It is used to generate certain symbol names
4119     that have to be different in every compiled file.  It is also used
4120     to place unique stamps in coverage data files and the object files
4121     that produce them.  You can use the `-frandom-seed' option to
4122     produce reproducibly identical object files.
4123
4124     The STRING should be different for every file you compile.
4125
4126`-fsched-verbose=N'
4127     On targets that use instruction scheduling, this option controls
4128     the amount of debugging output the scheduler prints.  This
4129     information is written to standard error, unless `-dS' or `-dR' is
4130     specified, in which case it is output to the usual dump listing
4131     file, `.sched' or `.sched2' respectively.  However for N greater
4132     than nine, the output is always printed to standard error.
4133
4134     For N greater than zero, `-fsched-verbose' outputs the same
4135     information as `-dRS'.  For N greater than one, it also output
4136     basic block probabilities, detailed ready list information and
4137     unit/insn info.  For N greater than two, it includes RTL at abort
4138     point, control-flow and regions info.  And for N over four,
4139     `-fsched-verbose' also includes dependence info.
4140
4141`-save-temps'
4142     Store the usual "temporary" intermediate files permanently; place
4143     them in the current directory and name them based on the source
4144     file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
4145     files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
4146     preprocessed `foo.i' output file even though the compiler now
4147     normally uses an integrated preprocessor.
4148
4149     When used in combination with the `-x' command line option,
4150     `-save-temps' is sensible enough to avoid over writing an input
4151     source file with the same extension as an intermediate file.  The
4152     corresponding intermediate file may be obtained by renaming the
4153     source file before using `-save-temps'.
4154
4155`-time'
4156     Report the CPU time taken by each subprocess in the compilation
4157     sequence.  For C source files, this is the compiler proper and
4158     assembler (plus the linker if linking is done).  The output looks
4159     like this:
4160
4161          # cc1 0.12 0.01
4162          # as 0.00 0.01
4163
4164     The first number on each line is the "user time", that is time
4165     spent executing the program itself.  The second number is "system
4166     time", time spent executing operating system routines on behalf of
4167     the program.  Both numbers are in seconds.
4168
4169`-fvar-tracking'
4170     Run variable tracking pass.  It computes where variables are
4171     stored at each position in code.  Better debugging information is
4172     then generated (if the debugging information format supports this
4173     information).
4174
4175     It is enabled by default when compiling with optimization (`-Os',
4176     `-O', `-O2', ...), debugging information (`-g') and the debug info
4177     format supports it.
4178
4179`-print-file-name=LIBRARY'
4180     Print the full absolute name of the library file LIBRARY that
4181     would be used when linking--and don't do anything else.  With this
4182     option, GCC does not compile or link anything; it just prints the
4183     file name.
4184
4185`-print-multi-directory'
4186     Print the directory name corresponding to the multilib selected by
4187     any other switches present in the command line.  This directory is
4188     supposed to exist in `GCC_EXEC_PREFIX'.
4189
4190`-print-multi-lib'
4191     Print the mapping from multilib directory names to compiler
4192     switches that enable them.  The directory name is separated from
4193     the switches by `;', and each switch starts with an `@' instead of
4194     the `-', without spaces between multiple switches.  This is
4195     supposed to ease shell-processing.
4196
4197`-print-prog-name=PROGRAM'
4198     Like `-print-file-name', but searches for a program such as `cpp'.
4199
4200`-print-libgcc-file-name'
4201     Same as `-print-file-name=libgcc.a'.
4202
4203     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
4204     you do want to link with `libgcc.a'.  You can do
4205
4206          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
4207
4208`-print-search-dirs'
4209     Print the name of the configured installation directory and a list
4210     of program and library directories `gcc' will search--and don't do
4211     anything else.
4212
4213     This is useful when `gcc' prints the error message `installation
4214     problem, cannot exec cpp0: No such file or directory'.  To resolve
4215     this you either need to put `cpp0' and the other compiler
4216     components where `gcc' expects to find them, or you can set the
4217     environment variable `GCC_EXEC_PREFIX' to the directory where you
4218     installed them.  Don't forget the trailing `/'.  *Note Environment
4219     Variables::.
4220
4221`-dumpmachine'
4222     Print the compiler's target machine (for example,
4223     `i686-pc-linux-gnu')--and don't do anything else.
4224
4225`-dumpversion'
4226     Print the compiler version (for example, `3.0')--and don't do
4227     anything else.
4228
4229`-dumpspecs'
4230     Print the compiler's built-in specs--and don't do anything else.
4231     (This is used when GCC itself is being built.)  *Note Spec Files::.
4232
4233`-feliminate-unused-debug-types'
4234     Normally, when producing DWARF2 output, GCC will emit debugging
4235     information for all types declared in a compilation unit,
4236     regardless of whether or not they are actually used in that
4237     compilation unit.  Sometimes this is useful, such as if, in the
4238     debugger, you want to cast a value to a type that is not actually
4239     used in your program (but is declared).  More often, however, this
4240     results in a significant amount of wasted space.  With this
4241     option, GCC will avoid producing debug symbol output for types
4242     that are nowhere used in the source file being compiled.
4243
4244
4245File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
4246
42473.10 Options That Control Optimization
4248======================================
4249
4250These options control various sorts of optimizations.
4251
4252 Without any optimization option, the compiler's goal is to reduce the
4253cost of compilation and to make debugging produce the expected results.
4254Statements are independent: if you stop the program with a breakpoint
4255between statements, you can then assign a new value to any variable or
4256change the program counter to any other statement in the function and
4257get exactly the results you would expect from the source code.
4258
4259 Turning on optimization flags makes the compiler attempt to improve
4260the performance and/or code size at the expense of compilation time and
4261possibly the ability to debug the program.
4262
4263 The compiler performs optimization based on the knowledge it has of
4264the program.  Optimization levels `-O' and above, in particular, enable
4265_unit-at-a-time_ mode, which allows the compiler to consider
4266information gained from later functions in the file when compiling a
4267function.  Compiling multiple files at once to a single output file in
4268_unit-at-a-time_ mode allows the compiler to use information gained
4269from all of the files when compiling each of them.
4270
4271 Not all optimizations are controlled directly by a flag.  Only
4272optimizations that have a flag are listed.
4273
4274`-O'
4275`-O1'
4276     Optimize.  Optimizing compilation takes somewhat more time, and a
4277     lot more memory for a large function.
4278
4279     With `-O', the compiler tries to reduce code size and execution
4280     time, without performing any optimizations that take a great deal
4281     of compilation time.
4282
4283     `-O' turns on the following optimization flags:
4284          -fdefer-pop
4285          -fdelayed-branch
4286          -fguess-branch-probability
4287          -fcprop-registers
4288          -fif-conversion
4289          -fif-conversion2
4290          -ftree-ccp
4291          -ftree-dce
4292          -ftree-dominator-opts
4293          -ftree-dse
4294          -ftree-ter
4295          -ftree-lrs
4296          -ftree-sra
4297          -ftree-copyrename
4298          -ftree-fre
4299          -ftree-ch
4300          -funit-at-a-time
4301          -fmerge-constants
4302
4303     `-O' also turns on `-fomit-frame-pointer' on machines where doing
4304     so does not interfere with debugging.
4305
4306`-O2'
4307     Optimize even more.  GCC performs nearly all supported
4308     optimizations that do not involve a space-speed tradeoff.  The
4309     compiler does not perform loop unrolling or function inlining when
4310     you specify `-O2'.  As compared to `-O', this option increases
4311     both compilation time and the performance of the generated code.
4312
4313     `-O2' turns on all optimization flags specified by `-O'.  It also
4314     turns on the following optimization flags:
4315          -fthread-jumps
4316          -fcrossjumping
4317          -foptimize-sibling-calls
4318          -fcse-follow-jumps  -fcse-skip-blocks
4319          -fgcse  -fgcse-lm
4320          -fexpensive-optimizations
4321          -frerun-cse-after-loop
4322          -fcaller-saves
4323          -fpeephole2
4324          -fschedule-insns  -fschedule-insns2
4325          -fsched-interblock  -fsched-spec
4326          -fregmove
4327          -fstrict-aliasing -fstrict-overflow
4328          -fdelete-null-pointer-checks
4329          -freorder-blocks  -freorder-functions
4330          -falign-functions  -falign-jumps
4331          -falign-loops  -falign-labels
4332          -ftree-vrp
4333          -ftree-pre
4334
4335     Please note the warning under `-fgcse' about invoking `-O2' on
4336     programs that use computed gotos.
4337
4338     `-O2' doesn't turn on `-ftree-vrp' for the Ada compiler.  This
4339     option must be explicitly specified on the command line to be
4340     enabled for the Ada compiler.
4341
4342`-O3'
4343     Optimize yet more.  `-O3' turns on all optimizations specified by
4344     `-O2' and also turns on the `-finline-functions',
4345     `-funswitch-loops' and `-fgcse-after-reload' options.
4346
4347`-O0'
4348     Do not optimize.  This is the default.
4349
4350`-Os'
4351     Optimize for size.  `-Os' enables all `-O2' optimizations that do
4352     not typically increase code size.  It also performs further
4353     optimizations designed to reduce code size.
4354
4355     `-Os' disables the following optimization flags:
4356          -falign-functions  -falign-jumps  -falign-loops
4357          -falign-labels  -freorder-blocks  -freorder-blocks-and-partition
4358          -fprefetch-loop-arrays  -ftree-vect-loop-version
4359
4360     If you use multiple `-O' options, with or without level numbers,
4361     the last such option is the one that is effective.
4362
4363 Options of the form `-fFLAG' specify machine-independent flags.  Most
4364flags have both positive and negative forms; the negative form of
4365`-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
4366is listed--the one you typically will use.  You can figure out the
4367other form by either removing `no-' or adding it.
4368
4369 The following options control specific optimizations.  They are either
4370activated by `-O' options or are related to ones that are.  You can use
4371the following flags in the rare cases when "fine-tuning" of
4372optimizations to be performed is desired.
4373
4374`-fno-default-inline'
4375     Do not make member functions inline by default merely because they
4376     are defined inside the class scope (C++ only).  Otherwise, when
4377     you specify `-O', member functions defined inside class scope are
4378     compiled inline by default; i.e., you don't need to add `inline'
4379     in front of the member function name.
4380
4381`-fno-defer-pop'
4382     Always pop the arguments to each function call as soon as that
4383     function returns.  For machines which must pop arguments after a
4384     function call, the compiler normally lets arguments accumulate on
4385     the stack for several function calls and pops them all at once.
4386
4387     Disabled at levels `-O', `-O2', `-O3', `-Os'.
4388
4389`-fforce-mem'
4390     Force memory operands to be copied into registers before doing
4391     arithmetic on them.  This produces better code by making all memory
4392     references potential common subexpressions.  When they are not
4393     common subexpressions, instruction combination should eliminate
4394     the separate register-load. This option is now a nop and will be
4395     removed in 4.3.
4396
4397`-fforce-addr'
4398     Force memory address constants to be copied into registers before
4399     doing arithmetic on them.
4400
4401`-fomit-frame-pointer'
4402     Don't keep the frame pointer in a register for functions that
4403     don't need one.  This avoids the instructions to save, set up and
4404     restore frame pointers; it also makes an extra register available
4405     in many functions.  *It also makes debugging impossible on some
4406     machines.*
4407
4408     On some machines, such as the VAX, this flag has no effect, because
4409     the standard calling sequence automatically handles the frame
4410     pointer and nothing is saved by pretending it doesn't exist.  The
4411     machine-description macro `FRAME_POINTER_REQUIRED' controls
4412     whether a target machine supports this flag.  *Note Register
4413     Usage: (gccint)Registers.
4414
4415     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4416
4417`-foptimize-sibling-calls'
4418     Optimize sibling and tail recursive calls.
4419
4420     Enabled at levels `-O2', `-O3', `-Os'.
4421
4422`-fno-inline'
4423     Don't pay attention to the `inline' keyword.  Normally this option
4424     is used to keep the compiler from expanding any functions inline.
4425     Note that if you are not optimizing, no functions can be expanded
4426     inline.
4427
4428`-finline-functions'
4429     Integrate all simple functions into their callers.  The compiler
4430     heuristically decides which functions are simple enough to be worth
4431     integrating in this way.
4432
4433     If all calls to a given function are integrated, and the function
4434     is declared `static', then the function is normally not output as
4435     assembler code in its own right.
4436
4437     Enabled at level `-O3'.
4438
4439`-finline-functions-called-once'
4440     Consider all `static' functions called once for inlining into their
4441     caller even if they are not marked `inline'.  If a call to a given
4442     function is integrated, then the function is not output as
4443     assembler code in its own right.
4444
4445     Enabled if `-funit-at-a-time' is enabled.
4446
4447`-fearly-inlining'
4448     Inline functions marked by `always_inline' and functions whose
4449     body seems smaller than the function call overhead early before
4450     doing `-fprofile-generate' instrumentation and real inlining pass.
4451     Doing so makes profiling significantly cheaper and usually
4452     inlining faster on programs having large chains of nested wrapper
4453     functions.
4454
4455     Enabled by default.
4456
4457`-finline-limit=N'
4458     By default, GCC limits the size of functions that can be inlined.
4459     This flag allows the control of this limit for functions that are
4460     explicitly marked as inline (i.e., marked with the inline keyword
4461     or defined within the class definition in c++).  N is the size of
4462     functions that can be inlined in number of pseudo instructions
4463     (not counting parameter handling).  The default value of N is 600.
4464     Increasing this value can result in more inlined code at the cost
4465     of compilation time and memory consumption.  Decreasing usually
4466     makes the compilation faster and less code will be inlined (which
4467     presumably means slower programs).  This option is particularly
4468     useful for programs that use inlining heavily such as those based
4469     on recursive templates with C++.
4470
4471     Inlining is actually controlled by a number of parameters, which
4472     may be specified individually by using `--param NAME=VALUE'.  The
4473     `-finline-limit=N' option sets some of these parameters as follows:
4474
4475    `max-inline-insns-single'
4476          is set to N/2.
4477
4478    `max-inline-insns-auto'
4479          is set to N/2.
4480
4481    `min-inline-insns'
4482          is set to 130 or N/4, whichever is smaller.
4483
4484    `max-inline-insns-rtl'
4485          is set to N.
4486
4487     See below for a documentation of the individual parameters
4488     controlling inlining.
4489
4490     _Note:_ pseudo instruction represents, in this particular context,
4491     an abstract measurement of function's size.  In no way does it
4492     represent a count of assembly instructions and as such its exact
4493     meaning might change from one release to an another.
4494
4495`-fkeep-inline-functions'
4496     In C, emit `static' functions that are declared `inline' into the
4497     object file, even if the function has been inlined into all of its
4498     callers.  This switch does not affect functions using the `extern
4499     inline' extension in GNU C.  In C++, emit any and all inline
4500     functions into the object file.
4501
4502`-fkeep-static-consts'
4503     Emit variables declared `static const' when optimization isn't
4504     turned on, even if the variables aren't referenced.
4505
4506     GCC enables this option by default.  If you want to force the
4507     compiler to check if the variable was referenced, regardless of
4508     whether or not optimization is turned on, use the
4509     `-fno-keep-static-consts' option.
4510
4511`-fmerge-constants'
4512     Attempt to merge identical constants (string constants and
4513     floating point constants) across compilation units.
4514
4515     This option is the default for optimized compilation if the
4516     assembler and linker support it.  Use `-fno-merge-constants' to
4517     inhibit this behavior.
4518
4519     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4520
4521`-fmerge-all-constants'
4522     Attempt to merge identical constants and identical variables.
4523
4524     This option implies `-fmerge-constants'.  In addition to
4525     `-fmerge-constants' this considers e.g. even constant initialized
4526     arrays or initialized constant variables with integral or floating
4527     point types.  Languages like C or C++ require each non-automatic
4528     variable to have distinct location, so using this option will
4529     result in non-conforming behavior.
4530
4531`-fmodulo-sched'
4532     Perform swing modulo scheduling immediately before the first
4533     scheduling pass.  This pass looks at innermost loops and reorders
4534     their instructions by overlapping different iterations.
4535
4536`-fno-branch-count-reg'
4537     Do not use "decrement and branch" instructions on a count register,
4538     but instead generate a sequence of instructions that decrement a
4539     register, compare it against zero, then branch based upon the
4540     result.  This option is only meaningful on architectures that
4541     support such instructions, which include x86, PowerPC, IA-64 and
4542     S/390.
4543
4544     The default is `-fbranch-count-reg'.
4545
4546`-fno-function-cse'
4547     Do not put function addresses in registers; make each instruction
4548     that calls a constant function contain the function's address
4549     explicitly.
4550
4551     This option results in less efficient code, but some strange hacks
4552     that alter the assembler output may be confused by the
4553     optimizations performed when this option is not used.
4554
4555     The default is `-ffunction-cse'
4556
4557`-fno-zero-initialized-in-bss'
4558     If the target supports a BSS section, GCC by default puts
4559     variables that are initialized to zero into BSS.  This can save
4560     space in the resulting code.
4561
4562     This option turns off this behavior because some programs
4563     explicitly rely on variables going to the data section.  E.g., so
4564     that the resulting executable can find the beginning of that
4565     section and/or make assumptions based on that.
4566
4567     The default is `-fzero-initialized-in-bss'.
4568
4569`-fbounds-check'
4570     For front-ends that support it, generate additional code to check
4571     that indices used to access arrays are within the declared range.
4572     This is currently only supported by the Java and Fortran
4573     front-ends, where this option defaults to true and false
4574     respectively.
4575
4576`-fmudflap -fmudflapth -fmudflapir'
4577     For front-ends that support it (C and C++), instrument all risky
4578     pointer/array dereferencing operations, some standard library
4579     string/heap functions, and some other associated constructs with
4580     range/validity tests.  Modules so instrumented should be immune to
4581     buffer overflows, invalid heap use, and some other classes of C/C++
4582     programming errors.  The instrumentation relies on a separate
4583     runtime library (`libmudflap'), which will be linked into a
4584     program if `-fmudflap' is given at link time.  Run-time behavior
4585     of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
4586     environment variable.  See `env MUDFLAP_OPTIONS=-help a.out' for
4587     its options.
4588
4589     Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
4590     your program is multi-threaded.  Use `-fmudflapir', in addition to
4591     `-fmudflap' or `-fmudflapth', if instrumentation should ignore
4592     pointer reads.  This produces less instrumentation (and therefore
4593     faster execution) and still provides some protection against
4594     outright memory corrupting writes, but allows erroneously read
4595     data to propagate within a program.
4596
4597`-fthread-jumps'
4598     Perform optimizations where we check to see if a jump branches to a
4599     location where another comparison subsumed by the first is found.
4600     If so, the first branch is redirected to either the destination of
4601     the second branch or a point immediately following it, depending
4602     on whether the condition is known to be true or false.
4603
4604     Enabled at levels `-O2', `-O3', `-Os'.
4605
4606`-fcse-follow-jumps'
4607     In common subexpression elimination, scan through jump instructions
4608     when the target of the jump is not reached by any other path.  For
4609     example, when CSE encounters an `if' statement with an `else'
4610     clause, CSE will follow the jump when the condition tested is
4611     false.
4612
4613     Enabled at levels `-O2', `-O3', `-Os'.
4614
4615`-fcse-skip-blocks'
4616     This is similar to `-fcse-follow-jumps', but causes CSE to follow
4617     jumps which conditionally skip over blocks.  When CSE encounters a
4618     simple `if' statement with no else clause, `-fcse-skip-blocks'
4619     causes CSE to follow the jump around the body of the `if'.
4620
4621     Enabled at levels `-O2', `-O3', `-Os'.
4622
4623`-frerun-cse-after-loop'
4624     Re-run common subexpression elimination after loop optimizations
4625     has been performed.
4626
4627     Enabled at levels `-O2', `-O3', `-Os'.
4628
4629`-fgcse'
4630     Perform a global common subexpression elimination pass.  This pass
4631     also performs global constant and copy propagation.
4632
4633     _Note:_ When compiling a program using computed gotos, a GCC
4634     extension, you may get better runtime performance if you disable
4635     the global common subexpression elimination pass by adding
4636     `-fno-gcse' to the command line.
4637
4638     Enabled at levels `-O2', `-O3', `-Os'.
4639
4640`-fgcse-lm'
4641     When `-fgcse-lm' is enabled, global common subexpression
4642     elimination will attempt to move loads which are only killed by
4643     stores into themselves.  This allows a loop containing a
4644     load/store sequence to be changed to a load outside the loop, and
4645     a copy/store within the loop.
4646
4647     Enabled by default when gcse is enabled.
4648
4649`-fgcse-sm'
4650     When `-fgcse-sm' is enabled, a store motion pass is run after
4651     global common subexpression elimination.  This pass will attempt
4652     to move stores out of loops.  When used in conjunction with
4653     `-fgcse-lm', loops containing a load/store sequence can be changed
4654     to a load before the loop and a store after the loop.
4655
4656     Not enabled at any optimization level.
4657
4658`-fgcse-las'
4659     When `-fgcse-las' is enabled, the global common subexpression
4660     elimination pass eliminates redundant loads that come after stores
4661     to the same memory location (both partial and full redundancies).
4662
4663     Not enabled at any optimization level.
4664
4665`-fgcse-after-reload'
4666     When `-fgcse-after-reload' is enabled, a redundant load elimination
4667     pass is performed after reload.  The purpose of this pass is to
4668     cleanup redundant spilling.
4669
4670`-funsafe-loop-optimizations'
4671     If given, the loop optimizer will assume that loop indices do not
4672     overflow, and that the loops with nontrivial exit condition are not
4673     infinite.  This enables a wider range of loop optimizations even if
4674     the loop optimizer itself cannot prove that these assumptions are
4675     valid.  Using `-Wunsafe-loop-optimizations', the compiler will
4676     warn you if it finds this kind of loop.
4677
4678`-fcrossjumping'
4679     Perform cross-jumping transformation.  This transformation unifies
4680     equivalent code and save code size.  The resulting code may or may
4681     not perform better than without cross-jumping.
4682
4683     Enabled at levels `-O2', `-O3', `-Os'.
4684
4685`-fif-conversion'
4686     Attempt to transform conditional jumps into branch-less
4687     equivalents.  This include use of conditional moves, min, max, set
4688     flags and abs instructions, and some tricks doable by standard
4689     arithmetics.  The use of conditional execution on chips where it
4690     is available is controlled by `if-conversion2'.
4691
4692     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4693
4694`-fif-conversion2'
4695     Use conditional execution (where available) to transform
4696     conditional jumps into branch-less equivalents.
4697
4698     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4699
4700`-fdelete-null-pointer-checks'
4701     Use global dataflow analysis to identify and eliminate useless
4702     checks for null pointers.  The compiler assumes that dereferencing
4703     a null pointer would have halted the program.  If a pointer is
4704     checked after it has already been dereferenced, it cannot be null.
4705
4706     In some environments, this assumption is not true, and programs can
4707     safely dereference null pointers.  Use
4708     `-fno-delete-null-pointer-checks' to disable this optimization for
4709     programs which depend on that behavior.
4710
4711     Enabled at levels `-O2', `-O3', `-Os'.
4712
4713`-fexpensive-optimizations'
4714     Perform a number of minor optimizations that are relatively
4715     expensive.
4716
4717     Enabled at levels `-O2', `-O3', `-Os'.
4718
4719`-foptimize-register-move'
4720`-fregmove'
4721     Attempt to reassign register numbers in move instructions and as
4722     operands of other simple instructions in order to maximize the
4723     amount of register tying.  This is especially helpful on machines
4724     with two-operand instructions.
4725
4726     Note `-fregmove' and `-foptimize-register-move' are the same
4727     optimization.
4728
4729     Enabled at levels `-O2', `-O3', `-Os'.
4730
4731`-fdelayed-branch'
4732     If supported for the target machine, attempt to reorder
4733     instructions to exploit instruction slots available after delayed
4734     branch instructions.
4735
4736     Enabled at levels `-O', `-O2', `-O3', `-Os'.
4737
4738`-fschedule-insns'
4739     If supported for the target machine, attempt to reorder
4740     instructions to eliminate execution stalls due to required data
4741     being unavailable.  This helps machines that have slow floating
4742     point or memory load instructions by allowing other instructions
4743     to be issued until the result of the load or floating point
4744     instruction is required.
4745
4746     Enabled at levels `-O2', `-O3', `-Os'.
4747
4748`-fschedule-insns2'
4749     Similar to `-fschedule-insns', but requests an additional pass of
4750     instruction scheduling after register allocation has been done.
4751     This is especially useful on machines with a relatively small
4752     number of registers and where memory load instructions take more
4753     than one cycle.
4754
4755     Enabled at levels `-O2', `-O3', `-Os'.
4756
4757`-fno-sched-interblock'
4758     Don't schedule instructions across basic blocks.  This is normally
4759     enabled by default when scheduling before register allocation, i.e.
4760     with `-fschedule-insns' or at `-O2' or higher.
4761
4762`-fno-sched-spec'
4763     Don't allow speculative motion of non-load instructions.  This is
4764     normally enabled by default when scheduling before register
4765     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
4766
4767`-fsched-spec-load'
4768     Allow speculative motion of some load instructions.  This only
4769     makes sense when scheduling before register allocation, i.e. with
4770     `-fschedule-insns' or at `-O2' or higher.
4771
4772`-fsched-spec-load-dangerous'
4773     Allow speculative motion of more load instructions.  This only
4774     makes sense when scheduling before register allocation, i.e. with
4775     `-fschedule-insns' or at `-O2' or higher.
4776
4777`-fsched-stalled-insns=N'
4778     Define how many insns (if any) can be moved prematurely from the
4779     queue of stalled insns into the ready list, during the second
4780     scheduling pass.
4781
4782`-fsched-stalled-insns-dep=N'
4783     Define how many insn groups (cycles) will be examined for a
4784     dependency on a stalled insn that is candidate for premature
4785     removal from the queue of stalled insns.  Has an effect only
4786     during the second scheduling pass, and only if
4787     `-fsched-stalled-insns' is used and its value is not zero.
4788
4789`-fsched2-use-superblocks'
4790     When scheduling after register allocation, do use superblock
4791     scheduling algorithm.  Superblock scheduling allows motion across
4792     basic block boundaries resulting on faster schedules.  This option
4793     is experimental, as not all machine descriptions used by GCC model
4794     the CPU closely enough to avoid unreliable results from the
4795     algorithm.
4796
4797     This only makes sense when scheduling after register allocation,
4798     i.e. with `-fschedule-insns2' or at `-O2' or higher.
4799
4800`-fsched2-use-traces'
4801     Use `-fsched2-use-superblocks' algorithm when scheduling after
4802     register allocation and additionally perform code duplication in
4803     order to increase the size of superblocks using tracer pass.  See
4804     `-ftracer' for details on trace formation.
4805
4806     This mode should produce faster but significantly longer programs.
4807     Also without `-fbranch-probabilities' the traces constructed may
4808     not match the reality and hurt the performance.  This only makes
4809     sense when scheduling after register allocation, i.e. with
4810     `-fschedule-insns2' or at `-O2' or higher.
4811
4812`-fsee'
4813     Eliminates redundant extension instructions and move the non
4814     redundant ones to optimal placement using LCM.
4815
4816`-freschedule-modulo-scheduled-loops'
4817     The modulo scheduling comes before the traditional scheduling, if
4818     a loop was modulo scheduled we may want to prevent the later
4819     scheduling passes from changing its schedule, we use this option
4820     to control that.
4821
4822`-fcaller-saves'
4823     Enable values to be allocated in registers that will be clobbered
4824     by function calls, by emitting extra instructions to save and
4825     restore the registers around such calls.  Such allocation is done
4826     only when it seems to result in better code than would otherwise
4827     be produced.
4828
4829     This option is always enabled by default on certain machines,
4830     usually those which have no call-preserved registers to use
4831     instead.
4832
4833     Enabled at levels `-O2', `-O3', `-Os'.
4834
4835`-ftree-pre'
4836     Perform Partial Redundancy Elimination (PRE) on trees.  This flag
4837     is enabled by default at `-O2' and `-O3'.
4838
4839`-ftree-fre'
4840     Perform Full Redundancy Elimination (FRE) on trees.  The difference
4841     between FRE and PRE is that FRE only considers expressions that
4842     are computed on all paths leading to the redundant computation.
4843     This analysis faster than PRE, though it exposes fewer
4844     redundancies.  This flag is enabled by default at `-O' and higher.
4845
4846`-ftree-copy-prop'
4847     Perform copy propagation on trees.  This pass eliminates
4848     unnecessary copy operations.  This flag is enabled by default at
4849     `-O' and higher.
4850
4851`-ftree-store-copy-prop'
4852     Perform copy propagation of memory loads and stores.  This pass
4853     eliminates unnecessary copy operations in memory references
4854     (structures, global variables, arrays, etc).  This flag is enabled
4855     by default at `-O2' and higher.
4856
4857`-ftree-salias'
4858     Perform structural alias analysis on trees.  This flag is enabled
4859     by default at `-O' and higher.
4860
4861`-fipa-pta'
4862     Perform interprocedural pointer analysis.
4863
4864`-ftree-sink'
4865     Perform forward store motion  on trees.  This flag is enabled by
4866     default at `-O' and higher.
4867
4868`-ftree-ccp'
4869     Perform sparse conditional constant propagation (CCP) on trees.
4870     This pass only operates on local scalar variables and is enabled
4871     by default at `-O' and higher.
4872
4873`-ftree-store-ccp'
4874     Perform sparse conditional constant propagation (CCP) on trees.
4875     This pass operates on both local scalar variables and memory
4876     stores and loads (global variables, structures, arrays, etc).
4877     This flag is enabled by default at `-O2' and higher.
4878
4879`-ftree-dce'
4880     Perform dead code elimination (DCE) on trees.  This flag is
4881     enabled by default at `-O' and higher.
4882
4883`-ftree-dominator-opts'
4884     Perform a variety of simple scalar cleanups (constant/copy
4885     propagation, redundancy elimination, range propagation and
4886     expression simplification) based on a dominator tree traversal.
4887     This also performs jump threading (to reduce jumps to jumps). This
4888     flag is enabled by default at `-O' and higher.
4889
4890`-ftree-ch'
4891     Perform loop header copying on trees.  This is beneficial since it
4892     increases effectiveness of code motion optimizations.  It also
4893     saves one jump.  This flag is enabled by default at `-O' and
4894     higher.  It is not enabled for `-Os', since it usually increases
4895     code size.
4896
4897`-ftree-loop-optimize'
4898     Perform loop optimizations on trees.  This flag is enabled by
4899     default at `-O' and higher.
4900
4901`-ftree-loop-linear'
4902     Perform linear loop transformations on tree.  This flag can
4903     improve cache performance and allow further loop optimizations to
4904     take place.
4905
4906`-ftree-loop-im'
4907     Perform loop invariant motion on trees.  This pass moves only
4908     invariants that would be hard to handle at RTL level (function
4909     calls, operations that expand to nontrivial sequences of insns).
4910     With `-funswitch-loops' it also moves operands of conditions that
4911     are invariant out of the loop, so that we can use just trivial
4912     invariantness analysis in loop unswitching.  The pass also includes
4913     store motion.
4914
4915`-ftree-loop-ivcanon'
4916     Create a canonical counter for number of iterations in the loop
4917     for that determining number of iterations requires complicated
4918     analysis.  Later optimizations then may determine the number
4919     easily.  Useful especially in connection with unrolling.
4920
4921`-fivopts'
4922     Perform induction variable optimizations (strength reduction,
4923     induction variable merging and induction variable elimination) on
4924     trees.
4925
4926`-ftree-sra'
4927     Perform scalar replacement of aggregates.  This pass replaces
4928     structure references with scalars to prevent committing structures
4929     to memory too early.  This flag is enabled by default at `-O' and
4930     higher.
4931
4932`-ftree-copyrename'
4933     Perform copy renaming on trees.  This pass attempts to rename
4934     compiler temporaries to other variables at copy locations, usually
4935     resulting in variable names which more closely resemble the
4936     original variables.  This flag is enabled by default at `-O' and
4937     higher.
4938
4939`-ftree-ter'
4940     Perform temporary expression replacement during the SSA->normal
4941     phase.  Single use/single def temporaries are replaced at their
4942     use location with their defining expression.  This results in
4943     non-GIMPLE code, but gives the expanders much more complex trees
4944     to work on resulting in better RTL generation.  This is enabled by
4945     default at `-O' and higher.
4946
4947`-ftree-lrs'
4948     Perform live range splitting during the SSA->normal phase.
4949     Distinct live ranges of a variable are split into unique
4950     variables, allowing for better optimization later.  This is
4951     enabled by default at `-O' and higher.
4952
4953`-ftree-vectorize'
4954     Perform loop vectorization on trees.
4955
4956`-ftree-vect-loop-version'
4957     Perform loop versioning when doing loop vectorization on trees.
4958     When a loop appears to be vectorizable except that data alignment
4959     or data dependence cannot be determined at compile time then
4960     vectorized and non-vectorized versions of the loop are generated
4961     along with runtime checks for alignment or dependence to control
4962     which version is executed.  This option is enabled by default
4963     except at level `-Os' where it is disabled.
4964
4965`-ftree-vrp'
4966     Perform Value Range Propagation on trees.  This is similar to the
4967     constant propagation pass, but instead of values, ranges of values
4968     are propagated.  This allows the optimizers to remove unnecessary
4969     range checks like array bound checks and null pointer checks.
4970     This is enabled by default at `-O2' and higher.  Null pointer check
4971     elimination is only done if `-fdelete-null-pointer-checks' is
4972     enabled.
4973
4974`-ftracer'
4975     Perform tail duplication to enlarge superblock size.  This
4976     transformation simplifies the control flow of the function
4977     allowing other optimizations to do better job.
4978
4979`-funroll-loops'
4980     Unroll loops whose number of iterations can be determined at
4981     compile time or upon entry to the loop.  `-funroll-loops' implies
4982     `-frerun-cse-after-loop'.  This option makes code larger, and may
4983     or may not make it run faster.
4984
4985`-funroll-all-loops'
4986     Unroll all loops, even if their number of iterations is uncertain
4987     when the loop is entered.  This usually makes programs run more
4988     slowly.  `-funroll-all-loops' implies the same options as
4989     `-funroll-loops',
4990
4991`-fsplit-ivs-in-unroller'
4992     Enables expressing of values of induction variables in later
4993     iterations of the unrolled loop using the value in the first
4994     iteration.  This breaks long dependency chains, thus improving
4995     efficiency of the scheduling passes.
4996
4997     Combination of `-fweb' and CSE is often sufficient to obtain the
4998     same effect.  However in cases the loop body is more complicated
4999     than a single basic block, this is not reliable.  It also does not
5000     work at all on some of the architectures due to restrictions in
5001     the CSE pass.
5002
5003     This optimization is enabled by default.
5004
5005`-fvariable-expansion-in-unroller'
5006     With this option, the compiler will create multiple copies of some
5007     local variables when unrolling a loop which can result in superior
5008     code.
5009
5010`-fprefetch-loop-arrays'
5011     If supported by the target machine, generate instructions to
5012     prefetch memory to improve the performance of loops that access
5013     large arrays.
5014
5015     This option may generate better or worse code; results are highly
5016     dependent on the structure of loops within the source code.
5017
5018     Disabled at level `-Os'.
5019
5020`-fno-peephole'
5021`-fno-peephole2'
5022     Disable any machine-specific peephole optimizations.  The
5023     difference between `-fno-peephole' and `-fno-peephole2' is in how
5024     they are implemented in the compiler; some targets use one, some
5025     use the other, a few use both.
5026
5027     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
5028     levels `-O2', `-O3', `-Os'.
5029
5030`-fno-guess-branch-probability'
5031     Do not guess branch probabilities using heuristics.
5032
5033     GCC will use heuristics to guess branch probabilities if they are
5034     not provided by profiling feedback (`-fprofile-arcs').  These
5035     heuristics are based on the control flow graph.  If some branch
5036     probabilities are specified by `__builtin_expect', then the
5037     heuristics will be used to guess branch probabilities for the rest
5038     of the control flow graph, taking the `__builtin_expect' info into
5039     account.  The interactions between the heuristics and
5040     `__builtin_expect' can be complex, and in some cases, it may be
5041     useful to disable the heuristics so that the effects of
5042     `__builtin_expect' are easier to understand.
5043
5044     The default is `-fguess-branch-probability' at levels `-O', `-O2',
5045     `-O3', `-Os'.
5046
5047`-freorder-blocks'
5048     Reorder basic blocks in the compiled function in order to reduce
5049     number of taken branches and improve code locality.
5050
5051     Enabled at levels `-O2', `-O3'.
5052
5053`-freorder-blocks-and-partition'
5054     In addition to reordering basic blocks in the compiled function,
5055     in order to reduce number of taken branches, partitions hot and
5056     cold basic blocks into separate sections of the assembly and .o
5057     files, to improve paging and cache locality performance.
5058
5059     This optimization is automatically turned off in the presence of
5060     exception handling, for linkonce sections, for functions with a
5061     user-defined section attribute and on any architecture that does
5062     not support named sections.
5063
5064`-freorder-functions'
5065     Reorder functions in the object file in order to improve code
5066     locality.  This is implemented by using special subsections
5067     `.text.hot' for most frequently executed functions and
5068     `.text.unlikely' for unlikely executed functions.  Reordering is
5069     done by the linker so object file format must support named
5070     sections and linker must place them in a reasonable way.
5071
5072     Also profile feedback must be available in to make this option
5073     effective.  See `-fprofile-arcs' for details.
5074
5075     Enabled at levels `-O2', `-O3', `-Os'.
5076
5077`-fstrict-aliasing'
5078     Allows the compiler to assume the strictest aliasing rules
5079     applicable to the language being compiled.  For C (and C++), this
5080     activates optimizations based on the type of expressions.  In
5081     particular, an object of one type is assumed never to reside at
5082     the same address as an object of a different type, unless the
5083     types are almost the same.  For example, an `unsigned int' can
5084     alias an `int', but not a `void*' or a `double'.  A character type
5085     may alias any other type.
5086
5087     Pay special attention to code like this:
5088          union a_union {
5089            int i;
5090            double d;
5091          };
5092
5093          int f() {
5094            a_union t;
5095            t.d = 3.0;
5096            return t.i;
5097          }
5098     The practice of reading from a different union member than the one
5099     most recently written to (called "type-punning") is common.  Even
5100     with `-fstrict-aliasing', type-punning is allowed, provided the
5101     memory is accessed through the union type.  So, the code above
5102     will work as expected.  However, this code might not:
5103          int f() {
5104            a_union t;
5105            int* ip;
5106            t.d = 3.0;
5107            ip = &t.i;
5108            return *ip;
5109          }
5110
5111     Every language that wishes to perform language-specific alias
5112     analysis should define a function that computes, given an `tree'
5113     node, an alias set for the node.  Nodes in different alias sets
5114     are not allowed to alias.  For an example, see the C front-end
5115     function `c_get_alias_set'.
5116
5117     Enabled at levels `-O2', `-O3', `-Os'.
5118
5119`-fstrict-overflow'
5120     Allow the compiler to assume strict signed overflow rules,
5121     depending on the language being compiled.  For C (and C++) this
5122     means that overflow when doing arithmetic with signed numbers is
5123     undefined, which means that the compiler may assume that it will
5124     not happen.  This permits various optimizations.  For example, the
5125     compiler will assume that an expression like `i + 10 > i' will
5126     always be true for signed `i'.  This assumption is only valid if
5127     signed overflow is undefined, as the expression is false if `i +
5128     10' overflows when using twos complement arithmetic.  When this
5129     option is in effect any attempt to determine whether an operation
5130     on signed numbers will overflow must be written carefully to not
5131     actually involve overflow.
5132
5133     See also the `-fwrapv' option.  Using `-fwrapv' means that signed
5134     overflow is fully defined: it wraps.  When `-fwrapv' is used,
5135     there is no difference between `-fstrict-overflow' and
5136     `-fno-strict-overflow'.  With `-fwrapv' certain types of overflow
5137     are permitted.  For example, if the compiler gets an overflow when
5138     doing arithmetic on constants, the overflowed value can still be
5139     used with `-fwrapv', but not otherwise.
5140
5141     The `-fstrict-overflow' option is enabled at levels `-O2', `-O3',
5142     `-Os'.
5143
5144`-falign-functions'
5145`-falign-functions=N'
5146     Align the start of functions to the next power-of-two greater than
5147     N, skipping up to N bytes.  For instance, `-falign-functions=32'
5148     aligns functions to the next 32-byte boundary, but
5149     `-falign-functions=24' would align to the next 32-byte boundary
5150     only if this can be done by skipping 23 bytes or less.
5151
5152     `-fno-align-functions' and `-falign-functions=1' are equivalent
5153     and mean that functions will not be aligned.
5154
5155     Some assemblers only support this flag when N is a power of two;
5156     in that case, it is rounded up.
5157
5158     If N is not specified or is zero, use a machine-dependent default.
5159
5160     Enabled at levels `-O2', `-O3'.
5161
5162`-falign-labels'
5163`-falign-labels=N'
5164     Align all branch targets to a power-of-two boundary, skipping up to
5165     N bytes like `-falign-functions'.  This option can easily make
5166     code slower, because it must insert dummy operations for when the
5167     branch target is reached in the usual flow of the code.
5168
5169     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
5170     that labels will not be aligned.
5171
5172     If `-falign-loops' or `-falign-jumps' are applicable and are
5173     greater than this value, then their values are used instead.
5174
5175     If N is not specified or is zero, use a machine-dependent default
5176     which is very likely to be `1', meaning no alignment.
5177
5178     Enabled at levels `-O2', `-O3'.
5179
5180`-falign-loops'
5181`-falign-loops=N'
5182     Align loops to a power-of-two boundary, skipping up to N bytes
5183     like `-falign-functions'.  The hope is that the loop will be
5184     executed many times, which will make up for any execution of the
5185     dummy operations.
5186
5187     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
5188     that loops will not be aligned.
5189
5190     If N is not specified or is zero, use a machine-dependent default.
5191
5192     Enabled at levels `-O2', `-O3'.
5193
5194`-falign-jumps'
5195`-falign-jumps=N'
5196     Align branch targets to a power-of-two boundary, for branch targets
5197     where the targets can only be reached by jumping, skipping up to N
5198     bytes like `-falign-functions'.  In this case, no dummy operations
5199     need be executed.
5200
5201     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
5202     that loops will not be aligned.
5203
5204     If N is not specified or is zero, use a machine-dependent default.
5205
5206     Enabled at levels `-O2', `-O3'.
5207
5208`-funit-at-a-time'
5209     Parse the whole compilation unit before starting to produce code.
5210     This allows some extra optimizations to take place but consumes
5211     more memory (in general).  There are some compatibility issues
5212     with _unit-at-a-time_ mode:
5213        * enabling _unit-at-a-time_ mode may change the order in which
5214          functions, variables, and top-level `asm' statements are
5215          emitted, and will likely break code relying on some particular
5216          ordering.  The majority of such top-level `asm' statements,
5217          though, can be replaced by `section' attributes.  The
5218          `fno-toplevel-reorder' option may be used to keep the ordering
5219          used in the input file, at the cost of some optimizations.
5220
5221        * _unit-at-a-time_ mode removes unreferenced static variables
5222          and functions.  This may result in undefined references when
5223          an `asm' statement refers directly to variables or functions
5224          that are otherwise unused.  In that case either the
5225          variable/function shall be listed as an operand of the `asm'
5226          statement operand or, in the case of top-level `asm'
5227          statements the attribute `used' shall be used on the
5228          declaration.
5229
5230        * Static functions now can use non-standard passing conventions
5231          that may break `asm' statements calling functions directly.
5232          Again, attribute `used' will prevent this behavior.
5233
5234     As a temporary workaround, `-fno-unit-at-a-time' can be used, but
5235     this scheme may not be supported by future releases of GCC.
5236
5237     Enabled at levels `-O', `-O2', `-O3', `-Os'.
5238
5239`-fno-toplevel-reorder'
5240     Do not reorder top-level functions, variables, and `asm'
5241     statements.  Output them in the same order that they appear in the
5242     input file.  When this option is used, unreferenced static
5243     variables will not be removed.  This option is intended to support
5244     existing code which relies on a particular ordering.  For new
5245     code, it is better to use attributes.
5246
5247`-fweb'
5248     Constructs webs as commonly used for register allocation purposes
5249     and assign each web individual pseudo register.  This allows the
5250     register allocation pass to operate on pseudos directly, but also
5251     strengthens several other optimization passes, such as CSE, loop
5252     optimizer and trivial dead code remover.  It can, however, make
5253     debugging impossible, since variables will no longer stay in a
5254     "home register".
5255
5256     Enabled by default with `-funroll-loops'.
5257
5258`-fwhole-program'
5259     Assume that the current compilation unit represents whole program
5260     being compiled.  All public functions and variables with the
5261     exception of `main' and those merged by attribute
5262     `externally_visible' become static functions and in a affect gets
5263     more aggressively optimized by interprocedural optimizers.  While
5264     this option is equivalent to proper use of `static' keyword for
5265     programs consisting of single file, in combination with option
5266     `--combine' this flag can be used to compile most of smaller scale
5267     C programs since the functions and variables become local for the
5268     whole combined compilation unit, not for the single source file
5269     itself.
5270
5271`-fno-cprop-registers'
5272     After register allocation and post-register allocation instruction
5273     splitting, we perform a copy-propagation pass to try to reduce
5274     scheduling dependencies and occasionally eliminate the copy.
5275
5276     Disabled at levels `-O', `-O2', `-O3', `-Os'.
5277
5278`-fprofile-generate'
5279     Enable options usually used for instrumenting application to
5280     produce profile useful for later recompilation with profile
5281     feedback based optimization.  You must use `-fprofile-generate'
5282     both when compiling and when linking your program.
5283
5284     The following options are enabled: `-fprofile-arcs',
5285     `-fprofile-values', `-fvpt'.
5286
5287`-fprofile-use'
5288     Enable profile feedback directed optimizations, and optimizations
5289     generally profitable only with profile feedback available.
5290
5291     The following options are enabled: `-fbranch-probabilities',
5292     `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'
5293
5294
5295 The following options control compiler behavior regarding floating
5296point arithmetic.  These options trade off between speed and
5297correctness.  All must be specifically enabled.
5298
5299`-ffloat-store'
5300     Do not store floating point variables in registers, and inhibit
5301     other options that might change whether a floating point value is
5302     taken from a register or memory.
5303
5304     This option prevents undesirable excess precision on machines such
5305     as the 68000 where the floating registers (of the 68881) keep more
5306     precision than a `double' is supposed to have.  Similarly for the
5307     x86 architecture.  For most programs, the excess precision does
5308     only good, but a few programs rely on the precise definition of
5309     IEEE floating point.  Use `-ffloat-store' for such programs, after
5310     modifying them to store all pertinent intermediate computations
5311     into variables.
5312
5313`-ffast-math'
5314     Sets `-fno-math-errno', `-funsafe-math-optimizations',
5315     `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math',
5316     `-fno-signaling-nans' and `fcx-limited-range'.
5317
5318     This option causes the preprocessor macro `__FAST_MATH__' to be
5319     defined.
5320
5321     This option should never be turned on by any `-O' option since it
5322     can result in incorrect output for programs which depend on an
5323     exact implementation of IEEE or ISO rules/specifications for math
5324     functions.
5325
5326`-fno-math-errno'
5327     Do not set ERRNO after calling math functions that are executed
5328     with a single instruction, e.g., sqrt.  A program that relies on
5329     IEEE exceptions for math error handling may want to use this flag
5330     for speed while maintaining IEEE arithmetic compatibility.
5331
5332     This option should never be turned on by any `-O' option since it
5333     can result in incorrect output for programs which depend on an
5334     exact implementation of IEEE or ISO rules/specifications for math
5335     functions.
5336
5337     The default is `-fmath-errno'.
5338
5339     On Darwin systems, the math library never sets `errno'.  There is
5340     therefore no reason for the compiler to consider the possibility
5341     that it might, and `-fno-math-errno' is the default.
5342
5343`-funsafe-math-optimizations'
5344     Allow optimizations for floating-point arithmetic that (a) assume
5345     that arguments and results are valid and (b) may violate IEEE or
5346     ANSI standards.  When used at link-time, it may include libraries
5347     or startup files that change the default FPU control word or other
5348     similar optimizations.
5349
5350     This option should never be turned on by any `-O' option since it
5351     can result in incorrect output for programs which depend on an
5352     exact implementation of IEEE or ISO rules/specifications for math
5353     functions.
5354
5355     The default is `-fno-unsafe-math-optimizations'.
5356
5357`-ffinite-math-only'
5358     Allow optimizations for floating-point arithmetic that assume that
5359     arguments and results are not NaNs or +-Infs.
5360
5361     This option should never be turned on by any `-O' option since it
5362     can result in incorrect output for programs which depend on an
5363     exact implementation of IEEE or ISO rules/specifications.
5364
5365     The default is `-fno-finite-math-only'.
5366
5367`-fno-trapping-math'
5368     Compile code assuming that floating-point operations cannot
5369     generate user-visible traps.  These traps include division by
5370     zero, overflow, underflow, inexact result and invalid operation.
5371     This option implies `-fno-signaling-nans'.  Setting this option
5372     may allow faster code if one relies on "non-stop" IEEE arithmetic,
5373     for example.
5374
5375     This option should never be turned on by any `-O' option since it
5376     can result in incorrect output for programs which depend on an
5377     exact implementation of IEEE or ISO rules/specifications for math
5378     functions.
5379
5380     The default is `-ftrapping-math'.
5381
5382`-frounding-math'
5383     Disable transformations and optimizations that assume default
5384     floating point rounding behavior.  This is round-to-zero for all
5385     floating point to integer conversions, and round-to-nearest for
5386     all other arithmetic truncations.  This option should be specified
5387     for programs that change the FP rounding mode dynamically, or that
5388     may be executed with a non-default rounding mode.  This option
5389     disables constant folding of floating point expressions at
5390     compile-time (which may be affected by rounding mode) and
5391     arithmetic transformations that are unsafe in the presence of
5392     sign-dependent rounding modes.
5393
5394     The default is `-fno-rounding-math'.
5395
5396     This option is experimental and does not currently guarantee to
5397     disable all GCC optimizations that are affected by rounding mode.
5398     Future versions of GCC may provide finer control of this setting
5399     using C99's `FENV_ACCESS' pragma.  This command line option will
5400     be used to specify the default state for `FENV_ACCESS'.
5401
5402`-frtl-abstract-sequences'
5403     It is a size optimization method. This option is to find identical
5404     sequences of code, which can be turned into pseudo-procedures  and
5405     then  replace  all  occurrences with  calls to  the  newly created
5406     subroutine. It is kind of an opposite of `-finline-functions'.
5407     This optimization runs at RTL level.
5408
5409`-fsignaling-nans'
5410     Compile code assuming that IEEE signaling NaNs may generate
5411     user-visible traps during floating-point operations.  Setting this
5412     option disables optimizations that may change the number of
5413     exceptions visible with signaling NaNs.  This option implies
5414     `-ftrapping-math'.
5415
5416     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
5417     defined.
5418
5419     The default is `-fno-signaling-nans'.
5420
5421     This option is experimental and does not currently guarantee to
5422     disable all GCC optimizations that affect signaling NaN behavior.
5423
5424`-fsingle-precision-constant'
5425     Treat floating point constant as single precision constant instead
5426     of implicitly converting it to double precision constant.
5427
5428`-fcx-limited-range'
5429`-fno-cx-limited-range'
5430     When enabled, this option states that a range reduction step is not
5431     needed when performing complex division.  The default is
5432     `-fno-cx-limited-range', but is enabled by `-ffast-math'.
5433
5434     This option controls the default setting of the ISO C99
5435     `CX_LIMITED_RANGE' pragma.  Nevertheless, the option applies to
5436     all languages.
5437
5438
5439 The following options control optimizations that may improve
5440performance, but are not enabled by any `-O' options.  This section
5441includes experimental options that may produce broken code.
5442
5443`-fbranch-probabilities'
5444     After running a program compiled with `-fprofile-arcs' (*note
5445     Options for Debugging Your Program or `gcc': Debugging Options.),
5446     you can compile it a second time using `-fbranch-probabilities',
5447     to improve optimizations based on the number of times each branch
5448     was taken.  When the program compiled with `-fprofile-arcs' exits
5449     it saves arc execution counts to a file called `SOURCENAME.gcda'
5450     for each source file  The information in this data file is very
5451     dependent on the structure of the generated code, so you must use
5452     the same source code and the same optimization options for both
5453     compilations.
5454
5455     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
5456     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
5457     optimization.  Currently, they are only used in one place: in
5458     `reorg.c', instead of guessing which path a branch is mostly to
5459     take, the `REG_BR_PROB' values are used to exactly determine which
5460     path is taken more often.
5461
5462`-fprofile-values'
5463     If combined with `-fprofile-arcs', it adds code so that some data
5464     about values of expressions in the program is gathered.
5465
5466     With `-fbranch-probabilities', it reads back the data gathered
5467     from profiling values of expressions and adds `REG_VALUE_PROFILE'
5468     notes to instructions for their later usage in optimizations.
5469
5470     Enabled with `-fprofile-generate' and `-fprofile-use'.
5471
5472`-fvpt'
5473     If combined with `-fprofile-arcs', it instructs the compiler to add
5474     a code to gather information about values of expressions.
5475
5476     With `-fbranch-probabilities', it reads back the data gathered and
5477     actually performs the optimizations based on them.  Currently the
5478     optimizations include specialization of division operation using
5479     the knowledge about the value of the denominator.
5480
5481`-frename-registers'
5482     Attempt to avoid false dependencies in scheduled code by making use
5483     of registers left over after register allocation.  This
5484     optimization will most benefit processors with lots of registers.
5485     Depending on the debug information format adopted by the target,
5486     however, it can make debugging impossible, since variables will no
5487     longer stay in a "home register".
5488
5489     Enabled by default with `-funroll-loops'.
5490
5491`-ftracer'
5492     Perform tail duplication to enlarge superblock size.  This
5493     transformation simplifies the control flow of the function
5494     allowing other optimizations to do better job.
5495
5496     Enabled with `-fprofile-use'.
5497
5498`-funroll-loops'
5499     Unroll loops whose number of iterations can be determined at
5500     compile time or upon entry to the loop.  `-funroll-loops' implies
5501     `-frerun-cse-after-loop', `-fweb' and `-frename-registers'.  It
5502     also turns on complete loop peeling (i.e. complete removal of
5503     loops with small constant number of iterations).  This option
5504     makes code larger, and may or may not make it run faster.
5505
5506     Enabled with `-fprofile-use'.
5507
5508`-funroll-all-loops'
5509     Unroll all loops, even if their number of iterations is uncertain
5510     when the loop is entered.  This usually makes programs run more
5511     slowly.  `-funroll-all-loops' implies the same options as
5512     `-funroll-loops'.
5513
5514`-fpeel-loops'
5515     Peels the loops for that there is enough information that they do
5516     not roll much (from profile feedback).  It also turns on complete
5517     loop peeling (i.e. complete removal of loops with small constant
5518     number of iterations).
5519
5520     Enabled with `-fprofile-use'.
5521
5522`-fmove-loop-invariants'
5523     Enables the loop invariant motion pass in the RTL loop optimizer.
5524     Enabled at level `-O1'
5525
5526`-funswitch-loops'
5527     Move branches with loop invariant conditions out of the loop, with
5528     duplicates of the loop on both branches (modified according to
5529     result of the condition).
5530
5531`-ffunction-sections'
5532`-fdata-sections'
5533     Place each function or data item into its own section in the output
5534     file if the target supports arbitrary sections.  The name of the
5535     function or the name of the data item determines the section's name
5536     in the output file.
5537
5538     Use these options on systems where the linker can perform
5539     optimizations to improve locality of reference in the instruction
5540     space.  Most systems using the ELF object format and SPARC
5541     processors running Solaris 2 have linkers with such optimizations.
5542     AIX may have these optimizations in the future.
5543
5544     Only use these options when there are significant benefits from
5545     doing so.  When you specify these options, the assembler and
5546     linker will create larger object and executable files and will
5547     also be slower.  You will not be able to use `gprof' on all
5548     systems if you specify this option and you may have problems with
5549     debugging if you specify both this option and `-g'.
5550
5551`-fbranch-target-load-optimize'
5552     Perform branch target register load optimization before prologue /
5553     epilogue threading.  The use of target registers can typically be
5554     exposed only during reload, thus hoisting loads out of loops and
5555     doing inter-block scheduling needs a separate optimization pass.
5556
5557`-fbranch-target-load-optimize2'
5558     Perform branch target register load optimization after prologue /
5559     epilogue threading.
5560
5561`-fbtr-bb-exclusive'
5562     When performing branch target register load optimization, don't
5563     reuse branch target registers in within any basic block.
5564
5565`-fstack-protector'
5566     Emit extra code to check for buffer overflows, such as stack
5567     smashing attacks.  This is done by adding a guard variable to
5568     functions with vulnerable objects.  This includes functions that
5569     call alloca, and functions with buffers larger than 8 bytes.  The
5570     guards are initialized when a function is entered and then checked
5571     when the function exits.  If a guard check fails, an error message
5572     is printed and the program exits.
5573
5574`-fstack-protector-all'
5575     Like `-fstack-protector' except that all functions are protected.
5576
5577`-fsection-anchors'
5578     Try to reduce the number of symbolic address calculations by using
5579     shared "anchor" symbols to address nearby objects.  This
5580     transformation can help to reduce the number of GOT entries and
5581     GOT accesses on some targets.
5582
5583     For example, the implementation of the following function `foo':
5584
5585          static int a, b, c;
5586          int foo (void) { return a + b + c; }
5587
5588     would usually calculate the addresses of all three variables, but
5589     if you compile it with `-fsection-anchors', it will access the
5590     variables from a common anchor point instead.  The effect is
5591     similar to the following pseudocode (which isn't valid C):
5592
5593          int foo (void)
5594          {
5595            register int *xr = &x;
5596            return xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
5597          }
5598
5599     Not all targets support this option.
5600
5601`--param NAME=VALUE'
5602     In some places, GCC uses various constants to control the amount of
5603     optimization that is done.  For example, GCC will not inline
5604     functions that contain more that a certain number of instructions.
5605     You can control some of these constants on the command-line using
5606     the `--param' option.
5607
5608     The names of specific parameters, and the meaning of the values,
5609     are tied to the internals of the compiler, and are subject to
5610     change without notice in future releases.
5611
5612     In each case, the VALUE is an integer.  The allowable choices for
5613     NAME are given in the following table:
5614
5615    `salias-max-implicit-fields'
5616          The maximum number of fields in a variable without direct
5617          structure accesses for which structure aliasing will consider
5618          trying to track each field.  The default is 5
5619
5620    `salias-max-array-elements'
5621          The maximum number of elements an array can have and its
5622          elements still be tracked individually by structure aliasing.
5623          The default is 4
5624
5625    `sra-max-structure-size'
5626          The maximum structure size, in bytes, at which the scalar
5627          replacement of aggregates (SRA) optimization will perform
5628          block copies.  The default value, 0, implies that GCC will
5629          select the most appropriate size itself.
5630
5631    `sra-field-structure-ratio'
5632          The threshold ratio (as a percentage) between instantiated
5633          fields and the complete structure size.  We say that if the
5634          ratio of the number of bytes in instantiated fields to the
5635          number of bytes in the complete structure exceeds this
5636          parameter, then block copies are not used.  The default is 75.
5637
5638    `max-crossjump-edges'
5639          The maximum number of incoming edges to consider for
5640          crossjumping.  The algorithm used by `-fcrossjumping' is
5641          O(N^2) in the number of edges incoming to each block.
5642          Increasing values mean more aggressive optimization, making
5643          the compile time increase with probably small improvement in
5644          executable size.
5645
5646    `min-crossjump-insns'
5647          The minimum number of instructions which must be matched at
5648          the end of two blocks before crossjumping will be performed
5649          on them.  This value is ignored in the case where all
5650          instructions in the block being crossjumped from are matched.
5651          The default value is 5.
5652
5653    `max-grow-copy-bb-insns'
5654          The maximum code size expansion factor when copying basic
5655          blocks instead of jumping.  The expansion is relative to a
5656          jump instruction.  The default value is 8.
5657
5658    `max-goto-duplication-insns'
5659          The maximum number of instructions to duplicate to a block
5660          that jumps to a computed goto.  To avoid O(N^2) behavior in a
5661          number of passes, GCC factors computed gotos early in the
5662          compilation process, and unfactors them as late as possible.
5663          Only computed jumps at the end of a basic blocks with no more
5664          than max-goto-duplication-insns are unfactored.  The default
5665          value is 8.
5666
5667    `max-delay-slot-insn-search'
5668          The maximum number of instructions to consider when looking
5669          for an instruction to fill a delay slot.  If more than this
5670          arbitrary number of instructions is searched, the time
5671          savings from filling the delay slot will be minimal so stop
5672          searching.  Increasing values mean more aggressive
5673          optimization, making the compile time increase with probably
5674          small improvement in executable run time.
5675
5676    `max-delay-slot-live-search'
5677          When trying to fill delay slots, the maximum number of
5678          instructions to consider when searching for a block with
5679          valid live register information.  Increasing this arbitrarily
5680          chosen value means more aggressive optimization, increasing
5681          the compile time.  This parameter should be removed when the
5682          delay slot code is rewritten to maintain the control-flow
5683          graph.
5684
5685    `max-gcse-memory'
5686          The approximate maximum amount of memory that will be
5687          allocated in order to perform the global common subexpression
5688          elimination optimization.  If more memory than specified is
5689          required, the optimization will not be done.
5690
5691    `max-gcse-passes'
5692          The maximum number of passes of GCSE to run.  The default is
5693          1.
5694
5695    `max-pending-list-length'
5696          The maximum number of pending dependencies scheduling will
5697          allow before flushing the current state and starting over.
5698          Large functions with few branches or calls can create
5699          excessively large lists which needlessly consume memory and
5700          resources.
5701
5702    `max-inline-insns-single'
5703          Several parameters control the tree inliner used in gcc.
5704          This number sets the maximum number of instructions (counted
5705          in GCC's internal representation) in a single function that
5706          the tree inliner will consider for inlining.  This only
5707          affects functions declared inline and methods implemented in
5708          a class declaration (C++).  The default value is 450.
5709
5710    `max-inline-insns-auto'
5711          When you use `-finline-functions' (included in `-O3'), a lot
5712          of functions that would otherwise not be considered for
5713          inlining by the compiler will be investigated.  To those
5714          functions, a different (more restrictive) limit compared to
5715          functions declared inline can be applied.  The default value
5716          is 90.
5717
5718    `large-function-insns'
5719          The limit specifying really large functions.  For functions
5720          larger than this limit after inlining inlining is constrained
5721          by `--param large-function-growth'.  This parameter is useful
5722          primarily to avoid extreme compilation time caused by
5723          non-linear algorithms used by the backend.  This parameter is
5724          ignored when `-funit-at-a-time' is not used.  The default
5725          value is 2700.
5726
5727    `large-function-growth'
5728          Specifies maximal growth of large function caused by inlining
5729          in percents.  This parameter is ignored when
5730          `-funit-at-a-time' is not used.  The default value is 100
5731          which limits large function growth to 2.0 times the original
5732          size.
5733
5734    `large-unit-insns'
5735          The limit specifying large translation unit.  Growth caused
5736          by inlining of units larger than this limit is limited by
5737          `--param inline-unit-growth'.  For small units this might be
5738          too tight (consider unit consisting of function A that is
5739          inline and B that just calls A three time.  If B is small
5740          relative to A, the growth of unit is 300\% and yet such
5741          inlining is very sane.  For very large units consisting of
5742          small inlininable functions however the overall unit growth
5743          limit is needed to avoid exponential explosion of code size.
5744          Thus for smaller units, the size is increased to `--param
5745          large-unit-insns' before applying `--param
5746          inline-unit-growth'.  The default is 10000
5747
5748    `inline-unit-growth'
5749          Specifies maximal overall growth of the compilation unit
5750          caused by inlining.  This parameter is ignored when
5751          `-funit-at-a-time' is not used.  The default value is 50
5752          which limits unit growth to 1.5 times the original size.
5753
5754    `max-inline-insns-recursive'
5755    `max-inline-insns-recursive-auto'
5756          Specifies maximum number of instructions out-of-line copy of
5757          self recursive inline function can grow into by performing
5758          recursive inlining.
5759
5760          For functions declared inline `--param
5761          max-inline-insns-recursive' is taken into account.  For
5762          function not declared inline, recursive inlining happens only
5763          when `-finline-functions' (included in `-O3') is enabled and
5764          `--param max-inline-insns-recursive-auto' is used.  The
5765          default value is 450.
5766
5767    `max-inline-recursive-depth'
5768    `max-inline-recursive-depth-auto'
5769          Specifies maximum recursion depth used by the recursive
5770          inlining.
5771
5772          For functions declared inline `--param
5773          max-inline-recursive-depth' is taken into account.  For
5774          function not declared inline, recursive inlining happens only
5775          when `-finline-functions' (included in `-O3') is enabled and
5776          `--param max-inline-recursive-depth-auto' is used.  The
5777          default value is 450.
5778
5779    `min-inline-recursive-probability'
5780          Recursive inlining is profitable only for function having
5781          deep recursion in average and can hurt for function having
5782          little recursion depth by increasing the prologue size or
5783          complexity of function body to other optimizers.
5784
5785          When profile feedback is available (see `-fprofile-generate')
5786          the actual recursion depth can be guessed from probability
5787          that function will recurse via given call expression.  This
5788          parameter limits inlining only to call expression whose
5789          probability exceeds given threshold (in percents).  The
5790          default value is 10.
5791
5792    `inline-call-cost'
5793          Specify cost of call instruction relative to simple
5794          arithmetics operations (having cost of 1).  Increasing this
5795          cost disqualifies inlining of non-leaf functions and at the
5796          same time increases size of leaf function that is believed to
5797          reduce function size by being inlined.  In effect it
5798          increases amount of inlining for code having large
5799          abstraction penalty (many functions that just pass the
5800          arguments to other functions) and decrease inlining for code
5801          with low abstraction penalty.  The default value is 16.
5802
5803    `max-unrolled-insns'
5804          The maximum number of instructions that a loop should have if
5805          that loop is unrolled, and if the loop is unrolled, it
5806          determines how many times the loop code is unrolled.
5807
5808    `max-average-unrolled-insns'
5809          The maximum number of instructions biased by probabilities of
5810          their execution that a loop should have if that loop is
5811          unrolled, and if the loop is unrolled, it determines how many
5812          times the loop code is unrolled.
5813
5814    `max-unroll-times'
5815          The maximum number of unrollings of a single loop.
5816
5817    `max-peeled-insns'
5818          The maximum number of instructions that a loop should have if
5819          that loop is peeled, and if the loop is peeled, it determines
5820          how many times the loop code is peeled.
5821
5822    `max-peel-times'
5823          The maximum number of peelings of a single loop.
5824
5825    `max-completely-peeled-insns'
5826          The maximum number of insns of a completely peeled loop.
5827
5828    `max-completely-peel-times'
5829          The maximum number of iterations of a loop to be suitable for
5830          complete peeling.
5831
5832    `max-unswitch-insns'
5833          The maximum number of insns of an unswitched loop.
5834
5835    `max-unswitch-level'
5836          The maximum number of branches unswitched in a single loop.
5837
5838    `lim-expensive'
5839          The minimum cost of an expensive expression in the loop
5840          invariant motion.
5841
5842    `iv-consider-all-candidates-bound'
5843          Bound on number of candidates for induction variables below
5844          that all candidates are considered for each use in induction
5845          variable optimizations.  Only the most relevant candidates
5846          are considered if there are more candidates, to avoid
5847          quadratic time complexity.
5848
5849    `iv-max-considered-uses'
5850          The induction variable optimizations give up on loops that
5851          contain more induction variable uses.
5852
5853    `iv-always-prune-cand-set-bound'
5854          If number of candidates in the set is smaller than this value,
5855          we always try to remove unnecessary ivs from the set during
5856          its optimization when a new iv is added to the set.
5857
5858    `scev-max-expr-size'
5859          Bound on size of expressions used in the scalar evolutions
5860          analyzer.  Large expressions slow the analyzer.
5861
5862    `vect-max-version-checks'
5863          The maximum number of runtime checks that can be performed
5864          when doing loop versioning in the vectorizer.  See option
5865          ftree-vect-loop-version for more information.
5866
5867    `max-iterations-to-track'
5868          The maximum number of iterations of a loop the brute force
5869          algorithm for analysis of # of iterations of the loop tries
5870          to evaluate.
5871
5872    `hot-bb-count-fraction'
5873          Select fraction of the maximal count of repetitions of basic
5874          block in program given basic block needs to have to be
5875          considered hot.
5876
5877    `hot-bb-frequency-fraction'
5878          Select fraction of the maximal frequency of executions of
5879          basic block in function given basic block needs to have to be
5880          considered hot
5881
5882    `max-predicted-iterations'
5883          The maximum number of loop iterations we predict statically.
5884          This is useful in cases where function contain single loop
5885          with known bound and other loop with unknown.  We predict the
5886          known number of iterations correctly, while the unknown
5887          number of iterations average to roughly 10.  This means that
5888          the loop without bounds would appear artificially cold
5889          relative to the other one.
5890
5891    `tracer-dynamic-coverage'
5892    `tracer-dynamic-coverage-feedback'
5893          This value is used to limit superblock formation once the
5894          given percentage of executed instructions is covered.  This
5895          limits unnecessary code size expansion.
5896
5897          The `tracer-dynamic-coverage-feedback' is used only when
5898          profile feedback is available.  The real profiles (as opposed
5899          to statically estimated ones) are much less balanced allowing
5900          the threshold to be larger value.
5901
5902    `tracer-max-code-growth'
5903          Stop tail duplication once code growth has reached given
5904          percentage.  This is rather hokey argument, as most of the
5905          duplicates will be eliminated later in cross jumping, so it
5906          may be set to much higher values than is the desired code
5907          growth.
5908
5909    `tracer-min-branch-ratio'
5910          Stop reverse growth when the reverse probability of best edge
5911          is less than this threshold (in percent).
5912
5913    `tracer-min-branch-ratio'
5914    `tracer-min-branch-ratio-feedback'
5915          Stop forward growth if the best edge do have probability
5916          lower than this threshold.
5917
5918          Similarly to `tracer-dynamic-coverage' two values are
5919          present, one for compilation for profile feedback and one for
5920          compilation without.  The value for compilation with profile
5921          feedback needs to be more conservative (higher) in order to
5922          make tracer effective.
5923
5924    `max-cse-path-length'
5925          Maximum number of basic blocks on path that cse considers.
5926          The default is 10.
5927
5928    `max-cse-insns'
5929          The maximum instructions CSE process before flushing. The
5930          default is 1000.
5931
5932    `global-var-threshold'
5933          Counts the number of function calls (N) and the number of
5934          call-clobbered variables (V).  If NxV is larger than this
5935          limit, a single artificial variable will be created to
5936          represent all the call-clobbered variables at function call
5937          sites.  This artificial variable will then be made to alias
5938          every call-clobbered variable.  (done as `int * size_t' on
5939          the host machine; beware overflow).
5940
5941    `max-aliased-vops'
5942          Maximum number of virtual operands allowed to represent
5943          aliases before triggering the alias grouping heuristic.
5944          Alias grouping reduces compile times and memory consumption
5945          needed for aliasing at the expense of precision loss in alias
5946          information.
5947
5948    `ggc-min-expand'
5949          GCC uses a garbage collector to manage its own memory
5950          allocation.  This parameter specifies the minimum percentage
5951          by which the garbage collector's heap should be allowed to
5952          expand between collections.  Tuning this may improve
5953          compilation speed; it has no effect on code generation.
5954
5955          The default is 30% + 70% * (RAM/1GB) with an upper bound of
5956          100% when RAM >= 1GB.  If `getrlimit' is available, the
5957          notion of "RAM" is the smallest of actual RAM and
5958          `RLIMIT_DATA' or `RLIMIT_AS'.  If GCC is not able to
5959          calculate RAM on a particular platform, the lower bound of
5960          30% is used.  Setting this parameter and `ggc-min-heapsize'
5961          to zero causes a full collection to occur at every
5962          opportunity.  This is extremely slow, but can be useful for
5963          debugging.
5964
5965    `ggc-min-heapsize'
5966          Minimum size of the garbage collector's heap before it begins
5967          bothering to collect garbage.  The first collection occurs
5968          after the heap expands by `ggc-min-expand'% beyond
5969          `ggc-min-heapsize'.  Again, tuning this may improve
5970          compilation speed, and has no effect on code generation.
5971
5972          The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
5973          which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
5974          exceeded, but with a lower bound of 4096 (four megabytes) and
5975          an upper bound of 131072 (128 megabytes).  If GCC is not able
5976          to calculate RAM on a particular platform, the lower bound is
5977          used.  Setting this parameter very large effectively disables
5978          garbage collection.  Setting this parameter and
5979          `ggc-min-expand' to zero causes a full collection to occur at
5980          every opportunity.
5981
5982    `max-reload-search-insns'
5983          The maximum number of instruction reload should look backward
5984          for equivalent register.  Increasing values mean more
5985          aggressive optimization, making the compile time increase
5986          with probably slightly better performance.  The default value
5987          is 100.
5988
5989    `max-cselib-memory-locations'
5990          The maximum number of memory locations cselib should take
5991          into account.  Increasing values mean more aggressive
5992          optimization, making the compile time increase with probably
5993          slightly better performance.  The default value is 500.
5994
5995    `max-flow-memory-locations'
5996          Similar as `max-cselib-memory-locations' but for dataflow
5997          liveness.  The default value is 100.
5998
5999    `reorder-blocks-duplicate'
6000    `reorder-blocks-duplicate-feedback'
6001          Used by basic block reordering pass to decide whether to use
6002          unconditional branch or duplicate the code on its
6003          destination.  Code is duplicated when its estimated size is
6004          smaller than this value multiplied by the estimated size of
6005          unconditional jump in the hot spots of the program.
6006
6007          The `reorder-block-duplicate-feedback' is used only when
6008          profile feedback is available and may be set to higher values
6009          than `reorder-block-duplicate' since information about the
6010          hot spots is more accurate.
6011
6012    `max-sched-ready-insns'
6013          The maximum number of instructions ready to be issued the
6014          scheduler should consider at any given time during the first
6015          scheduling pass.  Increasing values mean more thorough
6016          searches, making the compilation time increase with probably
6017          little benefit.  The default value is 100.
6018
6019    `max-sched-region-blocks'
6020          The maximum number of blocks in a region to be considered for
6021          interblock scheduling.  The default value is 10.
6022
6023    `max-sched-region-insns'
6024          The maximum number of insns in a region to be considered for
6025          interblock scheduling.  The default value is 100.
6026
6027    `min-spec-prob'
6028          The minimum probability (in percents) of reaching a source
6029          block for interblock speculative scheduling.  The default
6030          value is 40.
6031
6032    `max-sched-extend-regions-iters'
6033          The maximum number of iterations through CFG to extend
6034          regions.  0 - disable region extension, N - do at most N
6035          iterations.  The default value is 0.
6036
6037    `max-sched-insn-conflict-delay'
6038          The maximum conflict delay for an insn to be considered for
6039          speculative motion.  The default value is 3.
6040
6041    `sched-spec-prob-cutoff'
6042          The minimal probability of speculation success (in percents),
6043          so that speculative insn will be scheduled.  The default
6044          value is 40.
6045
6046    `max-last-value-rtl'
6047          The maximum size measured as number of RTLs that can be
6048          recorded in an expression in combiner for a pseudo register
6049          as last known value of that register.  The default is 10000.
6050
6051    `integer-share-limit'
6052          Small integer constants can use a shared data structure,
6053          reducing the compiler's memory usage and increasing its
6054          speed.  This sets the maximum value of a shared integer
6055          constant's.  The default value is 256.
6056
6057    `min-virtual-mappings'
6058          Specifies the minimum number of virtual mappings in the
6059          incremental SSA updater that should be registered to trigger
6060          the virtual mappings heuristic defined by
6061          virtual-mappings-ratio.  The default value is 100.
6062
6063    `virtual-mappings-ratio'
6064          If the number of virtual mappings is virtual-mappings-ratio
6065          bigger than the number of virtual symbols to be updated, then
6066          the incremental SSA updater switches to a full update for
6067          those symbols.  The default ratio is 3.
6068
6069    `ssp-buffer-size'
6070          The minimum size of buffers (i.e. arrays) that will receive
6071          stack smashing protection when `-fstack-protection' is used.
6072
6073    `max-jump-thread-duplication-stmts'
6074          Maximum number of statements allowed in a block that needs to
6075          be duplicated when threading jumps.
6076
6077    `max-fields-for-field-sensitive'
6078          Maximum number of fields in a structure we will treat in a
6079          field sensitive manner during pointer analysis.
6080
6081
6082
6083File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
6084
60853.11 Options Controlling the Preprocessor
6086=========================================
6087
6088These options control the C preprocessor, which is run on each C source
6089file before actual compilation.
6090
6091 If you use the `-E' option, nothing is done except preprocessing.
6092Some of these options make sense only together with `-E' because they
6093cause the preprocessor output to be unsuitable for actual compilation.
6094
6095     You can use `-Wp,OPTION' to bypass the compiler driver and pass
6096     OPTION directly through to the preprocessor.  If OPTION contains
6097     commas, it is split into multiple options at the commas.  However,
6098     many options are modified, translated or interpreted by the
6099     compiler driver before being passed to the preprocessor, and `-Wp'
6100     forcibly bypasses this phase.  The preprocessor's direct interface
6101     is undocumented and subject to change, so whenever possible you
6102     should avoid using `-Wp' and let the driver handle the options
6103     instead.
6104
6105`-Xpreprocessor OPTION'
6106     Pass OPTION as an option to the preprocessor.  You can use this to
6107     supply system-specific preprocessor options which GCC does not
6108     know how to recognize.
6109
6110     If you want to pass an option that takes an argument, you must use
6111     `-Xpreprocessor' twice, once for the option and once for the
6112     argument.
6113
6114`-D NAME'
6115     Predefine NAME as a macro, with definition `1'.
6116
6117`-D NAME=DEFINITION'
6118     The contents of DEFINITION are tokenized and processed as if they
6119     appeared during translation phase three in a `#define' directive.
6120     In particular, the definition will be truncated by embedded
6121     newline characters.
6122
6123     If you are invoking the preprocessor from a shell or shell-like
6124     program you may need to use the shell's quoting syntax to protect
6125     characters such as spaces that have a meaning in the shell syntax.
6126
6127     If you wish to define a function-like macro on the command line,
6128     write its argument list with surrounding parentheses before the
6129     equals sign (if any).  Parentheses are meaningful to most shells,
6130     so you will need to quote the option.  With `sh' and `csh',
6131     `-D'NAME(ARGS...)=DEFINITION'' works.
6132
6133     `-D' and `-U' options are processed in the order they are given on
6134     the command line.  All `-imacros FILE' and `-include FILE' options
6135     are processed after all `-D' and `-U' options.
6136
6137`-U NAME'
6138     Cancel any previous definition of NAME, either built in or
6139     provided with a `-D' option.
6140
6141`-undef'
6142     Do not predefine any system-specific or GCC-specific macros.  The
6143     standard predefined macros remain defined.
6144
6145`-I DIR'
6146     Add the directory DIR to the list of directories to be searched
6147     for header files.  Directories named by `-I' are searched before
6148     the standard system include directories.  If the directory DIR is
6149     a standard system include directory, the option is ignored to
6150     ensure that the default search order for system directories and
6151     the special treatment of system headers are not defeated .
6152
6153`-o FILE'
6154     Write output to FILE.  This is the same as specifying FILE as the
6155     second non-option argument to `cpp'.  `gcc' has a different
6156     interpretation of a second non-option argument, so you must use
6157     `-o' to specify the output file.
6158
6159`-Wall'
6160     Turns on all optional warnings which are desirable for normal code.
6161     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
6162     warning about integer promotion causing a change of sign in `#if'
6163     expressions.  Note that many of the preprocessor's warnings are on
6164     by default and have no options to control them.
6165
6166`-Wcomment'
6167`-Wcomments'
6168     Warn whenever a comment-start sequence `/*' appears in a `/*'
6169     comment, or whenever a backslash-newline appears in a `//' comment.
6170     (Both forms have the same effect.)
6171
6172`-Wtrigraphs'
6173     Most trigraphs in comments cannot affect the meaning of the
6174     program.  However, a trigraph that would form an escaped newline
6175     (`??/' at the end of a line) can, by changing where the comment
6176     begins or ends.  Therefore, only trigraphs that would form escaped
6177     newlines produce warnings inside a comment.
6178
6179     This option is implied by `-Wall'.  If `-Wall' is not given, this
6180     option is still enabled unless trigraphs are enabled.  To get
6181     trigraph conversion without warnings, but get the other `-Wall'
6182     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
6183
6184`-Wtraditional'
6185     Warn about certain constructs that behave differently in
6186     traditional and ISO C.  Also warn about ISO C constructs that have
6187     no traditional C equivalent, and problematic constructs which
6188     should be avoided.
6189
6190`-Wimport'
6191     Warn the first time `#import' is used.
6192
6193`-Wundef'
6194     Warn whenever an identifier which is not a macro is encountered in
6195     an `#if' directive, outside of `defined'.  Such identifiers are
6196     replaced with zero.
6197
6198`-Wunused-macros'
6199     Warn about macros defined in the main file that are unused.  A
6200     macro is "used" if it is expanded or tested for existence at least
6201     once.  The preprocessor will also warn if the macro has not been
6202     used at the time it is redefined or undefined.
6203
6204     Built-in macros, macros defined on the command line, and macros
6205     defined in include files are not warned about.
6206
6207     _Note:_ If a macro is actually used, but only used in skipped
6208     conditional blocks, then CPP will report it as unused.  To avoid
6209     the warning in such a case, you might improve the scope of the
6210     macro's definition by, for example, moving it into the first
6211     skipped block.  Alternatively, you could provide a dummy use with
6212     something like:
6213
6214          #if defined the_macro_causing_the_warning
6215          #endif
6216
6217`-Wendif-labels'
6218     Warn whenever an `#else' or an `#endif' are followed by text.
6219     This usually happens in code of the form
6220
6221          #if FOO
6222          ...
6223          #else FOO
6224          ...
6225          #endif FOO
6226
6227     The second and third `FOO' should be in comments, but often are not
6228     in older programs.  This warning is on by default.
6229
6230`-Werror'
6231     Make all warnings into hard errors.  Source code which triggers
6232     warnings will be rejected.
6233
6234`-Wsystem-headers'
6235     Issue warnings for code in system headers.  These are normally
6236     unhelpful in finding bugs in your own code, therefore suppressed.
6237     If you are responsible for the system library, you may want to see
6238     them.
6239
6240`-w'
6241     Suppress all warnings, including those which GNU CPP issues by
6242     default.
6243
6244`-pedantic'
6245     Issue all the mandatory diagnostics listed in the C standard.
6246     Some of them are left out by default, since they trigger
6247     frequently on harmless code.
6248
6249`-pedantic-errors'
6250     Issue all the mandatory diagnostics, and make all mandatory
6251     diagnostics into errors.  This includes mandatory diagnostics that
6252     GCC issues without `-pedantic' but treats as warnings.
6253
6254`-M'
6255     Instead of outputting the result of preprocessing, output a rule
6256     suitable for `make' describing the dependencies of the main source
6257     file.  The preprocessor outputs one `make' rule containing the
6258     object file name for that source file, a colon, and the names of
6259     all the included files, including those coming from `-include' or
6260     `-imacros' command line options.
6261
6262     Unless specified explicitly (with `-MT' or `-MQ'), the object file
6263     name consists of the basename of the source file with any suffix
6264     replaced with object file suffix.  If there are many included
6265     files then the rule is split into several lines using `\'-newline.
6266     The rule has no commands.
6267
6268     This option does not suppress the preprocessor's debug output,
6269     such as `-dM'.  To avoid mixing such debug output with the
6270     dependency rules you should explicitly specify the dependency
6271     output file with `-MF', or use an environment variable like
6272     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
6273     output will still be sent to the regular output stream as normal.
6274
6275     Passing `-M' to the driver implies `-E', and suppresses warnings
6276     with an implicit `-w'.
6277
6278`-MM'
6279     Like `-M' but do not mention header files that are found in system
6280     header directories, nor header files that are included, directly
6281     or indirectly, from such a header.
6282
6283     This implies that the choice of angle brackets or double quotes in
6284     an `#include' directive does not in itself determine whether that
6285     header will appear in `-MM' dependency output.  This is a slight
6286     change in semantics from GCC versions 3.0 and earlier.
6287
6288`-MF FILE'
6289     When used with `-M' or `-MM', specifies a file to write the
6290     dependencies to.  If no `-MF' switch is given the preprocessor
6291     sends the rules to the same place it would have sent preprocessed
6292     output.
6293
6294     When used with the driver options `-MD' or `-MMD', `-MF' overrides
6295     the default dependency output file.
6296
6297`-MG'
6298     In conjunction with an option such as `-M' requesting dependency
6299     generation, `-MG' assumes missing header files are generated files
6300     and adds them to the dependency list without raising an error.
6301     The dependency filename is taken directly from the `#include'
6302     directive without prepending any path.  `-MG' also suppresses
6303     preprocessed output, as a missing header file renders this useless.
6304
6305     This feature is used in automatic updating of makefiles.
6306
6307`-MP'
6308     This option instructs CPP to add a phony target for each dependency
6309     other than the main file, causing each to depend on nothing.  These
6310     dummy rules work around errors `make' gives if you remove header
6311     files without updating the `Makefile' to match.
6312
6313     This is typical output:
6314
6315          test.o: test.c test.h
6316
6317          test.h:
6318
6319`-MT TARGET'
6320     Change the target of the rule emitted by dependency generation.  By
6321     default CPP takes the name of the main input file, including any
6322     path, deletes any file suffix such as `.c', and appends the
6323     platform's usual object suffix.  The result is the target.
6324
6325     An `-MT' option will set the target to be exactly the string you
6326     specify.  If you want multiple targets, you can specify them as a
6327     single argument to `-MT', or use multiple `-MT' options.
6328
6329     For example, `-MT '$(objpfx)foo.o'' might give
6330
6331          $(objpfx)foo.o: foo.c
6332
6333`-MQ TARGET'
6334     Same as `-MT', but it quotes any characters which are special to
6335     Make.  `-MQ '$(objpfx)foo.o'' gives
6336
6337          $$(objpfx)foo.o: foo.c
6338
6339     The default target is automatically quoted, as if it were given
6340     with `-MQ'.
6341
6342`-MD'
6343     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
6344     implied.  The driver determines FILE based on whether an `-o'
6345     option is given.  If it is, the driver uses its argument but with
6346     a suffix of `.d', otherwise it take the basename of the input file
6347     and applies a `.d' suffix.
6348
6349     If `-MD' is used in conjunction with `-E', any `-o' switch is
6350     understood to specify the dependency output file (*note -MF:
6351     dashMF.), but if used without `-E', each `-o' is understood to
6352     specify a target object file.
6353
6354     Since `-E' is not implied, `-MD' can be used to generate a
6355     dependency output file as a side-effect of the compilation process.
6356
6357`-MMD'
6358     Like `-MD' except mention only user header files, not system
6359     header files.
6360
6361`-fpch-deps'
6362     When using precompiled headers (*note Precompiled Headers::), this
6363     flag will cause the dependency-output flags to also list the files
6364     from the precompiled header's dependencies.  If not specified only
6365     the precompiled header would be listed and not the files that were
6366     used to create it because those files are not consulted when a
6367     precompiled header is used.
6368
6369`-fpch-preprocess'
6370     This option allows use of a precompiled header (*note Precompiled
6371     Headers::) together with `-E'.  It inserts a special `#pragma',
6372     `#pragma GCC pch_preprocess "<filename>"' in the output to mark
6373     the place where the precompiled header was found, and its
6374     filename.  When `-fpreprocessed' is in use, GCC recognizes this
6375     `#pragma' and loads the PCH.
6376
6377     This option is off by default, because the resulting preprocessed
6378     output is only really suitable as input to GCC.  It is switched on
6379     by `-save-temps'.
6380
6381     You should not write this `#pragma' in your own code, but it is
6382     safe to edit the filename if the PCH file is available in a
6383     different location.  The filename may be absolute or it may be
6384     relative to GCC's current directory.
6385
6386`-x c'
6387`-x c++'
6388`-x objective-c'
6389`-x assembler-with-cpp'
6390     Specify the source language: C, C++, Objective-C, or assembly.
6391     This has nothing to do with standards conformance or extensions;
6392     it merely selects which base syntax to expect.  If you give none
6393     of these options, cpp will deduce the language from the extension
6394     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
6395     extensions for C++ and assembly are also recognized.  If cpp does
6396     not recognize the extension, it will treat the file as C; this is
6397     the most generic mode.
6398
6399     _Note:_ Previous versions of cpp accepted a `-lang' option which
6400     selected both the language and the standards conformance level.
6401     This option has been removed, because it conflicts with the `-l'
6402     option.
6403
6404`-std=STANDARD'
6405`-ansi'
6406     Specify the standard to which the code should conform.  Currently
6407     CPP knows about C and C++ standards; others may be added in the
6408     future.
6409
6410     STANDARD may be one of:
6411    `iso9899:1990'
6412    `c89'
6413          The ISO C standard from 1990.  `c89' is the customary
6414          shorthand for this version of the standard.
6415
6416          The `-ansi' option is equivalent to `-std=c89'.
6417
6418    `iso9899:199409'
6419          The 1990 C standard, as amended in 1994.
6420
6421    `iso9899:1999'
6422    `c99'
6423    `iso9899:199x'
6424    `c9x'
6425          The revised ISO C standard, published in December 1999.
6426          Before publication, this was known as C9X.
6427
6428    `gnu89'
6429          The 1990 C standard plus GNU extensions.  This is the default.
6430
6431    `gnu99'
6432    `gnu9x'
6433          The 1999 C standard plus GNU extensions.
6434
6435    `c++98'
6436          The 1998 ISO C++ standard plus amendments.
6437
6438    `gnu++98'
6439          The same as `-std=c++98' plus GNU extensions.  This is the
6440          default for C++ code.
6441
6442`-I-'
6443     Split the include path.  Any directories specified with `-I'
6444     options before `-I-' are searched only for headers requested with
6445     `#include "FILE"'; they are not searched for `#include <FILE>'.
6446     If additional directories are specified with `-I' options after
6447     the `-I-', those directories are searched for all `#include'
6448     directives.
6449
6450     In addition, `-I-' inhibits the use of the directory of the current
6451     file directory as the first search directory for `#include "FILE"'.
6452     This option has been deprecated.
6453
6454`-nostdinc'
6455     Do not search the standard system directories for header files.
6456     Only the directories you have specified with `-I' options (and the
6457     directory of the current file, if appropriate) are searched.
6458
6459`-nostdinc++'
6460     Do not search for header files in the C++-specific standard
6461     directories, but do still search the other standard directories.
6462     (This option is used when building the C++ library.)
6463
6464`-include FILE'
6465     Process FILE as if `#include "file"' appeared as the first line of
6466     the primary source file.  However, the first directory searched
6467     for FILE is the preprocessor's working directory _instead of_ the
6468     directory containing the main source file.  If not found there, it
6469     is searched for in the remainder of the `#include "..."' search
6470     chain as normal.
6471
6472     If multiple `-include' options are given, the files are included
6473     in the order they appear on the command line.
6474
6475`-imacros FILE'
6476     Exactly like `-include', except that any output produced by
6477     scanning FILE is thrown away.  Macros it defines remain defined.
6478     This allows you to acquire all the macros from a header without
6479     also processing its declarations.
6480
6481     All files specified by `-imacros' are processed before all files
6482     specified by `-include'.
6483
6484`-idirafter DIR'
6485     Search DIR for header files, but do it _after_ all directories
6486     specified with `-I' and the standard system directories have been
6487     exhausted.  DIR is treated as a system include directory.
6488
6489`-iprefix PREFIX'
6490     Specify PREFIX as the prefix for subsequent `-iwithprefix'
6491     options.  If the prefix represents a directory, you should include
6492     the final `/'.
6493
6494`-iwithprefix DIR'
6495`-iwithprefixbefore DIR'
6496     Append DIR to the prefix specified previously with `-iprefix', and
6497     add the resulting directory to the include search path.
6498     `-iwithprefixbefore' puts it in the same place `-I' would;
6499     `-iwithprefix' puts it where `-idirafter' would.
6500
6501`-isysroot DIR'
6502     This option is like the `--sysroot' option, but applies only to
6503     header files.  See the `--sysroot' option for more information.
6504
6505`-imultilib DIR'
6506     Use DIR as a subdirectory of the directory containing
6507     target-specific C++ headers.
6508
6509`-isystem DIR'
6510     Search DIR for header files, after all directories specified by
6511     `-I' but before the standard system directories.  Mark it as a
6512     system directory, so that it gets the same special treatment as is
6513     applied to the standard system directories.
6514
6515`-iquote DIR'
6516     Search DIR only for header files requested with `#include "FILE"';
6517     they are not searched for `#include <FILE>', before all
6518     directories specified by `-I' and before the standard system
6519     directories.
6520
6521`-fdollars-in-identifiers'
6522     Accept `$' in identifiers.
6523
6524`-fextended-identifiers'
6525     Accept universal character names in identifiers.  This option is
6526     experimental; in a future version of GCC, it will be enabled by
6527     default for C99 and C++.
6528
6529`-fpreprocessed'
6530     Indicate to the preprocessor that the input file has already been
6531     preprocessed.  This suppresses things like macro expansion,
6532     trigraph conversion, escaped newline splicing, and processing of
6533     most directives.  The preprocessor still recognizes and removes
6534     comments, so that you can pass a file preprocessed with `-C' to
6535     the compiler without problems.  In this mode the integrated
6536     preprocessor is little more than a tokenizer for the front ends.
6537
6538     `-fpreprocessed' is implicit if the input file has one of the
6539     extensions `.i', `.ii' or `.mi'.  These are the extensions that
6540     GCC uses for preprocessed files created by `-save-temps'.
6541
6542`-ftabstop=WIDTH'
6543     Set the distance between tab stops.  This helps the preprocessor
6544     report correct column numbers in warnings or errors, even if tabs
6545     appear on the line.  If the value is less than 1 or greater than
6546     100, the option is ignored.  The default is 8.
6547
6548`-fexec-charset=CHARSET'
6549     Set the execution character set, used for string and character
6550     constants.  The default is UTF-8.  CHARSET can be any encoding
6551     supported by the system's `iconv' library routine.
6552
6553`-fwide-exec-charset=CHARSET'
6554     Set the wide execution character set, used for wide string and
6555     character constants.  The default is UTF-32 or UTF-16, whichever
6556     corresponds to the width of `wchar_t'.  As with `-fexec-charset',
6557     CHARSET can be any encoding supported by the system's `iconv'
6558     library routine; however, you will have problems with encodings
6559     that do not fit exactly in `wchar_t'.
6560
6561`-finput-charset=CHARSET'
6562     Set the input character set, used for translation from the
6563     character set of the input file to the source character set used
6564     by GCC.  If the locale does not specify, or GCC cannot get this
6565     information from the locale, the default is UTF-8.  This can be
6566     overridden by either the locale or this command line option.
6567     Currently the command line option takes precedence if there's a
6568     conflict.  CHARSET can be any encoding supported by the system's
6569     `iconv' library routine.
6570
6571`-fworking-directory'
6572     Enable generation of linemarkers in the preprocessor output that
6573     will let the compiler know the current working directory at the
6574     time of preprocessing.  When this option is enabled, the
6575     preprocessor will emit, after the initial linemarker, a second
6576     linemarker with the current working directory followed by two
6577     slashes.  GCC will use this directory, when it's present in the
6578     preprocessed input, as the directory emitted as the current
6579     working directory in some debugging information formats.  This
6580     option is implicitly enabled if debugging information is enabled,
6581     but this can be inhibited with the negated form
6582     `-fno-working-directory'.  If the `-P' flag is present in the
6583     command line, this option has no effect, since no `#line'
6584     directives are emitted whatsoever.
6585
6586`-fno-show-column'
6587     Do not print column numbers in diagnostics.  This may be necessary
6588     if diagnostics are being scanned by a program that does not
6589     understand the column numbers, such as `dejagnu'.
6590
6591`-A PREDICATE=ANSWER'
6592     Make an assertion with the predicate PREDICATE and answer ANSWER.
6593     This form is preferred to the older form `-A PREDICATE(ANSWER)',
6594     which is still supported, because it does not use shell special
6595     characters.
6596
6597`-A -PREDICATE=ANSWER'
6598     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
6599
6600`-dCHARS'
6601     CHARS is a sequence of one or more of the following characters,
6602     and must not be preceded by a space.  Other characters are
6603     interpreted by the compiler proper, or reserved for future
6604     versions of GCC, and so are silently ignored.  If you specify
6605     characters whose behavior conflicts, the result is undefined.
6606
6607    `M'
6608          Instead of the normal output, generate a list of `#define'
6609          directives for all the macros defined during the execution of
6610          the preprocessor, including predefined macros.  This gives
6611          you a way of finding out what is predefined in your version
6612          of the preprocessor.  Assuming you have no file `foo.h', the
6613          command
6614
6615               touch foo.h; cpp -dM foo.h
6616
6617          will show all the predefined macros.
6618
6619    `D'
6620          Like `M' except in two respects: it does _not_ include the
6621          predefined macros, and it outputs _both_ the `#define'
6622          directives and the result of preprocessing.  Both kinds of
6623          output go to the standard output file.
6624
6625    `N'
6626          Like `D', but emit only the macro names, not their expansions.
6627
6628    `I'
6629          Output `#include' directives in addition to the result of
6630          preprocessing.
6631
6632`-P'
6633     Inhibit generation of linemarkers in the output from the
6634     preprocessor.  This might be useful when running the preprocessor
6635     on something that is not C code, and will be sent to a program
6636     which might be confused by the linemarkers.
6637
6638`-C'
6639     Do not discard comments.  All comments are passed through to the
6640     output file, except for comments in processed directives, which
6641     are deleted along with the directive.
6642
6643     You should be prepared for side effects when using `-C'; it causes
6644     the preprocessor to treat comments as tokens in their own right.
6645     For example, comments appearing at the start of what would be a
6646     directive line have the effect of turning that line into an
6647     ordinary source line, since the first token on the line is no
6648     longer a `#'.
6649
6650`-CC'
6651     Do not discard comments, including during macro expansion.  This is
6652     like `-C', except that comments contained within macros are also
6653     passed through to the output file where the macro is expanded.
6654
6655     In addition to the side-effects of the `-C' option, the `-CC'
6656     option causes all C++-style comments inside a macro to be
6657     converted to C-style comments.  This is to prevent later use of
6658     that macro from inadvertently commenting out the remainder of the
6659     source line.
6660
6661     The `-CC' option is generally used to support lint comments.
6662
6663`-traditional-cpp'
6664     Try to imitate the behavior of old-fashioned C preprocessors, as
6665     opposed to ISO C preprocessors.
6666
6667`-trigraphs'
6668     Process trigraph sequences.  These are three-character sequences,
6669     all starting with `??', that are defined by ISO C to stand for
6670     single characters.  For example, `??/' stands for `\', so `'??/n''
6671     is a character constant for a newline.  By default, GCC ignores
6672     trigraphs, but in standard-conforming modes it converts them.  See
6673     the `-std' and `-ansi' options.
6674
6675     The nine trigraphs and their replacements are
6676
6677          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
6678          Replacement:      [    ]    {    }    #    \    ^    |    ~
6679
6680`-remap'
6681     Enable special code to work around file systems which only permit
6682     very short file names, such as MS-DOS.
6683
6684`--help'
6685`--target-help'
6686     Print text describing all the command line options instead of
6687     preprocessing anything.
6688
6689`-v'
6690     Verbose mode.  Print out GNU CPP's version number at the beginning
6691     of execution, and report the final form of the include path.
6692
6693`-H'
6694     Print the name of each header file used, in addition to other
6695     normal activities.  Each name is indented to show how deep in the
6696     `#include' stack it is.  Precompiled header files are also
6697     printed, even if they are found to be invalid; an invalid
6698     precompiled header file is printed with `...x' and a valid one
6699     with `...!' .
6700
6701`-version'
6702`--version'
6703     Print out GNU CPP's version number.  With one dash, proceed to
6704     preprocess as normal.  With two dashes, exit immediately.
6705
6706
6707File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
6708
67093.12 Passing Options to the Assembler
6710=====================================
6711
6712You can pass options to the assembler.
6713
6714`-Wa,OPTION'
6715     Pass OPTION as an option to the assembler.  If OPTION contains
6716     commas, it is split into multiple options at the commas.
6717
6718`-Xassembler OPTION'
6719     Pass OPTION as an option to the assembler.  You can use this to
6720     supply system-specific assembler options which GCC does not know
6721     how to recognize.
6722
6723     If you want to pass an option that takes an argument, you must use
6724     `-Xassembler' twice, once for the option and once for the argument.
6725
6726
6727
6728File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
6729
67303.13 Options for Linking
6731========================
6732
6733These options come into play when the compiler links object files into
6734an executable output file.  They are meaningless if the compiler is not
6735doing a link step.
6736
6737`OBJECT-FILE-NAME'
6738     A file name that does not end in a special recognized suffix is
6739     considered to name an object file or library.  (Object files are
6740     distinguished from libraries by the linker according to the file
6741     contents.)  If linking is done, these object files are used as
6742     input to the linker.
6743
6744`-c'
6745`-S'
6746`-E'
6747     If any of these options is used, then the linker is not run, and
6748     object file names should not be used as arguments.  *Note Overall
6749     Options::.
6750
6751`-lLIBRARY'
6752`-l LIBRARY'
6753     Search the library named LIBRARY when linking.  (The second
6754     alternative with the library as a separate argument is only for
6755     POSIX compliance and is not recommended.)
6756
6757     It makes a difference where in the command you write this option;
6758     the linker searches and processes libraries and object files in
6759     the order they are specified.  Thus, `foo.o -lz bar.o' searches
6760     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
6761     refers to functions in `z', those functions may not be loaded.
6762
6763     The linker searches a standard list of directories for the library,
6764     which is actually a file named `libLIBRARY.a'.  The linker then
6765     uses this file as if it had been specified precisely by name.
6766
6767     The directories searched include several standard system
6768     directories plus any that you specify with `-L'.
6769
6770     Normally the files found this way are library files--archive files
6771     whose members are object files.  The linker handles an archive
6772     file by scanning through it for members which define symbols that
6773     have so far been referenced but not defined.  But if the file that
6774     is found is an ordinary object file, it is linked in the usual
6775     fashion.  The only difference between using an `-l' option and
6776     specifying a file name is that `-l' surrounds LIBRARY with `lib'
6777     and `.a' and searches several directories.
6778
6779`-lobjc'
6780     You need this special case of the `-l' option in order to link an
6781     Objective-C or Objective-C++ program.
6782
6783`-nostartfiles'
6784     Do not use the standard system startup files when linking.  The
6785     standard system libraries are used normally, unless `-nostdlib' or
6786     `-nodefaultlibs' is used.
6787
6788`-nodefaultlibs'
6789     Do not use the standard system libraries when linking.  Only the
6790     libraries you specify will be passed to the linker.  The standard
6791     startup files are used normally, unless `-nostartfiles' is used.
6792     The compiler may generate calls to `memcmp', `memset', `memcpy'
6793     and `memmove'.  These entries are usually resolved by entries in
6794     libc.  These entry points should be supplied through some other
6795     mechanism when this option is specified.
6796
6797`-nostdlib'
6798     Do not use the standard system startup files or libraries when
6799     linking.  No startup files and only the libraries you specify will
6800     be passed to the linker.  The compiler may generate calls to
6801     `memcmp', `memset', `memcpy' and `memmove'.  These entries are
6802     usually resolved by entries in libc.  These entry points should be
6803     supplied through some other mechanism when this option is
6804     specified.
6805
6806     One of the standard libraries bypassed by `-nostdlib' and
6807     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
6808     that GCC uses to overcome shortcomings of particular machines, or
6809     special needs for some languages.  (*Note Interfacing to GCC
6810     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
6811     most cases, you need `libgcc.a' even when you want to avoid other
6812     standard libraries.  In other words, when you specify `-nostdlib'
6813     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
6814     This ensures that you have no unresolved references to internal GCC
6815     library subroutines.  (For example, `__main', used to ensure C++
6816     constructors will be called; *note `collect2': (gccint)Collect2.)
6817
6818`-pie'
6819     Produce a position independent executable on targets which support
6820     it.  For predictable results, you must also specify the same set
6821     of options that were used to generate code (`-fpie', `-fPIE', or
6822     model suboptions) when you specify this option.
6823
6824`-rdynamic'
6825     Pass the flag `-export-dynamic' to the ELF linker, on targets that
6826     support it. This instructs the linker to add all symbols, not only
6827     used ones, to the dynamic symbol table. This option is needed for
6828     some uses of `dlopen' or to allow obtaining backtraces from within
6829     a program.
6830
6831`-s'
6832     Remove all symbol table and relocation information from the
6833     executable.
6834
6835`-static'
6836     On systems that support dynamic linking, this prevents linking
6837     with the shared libraries.  On other systems, this option has no
6838     effect.
6839
6840`-shared'
6841     Produce a shared object which can then be linked with other
6842     objects to form an executable.  Not all systems support this
6843     option.  For predictable results, you must also specify the same
6844     set of options that were used to generate code (`-fpic', `-fPIC',
6845     or model suboptions) when you specify this option.(1)
6846
6847`-shared-libgcc'
6848`-static-libgcc'
6849     On systems that provide `libgcc' as a shared library, these options
6850     force the use of either the shared or static version respectively.
6851     If no shared version of `libgcc' was built when the compiler was
6852     configured, these options have no effect.
6853
6854     There are several situations in which an application should use the
6855     shared `libgcc' instead of the static version.  The most common of
6856     these is when the application wishes to throw and catch exceptions
6857     across different shared libraries.  In that case, each of the
6858     libraries as well as the application itself should use the shared
6859     `libgcc'.
6860
6861     Therefore, the G++ and GCJ drivers automatically add
6862     `-shared-libgcc' whenever you build a shared library or a main
6863     executable, because C++ and Java programs typically use
6864     exceptions, so this is the right thing to do.
6865
6866     If, instead, you use the GCC driver to create shared libraries,
6867     you may find that they will not always be linked with the shared
6868     `libgcc'.  If GCC finds, at its configuration time, that you have
6869     a non-GNU linker or a GNU linker that does not support option
6870     `--eh-frame-hdr', it will link the shared version of `libgcc' into
6871     shared libraries by default.  Otherwise, it will take advantage of
6872     the linker and optimize away the linking with the shared version
6873     of `libgcc', linking with the static version of libgcc by default.
6874     This allows exceptions to propagate through such shared
6875     libraries, without incurring relocation costs at library load time.
6876
6877     However, if a library or main executable is supposed to throw or
6878     catch exceptions, you must link it using the G++ or GCJ driver, as
6879     appropriate for the languages used in the program, or using the
6880     option `-shared-libgcc', such that it is linked with the shared
6881     `libgcc'.
6882
6883`-symbolic'
6884     Bind references to global symbols when building a shared object.
6885     Warn about any unresolved references (unless overridden by the
6886     link editor option `-Xlinker -z -Xlinker defs').  Only a few
6887     systems support this option.
6888
6889`-Xlinker OPTION'
6890     Pass OPTION as an option to the linker.  You can use this to
6891     supply system-specific linker options which GCC does not know how
6892     to recognize.
6893
6894     If you want to pass an option that takes an argument, you must use
6895     `-Xlinker' twice, once for the option and once for the argument.
6896     For example, to pass `-assert definitions', you must write
6897     `-Xlinker -assert -Xlinker definitions'.  It does not work to write
6898     `-Xlinker "-assert definitions"', because this passes the entire
6899     string as a single argument, which is not what the linker expects.
6900
6901`-Wl,OPTION'
6902     Pass OPTION as an option to the linker.  If OPTION contains
6903     commas, it is split into multiple options at the commas.
6904
6905`-u SYMBOL'
6906     Pretend the symbol SYMBOL is undefined, to force linking of
6907     library modules to define it.  You can use `-u' multiple times with
6908     different symbols to force loading of additional library modules.
6909
6910 ---------- Footnotes ----------
6911
6912 (1) On some systems, `gcc -shared' needs to build supplementary stub
6913code for constructors to work.  On multi-libbed systems, `gcc -shared'
6914must select the correct support libraries to link against.  Failing to
6915supply the correct flags may lead to subtle defects.  Supplying them in
6916cases where they are not necessary is innocuous.
6917
6918
6919File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
6920
69213.14 Options for Directory Search
6922=================================
6923
6924These options specify directories to search for header files, for
6925libraries and for parts of the compiler:
6926
6927`-IDIR'
6928     Add the directory DIR to the head of the list of directories to be
6929     searched for header files.  This can be used to override a system
6930     header file, substituting your own version, since these
6931     directories are searched before the system header file
6932     directories.  However, you should not use this option to add
6933     directories that contain vendor-supplied system header files (use
6934     `-isystem' for that).  If you use more than one `-I' option, the
6935     directories are scanned in left-to-right order; the standard
6936     system directories come after.
6937
6938     If a standard system include directory, or a directory specified
6939     with `-isystem', is also specified with `-I', the `-I' option will
6940     be ignored.  The directory will still be searched but as a system
6941     directory at its normal position in the system include chain.
6942     This is to ensure that GCC's procedure to fix buggy system headers
6943     and the ordering for the include_next directive are not
6944     inadvertently changed.  If you really need to change the search
6945     order for system directories, use the `-nostdinc' and/or
6946     `-isystem' options.
6947
6948`-iquoteDIR'
6949     Add the directory DIR to the head of the list of directories to be
6950     searched for header files only for the case of `#include "FILE"';
6951     they are not searched for `#include <FILE>', otherwise just like
6952     `-I'.
6953
6954`-LDIR'
6955     Add directory DIR to the list of directories to be searched for
6956     `-l'.
6957
6958`-BPREFIX'
6959     This option specifies where to find the executables, libraries,
6960     include files, and data files of the compiler itself.
6961
6962     The compiler driver program runs one or more of the subprograms
6963     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
6964     program it tries to run, both with and without `MACHINE/VERSION/'
6965     (*note Target Options::).
6966
6967     For each subprogram to be run, the compiler driver first tries the
6968     `-B' prefix, if any.  If that name is not found, or if `-B' was
6969     not specified, the driver tries two standard prefixes, which are
6970     `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
6971     results in a file name that is found, the unmodified program name
6972     is searched for using the directories specified in your `PATH'
6973     environment variable.
6974
6975     The compiler will check to see if the path provided by the `-B'
6976     refers to a directory, and if necessary it will add a directory
6977     separator character at the end of the path.
6978
6979     `-B' prefixes that effectively specify directory names also apply
6980     to libraries in the linker, because the compiler translates these
6981     options into `-L' options for the linker.  They also apply to
6982     includes files in the preprocessor, because the compiler
6983     translates these options into `-isystem' options for the
6984     preprocessor.  In this case, the compiler appends `include' to the
6985     prefix.
6986
6987     The run-time support file `libgcc.a' can also be searched for using
6988     the `-B' prefix, if needed.  If it is not found there, the two
6989     standard prefixes above are tried, and that is all.  The file is
6990     left out of the link if it is not found by those means.
6991
6992     Another way to specify a prefix much like the `-B' prefix is to use
6993     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
6994     Variables::.
6995
6996     As a special kludge, if the path provided by `-B' is
6997     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
6998     will be replaced by `[dir/]include'.  This is to help with
6999     boot-strapping the compiler.
7000
7001`-specs=FILE'
7002     Process FILE after the compiler reads in the standard `specs'
7003     file, in order to override the defaults that the `gcc' driver
7004     program uses when determining what switches to pass to `cc1',
7005     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
7006     specified on the command line, and they are processed in order,
7007     from left to right.
7008
7009`--sysroot=DIR'
7010     Use DIR as the logical root directory for headers and libraries.
7011     For example, if the compiler would normally search for headers in
7012     `/usr/include' and libraries in `/usr/lib', it will instead search
7013     `DIR/usr/include' and `DIR/usr/lib'.
7014
7015     If you use both this option and the `-isysroot' option, then the
7016     `--sysroot' option will apply to libraries, but the `-isysroot'
7017     option will apply to header files.
7018
7019     The GNU linker (beginning with version 2.16) has the necessary
7020     support for this option.  If your linker does not support this
7021     option, the header file aspect of `--sysroot' will still work, but
7022     the library aspect will not.
7023
7024`-I-'
7025     This option has been deprecated.  Please use `-iquote' instead for
7026     `-I' directories before the `-I-' and remove the `-I-'.  Any
7027     directories you specify with `-I' options before the `-I-' option
7028     are searched only for the case of `#include "FILE"'; they are not
7029     searched for `#include <FILE>'.
7030
7031     If additional directories are specified with `-I' options after
7032     the `-I-', these directories are searched for all `#include'
7033     directives.  (Ordinarily _all_ `-I' directories are used this way.)
7034
7035     In addition, the `-I-' option inhibits the use of the current
7036     directory (where the current input file came from) as the first
7037     search directory for `#include "FILE"'.  There is no way to
7038     override this effect of `-I-'.  With `-I.' you can specify
7039     searching the directory which was current when the compiler was
7040     invoked.  That is not exactly the same as what the preprocessor
7041     does by default, but it is often satisfactory.
7042
7043     `-I-' does not inhibit the use of the standard system directories
7044     for header files.  Thus, `-I-' and `-nostdinc' are independent.
7045
7046
7047File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
7048
70493.15 Specifying subprocesses and the switches to pass to them
7050=============================================================
7051
7052`gcc' is a driver program.  It performs its job by invoking a sequence
7053of other programs to do the work of compiling, assembling and linking.
7054GCC interprets its command-line parameters and uses these to deduce
7055which programs it should invoke, and which command-line options it
7056ought to place on their command lines.  This behavior is controlled by
7057"spec strings".  In most cases there is one spec string for each
7058program that GCC can invoke, but a few programs have multiple spec
7059strings to control their behavior.  The spec strings built into GCC can
7060be overridden by using the `-specs=' command-line switch to specify a
7061spec file.
7062
7063 "Spec files" are plaintext files that are used to construct spec
7064strings.  They consist of a sequence of directives separated by blank
7065lines.  The type of directive is determined by the first non-whitespace
7066character on the line and it can be one of the following:
7067
7068`%COMMAND'
7069     Issues a COMMAND to the spec file processor.  The commands that can
7070     appear here are:
7071
7072    `%include <FILE>'
7073          Search for FILE and insert its text at the current point in
7074          the specs file.
7075
7076    `%include_noerr <FILE>'
7077          Just like `%include', but do not generate an error message if
7078          the include file cannot be found.
7079
7080    `%rename OLD_NAME NEW_NAME'
7081          Rename the spec string OLD_NAME to NEW_NAME.
7082
7083
7084`*[SPEC_NAME]:'
7085     This tells the compiler to create, override or delete the named
7086     spec string.  All lines after this directive up to the next
7087     directive or blank line are considered to be the text for the spec
7088     string.  If this results in an empty string then the spec will be
7089     deleted.  (Or, if the spec did not exist, then nothing will
7090     happened.)  Otherwise, if the spec does not currently exist a new
7091     spec will be created.  If the spec does exist then its contents
7092     will be overridden by the text of this directive, unless the first
7093     character of that text is the `+' character, in which case the
7094     text will be appended to the spec.
7095
7096`[SUFFIX]:'
7097     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
7098     and up to the next directive or blank line are considered to make
7099     up the spec string for the indicated suffix.  When the compiler
7100     encounters an input file with the named suffix, it will processes
7101     the spec string in order to work out how to compile that file.
7102     For example:
7103
7104          .ZZ:
7105          z-compile -input %i
7106
7107     This says that any input file whose name ends in `.ZZ' should be
7108     passed to the program `z-compile', which should be invoked with the
7109     command-line switch `-input' and with the result of performing the
7110     `%i' substitution.  (See below.)
7111
7112     As an alternative to providing a spec string, the text that
7113     follows a suffix directive can be one of the following:
7114
7115    `@LANGUAGE'
7116          This says that the suffix is an alias for a known LANGUAGE.
7117          This is similar to using the `-x' command-line switch to GCC
7118          to specify a language explicitly.  For example:
7119
7120               .ZZ:
7121               @c++
7122
7123          Says that .ZZ files are, in fact, C++ source files.
7124
7125    `#NAME'
7126          This causes an error messages saying:
7127
7128               NAME compiler not installed on this system.
7129
7130     GCC already has an extensive list of suffixes built into it.  This
7131     directive will add an entry to the end of the list of suffixes, but
7132     since the list is searched from the end backwards, it is
7133     effectively possible to override earlier entries using this
7134     technique.
7135
7136
7137 GCC has the following spec strings built into it.  Spec files can
7138override these strings or create their own.  Note that individual
7139targets can also add their own spec strings to this list.
7140
7141     asm          Options to pass to the assembler
7142     asm_final    Options to pass to the assembler post-processor
7143     cpp          Options to pass to the C preprocessor
7144     cc1          Options to pass to the C compiler
7145     cc1plus      Options to pass to the C++ compiler
7146     endfile      Object files to include at the end of the link
7147     link         Options to pass to the linker
7148     lib          Libraries to include on the command line to the linker
7149     libgcc       Decides which GCC support library to pass to the linker
7150     linker       Sets the name of the linker
7151     predefines   Defines to be passed to the C preprocessor
7152     signed_char  Defines to pass to CPP to say whether `char' is signed
7153                  by default
7154     startfile    Object files to include at the start of the link
7155
7156 Here is a small example of a spec file:
7157
7158     %rename lib                 old_lib
7159
7160     *lib:
7161     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
7162
7163 This example renames the spec called `lib' to `old_lib' and then
7164overrides the previous definition of `lib' with a new one.  The new
7165definition adds in some extra command-line options before including the
7166text of the old definition.
7167
7168 "Spec strings" are a list of command-line options to be passed to their
7169corresponding program.  In addition, the spec strings can contain
7170`%'-prefixed sequences to substitute variable text or to conditionally
7171insert text into the command line.  Using these constructs it is
7172possible to generate quite complex command lines.
7173
7174 Here is a table of all defined `%'-sequences for spec strings.  Note
7175that spaces are not generated automatically around the results of
7176expanding these sequences.  Therefore you can concatenate them together
7177or combine them with constant text in a single argument.
7178
7179`%%'
7180     Substitute one `%' into the program name or argument.
7181
7182`%i'
7183     Substitute the name of the input file being processed.
7184
7185`%b'
7186     Substitute the basename of the input file being processed.  This
7187     is the substring up to (and not including) the last period and not
7188     including the directory.
7189
7190`%B'
7191     This is the same as `%b', but include the file suffix (text after
7192     the last period).
7193
7194`%d'
7195     Marks the argument containing or following the `%d' as a temporary
7196     file name, so that that file will be deleted if GCC exits
7197     successfully.  Unlike `%g', this contributes no text to the
7198     argument.
7199
7200`%gSUFFIX'
7201     Substitute a file name that has suffix SUFFIX and is chosen once
7202     per compilation, and mark the argument in the same way as `%d'.
7203     To reduce exposure to denial-of-service attacks, the file name is
7204     now chosen in a way that is hard to predict even when previously
7205     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
7206     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
7207     matches the regexp `[.A-Za-z]*' or the special string `%O', which
7208     is treated exactly as if `%O' had been preprocessed.  Previously,
7209     `%g' was simply substituted with a file name chosen once per
7210     compilation, without regard to any appended suffix (which was
7211     therefore treated just like ordinary text), making such attacks
7212     more likely to succeed.
7213
7214`%uSUFFIX'
7215     Like `%g', but generates a new temporary file name even if
7216     `%uSUFFIX' was already seen.
7217
7218`%USUFFIX'
7219     Substitutes the last file name generated with `%uSUFFIX',
7220     generating a new one if there is no such last file name.  In the
7221     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
7222     they don't share the same suffix _space_, so `%g.s ... %U.s ...
7223     %g.s ... %U.s' would involve the generation of two distinct file
7224     names, one for each `%g.s' and another for each `%U.s'.
7225     Previously, `%U' was simply substituted with a file name chosen
7226     for the previous `%u', without regard to any appended suffix.
7227
7228`%jSUFFIX'
7229     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
7230     writable, and if save-temps is off; otherwise, substitute the name
7231     of a temporary file, just like `%u'.  This temporary file is not
7232     meant for communication between processes, but rather as a junk
7233     disposal mechanism.
7234
7235`%|SUFFIX'
7236`%mSUFFIX'
7237     Like `%g', except if `-pipe' is in effect.  In that case `%|'
7238     substitutes a single dash and `%m' substitutes nothing at all.
7239     These are the two most common ways to instruct a program that it
7240     should read from standard input or write to standard output.  If
7241     you need something more elaborate you can use an `%{pipe:`X'}'
7242     construct: see for example `f/lang-specs.h'.
7243
7244`%.SUFFIX'
7245     Substitutes .SUFFIX for the suffixes of a matched switch's args
7246     when it is subsequently output with `%*'.  SUFFIX is terminated by
7247     the next space or %.
7248
7249`%w'
7250     Marks the argument containing or following the `%w' as the
7251     designated output file of this compilation.  This puts the argument
7252     into the sequence of arguments that `%o' will substitute later.
7253
7254`%o'
7255     Substitutes the names of all the output files, with spaces
7256     automatically placed around them.  You should write spaces around
7257     the `%o' as well or the results are undefined.  `%o' is for use in
7258     the specs for running the linker.  Input files whose names have no
7259     recognized suffix are not compiled at all, but they are included
7260     among the output files, so they will be linked.
7261
7262`%O'
7263     Substitutes the suffix for object files.  Note that this is
7264     handled specially when it immediately follows `%g, %u, or %U',
7265     because of the need for those to form complete file names.  The
7266     handling is such that `%O' is treated exactly as if it had already
7267     been substituted, except that `%g, %u, and %U' do not currently
7268     support additional SUFFIX characters following `%O' as they would
7269     following, for example, `.o'.
7270
7271`%p'
7272     Substitutes the standard macro predefinitions for the current
7273     target machine.  Use this when running `cpp'.
7274
7275`%P'
7276     Like `%p', but puts `__' before and after the name of each
7277     predefined macro, except for macros that start with `__' or with
7278     `_L', where L is an uppercase letter.  This is for ISO C.
7279
7280`%I'
7281     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
7282     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), `-isystem' (made
7283     from `COMPILER_PATH' and `-B' options) and `-imultilib' as
7284     necessary.
7285
7286`%s'
7287     Current argument is the name of a library or startup file of some
7288     sort.  Search for that file in a standard list of directories and
7289     substitute the full name found.
7290
7291`%eSTR'
7292     Print STR as an error message.  STR is terminated by a newline.
7293     Use this when inconsistent options are detected.
7294
7295`%(NAME)'
7296     Substitute the contents of spec string NAME at this point.
7297
7298`%[NAME]'
7299     Like `%(...)' but put `__' around `-D' arguments.
7300
7301`%x{OPTION}'
7302     Accumulate an option for `%X'.
7303
7304`%X'
7305     Output the accumulated linker options specified by `-Wl' or a `%x'
7306     spec string.
7307
7308`%Y'
7309     Output the accumulated assembler options specified by `-Wa'.
7310
7311`%Z'
7312     Output the accumulated preprocessor options specified by `-Wp'.
7313
7314`%a'
7315     Process the `asm' spec.  This is used to compute the switches to
7316     be passed to the assembler.
7317
7318`%A'
7319     Process the `asm_final' spec.  This is a spec string for passing
7320     switches to an assembler post-processor, if such a program is
7321     needed.
7322
7323`%l'
7324     Process the `link' spec.  This is the spec for computing the
7325     command line passed to the linker.  Typically it will make use of
7326     the `%L %G %S %D and %E' sequences.
7327
7328`%D'
7329     Dump out a `-L' option for each directory that GCC believes might
7330     contain startup files.  If the target supports multilibs then the
7331     current multilib directory will be prepended to each of these
7332     paths.
7333
7334`%L'
7335     Process the `lib' spec.  This is a spec string for deciding which
7336     libraries should be included on the command line to the linker.
7337
7338`%G'
7339     Process the `libgcc' spec.  This is a spec string for deciding
7340     which GCC support library should be included on the command line
7341     to the linker.
7342
7343`%S'
7344     Process the `startfile' spec.  This is a spec for deciding which
7345     object files should be the first ones passed to the linker.
7346     Typically this might be a file named `crt0.o'.
7347
7348`%E'
7349     Process the `endfile' spec.  This is a spec string that specifies
7350     the last object files that will be passed to the linker.
7351
7352`%C'
7353     Process the `cpp' spec.  This is used to construct the arguments
7354     to be passed to the C preprocessor.
7355
7356`%1'
7357     Process the `cc1' spec.  This is used to construct the options to
7358     be passed to the actual C compiler (`cc1').
7359
7360`%2'
7361     Process the `cc1plus' spec.  This is used to construct the options
7362     to be passed to the actual C++ compiler (`cc1plus').
7363
7364`%*'
7365     Substitute the variable part of a matched option.  See below.
7366     Note that each comma in the substituted string is replaced by a
7367     single space.
7368
7369`%<`S''
7370     Remove all occurrences of `-S' from the command line.  Note--this
7371     command is position dependent.  `%' commands in the spec string
7372     before this one will see `-S', `%' commands in the spec string
7373     after this one will not.
7374
7375`%:FUNCTION(ARGS)'
7376     Call the named function FUNCTION, passing it ARGS.  ARGS is first
7377     processed as a nested spec string, then split into an argument
7378     vector in the usual fashion.  The function returns a string which
7379     is processed as if it had appeared literally as part of the
7380     current spec.
7381
7382     The following built-in spec functions are provided:
7383
7384    ``if-exists''
7385          The `if-exists' spec function takes one argument, an absolute
7386          pathname to a file.  If the file exists, `if-exists' returns
7387          the pathname.  Here is a small example of its usage:
7388
7389               *startfile:
7390               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
7391
7392    ``if-exists-else''
7393          The `if-exists-else' spec function is similar to the
7394          `if-exists' spec function, except that it takes two
7395          arguments.  The first argument is an absolute pathname to a
7396          file.  If the file exists, `if-exists-else' returns the
7397          pathname.  If it does not exist, it returns the second
7398          argument.  This way, `if-exists-else' can be used to select
7399          one file or another, based on the existence of the first.
7400          Here is a small example of its usage:
7401
7402               *startfile:
7403               crt0%O%s %:if-exists(crti%O%s) \
7404               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
7405
7406    ``replace-outfile''
7407          The `replace-outfile' spec function takes two arguments.  It
7408          looks for the first argument in the outfiles array and
7409          replaces it with the second argument.  Here is a small
7410          example of its usage:
7411
7412               %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
7413
7414
7415`%{`S'}'
7416     Substitutes the `-S' switch, if that switch was given to GCC.  If
7417     that switch was not specified, this substitutes nothing.  Note that
7418     the leading dash is omitted when specifying this option, and it is
7419     automatically inserted if the substitution is performed.  Thus the
7420     spec string `%{foo}' would match the command-line option `-foo'
7421     and would output the command line option `-foo'.
7422
7423`%W{`S'}'
7424     Like %{`S'} but mark last argument supplied within as a file to be
7425     deleted on failure.
7426
7427`%{`S'*}'
7428     Substitutes all the switches specified to GCC whose names start
7429     with `-S', but which also take an argument.  This is used for
7430     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
7431     being one switch whose names starts with `o'.  %{o*} would
7432     substitute this text, including the space.  Thus two arguments
7433     would be generated.
7434
7435`%{`S'*&`T'*}'
7436     Like %{`S'*}, but preserve order of `S' and `T' options (the order
7437     of `S' and `T' in the spec is not significant).  There can be any
7438     number of ampersand-separated variables; for each the wild card is
7439     optional.  Useful for CPP as `%{D*&U*&A*}'.
7440
7441`%{`S':`X'}'
7442     Substitutes `X', if the `-S' switch was given to GCC.
7443
7444`%{!`S':`X'}'
7445     Substitutes `X', if the `-S' switch was _not_ given to GCC.
7446
7447`%{`S'*:`X'}'
7448     Substitutes `X' if one or more switches whose names start with
7449     `-S' are specified to GCC.  Normally `X' is substituted only once,
7450     no matter how many such switches appeared.  However, if `%*'
7451     appears somewhere in `X', then `X' will be substituted once for
7452     each matching switch, with the `%*' replaced by the part of that
7453     switch that matched the `*'.
7454
7455`%{.`S':`X'}'
7456     Substitutes `X', if processing a file with suffix `S'.
7457
7458`%{!.`S':`X'}'
7459     Substitutes `X', if _not_ processing a file with suffix `S'.
7460
7461`%{`S'|`P':`X'}'
7462     Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
7463     be combined with `!', `.', and `*' sequences as well, although
7464     they have a stronger binding than the `|'.  If `%*' appears in
7465     `X', all of the alternatives must be starred, and only the first
7466     matching alternative is substituted.
7467
7468     For example, a spec string like this:
7469
7470          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
7471
7472     will output the following command-line options from the following
7473     input command-line options:
7474
7475          fred.c        -foo -baz
7476          jim.d         -bar -boggle
7477          -d fred.c     -foo -baz -boggle
7478          -d jim.d      -bar -baz -boggle
7479
7480`%{S:X; T:Y; :D}'
7481     If `S' was given to GCC, substitutes `X'; else if `T' was given to
7482     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
7483     clauses as you need.  This may be combined with `.', `!', `|', and
7484     `*' as needed.
7485
7486
7487 The conditional text `X' in a %{`S':`X'} or similar construct may
7488contain other nested `%' constructs or spaces, or even newlines.  They
7489are processed as usual, as described above.  Trailing white space in
7490`X' is ignored.  White space may also appear anywhere on the left side
7491of the colon in these constructs, except between `.' or `*' and the
7492corresponding word.
7493
7494 The `-O', `-f', `-m', and `-W' switches are handled specifically in
7495these constructs.  If another value of `-O' or the negated form of a
7496`-f', `-m', or `-W' switch is found later in the command line, the
7497earlier switch value is ignored, except with {`S'*} where `S' is just
7498one letter, which passes all matching options.
7499
7500 The character `|' at the beginning of the predicate text is used to
7501indicate that a command should be piped to the following command, but
7502only if `-pipe' is specified.
7503
7504 It is built into GCC which switches take arguments and which do not.
7505(You might think it would be useful to generalize this to allow each
7506compiler's spec to say which switches take arguments.  But this cannot
7507be done in a consistent fashion.  GCC cannot even decide which input
7508files have been specified without knowing which switches take arguments,
7509and it must know which input files to compile in order to tell which
7510compilers to run).
7511
7512 GCC also knows implicitly that arguments starting in `-l' are to be
7513treated as compiler output files, and passed to the linker in their
7514proper position among the other output files.
7515
7516
7517File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
7518
75193.16 Specifying Target Machine and Compiler Version
7520===================================================
7521
7522The usual way to run GCC is to run the executable called `gcc', or
7523`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
7524run a version other than the one that was installed last.  Sometimes
7525this is inconvenient, so GCC provides options that will switch to
7526another cross-compiler or version.
7527
7528`-b MACHINE'
7529     The argument MACHINE specifies the target machine for compilation.
7530
7531     The value to use for MACHINE is the same as was specified as the
7532     machine type when configuring GCC as a cross-compiler.  For
7533     example, if a cross-compiler was configured with `configure
7534     arm-elf', meaning to compile for an arm processor with elf
7535     binaries, then you would specify `-b arm-elf' to run that cross
7536     compiler.  Because there are other options beginning with `-b', the
7537     configuration must contain a hyphen.
7538
7539`-V VERSION'
7540     The argument VERSION specifies which version of GCC to run.  This
7541     is useful when multiple versions are installed.  For example,
7542     VERSION might be `4.0', meaning to run GCC version 4.0.
7543
7544 The `-V' and `-b' options work by running the
7545`<machine>-gcc-<version>' executable, so there's no real reason to use
7546them if you can just run that directly.
7547
7548
7549File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
7550
75513.17 Hardware Models and Configurations
7552=======================================
7553
7554Earlier we discussed the standard option `-b' which chooses among
7555different installed compilers for completely different target machines,
7556such as VAX vs. 68000 vs. 80386.
7557
7558 In addition, each of these target machine types can have its own
7559special options, starting with `-m', to choose among various hardware
7560models or configurations--for example, 68010 vs 68020, floating
7561coprocessor or none.  A single installed version of the compiler can
7562compile for any model or configuration, according to the options
7563specified.
7564
7565 Some configurations of the compiler also support additional special
7566options, usually for compatibility with other compilers on the same
7567platform.
7568
7569* Menu:
7570
7571* ARC Options::
7572* ARM Options::
7573* AVR Options::
7574* Blackfin Options::
7575* CRIS Options::
7576* CRX Options::
7577* Darwin Options::
7578* DEC Alpha Options::
7579* DEC Alpha/VMS Options::
7580* FRV Options::
7581* GNU/Linux Options::
7582* H8/300 Options::
7583* HPPA Options::
7584* i386 and x86-64 Options::
7585* IA-64 Options::
7586* M32C Options::
7587* M32R/D Options::
7588* M680x0 Options::
7589* M68hc1x Options::
7590* MCore Options::
7591* MIPS Options::
7592* MMIX Options::
7593* MN10300 Options::
7594* MT Options::
7595* PDP-11 Options::
7596* PowerPC Options::
7597* RS/6000 and PowerPC Options::
7598* S/390 and zSeries Options::
7599* Score Options::
7600* SH Options::
7601* SPARC Options::
7602* System V Options::
7603* TMS320C3x/C4x Options::
7604* V850 Options::
7605* VAX Options::
7606* x86-64 Options::
7607* Xstormy16 Options::
7608* Xtensa Options::
7609* zSeries Options::
7610
7611
7612File: gcc.info,  Node: ARC Options,  Next: ARM Options,  Up: Submodel Options
7613
76143.17.1 ARC Options
7615------------------
7616
7617These options are defined for ARC implementations:
7618
7619`-EL'
7620     Compile code for little endian mode.  This is the default.
7621
7622`-EB'
7623     Compile code for big endian mode.
7624
7625`-mmangle-cpu'
7626     Prepend the name of the cpu to all public symbol names.  In
7627     multiple-processor systems, there are many ARC variants with
7628     different instruction and register set characteristics.  This flag
7629     prevents code compiled for one cpu to be linked with code compiled
7630     for another.  No facility exists for handling variants that are
7631     "almost identical".  This is an all or nothing option.
7632
7633`-mcpu=CPU'
7634     Compile code for ARC variant CPU.  Which variants are supported
7635     depend on the configuration.  All variants support `-mcpu=base',
7636     this is the default.
7637
7638`-mtext=TEXT-SECTION'
7639`-mdata=DATA-SECTION'
7640`-mrodata=READONLY-DATA-SECTION'
7641     Put functions, data, and readonly data in TEXT-SECTION,
7642     DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
7643     This can be overridden with the `section' attribute.  *Note
7644     Variable Attributes::.
7645
7646
7647
7648File: gcc.info,  Node: ARM Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
7649
76503.17.2 ARM Options
7651------------------
7652
7653These `-m' options are defined for Advanced RISC Machines (ARM)
7654architectures:
7655
7656`-mabi=NAME'
7657     Generate code for the specified ABI.  Permissible values are:
7658     `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
7659
7660`-mapcs-frame'
7661     Generate a stack frame that is compliant with the ARM Procedure
7662     Call Standard for all functions, even if this is not strictly
7663     necessary for correct execution of the code.  Specifying
7664     `-fomit-frame-pointer' with this option will cause the stack
7665     frames not to be generated for leaf functions.  The default is
7666     `-mno-apcs-frame'.
7667
7668`-mapcs'
7669     This is a synonym for `-mapcs-frame'.
7670
7671`-mthumb-interwork'
7672     Generate code which supports calling between the ARM and Thumb
7673     instruction sets.  Without this option the two instruction sets
7674     cannot be reliably used inside one program.  The default is
7675     `-mno-thumb-interwork', since slightly larger code is generated
7676     when `-mthumb-interwork' is specified.
7677
7678`-mno-sched-prolog'
7679     Prevent the reordering of instructions in the function prolog, or
7680     the merging of those instruction with the instructions in the
7681     function's body.  This means that all functions will start with a
7682     recognizable set of instructions (or in fact one of a choice from
7683     a small set of different function prologues), and this information
7684     can be used to locate the start if functions inside an executable
7685     piece of code.  The default is `-msched-prolog'.
7686
7687`-mhard-float'
7688     Generate output containing floating point instructions.  This is
7689     the default.
7690
7691`-msoft-float'
7692     Generate output containing library calls for floating point.
7693     *Warning:* the requisite libraries are not available for all ARM
7694     targets.  Normally the facilities of the machine's usual C
7695     compiler are used, but this cannot be done directly in
7696     cross-compilation.  You must make your own arrangements to provide
7697     suitable library functions for cross-compilation.
7698
7699     `-msoft-float' changes the calling convention in the output file;
7700     therefore, it is only useful if you compile _all_ of a program with
7701     this option.  In particular, you need to compile `libgcc.a', the
7702     library that comes with GCC, with `-msoft-float' in order for this
7703     to work.
7704
7705`-mfloat-abi=NAME'
7706     Specifies which ABI to use for floating point values.  Permissible
7707     values are: `soft', `softfp' and `hard'.
7708
7709     `soft' and `hard' are equivalent to `-msoft-float' and
7710     `-mhard-float' respectively.  `softfp' allows the generation of
7711     floating point instructions, but still uses the soft-float calling
7712     conventions.
7713
7714`-mlittle-endian'
7715     Generate code for a processor running in little-endian mode.  This
7716     is the default for all standard configurations.
7717
7718`-mbig-endian'
7719     Generate code for a processor running in big-endian mode; the
7720     default is to compile code for a little-endian processor.
7721
7722`-mwords-little-endian'
7723     This option only applies when generating code for big-endian
7724     processors.  Generate code for a little-endian word order but a
7725     big-endian byte order.  That is, a byte order of the form
7726     `32107654'.  Note: this option should only be used if you require
7727     compatibility with code for big-endian ARM processors generated by
7728     versions of the compiler prior to 2.8.
7729
7730`-mcpu=NAME'
7731     This specifies the name of the target ARM processor.  GCC uses
7732     this name to determine what kind of instructions it can emit when
7733     generating assembly code.  Permissible names are: `arm2', `arm250',
7734     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
7735     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
7736     `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe',
7737     `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110',
7738     `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920',
7739     `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
7740     `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
7741     `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
7742     `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1176jz-s',
7743     `arm1176jzf-s', `xscale', `iwmmxt', `ep9312'.
7744
7745`-mtune=NAME'
7746     This option is very similar to the `-mcpu=' option, except that
7747     instead of specifying the actual target processor type, and hence
7748     restricting which instructions can be used, it specifies that GCC
7749     should tune the performance of the code as if the target were of
7750     the type specified in this option, but still choosing the
7751     instructions that it will generate based on the cpu specified by a
7752     `-mcpu=' option.  For some ARM implementations better performance
7753     can be obtained by using this option.
7754
7755`-march=NAME'
7756     This specifies the name of the target ARM architecture.  GCC uses
7757     this name to determine what kind of instructions it can emit when
7758     generating assembly code.  This option can be used in conjunction
7759     with or instead of the `-mcpu=' option.  Permissible names are:
7760     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
7761     `armv5t', `armv5te', `armv6', `armv6j', `iwmmxt', `ep9312'.
7762
7763`-mfpu=NAME'
7764`-mfpe=NUMBER'
7765`-mfp=NUMBER'
7766     This specifies what floating point hardware (or hardware
7767     emulation) is available on the target.  Permissible names are:
7768     `fpa', `fpe2', `fpe3', `maverick', `vfp'.  `-mfp' and `-mfpe' are
7769     synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older
7770     versions of GCC.
7771
7772     If `-msoft-float' is specified this specifies the format of
7773     floating point values.
7774
7775`-mstructure-size-boundary=N'
7776     The size of all structures and unions will be rounded up to a
7777     multiple of the number of bits set by this option.  Permissible
7778     values are 8, 32 and 64.  The default value varies for different
7779     toolchains.  For the COFF targeted toolchain the default value is
7780     8.  A value of 64 is only allowed if the underlying ABI supports
7781     it.
7782
7783     Specifying the larger number can produce faster, more efficient
7784     code, but can also increase the size of the program.  Different
7785     values are potentially incompatible.  Code compiled with one value
7786     cannot necessarily expect to work with code or libraries compiled
7787     with another value, if they exchange information using structures
7788     or unions.
7789
7790`-mabort-on-noreturn'
7791     Generate a call to the function `abort' at the end of a `noreturn'
7792     function.  It will be executed if the function tries to return.
7793
7794`-mlong-calls'
7795`-mno-long-calls'
7796     Tells the compiler to perform function calls by first loading the
7797     address of the function into a register and then performing a
7798     subroutine call on this register.  This switch is needed if the
7799     target function will lie outside of the 64 megabyte addressing
7800     range of the offset based version of subroutine call instruction.
7801
7802     Even if this switch is enabled, not all function calls will be
7803     turned into long calls.  The heuristic is that static functions,
7804     functions which have the `short-call' attribute, functions that
7805     are inside the scope of a `#pragma no_long_calls' directive and
7806     functions whose definitions have already been compiled within the
7807     current compilation unit, will not be turned into long calls.  The
7808     exception to this rule is that weak function definitions,
7809     functions with the `long-call' attribute or the `section'
7810     attribute, and functions that are within the scope of a `#pragma
7811     long_calls' directive, will always be turned into long calls.
7812
7813     This feature is not enabled by default.  Specifying
7814     `-mno-long-calls' will restore the default behavior, as will
7815     placing the function calls within the scope of a `#pragma
7816     long_calls_off' directive.  Note these switches have no effect on
7817     how the compiler generates code to handle function calls via
7818     function pointers.
7819
7820`-mnop-fun-dllimport'
7821     Disable support for the `dllimport' attribute.
7822
7823`-msingle-pic-base'
7824     Treat the register used for PIC addressing as read-only, rather
7825     than loading it in the prologue for each function.  The run-time
7826     system is responsible for initializing this register with an
7827     appropriate value before execution begins.
7828
7829`-mpic-register=REG'
7830     Specify the register to be used for PIC addressing.  The default
7831     is R10 unless stack-checking is enabled, when R9 is used.
7832
7833`-mcirrus-fix-invalid-insns'
7834     Insert NOPs into the instruction stream to in order to work around
7835     problems with invalid Maverick instruction combinations.  This
7836     option is only valid if the `-mcpu=ep9312' option has been used to
7837     enable generation of instructions for the Cirrus Maverick floating
7838     point co-processor.  This option is not enabled by default, since
7839     the problem is only present in older Maverick implementations.
7840     The default can be re-enabled by use of the
7841     `-mno-cirrus-fix-invalid-insns' switch.
7842
7843`-mpoke-function-name'
7844     Write the name of each function into the text section, directly
7845     preceding the function prologue.  The generated code is similar to
7846     this:
7847
7848               t0
7849                   .ascii "arm_poke_function_name", 0
7850                   .align
7851               t1
7852                   .word 0xff000000 + (t1 - t0)
7853               arm_poke_function_name
7854                   mov     ip, sp
7855                   stmfd   sp!, {fp, ip, lr, pc}
7856                   sub     fp, ip, #4
7857
7858     When performing a stack backtrace, code can inspect the value of
7859     `pc' stored at `fp + 0'.  If the trace function then looks at
7860     location `pc - 12' and the top 8 bits are set, then we know that
7861     there is a function name embedded immediately preceding this
7862     location and has length `((pc[-3]) & 0xff000000)'.
7863
7864`-mthumb'
7865     Generate code for the 16-bit Thumb instruction set.  The default
7866     is to use the 32-bit ARM instruction set.
7867
7868`-mtpcs-frame'
7869     Generate a stack frame that is compliant with the Thumb Procedure
7870     Call Standard for all non-leaf functions.  (A leaf function is one
7871     that does not call any other functions.)  The default is
7872     `-mno-tpcs-frame'.
7873
7874`-mtpcs-leaf-frame'
7875     Generate a stack frame that is compliant with the Thumb Procedure
7876     Call Standard for all leaf functions.  (A leaf function is one
7877     that does not call any other functions.)  The default is
7878     `-mno-apcs-leaf-frame'.
7879
7880`-mcallee-super-interworking'
7881     Gives all externally visible functions in the file being compiled
7882     an ARM instruction set header which switches to Thumb mode before
7883     executing the rest of the function.  This allows these functions
7884     to be called from non-interworking code.
7885
7886`-mcaller-super-interworking'
7887     Allows calls via function pointers (including virtual functions) to
7888     execute correctly regardless of whether the target code has been
7889     compiled for interworking or not.  There is a small overhead in
7890     the cost of executing a function pointer if this option is enabled.
7891
7892`-mtp=NAME'
7893     Specify the access model for the thread local storage pointer.
7894     The valid models are `soft', which generates calls to
7895     `__aeabi_read_tp', `cp15', which fetches the thread pointer from
7896     `cp15' directly (supported in the arm6k architecture), and `auto',
7897     which uses the best available method for the selected processor.
7898     The default setting is `auto'.
7899
7900
7901
7902File: gcc.info,  Node: AVR Options,  Next: Blackfin Options,  Prev: ARM Options,  Up: Submodel Options
7903
79043.17.3 AVR Options
7905------------------
7906
7907These options are defined for AVR implementations:
7908
7909`-mmcu=MCU'
7910     Specify ATMEL AVR instruction set or MCU type.
7911
7912     Instruction set avr1 is for the minimal AVR core, not supported by
7913     the C compiler, only for assembler programs (MCU types: at90s1200,
7914     attiny10, attiny11, attiny12, attiny15, attiny28).
7915
7916     Instruction set avr2 (default) is for the classic AVR core with up
7917     to 8K program memory space (MCU types: at90s2313, at90s2323,
7918     attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
7919     at90s8515, at90c8534, at90s8535).
7920
7921     Instruction set avr3 is for the classic AVR core with up to 128K
7922     program memory space (MCU types: atmega103, atmega603, at43usb320,
7923     at76c711).
7924
7925     Instruction set avr4 is for the enhanced AVR core with up to 8K
7926     program memory space (MCU types: atmega8, atmega83, atmega85).
7927
7928     Instruction set avr5 is for the enhanced AVR core with up to 128K
7929     program memory space (MCU types: atmega16, atmega161, atmega163,
7930     atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
7931
7932`-msize'
7933     Output instruction sizes to the asm file.
7934
7935`-minit-stack=N'
7936     Specify the initial stack address, which may be a symbol or
7937     numeric value, `__stack' is the default.
7938
7939`-mno-interrupts'
7940     Generated code is not compatible with hardware interrupts.  Code
7941     size will be smaller.
7942
7943`-mcall-prologues'
7944     Functions prologues/epilogues expanded as call to appropriate
7945     subroutines.  Code size will be smaller.
7946
7947`-mno-tablejump'
7948     Do not generate tablejump insns which sometimes increase code size.
7949
7950`-mtiny-stack'
7951     Change only the low 8 bits of the stack pointer.
7952
7953`-mint8'
7954     Assume int to be 8 bit integer.  This affects the sizes of all
7955     types: A char will be 1 byte, an int will be 1 byte, an long will
7956     be 2 bytes and long long will be 4 bytes.  Please note that this
7957     option does not comply to the C standards, but it will provide you
7958     with smaller code size.
7959
7960
7961File: gcc.info,  Node: Blackfin Options,  Next: CRIS Options,  Prev: AVR Options,  Up: Submodel Options
7962
79633.17.4 Blackfin Options
7964-----------------------
7965
7966`-momit-leaf-frame-pointer'
7967     Don't keep the frame pointer in a register for leaf functions.
7968     This avoids the instructions to save, set up and restore frame
7969     pointers and makes an extra register available in leaf functions.
7970     The option `-fomit-frame-pointer' removes the frame pointer for
7971     all functions which might make debugging harder.
7972
7973`-mspecld-anomaly'
7974     When enabled, the compiler will ensure that the generated code
7975     does not contain speculative loads after jump instructions.  This
7976     option is enabled by default.
7977
7978`-mno-specld-anomaly'
7979     Don't generate extra code to prevent speculative loads from
7980     occurring.
7981
7982`-mcsync-anomaly'
7983     When enabled, the compiler will ensure that the generated code
7984     does not contain CSYNC or SSYNC instructions too soon after
7985     conditional branches.  This option is enabled by default.
7986
7987`-mno-csync-anomaly'
7988     Don't generate extra code to prevent CSYNC or SSYNC instructions
7989     from occurring too soon after a conditional branch.
7990
7991`-mlow-64k'
7992     When enabled, the compiler is free to take advantage of the
7993     knowledge that the entire program fits into the low 64k of memory.
7994
7995`-mno-low-64k'
7996     Assume that the program is arbitrarily large.  This is the default.
7997
7998`-mid-shared-library'
7999     Generate code that supports shared libraries via the library ID
8000     method.  This allows for execute in place and shared libraries in
8001     an environment without virtual memory management.  This option
8002     implies `-fPIC'.
8003
8004`-mno-id-shared-library'
8005     Generate code that doesn't assume ID based shared libraries are
8006     being used.  This is the default.
8007
8008`-mshared-library-id=n'
8009     Specified the identification number of the ID based shared library
8010     being compiled.  Specifying a value of 0 will generate more
8011     compact code, specifying other values will force the allocation of
8012     that number to the current library but is no more space or time
8013     efficient than omitting this option.
8014
8015`-mlong-calls'
8016`-mno-long-calls'
8017     Tells the compiler to perform function calls by first loading the
8018     address of the function into a register and then performing a
8019     subroutine call on this register.  This switch is needed if the
8020     target function will lie outside of the 24 bit addressing range of
8021     the offset based version of subroutine call instruction.
8022
8023     This feature is not enabled by default.  Specifying
8024     `-mno-long-calls' will restore the default behavior.  Note these
8025     switches have no effect on how the compiler generates code to
8026     handle function calls via function pointers.
8027
8028
8029File: gcc.info,  Node: CRIS Options,  Next: CRX Options,  Prev: Blackfin Options,  Up: Submodel Options
8030
80313.17.5 CRIS Options
8032-------------------
8033
8034These options are defined specifically for the CRIS ports.
8035
8036`-march=ARCHITECTURE-TYPE'
8037`-mcpu=ARCHITECTURE-TYPE'
8038     Generate code for the specified architecture.  The choices for
8039     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
8040     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
8041     cris-axis-linux-gnu, where the default is `v10'.
8042
8043`-mtune=ARCHITECTURE-TYPE'
8044     Tune to ARCHITECTURE-TYPE everything applicable about the generated
8045     code, except for the ABI and the set of available instructions.
8046     The choices for ARCHITECTURE-TYPE are the same as for
8047     `-march=ARCHITECTURE-TYPE'.
8048
8049`-mmax-stack-frame=N'
8050     Warn when the stack frame of a function exceeds N bytes.
8051
8052`-melinux-stacksize=N'
8053     Only available with the `cris-axis-aout' target.  Arranges for
8054     indications in the program to the kernel loader that the stack of
8055     the program should be set to N bytes.
8056
8057`-metrax4'
8058`-metrax100'
8059     The options `-metrax4' and `-metrax100' are synonyms for
8060     `-march=v3' and `-march=v8' respectively.
8061
8062`-mmul-bug-workaround'
8063`-mno-mul-bug-workaround'
8064     Work around a bug in the `muls' and `mulu' instructions for CPU
8065     models where it applies.  This option is active by default.
8066
8067`-mpdebug'
8068     Enable CRIS-specific verbose debug-related information in the
8069     assembly code.  This option also has the effect to turn off the
8070     `#NO_APP' formatted-code indicator to the assembler at the
8071     beginning of the assembly file.
8072
8073`-mcc-init'
8074     Do not use condition-code results from previous instruction;
8075     always emit compare and test instructions before use of condition
8076     codes.
8077
8078`-mno-side-effects'
8079     Do not emit instructions with side-effects in addressing modes
8080     other than post-increment.
8081
8082`-mstack-align'
8083`-mno-stack-align'
8084`-mdata-align'
8085`-mno-data-align'
8086`-mconst-align'
8087`-mno-const-align'
8088     These options (no-options) arranges (eliminate arrangements) for
8089     the stack-frame, individual data and constants to be aligned for
8090     the maximum single data access size for the chosen CPU model.  The
8091     default is to arrange for 32-bit alignment.  ABI details such as
8092     structure layout are not affected by these options.
8093
8094`-m32-bit'
8095`-m16-bit'
8096`-m8-bit'
8097     Similar to the stack- data- and const-align options above, these
8098     options arrange for stack-frame, writable data and constants to
8099     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
8100     alignment.
8101
8102`-mno-prologue-epilogue'
8103`-mprologue-epilogue'
8104     With `-mno-prologue-epilogue', the normal function prologue and
8105     epilogue that sets up the stack-frame are omitted and no return
8106     instructions or return sequences are generated in the code.  Use
8107     this option only together with visual inspection of the compiled
8108     code: no warnings or errors are generated when call-saved
8109     registers must be saved, or storage for local variable needs to be
8110     allocated.
8111
8112`-mno-gotplt'
8113`-mgotplt'
8114     With `-fpic' and `-fPIC', don't generate (do generate) instruction
8115     sequences that load addresses for functions from the PLT part of
8116     the GOT rather than (traditional on other architectures) calls to
8117     the PLT.  The default is `-mgotplt'.
8118
8119`-maout'
8120     Legacy no-op option only recognized with the cris-axis-aout target.
8121
8122`-melf'
8123     Legacy no-op option only recognized with the cris-axis-elf and
8124     cris-axis-linux-gnu targets.
8125
8126`-melinux'
8127     Only recognized with the cris-axis-aout target, where it selects a
8128     GNU/linux-like multilib, include files and instruction set for
8129     `-march=v8'.
8130
8131`-mlinux'
8132     Legacy no-op option only recognized with the cris-axis-linux-gnu
8133     target.
8134
8135`-sim'
8136     This option, recognized for the cris-axis-aout and cris-axis-elf
8137     arranges to link with input-output functions from a simulator
8138     library.  Code, initialized data and zero-initialized data are
8139     allocated consecutively.
8140
8141`-sim2'
8142     Like `-sim', but pass linker options to locate initialized data at
8143     0x40000000 and zero-initialized data at 0x80000000.
8144
8145
8146File: gcc.info,  Node: CRX Options,  Next: Darwin Options,  Prev: CRIS Options,  Up: Submodel Options
8147
81483.17.6 CRX Options
8149------------------
8150
8151These options are defined specifically for the CRX ports.
8152
8153`-mmac'
8154     Enable the use of multiply-accumulate instructions. Disabled by
8155     default.
8156
8157`-mpush-args'
8158     Push instructions will be used to pass outgoing arguments when
8159     functions are called. Enabled by default.
8160
8161
8162File: gcc.info,  Node: Darwin Options,  Next: DEC Alpha Options,  Prev: CRX Options,  Up: Submodel Options
8163
81643.17.7 Darwin Options
8165---------------------
8166
8167These options are defined for all architectures running the Darwin
8168operating system.
8169
8170 FSF GCC on Darwin does not create "fat" object files; it will create
8171an object file for the single architecture that it was built to target.
8172Apple's GCC on Darwin does create "fat" files if multiple `-arch'
8173options are used; it does so by running the compiler or linker multiple
8174times and joining the results together with `lipo'.
8175
8176 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
8177is determined by the flags that specify the ISA that GCC is targetting,
8178like `-mcpu' or `-march'.  The `-force_cpusubtype_ALL' option can be
8179used to override this.
8180
8181 The Darwin tools vary in their behavior when presented with an ISA
8182mismatch.  The assembler, `as', will only permit instructions to be
8183used that are valid for the subtype of the file it is generating, so
8184you cannot put 64-bit instructions in an `ppc750' object file.  The
8185linker for shared libraries, `/usr/bin/libtool', will fail and print an
8186error if asked to create a shared library with a less restrictive
8187subtype than its input files (for instance, trying to put a `ppc970'
8188object file in a `ppc7400' library).  The linker for executables, `ld',
8189will quietly give the executable the most restrictive subtype of any of
8190its input files.
8191
8192`-FDIR'
8193     Add the framework directory DIR to the head of the list of
8194     directories to be searched for header files.  These directories are
8195     interleaved with those specified by `-I' options and are scanned
8196     in a left-to-right order.
8197
8198     A framework directory is a directory with frameworks in it.  A
8199     framework is a directory with a `"Headers"' and/or
8200     `"PrivateHeaders"' directory contained directly in it that ends in
8201     `".framework"'.  The name of a framework is the name of this
8202     directory excluding the `".framework"'.  Headers associated with
8203     the framework are found in one of those two directories, with
8204     `"Headers"' being searched first.  A subframework is a framework
8205     directory that is in a framework's `"Frameworks"' directory.
8206     Includes of subframework headers can only appear in a header of a
8207     framework that contains the subframework, or in a sibling
8208     subframework header.  Two subframeworks are siblings if they occur
8209     in the same framework.  A subframework should not have the same
8210     name as a framework, a warning will be issued if this is violated.
8211     Currently a subframework cannot have subframeworks, in the
8212     future, the mechanism may be extended to support this.  The
8213     standard frameworks can be found in `"/System/Library/Frameworks"'
8214     and `"/Library/Frameworks"'.  An example include looks like
8215     `#include <Framework/header.h>', where `Framework' denotes the
8216     name of the framework and header.h is found in the
8217     `"PrivateHeaders"' or `"Headers"' directory.
8218
8219`-gused'
8220     Emit debugging information for symbols that are used.  For STABS
8221     debugging format, this enables `-feliminate-unused-debug-symbols'.
8222     This is by default ON.
8223
8224`-gfull'
8225     Emit debugging information for all symbols and types.
8226
8227`-mmacosx-version-min=VERSION'
8228     The earliest version of MacOS X that this executable will run on
8229     is VERSION.  Typical values of VERSION include `10.1', `10.2', and
8230     `10.3.9'.
8231
8232     The default for this option is to make choices that seem to be most
8233     useful.
8234
8235`-mkernel'
8236     Enable kernel development mode.  The `-mkernel' option sets
8237     `-static', `-fno-common', `-fno-cxa-atexit', `-fno-exceptions',
8238     `-fno-non-call-exceptions', `-fapple-kext', `-fno-weak' and
8239     `-fno-rtti' where applicable.  This mode also sets `-mno-altivec',
8240     `-msoft-float', `-fno-builtin' and `-mlong-branch' for PowerPC
8241     targets.
8242
8243`-mone-byte-bool'
8244     Override the defaults for `bool' so that `sizeof(bool)==1'.  By
8245     default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
8246     and `1' when compiling for Darwin/x86, so this option has no
8247     effect on x86.
8248
8249     *Warning:* The `-mone-byte-bool' switch causes GCC to generate
8250     code that is not binary compatible with code generated without
8251     that switch.  Using this switch may require recompiling all other
8252     modules in a program, including system libraries.  Use this switch
8253     to conform to a non-default data model.
8254
8255`-mfix-and-continue'
8256`-ffix-and-continue'
8257`-findirect-data'
8258     Generate code suitable for fast turn around development.  Needed to
8259     enable gdb to dynamically load `.o' files into already running
8260     programs.  `-findirect-data' and `-ffix-and-continue' are provided
8261     for backwards compatibility.
8262
8263`-all_load'
8264     Loads all members of static archive libraries.  See man ld(1) for
8265     more information.
8266
8267`-arch_errors_fatal'
8268     Cause the errors having to do with files that have the wrong
8269     architecture to be fatal.
8270
8271`-bind_at_load'
8272     Causes the output file to be marked such that the dynamic linker
8273     will bind all undefined references when the file is loaded or
8274     launched.
8275
8276`-bundle'
8277     Produce a Mach-o bundle format file.  See man ld(1) for more
8278     information.
8279
8280`-bundle_loader EXECUTABLE'
8281     This option specifies the EXECUTABLE that will be loading the build
8282     output file being linked.  See man ld(1) for more information.
8283
8284`-dynamiclib'
8285     When passed this option, GCC will produce a dynamic library
8286     instead of an executable when linking, using the Darwin `libtool'
8287     command.
8288
8289`-force_cpusubtype_ALL'
8290     This causes GCC's output file to have the ALL subtype, instead of
8291     one controlled by the `-mcpu' or `-march' option.
8292
8293`-allowable_client  CLIENT_NAME'
8294`-client_name'
8295`-compatibility_version'
8296`-current_version'
8297`-dead_strip'
8298`-dependency-file'
8299`-dylib_file'
8300`-dylinker_install_name'
8301`-dynamic'
8302`-exported_symbols_list'
8303`-filelist'
8304`-flat_namespace'
8305`-force_flat_namespace'
8306`-headerpad_max_install_names'
8307`-image_base'
8308`-init'
8309`-install_name'
8310`-keep_private_externs'
8311`-multi_module'
8312`-multiply_defined'
8313`-multiply_defined_unused'
8314`-noall_load'
8315`-no_dead_strip_inits_and_terms'
8316`-nofixprebinding'
8317`-nomultidefs'
8318`-noprebind'
8319`-noseglinkedit'
8320`-pagezero_size'
8321`-prebind'
8322`-prebind_all_twolevel_modules'
8323`-private_bundle'
8324`-read_only_relocs'
8325`-sectalign'
8326`-sectobjectsymbols'
8327`-whyload'
8328`-seg1addr'
8329`-sectcreate'
8330`-sectobjectsymbols'
8331`-sectorder'
8332`-segaddr'
8333`-segs_read_only_addr'
8334`-segs_read_write_addr'
8335`-seg_addr_table'
8336`-seg_addr_table_filename'
8337`-seglinkedit'
8338`-segprot'
8339`-segs_read_only_addr'
8340`-segs_read_write_addr'
8341`-single_module'
8342`-static'
8343`-sub_library'
8344`-sub_umbrella'
8345`-twolevel_namespace'
8346`-umbrella'
8347`-undefined'
8348`-unexported_symbols_list'
8349`-weak_reference_mismatches'
8350`-whatsloaded'
8351     These options are passed to the Darwin linker.  The Darwin linker
8352     man page describes them in detail.
8353
8354
8355File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Darwin Options,  Up: Submodel Options
8356
83573.17.8 DEC Alpha Options
8358------------------------
8359
8360These `-m' options are defined for the DEC Alpha implementations:
8361
8362`-mno-soft-float'
8363`-msoft-float'
8364     Use (do not use) the hardware floating-point instructions for
8365     floating-point operations.  When `-msoft-float' is specified,
8366     functions in `libgcc.a' will be used to perform floating-point
8367     operations.  Unless they are replaced by routines that emulate the
8368     floating-point operations, or compiled in such a way as to call
8369     such emulations routines, these routines will issue floating-point
8370     operations.   If you are compiling for an Alpha without
8371     floating-point operations, you must ensure that the library is
8372     built so as not to call them.
8373
8374     Note that Alpha implementations without floating-point operations
8375     are required to have floating-point registers.
8376
8377`-mfp-reg'
8378`-mno-fp-regs'
8379     Generate code that uses (does not use) the floating-point register
8380     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
8381     register set is not used, floating point operands are passed in
8382     integer registers as if they were integers and floating-point
8383     results are passed in `$0' instead of `$f0'.  This is a
8384     non-standard calling sequence, so any function with a
8385     floating-point argument or return value called by code compiled
8386     with `-mno-fp-regs' must also be compiled with that option.
8387
8388     A typical use of this option is building a kernel that does not
8389     use, and hence need not save and restore, any floating-point
8390     registers.
8391
8392`-mieee'
8393     The Alpha architecture implements floating-point hardware
8394     optimized for maximum performance.  It is mostly compliant with
8395     the IEEE floating point standard.  However, for full compliance,
8396     software assistance is required.  This option generates code fully
8397     IEEE compliant code _except_ that the INEXACT-FLAG is not
8398     maintained (see below).  If this option is turned on, the
8399     preprocessor macro `_IEEE_FP' is defined during compilation.  The
8400     resulting code is less efficient but is able to correctly support
8401     denormalized numbers and exceptional IEEE values such as
8402     not-a-number and plus/minus infinity.  Other Alpha compilers call
8403     this option `-ieee_with_no_inexact'.
8404
8405`-mieee-with-inexact'
8406     This is like `-mieee' except the generated code also maintains the
8407     IEEE INEXACT-FLAG.  Turning on this option causes the generated
8408     code to implement fully-compliant IEEE math.  In addition to
8409     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
8410     On some Alpha implementations the resulting code may execute
8411     significantly slower than the code generated by default.  Since
8412     there is very little code that depends on the INEXACT-FLAG, you
8413     should normally not specify this option.  Other Alpha compilers
8414     call this option `-ieee_with_inexact'.
8415
8416`-mfp-trap-mode=TRAP-MODE'
8417     This option controls what floating-point related traps are enabled.
8418     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
8419     trap mode can be set to one of four values:
8420
8421    `n'
8422          This is the default (normal) setting.  The only traps that
8423          are enabled are the ones that cannot be disabled in software
8424          (e.g., division by zero trap).
8425
8426    `u'
8427          In addition to the traps enabled by `n', underflow traps are
8428          enabled as well.
8429
8430    `su'
8431          Like `u', but the instructions are marked to be safe for
8432          software completion (see Alpha architecture manual for
8433          details).
8434
8435    `sui'
8436          Like `su', but inexact traps are enabled as well.
8437
8438`-mfp-rounding-mode=ROUNDING-MODE'
8439     Selects the IEEE rounding mode.  Other Alpha compilers call this
8440     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
8441
8442    `n'
8443          Normal IEEE rounding mode.  Floating point numbers are
8444          rounded towards the nearest machine number or towards the
8445          even machine number in case of a tie.
8446
8447    `m'
8448          Round towards minus infinity.
8449
8450    `c'
8451          Chopped rounding mode.  Floating point numbers are rounded
8452          towards zero.
8453
8454    `d'
8455          Dynamic rounding mode.  A field in the floating point control
8456          register (FPCR, see Alpha architecture reference manual)
8457          controls the rounding mode in effect.  The C library
8458          initializes this register for rounding towards plus infinity.
8459          Thus, unless your program modifies the FPCR, `d' corresponds
8460          to round towards plus infinity.
8461
8462`-mtrap-precision=TRAP-PRECISION'
8463     In the Alpha architecture, floating point traps are imprecise.
8464     This means without software assistance it is impossible to recover
8465     from a floating trap and program execution normally needs to be
8466     terminated.  GCC can generate code that can assist operating
8467     system trap handlers in determining the exact location that caused
8468     a floating point trap.  Depending on the requirements of an
8469     application, different levels of precisions can be selected:
8470
8471    `p'
8472          Program precision.  This option is the default and means a
8473          trap handler can only identify which program caused a
8474          floating point exception.
8475
8476    `f'
8477          Function precision.  The trap handler can determine the
8478          function that caused a floating point exception.
8479
8480    `i'
8481          Instruction precision.  The trap handler can determine the
8482          exact instruction that caused a floating point exception.
8483
8484     Other Alpha compilers provide the equivalent options called
8485     `-scope_safe' and `-resumption_safe'.
8486
8487`-mieee-conformant'
8488     This option marks the generated code as IEEE conformant.  You must
8489     not use this option unless you also specify `-mtrap-precision=i'
8490     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
8491     effect is to emit the line `.eflag 48' in the function prologue of
8492     the generated assembly file.  Under DEC Unix, this has the effect
8493     that IEEE-conformant math library routines will be linked in.
8494
8495`-mbuild-constants'
8496     Normally GCC examines a 32- or 64-bit integer constant to see if
8497     it can construct it from smaller constants in two or three
8498     instructions.  If it cannot, it will output the constant as a
8499     literal and generate code to load it from the data segment at
8500     runtime.
8501
8502     Use this option to require GCC to construct _all_ integer constants
8503     using code, even if it takes more instructions (the maximum is
8504     six).
8505
8506     You would typically use this option to build a shared library
8507     dynamic loader.  Itself a shared library, it must relocate itself
8508     in memory before it can find the variables and constants in its
8509     own data segment.
8510
8511`-malpha-as'
8512`-mgas'
8513     Select whether to generate code to be assembled by the
8514     vendor-supplied assembler (`-malpha-as') or by the GNU assembler
8515     `-mgas'.
8516
8517`-mbwx'
8518`-mno-bwx'
8519`-mcix'
8520`-mno-cix'
8521`-mfix'
8522`-mno-fix'
8523`-mmax'
8524`-mno-max'
8525     Indicate whether GCC should generate code to use the optional BWX,
8526     CIX, FIX and MAX instruction sets.  The default is to use the
8527     instruction sets supported by the CPU type specified via `-mcpu='
8528     option or that of the CPU on which GCC was built if none was
8529     specified.
8530
8531`-mfloat-vax'
8532`-mfloat-ieee'
8533     Generate code that uses (does not use) VAX F and G floating point
8534     arithmetic instead of IEEE single and double precision.
8535
8536`-mexplicit-relocs'
8537`-mno-explicit-relocs'
8538     Older Alpha assemblers provided no way to generate symbol
8539     relocations except via assembler macros.  Use of these macros does
8540     not allow optimal instruction scheduling.  GNU binutils as of
8541     version 2.12 supports a new syntax that allows the compiler to
8542     explicitly mark which relocations should apply to which
8543     instructions.  This option is mostly useful for debugging, as GCC
8544     detects the capabilities of the assembler when it is built and
8545     sets the default accordingly.
8546
8547`-msmall-data'
8548`-mlarge-data'
8549     When `-mexplicit-relocs' is in effect, static data is accessed via
8550     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
8551     bytes long or smaller are placed in a "small data area" (the
8552     `.sdata' and `.sbss' sections) and are accessed via 16-bit
8553     relocations off of the `$gp' register.  This limits the size of
8554     the small data area to 64KB, but allows the variables to be
8555     directly accessed via a single instruction.
8556
8557     The default is `-mlarge-data'.  With this option the data area is
8558     limited to just below 2GB.  Programs that require more than 2GB of
8559     data must use `malloc' or `mmap' to allocate the data in the heap
8560     instead of in the program's data segment.
8561
8562     When generating code for shared libraries, `-fpic' implies
8563     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
8564
8565`-msmall-text'
8566`-mlarge-text'
8567     When `-msmall-text' is used, the compiler assumes that the code of
8568     the entire program (or shared library) fits in 4MB, and is thus
8569     reachable with a branch instruction.  When `-msmall-data' is used,
8570     the compiler can assume that all local symbols share the same
8571     `$gp' value, and thus reduce the number of instructions required
8572     for a function call from 4 to 1.
8573
8574     The default is `-mlarge-text'.
8575
8576`-mcpu=CPU_TYPE'
8577     Set the instruction set and instruction scheduling parameters for
8578     machine type CPU_TYPE.  You can specify either the `EV' style name
8579     or the corresponding chip number.  GCC supports scheduling
8580     parameters for the EV4, EV5 and EV6 family of processors and will
8581     choose the default values for the instruction set from the
8582     processor you specify.  If you do not specify a processor type,
8583     GCC will default to the processor on which the compiler was built.
8584
8585     Supported values for CPU_TYPE are
8586
8587    `ev4'
8588    `ev45'
8589    `21064'
8590          Schedules as an EV4 and has no instruction set extensions.
8591
8592    `ev5'
8593    `21164'
8594          Schedules as an EV5 and has no instruction set extensions.
8595
8596    `ev56'
8597    `21164a'
8598          Schedules as an EV5 and supports the BWX extension.
8599
8600    `pca56'
8601    `21164pc'
8602    `21164PC'
8603          Schedules as an EV5 and supports the BWX and MAX extensions.
8604
8605    `ev6'
8606    `21264'
8607          Schedules as an EV6 and supports the BWX, FIX, and MAX
8608          extensions.
8609
8610    `ev67'
8611    `21264a'
8612          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8613          extensions.
8614
8615`-mtune=CPU_TYPE'
8616     Set only the instruction scheduling parameters for machine type
8617     CPU_TYPE.  The instruction set is not changed.
8618
8619`-mmemory-latency=TIME'
8620     Sets the latency the scheduler should assume for typical memory
8621     references as seen by the application.  This number is highly
8622     dependent on the memory access patterns used by the application
8623     and the size of the external cache on the machine.
8624
8625     Valid options for TIME are
8626
8627    `NUMBER'
8628          A decimal number representing clock cycles.
8629
8630    `L1'
8631    `L2'
8632    `L3'
8633    `main'
8634          The compiler contains estimates of the number of clock cycles
8635          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8636          (also called Dcache, Scache, and Bcache), as well as to main
8637          memory.  Note that L3 is only valid for EV5.
8638
8639
8640
8641File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: FRV Options,  Prev: DEC Alpha Options,  Up: Submodel Options
8642
86433.17.9 DEC Alpha/VMS Options
8644----------------------------
8645
8646These `-m' options are defined for the DEC Alpha/VMS implementations:
8647
8648`-mvms-return-codes'
8649     Return VMS condition codes from main.  The default is to return
8650     POSIX style condition (e.g. error) codes.
8651
8652
8653File: gcc.info,  Node: FRV Options,  Next: GNU/Linux Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
8654
86553.17.10 FRV Options
8656-------------------
8657
8658`-mgpr-32'
8659     Only use the first 32 general purpose registers.
8660
8661`-mgpr-64'
8662     Use all 64 general purpose registers.
8663
8664`-mfpr-32'
8665     Use only the first 32 floating point registers.
8666
8667`-mfpr-64'
8668     Use all 64 floating point registers
8669
8670`-mhard-float'
8671     Use hardware instructions for floating point operations.
8672
8673`-msoft-float'
8674     Use library routines for floating point operations.
8675
8676`-malloc-cc'
8677     Dynamically allocate condition code registers.
8678
8679`-mfixed-cc'
8680     Do not try to dynamically allocate condition code registers, only
8681     use `icc0' and `fcc0'.
8682
8683`-mdword'
8684     Change ABI to use double word insns.
8685
8686`-mno-dword'
8687     Do not use double word instructions.
8688
8689`-mdouble'
8690     Use floating point double instructions.
8691
8692`-mno-double'
8693     Do not use floating point double instructions.
8694
8695`-mmedia'
8696     Use media instructions.
8697
8698`-mno-media'
8699     Do not use media instructions.
8700
8701`-mmuladd'
8702     Use multiply and add/subtract instructions.
8703
8704`-mno-muladd'
8705     Do not use multiply and add/subtract instructions.
8706
8707`-mfdpic'
8708     Select the FDPIC ABI, that uses function descriptors to represent
8709     pointers to functions.  Without any PIC/PIE-related options, it
8710     implies `-fPIE'.  With `-fpic' or `-fpie', it assumes GOT entries
8711     and small data are within a 12-bit range from the GOT base
8712     address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
8713     bits.
8714
8715`-minline-plt'
8716     Enable inlining of PLT entries in function calls to functions that
8717     are not known to bind locally.  It has no effect without `-mfdpic'.
8718     It's enabled by default if optimizing for speed and compiling for
8719     shared libraries (i.e., `-fPIC' or `-fpic'), or when an
8720     optimization option such as `-O3' or above is present in the
8721     command line.
8722
8723`-mTLS'
8724     Assume a large TLS segment when generating thread-local code.
8725
8726`-mtls'
8727     Do not assume a large TLS segment when generating thread-local
8728     code.
8729
8730`-mgprel-ro'
8731     Enable the use of `GPREL' relocations in the FDPIC ABI for data
8732     that is known to be in read-only sections.  It's enabled by
8733     default, except for `-fpic' or `-fpie': even though it may help
8734     make the global offset table smaller, it trades 1 instruction for
8735     4.  With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
8736     of which may be shared by multiple symbols, and it avoids the need
8737     for a GOT entry for the referenced symbol, so it's more likely to
8738     be a win.  If it is not, `-mno-gprel-ro' can be used to disable it.
8739
8740`-multilib-library-pic'
8741     Link with the (library, not FD) pic libraries.  It's implied by
8742     `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
8743     `-mfdpic'.  You should never have to use it explicitly.
8744
8745`-mlinked-fp'
8746     Follow the EABI requirement of always creating a frame pointer
8747     whenever a stack frame is allocated.  This option is enabled by
8748     default and can be disabled with `-mno-linked-fp'.
8749
8750`-mlong-calls'
8751     Use indirect addressing to call functions outside the current
8752     compilation unit.  This allows the functions to be placed anywhere
8753     within the 32-bit address space.
8754
8755`-malign-labels'
8756     Try to align labels to an 8-byte boundary by inserting nops into
8757     the previous packet.  This option only has an effect when VLIW
8758     packing is enabled.  It doesn't create new packets; it merely adds
8759     nops to existing ones.
8760
8761`-mlibrary-pic'
8762     Generate position-independent EABI code.
8763
8764`-macc-4'
8765     Use only the first four media accumulator registers.
8766
8767`-macc-8'
8768     Use all eight media accumulator registers.
8769
8770`-mpack'
8771     Pack VLIW instructions.
8772
8773`-mno-pack'
8774     Do not pack VLIW instructions.
8775
8776`-mno-eflags'
8777     Do not mark ABI switches in e_flags.
8778
8779`-mcond-move'
8780     Enable the use of conditional-move instructions (default).
8781
8782     This switch is mainly for debugging the compiler and will likely
8783     be removed in a future version.
8784
8785`-mno-cond-move'
8786     Disable the use of conditional-move instructions.
8787
8788     This switch is mainly for debugging the compiler and will likely
8789     be removed in a future version.
8790
8791`-mscc'
8792     Enable the use of conditional set instructions (default).
8793
8794     This switch is mainly for debugging the compiler and will likely
8795     be removed in a future version.
8796
8797`-mno-scc'
8798     Disable the use of conditional set instructions.
8799
8800     This switch is mainly for debugging the compiler and will likely
8801     be removed in a future version.
8802
8803`-mcond-exec'
8804     Enable the use of conditional execution (default).
8805
8806     This switch is mainly for debugging the compiler and will likely
8807     be removed in a future version.
8808
8809`-mno-cond-exec'
8810     Disable the use of conditional execution.
8811
8812     This switch is mainly for debugging the compiler and will likely
8813     be removed in a future version.
8814
8815`-mvliw-branch'
8816     Run a pass to pack branches into VLIW instructions (default).
8817
8818     This switch is mainly for debugging the compiler and will likely
8819     be removed in a future version.
8820
8821`-mno-vliw-branch'
8822     Do not run a pass to pack branches into VLIW instructions.
8823
8824     This switch is mainly for debugging the compiler and will likely
8825     be removed in a future version.
8826
8827`-mmulti-cond-exec'
8828     Enable optimization of `&&' and `||' in conditional execution
8829     (default).
8830
8831     This switch is mainly for debugging the compiler and will likely
8832     be removed in a future version.
8833
8834`-mno-multi-cond-exec'
8835     Disable optimization of `&&' and `||' in conditional execution.
8836
8837     This switch is mainly for debugging the compiler and will likely
8838     be removed in a future version.
8839
8840`-mnested-cond-exec'
8841     Enable nested conditional execution optimizations (default).
8842
8843     This switch is mainly for debugging the compiler and will likely
8844     be removed in a future version.
8845
8846`-mno-nested-cond-exec'
8847     Disable nested conditional execution optimizations.
8848
8849     This switch is mainly for debugging the compiler and will likely
8850     be removed in a future version.
8851
8852`-moptimize-membar'
8853     This switch removes redundant `membar' instructions from the
8854     compiler generated code.  It is enabled by default.
8855
8856`-mno-optimize-membar'
8857     This switch disables the automatic removal of redundant `membar'
8858     instructions from the generated code.
8859
8860`-mtomcat-stats'
8861     Cause gas to print out tomcat statistics.
8862
8863`-mcpu=CPU'
8864     Select the processor type for which to generate code.  Possible
8865     values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
8866     `fr400', `fr300' and `simple'.
8867
8868
8869
8870File: gcc.info,  Node: GNU/Linux Options,  Next: H8/300 Options,  Prev: FRV Options,  Up: Submodel Options
8871
88723.17.11 GNU/Linux Options
8873-------------------------
8874
8875These `-m' options are defined for GNU/Linux targets:
8876
8877`-mglibc'
8878     Use the GNU C library instead of uClibc.  This is the default
8879     except on `*-*-linux-*uclibc*' targets.
8880
8881`-muclibc'
8882     Use uClibc instead of the GNU C library.  This is the default on
8883     `*-*-linux-*uclibc*' targets.
8884
8885
8886File: gcc.info,  Node: H8/300 Options,  Next: HPPA Options,  Prev: GNU/Linux Options,  Up: Submodel Options
8887
88883.17.12 H8/300 Options
8889----------------------
8890
8891These `-m' options are defined for the H8/300 implementations:
8892
8893`-mrelax'
8894     Shorten some address references at link time, when possible; uses
8895     the linker option `-relax'.  *Note `ld' and the H8/300:
8896     (ld)H8/300, for a fuller description.
8897
8898`-mh'
8899     Generate code for the H8/300H.
8900
8901`-ms'
8902     Generate code for the H8S.
8903
8904`-mn'
8905     Generate code for the H8S and H8/300H in the normal mode.  This
8906     switch must be used either with `-mh' or `-ms'.
8907
8908`-ms2600'
8909     Generate code for the H8S/2600.  This switch must be used with
8910     `-ms'.
8911
8912`-mint32'
8913     Make `int' data 32 bits by default.
8914
8915`-malign-300'
8916     On the H8/300H and H8S, use the same alignment rules as for the
8917     H8/300.  The default for the H8/300H and H8S is to align longs and
8918     floats on 4 byte boundaries.  `-malign-300' causes them to be
8919     aligned on 2 byte boundaries.  This option has no effect on the
8920     H8/300.
8921
8922
8923File: gcc.info,  Node: HPPA Options,  Next: i386 and x86-64 Options,  Prev: H8/300 Options,  Up: Submodel Options
8924
89253.17.13 HPPA Options
8926--------------------
8927
8928These `-m' options are defined for the HPPA family of computers:
8929
8930`-march=ARCHITECTURE-TYPE'
8931     Generate code for the specified architecture.  The choices for
8932     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
8933     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
8934     an HP-UX system to determine the proper architecture option for
8935     your machine.  Code compiled for lower numbered architectures will
8936     run on higher numbered architectures, but not the other way around.
8937
8938`-mpa-risc-1-0'
8939`-mpa-risc-1-1'
8940`-mpa-risc-2-0'
8941     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
8942     respectively.
8943
8944`-mbig-switch'
8945     Generate code suitable for big switch tables.  Use this option
8946     only if the assembler/linker complain about out of range branches
8947     within a switch table.
8948
8949`-mjump-in-delay'
8950     Fill delay slots of function calls with unconditional jump
8951     instructions by modifying the return pointer for the function call
8952     to be the target of the conditional jump.
8953
8954`-mdisable-fpregs'
8955     Prevent floating point registers from being used in any manner.
8956     This is necessary for compiling kernels which perform lazy context
8957     switching of floating point registers.  If you use this option and
8958     attempt to perform floating point operations, the compiler will
8959     abort.
8960
8961`-mdisable-indexing'
8962     Prevent the compiler from using indexing address modes.  This
8963     avoids some rather obscure problems when compiling MIG generated
8964     code under MACH.
8965
8966`-mno-space-regs'
8967     Generate code that assumes the target has no space registers.
8968     This allows GCC to generate faster indirect calls and use unscaled
8969     index address modes.
8970
8971     Such code is suitable for level 0 PA systems and kernels.
8972
8973`-mfast-indirect-calls'
8974     Generate code that assumes calls never cross space boundaries.
8975     This allows GCC to emit code which performs faster indirect calls.
8976
8977     This option will not work in the presence of shared libraries or
8978     nested functions.
8979
8980`-mfixed-range=REGISTER-RANGE'
8981     Generate code treating the given register range as fixed registers.
8982     A fixed register is one that the register allocator can not use.
8983     This is useful when compiling kernel code.  A register range is
8984     specified as two registers separated by a dash.  Multiple register
8985     ranges can be specified separated by a comma.
8986
8987`-mlong-load-store'
8988     Generate 3-instruction load and store sequences as sometimes
8989     required by the HP-UX 10 linker.  This is equivalent to the `+k'
8990     option to the HP compilers.
8991
8992`-mportable-runtime'
8993     Use the portable calling conventions proposed by HP for ELF
8994     systems.
8995
8996`-mgas'
8997     Enable the use of assembler directives only GAS understands.
8998
8999`-mschedule=CPU-TYPE'
9000     Schedule code according to the constraints for the machine type
9001     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
9002     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
9003     HP-UX system to determine the proper scheduling option for your
9004     machine.  The default scheduling is `8000'.
9005
9006`-mlinker-opt'
9007     Enable the optimization pass in the HP-UX linker.  Note this makes
9008     symbolic debugging impossible.  It also triggers a bug in the
9009     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
9010     messages when linking some programs.
9011
9012`-msoft-float'
9013     Generate output containing library calls for floating point.
9014     *Warning:* the requisite libraries are not available for all HPPA
9015     targets.  Normally the facilities of the machine's usual C
9016     compiler are used, but this cannot be done directly in
9017     cross-compilation.  You must make your own arrangements to provide
9018     suitable library functions for cross-compilation.  The embedded
9019     target `hppa1.1-*-pro' does provide software floating point
9020     support.
9021
9022     `-msoft-float' changes the calling convention in the output file;
9023     therefore, it is only useful if you compile _all_ of a program with
9024     this option.  In particular, you need to compile `libgcc.a', the
9025     library that comes with GCC, with `-msoft-float' in order for this
9026     to work.
9027
9028`-msio'
9029     Generate the predefine, `_SIO', for server IO.  The default is
9030     `-mwsio'.  This generates the predefines, `__hp9000s700',
9031     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
9032     are available under HP-UX and HI-UX.
9033
9034`-mgnu-ld'
9035     Use GNU ld specific options.  This passes `-shared' to ld when
9036     building a shared library.  It is the default when GCC is
9037     configured, explicitly or implicitly, with the GNU linker.  This
9038     option does not have any affect on which ld is called, it only
9039     changes what parameters are passed to that ld.  The ld that is
9040     called is determined by the `--with-ld' configure option, GCC's
9041     program search path, and finally by the user's `PATH'.  The linker
9042     used by GCC can be printed using `which `gcc
9043     -print-prog-name=ld`'.  This option is only available on the 64
9044     bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
9045
9046`-mhp-ld'
9047     Use HP ld specific options.  This passes `-b' to ld when building
9048     a shared library and passes `+Accept TypeMismatch' to ld on all
9049     links.  It is the default when GCC is configured, explicitly or
9050     implicitly, with the HP linker.  This option does not have any
9051     affect on which ld is called, it only changes what parameters are
9052     passed to that ld.  The ld that is called is determined by the
9053     `--with-ld' configure option, GCC's program search path, and
9054     finally by the user's `PATH'.  The linker used by GCC can be
9055     printed using `which `gcc -print-prog-name=ld`'.  This option is
9056     only available on the 64 bit HP-UX GCC, i.e. configured with
9057     `hppa*64*-*-hpux*'.
9058
9059`-mlong-calls'
9060     Generate code that uses long call sequences.  This ensures that a
9061     call is always able to reach linker generated stubs.  The default
9062     is to generate long calls only when the distance from the call
9063     site to the beginning of the function or translation unit, as the
9064     case may be, exceeds a predefined limit set by the branch type
9065     being used.  The limits for normal calls are 7,600,000 and 240,000
9066     bytes, respectively for the PA 2.0 and PA 1.X architectures.
9067     Sibcalls are always limited at 240,000 bytes.
9068
9069     Distances are measured from the beginning of functions when using
9070     the `-ffunction-sections' option, or when using the `-mgas' and
9071     `-mno-portable-runtime' options together under HP-UX with the SOM
9072     linker.
9073
9074     It is normally not desirable to use this option as it will degrade
9075     performance.  However, it may be useful in large applications,
9076     particularly when partial linking is used to build the application.
9077
9078     The types of long calls used depends on the capabilities of the
9079     assembler and linker, and the type of code being generated.  The
9080     impact on systems that support long absolute calls, and long pic
9081     symbol-difference or pc-relative calls should be relatively small.
9082     However, an indirect call is used on 32-bit ELF systems in pic code
9083     and it is quite long.
9084
9085`-munix=UNIX-STD'
9086     Generate compiler predefines and select a startfile for the
9087     specified UNIX standard.  The choices for UNIX-STD are `93', `95'
9088     and `98'.  `93' is supported on all HP-UX versions.  `95' is
9089     available on HP-UX 10.10 and later.  `98' is available on HP-UX
9090     11.11 and later.  The default values are `93' for HP-UX 10.00,
9091     `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
9092     later.
9093
9094     `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
9095     `-munix=95' provides additional predefines for `XOPEN_UNIX' and
9096     `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
9097     `-munix=98' provides additional predefines for `_XOPEN_UNIX',
9098     `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
9099     `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
9100
9101     It is _important_ to note that this option changes the interfaces
9102     for various library routines.  It also affects the operational
9103     behavior of the C library.  Thus, _extreme_ care is needed in
9104     using this option.
9105
9106     Library code that is intended to operate with more than one UNIX
9107     standard must test, set and restore the variable
9108     __XPG4_EXTENDED_MASK as appropriate.  Most GNU software doesn't
9109     provide this capability.
9110
9111`-nolibdld'
9112     Suppress the generation of link options to search libdld.sl when
9113     the `-static' option is specified on HP-UX 10 and later.
9114
9115`-static'
9116     The HP-UX implementation of setlocale in libc has a dependency on
9117     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
9118     when the `-static' option is specified, special link options are
9119     needed to resolve this dependency.
9120
9121     On HP-UX 10 and later, the GCC driver adds the necessary options to
9122     link with libdld.sl when the `-static' option is specified.  This
9123     causes the resulting binary to be dynamic.  On the 64-bit port,
9124     the linkers generate dynamic binaries by default in any case.  The
9125     `-nolibdld' option can be used to prevent the GCC driver from
9126     adding these link options.
9127
9128`-threads'
9129     Add support for multithreading with the "dce thread" library under
9130     HP-UX.  This option sets flags for both the preprocessor and
9131     linker.
9132
9133
9134File: gcc.info,  Node: i386 and x86-64 Options,  Next: IA-64 Options,  Prev: HPPA Options,  Up: Submodel Options
9135
91363.17.14 Intel 386 and AMD x86-64 Options
9137----------------------------------------
9138
9139These `-m' options are defined for the i386 and x86-64 family of
9140computers:
9141
9142`-mtune=CPU-TYPE'
9143     Tune to CPU-TYPE everything applicable about the generated code,
9144     except for the ABI and the set of available instructions.  The
9145     choices for CPU-TYPE are:
9146    _generic_
9147          Produce code optimized for the most common IA32/AMD64/EM64T
9148          processors.  If you know the CPU on which your code will run,
9149          then you should use the corresponding `-mtune' option instead
9150          of `-mtune=generic'.  But, if you do not know exactly what
9151          CPU users of your application will have, then you should use
9152          this option.
9153
9154          As new processors are deployed in the marketplace, the
9155          behavior of this option will change.  Therefore, if you
9156          upgrade to a newer version of GCC, the code generated option
9157          will change to reflect the processors that were most common
9158          when that version of GCC was released.
9159
9160          There is no `-march=generic' option because `-march'
9161          indicates the instruction set the compiler can use, and there
9162          is no generic instruction set applicable to all processors.
9163          In contrast, `-mtune' indicates the processor (or, in this
9164          case, collection of processors) for which the code is
9165          optimized.
9166
9167    _native_
9168          This selects the CPU to tune for at compilation time by
9169          determining the processor type of the compiling machine.
9170          Using `-mtune=native' will produce code optimized for the
9171          local machine under the constraints of the selected
9172          instruction set.  Using `-march=native' will enable all
9173          instruction subsets supported by the local machine (hence the
9174          result might not run on different machines).
9175
9176    _i386_
9177          Original Intel's i386 CPU.
9178
9179    _i486_
9180          Intel's i486 CPU.  (No scheduling is implemented for this
9181          chip.)
9182
9183    _i586, pentium_
9184          Intel Pentium CPU with no MMX support.
9185
9186    _pentium-mmx_
9187          Intel PentiumMMX CPU based on Pentium core with MMX
9188          instruction set support.
9189
9190    _pentiumpro_
9191          Intel PentiumPro CPU.
9192
9193    _i686_
9194          Same as `generic', but when used as `march' option, PentiumPro
9195          instruction set will be used, so the code will run on all
9196          i686 family chips.
9197
9198    _pentium2_
9199          Intel Pentium2 CPU based on PentiumPro core with MMX
9200          instruction set support.
9201
9202    _pentium3, pentium3m_
9203          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
9204          instruction set support.
9205
9206    _pentium-m_
9207          Low power version of Intel Pentium3 CPU with MMX, SSE and
9208          SSE2 instruction set support.  Used by Centrino notebooks.
9209
9210    _pentium4, pentium4m_
9211          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
9212          support.
9213
9214    _prescott_
9215          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
9216          and SSE3 instruction set support.
9217
9218    _nocona_
9219          Improved version of Intel Pentium4 CPU with 64-bit
9220          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
9221
9222    _k6_
9223          AMD K6 CPU with MMX instruction set support.
9224
9225    _k6-2, k6-3_
9226          Improved versions of AMD K6 CPU with MMX and 3dNOW!
9227          instruction set support.
9228
9229    _athlon, athlon-tbird_
9230          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
9231          prefetch instructions support.
9232
9233    _athlon-4, athlon-xp, athlon-mp_
9234          Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
9235          full SSE instruction set support.
9236
9237    _k8, opteron, athlon64, athlon-fx_
9238          AMD K8 core based CPUs with x86-64 instruction set support.
9239          (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
9240          64-bit instruction set extensions.)
9241
9242    _winchip-c6_
9243          IDT Winchip C6 CPU, dealt in same way as i486 with additional
9244          MMX instruction set support.
9245
9246    _winchip2_
9247          IDT Winchip2 CPU, dealt in same way as i486 with additional
9248          MMX and 3dNOW!  instruction set support.
9249
9250    _c3_
9251          Via C3 CPU with MMX and 3dNOW! instruction set support.  (No
9252          scheduling is implemented for this chip.)
9253
9254    _c3-2_
9255          Via C3-2 CPU with MMX and SSE instruction set support.  (No
9256          scheduling is implemented for this chip.)
9257
9258     While picking a specific CPU-TYPE will schedule things
9259     appropriately for that particular chip, the compiler will not
9260     generate any code that does not run on the i386 without the
9261     `-march=CPU-TYPE' option being used.
9262
9263`-march=CPU-TYPE'
9264     Generate instructions for the machine type CPU-TYPE.  The choices
9265     for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
9266     `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
9267
9268`-mcpu=CPU-TYPE'
9269     A deprecated synonym for `-mtune'.
9270
9271`-m386'
9272`-m486'
9273`-mpentium'
9274`-mpentiumpro'
9275     These options are synonyms for `-mtune=i386', `-mtune=i486',
9276     `-mtune=pentium', and `-mtune=pentiumpro' respectively.  These
9277     synonyms are deprecated.
9278
9279`-mfpmath=UNIT'
9280     Generate floating point arithmetics for selected unit UNIT.  The
9281     choices for UNIT are:
9282
9283    `387'
9284          Use the standard 387 floating point coprocessor present
9285          majority of chips and emulated otherwise.  Code compiled with
9286          this option will run almost everywhere.  The temporary
9287          results are computed in 80bit precision instead of precision
9288          specified by the type resulting in slightly different results
9289          compared to most of other chips.  See `-ffloat-store' for
9290          more detailed description.
9291
9292          This is the default choice for i386 compiler.
9293
9294    `sse'
9295          Use scalar floating point instructions present in the SSE
9296          instruction set.  This instruction set is supported by
9297          Pentium3 and newer chips, in the AMD line by Athlon-4,
9298          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
9299          instruction set supports only single precision arithmetics,
9300          thus the double and extended precision arithmetics is still
9301          done using 387.  Later version, present only in Pentium4 and
9302          the future AMD x86-64 chips supports double precision
9303          arithmetics too.
9304
9305          For the i386 compiler, you need to use `-march=CPU-TYPE',
9306          `-msse' or `-msse2' switches to enable SSE extensions and
9307          make this option effective.  For the x86-64 compiler, these
9308          extensions are enabled by default.
9309
9310          The resulting code should be considerably faster in the
9311          majority of cases and avoid the numerical instability
9312          problems of 387 code, but may break some existing code that
9313          expects temporaries to be 80bit.
9314
9315          This is the default choice for the x86-64 compiler.
9316
9317    `sse,387'
9318          Attempt to utilize both instruction sets at once.  This
9319          effectively double the amount of available registers and on
9320          chips with separate execution units for 387 and SSE the
9321          execution resources too.  Use this option with care, as it is
9322          still experimental, because the GCC register allocator does
9323          not model separate functional units well resulting in
9324          instable performance.
9325
9326`-masm=DIALECT'
9327     Output asm instructions using selected DIALECT.  Supported choices
9328     are `intel' or `att' (the default one).  Darwin does not support
9329     `intel'.
9330
9331`-mieee-fp'
9332`-mno-ieee-fp'
9333     Control whether or not the compiler uses IEEE floating point
9334     comparisons.  These handle correctly the case where the result of a
9335     comparison is unordered.
9336
9337`-msoft-float'
9338     Generate output containing library calls for floating point.
9339     *Warning:* the requisite libraries are not part of GCC.  Normally
9340     the facilities of the machine's usual C compiler are used, but
9341     this can't be done directly in cross-compilation.  You must make
9342     your own arrangements to provide suitable library functions for
9343     cross-compilation.
9344
9345     On machines where a function returns floating point results in the
9346     80387 register stack, some floating point opcodes may be emitted
9347     even if `-msoft-float' is used.
9348
9349`-mno-fp-ret-in-387'
9350     Do not use the FPU registers for return values of functions.
9351
9352     The usual calling convention has functions return values of types
9353     `float' and `double' in an FPU register, even if there is no FPU.
9354     The idea is that the operating system should emulate an FPU.
9355
9356     The option `-mno-fp-ret-in-387' causes such values to be returned
9357     in ordinary CPU registers instead.
9358
9359`-mno-fancy-math-387'
9360     Some 387 emulators do not support the `sin', `cos' and `sqrt'
9361     instructions for the 387.  Specify this option to avoid generating
9362     those instructions.  This option is the default on FreeBSD,
9363     OpenBSD and NetBSD.  This option is overridden when `-march'
9364     indicates that the target cpu will always have an FPU and so the
9365     instruction will not need emulation.  As of revision 2.6.1, these
9366     instructions are not generated unless you also use the
9367     `-funsafe-math-optimizations' switch.
9368
9369`-malign-double'
9370`-mno-align-double'
9371     Control whether GCC aligns `double', `long double', and `long
9372     long' variables on a two word boundary or a one word boundary.
9373     Aligning `double' variables on a two word boundary will produce
9374     code that runs somewhat faster on a `Pentium' at the expense of
9375     more memory.
9376
9377     On x86-64, `-malign-double' is enabled by default.
9378
9379     *Warning:* if you use the `-malign-double' switch, structures
9380     containing the above types will be aligned differently than the
9381     published application binary interface specifications for the 386
9382     and will not be binary compatible with structures in code compiled
9383     without that switch.
9384
9385`-m96bit-long-double'
9386`-m128bit-long-double'
9387     These switches control the size of `long double' type.  The i386
9388     application binary interface specifies the size to be 96 bits, so
9389     `-m96bit-long-double' is the default in 32 bit mode.
9390
9391     Modern architectures (Pentium and newer) would prefer `long double'
9392     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
9393     conforming to the ABI, this would not be possible.  So specifying a
9394     `-m128bit-long-double' will align `long double' to a 16 byte
9395     boundary by padding the `long double' with an additional 32 bit
9396     zero.
9397
9398     In the x86-64 compiler, `-m128bit-long-double' is the default
9399     choice as its ABI specifies that `long double' is to be aligned on
9400     16 byte boundary.
9401
9402     Notice that neither of these options enable any extra precision
9403     over the x87 standard of 80 bits for a `long double'.
9404
9405     *Warning:* if you override the default value for your target ABI,
9406     the structures and arrays containing `long double' variables will
9407     change their size as well as function calling convention for
9408     function taking `long double' will be modified.  Hence they will
9409     not be binary compatible with arrays or structures in code
9410     compiled without that switch.
9411
9412`-mmlarge-data-threshold=NUMBER'
9413     When `-mcmodel=medium' is specified, the data greater than
9414     THRESHOLD are placed in large data section.  This value must be the
9415     same across all object linked into the binary and defaults to
9416     65535.
9417
9418`-msvr3-shlib'
9419`-mno-svr3-shlib'
9420     Control whether GCC places uninitialized local variables into the
9421     `bss' or `data' segments.  `-msvr3-shlib' places them into `bss'.
9422     These options are meaningful only on System V Release 3.
9423
9424`-mrtd'
9425     Use a different function-calling convention, in which functions
9426     that take a fixed number of arguments return with the `ret' NUM
9427     instruction, which pops their arguments while returning.  This
9428     saves one instruction in the caller since there is no need to pop
9429     the arguments there.
9430
9431     You can specify that an individual function is called with this
9432     calling sequence with the function attribute `stdcall'.  You can
9433     also override the `-mrtd' option by using the function attribute
9434     `cdecl'.  *Note Function Attributes::.
9435
9436     *Warning:* this calling convention is incompatible with the one
9437     normally used on Unix, so you cannot use it if you need to call
9438     libraries compiled with the Unix compiler.
9439
9440     Also, you must provide function prototypes for all functions that
9441     take variable numbers of arguments (including `printf'); otherwise
9442     incorrect code will be generated for calls to those functions.
9443
9444     In addition, seriously incorrect code will result if you call a
9445     function with too many arguments.  (Normally, extra arguments are
9446     harmlessly ignored.)
9447
9448`-mregparm=NUM'
9449     Control how many registers are used to pass integer arguments.  By
9450     default, no registers are used to pass arguments, and at most 3
9451     registers can be used.  You can control this behavior for a
9452     specific function by using the function attribute `regparm'.
9453     *Note Function Attributes::.
9454
9455     *Warning:* if you use this switch, and NUM is nonzero, then you
9456     must build all modules with the same value, including any
9457     libraries.  This includes the system libraries and startup modules.
9458
9459`-msseregparm'
9460     Use SSE register passing conventions for float and double arguments
9461     and return values.  You can control this behavior for a specific
9462     function by using the function attribute `sseregparm'.  *Note
9463     Function Attributes::.
9464
9465     *Warning:* if you use this switch then you must build all modules
9466     with the same value, including any libraries.  This includes the
9467     system libraries and startup modules.
9468
9469`-mstackrealign'
9470     Realign the stack at entry.  On the Intel x86, the
9471     `-mstackrealign' option will generate an alternate prologue and
9472     epilogue that realigns the runtime stack.  This supports mixing
9473     legacy codes that keep a 4-byte aligned stack with modern codes
9474     that keep a 16-byte stack for SSE compatibility.  The alternate
9475     prologue and epilogue are slower and bigger than the regular ones,
9476     and the alternate prologue requires an extra scratch register;
9477     this lowers the number of registers available if used in
9478     conjunction with the `regparm' attribute.  The `-mstackrealign'
9479     option is incompatible with the nested function prologue; this is
9480     considered a hard error.  See also the attribute
9481     `force_align_arg_pointer', applicable to individual functions.
9482
9483`-mpreferred-stack-boundary=NUM'
9484     Attempt to keep the stack boundary aligned to a 2 raised to NUM
9485     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
9486     the default is 4 (16 bytes or 128 bits).
9487
9488     On Pentium and PentiumPro, `double' and `long double' values
9489     should be aligned to an 8 byte boundary (see `-malign-double') or
9490     suffer significant run time performance penalties.  On Pentium
9491     III, the Streaming SIMD Extension (SSE) data type `__m128' may not
9492     work properly if it is not 16 byte aligned.
9493
9494     To ensure proper alignment of this values on the stack, the stack
9495     boundary must be as aligned as that required by any value stored
9496     on the stack.  Further, every function must be generated such that
9497     it keeps the stack aligned.  Thus calling a function compiled with
9498     a higher preferred stack boundary from a function compiled with a
9499     lower preferred stack boundary will most likely misalign the
9500     stack.  It is recommended that libraries that use callbacks always
9501     use the default setting.
9502
9503     This extra alignment does consume extra stack space, and generally
9504     increases code size.  Code that is sensitive to stack space usage,
9505     such as embedded systems and operating system kernels, may want to
9506     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
9507
9508`-mmmx'
9509`-mno-mmx'
9510
9511`-msse'
9512`-mno-sse'
9513
9514`-msse2'
9515`-mno-sse2'
9516
9517`-msse3'
9518`-mno-sse3'
9519
9520`-m3dnow'
9521`-mno-3dnow'
9522     These switches enable or disable the use of instructions in the
9523     MMX, SSE, SSE2 or 3DNow! extended instruction sets.  These
9524     extensions are also available as built-in functions: see *Note X86
9525     Built-in Functions::, for details of the functions enabled and
9526     disabled by these switches.
9527
9528     To have SSE/SSE2 instructions generated automatically from
9529     floating-point code (as opposed to 387 instructions), see
9530     `-mfpmath=sse'.
9531
9532     These options will enable GCC to use these extended instructions in
9533     generated code, even without `-mfpmath=sse'.  Applications which
9534     perform runtime CPU detection must compile separate files for each
9535     supported architecture, using the appropriate flags.  In
9536     particular, the file containing the CPU detection code should be
9537     compiled without these options.
9538
9539`-mpush-args'
9540`-mno-push-args'
9541     Use PUSH operations to store outgoing parameters.  This method is
9542     shorter and usually equally fast as method using SUB/MOV
9543     operations and is enabled by default.  In some cases disabling it
9544     may improve performance because of improved scheduling and reduced
9545     dependencies.
9546
9547`-maccumulate-outgoing-args'
9548     If enabled, the maximum amount of space required for outgoing
9549     arguments will be computed in the function prologue.  This is
9550     faster on most modern CPUs because of reduced dependencies,
9551     improved scheduling and reduced stack usage when preferred stack
9552     boundary is not equal to 2.  The drawback is a notable increase in
9553     code size.  This switch implies `-mno-push-args'.
9554
9555`-mthreads'
9556     Support thread-safe exception handling on `Mingw32'.  Code that
9557     relies on thread-safe exception handling must compile and link all
9558     code with the `-mthreads' option.  When compiling, `-mthreads'
9559     defines `-D_MT'; when linking, it links in a special thread helper
9560     library `-lmingwthrd' which cleans up per thread exception
9561     handling data.
9562
9563`-mno-align-stringops'
9564     Do not align destination of inlined string operations.  This
9565     switch reduces code size and improves performance in case the
9566     destination is already aligned, but GCC doesn't know about it.
9567
9568`-minline-all-stringops'
9569     By default GCC inlines string operations only when destination is
9570     known to be aligned at least to 4 byte boundary.  This enables
9571     more inlining, increase code size, but may improve performance of
9572     code that depends on fast memcpy, strlen and memset for short
9573     lengths.
9574
9575`-momit-leaf-frame-pointer'
9576     Don't keep the frame pointer in a register for leaf functions.
9577     This avoids the instructions to save, set up and restore frame
9578     pointers and makes an extra register available in leaf functions.
9579     The option `-fomit-frame-pointer' removes the frame pointer for
9580     all functions which might make debugging harder.
9581
9582`-mtls-direct-seg-refs'
9583`-mno-tls-direct-seg-refs'
9584     Controls whether TLS variables may be accessed with offsets from
9585     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
9586     whether the thread base pointer must be added.  Whether or not this
9587     is legal depends on the operating system, and whether it maps the
9588     segment to cover the entire TLS area.
9589
9590     For systems that use GNU libc, the default is on.
9591
9592 These `-m' switches are supported in addition to the above on AMD
9593x86-64 processors in 64-bit environments.
9594
9595`-m32'
9596`-m64'
9597     Generate code for a 32-bit or 64-bit environment.  The 32-bit
9598     environment sets int, long and pointer to 32 bits and generates
9599     code that runs on any i386 system.  The 64-bit environment sets
9600     int to 32 bits and long and pointer to 64 bits and generates code
9601     for AMD's x86-64 architecture. For darwin only the -m64 option
9602     turns off the `-fno-pic' and `-mdynamic-no-pic' options.
9603
9604`-mno-red-zone'
9605     Do not use a so called red zone for x86-64 code.  The red zone is
9606     mandated by the x86-64 ABI, it is a 128-byte area beyond the
9607     location of the stack pointer that will not be modified by signal
9608     or interrupt handlers and therefore can be used for temporary data
9609     without adjusting the stack pointer.  The flag `-mno-red-zone'
9610     disables this red zone.
9611
9612`-mcmodel=small'
9613     Generate code for the small code model: the program and its
9614     symbols must be linked in the lower 2 GB of the address space.
9615     Pointers are 64 bits.  Programs can be statically or dynamically
9616     linked.  This is the default code model.
9617
9618`-mcmodel=kernel'
9619     Generate code for the kernel code model.  The kernel runs in the
9620     negative 2 GB of the address space.  This model has to be used for
9621     Linux kernel code.
9622
9623`-mcmodel=medium'
9624     Generate code for the medium model: The program is linked in the
9625     lower 2 GB of the address space but symbols can be located
9626     anywhere in the address space.  Programs can be statically or
9627     dynamically linked, but building of shared libraries are not
9628     supported with the medium model.
9629
9630`-mcmodel=large'
9631     Generate code for the large model: This model makes no assumptions
9632     about addresses and sizes of sections.  Currently GCC does not
9633     implement this model.
9634
9635
9636File: gcc.info,  Node: IA-64 Options,  Next: M32C Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
9637
96383.17.15 IA-64 Options
9639---------------------
9640
9641These are the `-m' options defined for the Intel IA-64 architecture.
9642
9643`-mbig-endian'
9644     Generate code for a big endian target.  This is the default for
9645     HP-UX.
9646
9647`-mlittle-endian'
9648     Generate code for a little endian target.  This is the default for
9649     AIX5 and GNU/Linux.
9650
9651`-mgnu-as'
9652`-mno-gnu-as'
9653     Generate (or don't) code for the GNU assembler.  This is the
9654     default.
9655
9656`-mgnu-ld'
9657`-mno-gnu-ld'
9658     Generate (or don't) code for the GNU linker.  This is the default.
9659
9660`-mno-pic'
9661     Generate code that does not use a global pointer register.  The
9662     result is not position independent code, and violates the IA-64
9663     ABI.
9664
9665`-mvolatile-asm-stop'
9666`-mno-volatile-asm-stop'
9667     Generate (or don't) a stop bit immediately before and after
9668     volatile asm statements.
9669
9670`-mregister-names'
9671`-mno-register-names'
9672     Generate (or don't) `in', `loc', and `out' register names for the
9673     stacked registers.  This may make assembler output more readable.
9674
9675`-mno-sdata'
9676`-msdata'
9677     Disable (or enable) optimizations that use the small data section.
9678     This may be useful for working around optimizer bugs.
9679
9680`-mconstant-gp'
9681     Generate code that uses a single constant global pointer value.
9682     This is useful when compiling kernel code.
9683
9684`-mauto-pic'
9685     Generate code that is self-relocatable.  This implies
9686     `-mconstant-gp'.  This is useful when compiling firmware code.
9687
9688`-minline-float-divide-min-latency'
9689     Generate code for inline divides of floating point values using
9690     the minimum latency algorithm.
9691
9692`-minline-float-divide-max-throughput'
9693     Generate code for inline divides of floating point values using
9694     the maximum throughput algorithm.
9695
9696`-minline-int-divide-min-latency'
9697     Generate code for inline divides of integer values using the
9698     minimum latency algorithm.
9699
9700`-minline-int-divide-max-throughput'
9701     Generate code for inline divides of integer values using the
9702     maximum throughput algorithm.
9703
9704`-minline-sqrt-min-latency'
9705     Generate code for inline square roots using the minimum latency
9706     algorithm.
9707
9708`-minline-sqrt-max-throughput'
9709     Generate code for inline square roots using the maximum throughput
9710     algorithm.
9711
9712`-mno-dwarf2-asm'
9713`-mdwarf2-asm'
9714     Don't (or do) generate assembler code for the DWARF2 line number
9715     debugging info.  This may be useful when not using the GNU
9716     assembler.
9717
9718`-mearly-stop-bits'
9719`-mno-early-stop-bits'
9720     Allow stop bits to be placed earlier than immediately preceding the
9721     instruction that triggered the stop bit.  This can improve
9722     instruction scheduling, but does not always do so.
9723
9724`-mfixed-range=REGISTER-RANGE'
9725     Generate code treating the given register range as fixed registers.
9726     A fixed register is one that the register allocator can not use.
9727     This is useful when compiling kernel code.  A register range is
9728     specified as two registers separated by a dash.  Multiple register
9729     ranges can be specified separated by a comma.
9730
9731`-mtls-size=TLS-SIZE'
9732     Specify bit size of immediate TLS offsets.  Valid values are 14,
9733     22, and 64.
9734
9735`-mtune=CPU-TYPE'
9736     Tune the instruction scheduling for a particular CPU, Valid values
9737     are itanium, itanium1, merced, itanium2, and mckinley.
9738
9739`-mt'
9740`-pthread'
9741     Add support for multithreading using the POSIX threads library.
9742     This option sets flags for both the preprocessor and linker.  It
9743     does not affect the thread safety of object code produced by the
9744     compiler or that of libraries supplied with it.  These are HP-UX
9745     specific flags.
9746
9747`-milp32'
9748`-mlp64'
9749     Generate code for a 32-bit or 64-bit environment.  The 32-bit
9750     environment sets int, long and pointer to 32 bits.  The 64-bit
9751     environment sets int to 32 bits and long and pointer to 64 bits.
9752     These are HP-UX specific flags.
9753
9754`-mno-sched-br-data-spec'
9755`-msched-br-data-spec'
9756     (Dis/En)able data speculative scheduling before reload.  This will
9757     result in generation of the ld.a instructions and the
9758     corresponding check instructions (ld.c / chk.a).  The default is
9759     'disable'.
9760
9761`-msched-ar-data-spec'
9762`-mno-sched-ar-data-spec'
9763     (En/Dis)able data speculative scheduling after reload.  This will
9764     result in generation of the ld.a instructions and the
9765     corresponding check instructions (ld.c / chk.a).  The default is
9766     'enable'.
9767
9768`-mno-sched-control-spec'
9769`-msched-control-spec'
9770     (Dis/En)able control speculative scheduling.  This feature is
9771     available only during region scheduling (i.e. before reload).
9772     This will result in generation of the ld.s instructions and the
9773     corresponding check instructions chk.s .  The default is 'disable'.
9774
9775`-msched-br-in-data-spec'
9776`-mno-sched-br-in-data-spec'
9777     (En/Dis)able speculative scheduling of the instructions that are
9778     dependent on the data speculative loads before reload.  This is
9779     effective only with `-msched-br-data-spec' enabled.  The default
9780     is 'enable'.
9781
9782`-msched-ar-in-data-spec'
9783`-mno-sched-ar-in-data-spec'
9784     (En/Dis)able speculative scheduling of the instructions that are
9785     dependent on the data speculative loads after reload.  This is
9786     effective only with `-msched-ar-data-spec' enabled.  The default
9787     is 'enable'.
9788
9789`-msched-in-control-spec'
9790`-mno-sched-in-control-spec'
9791     (En/Dis)able speculative scheduling of the instructions that are
9792     dependent on the control speculative loads.  This is effective
9793     only with `-msched-control-spec' enabled.  The default is 'enable'.
9794
9795`-msched-ldc'
9796`-mno-sched-ldc'
9797     (En/Dis)able use of simple data speculation checks ld.c .  If
9798     disabled, only chk.a instructions will be emitted to check data
9799     speculative loads.  The default is 'enable'.
9800
9801`-mno-sched-control-ldc'
9802`-msched-control-ldc'
9803     (Dis/En)able use of ld.c instructions to check control speculative
9804     loads.  If enabled, in case of control speculative load with no
9805     speculatively scheduled dependent instructions this load will be
9806     emitted as ld.sa and ld.c will be used to check it.  The default
9807     is 'disable'.
9808
9809`-mno-sched-spec-verbose'
9810`-msched-spec-verbose'
9811     (Dis/En)able printing of the information about speculative motions.
9812
9813`-mno-sched-prefer-non-data-spec-insns'
9814`-msched-prefer-non-data-spec-insns'
9815     If enabled, data speculative instructions will be chosen for
9816     schedule only if there are no other choices at the moment.  This
9817     will make the use of the data speculation much more conservative.
9818     The default is 'disable'.
9819
9820`-mno-sched-prefer-non-control-spec-insns'
9821`-msched-prefer-non-control-spec-insns'
9822     If enabled, control speculative instructions will be chosen for
9823     schedule only if there are no other choices at the moment.  This
9824     will make the use of the control speculation much more
9825     conservative.  The default is 'disable'.
9826
9827`-mno-sched-count-spec-in-critical-path'
9828`-msched-count-spec-in-critical-path'
9829     If enabled, speculative dependencies will be considered during
9830     computation of the instructions priorities.  This will make the
9831     use of the speculation a bit more conservative.  The default is
9832     'disable'.
9833
9834
9835
9836File: gcc.info,  Node: M32C Options,  Next: M32R/D Options,  Prev: IA-64 Options,  Up: Submodel Options
9837
98383.17.16 M32C Options
9839--------------------
9840
9841`-mcpu=NAME'
9842     Select the CPU for which code is generated.  NAME may be one of
9843     `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
9844     series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
9845     series.
9846
9847`-msim'
9848     Specifies that the program will be run on the simulator.  This
9849     causes an alternate runtime library to be linked in which
9850     supports, for example, file I/O.  You must not use this option
9851     when generating programs that will run on real hardware; you must
9852     provide your own runtime library for whatever I/O functions are
9853     needed.
9854
9855`-memregs=NUMBER'
9856     Specifies the number of memory-based pseudo-registers GCC will use
9857     during code generation.  These pseudo-registers will be used like
9858     real registers, so there is a tradeoff between GCC's ability to
9859     fit the code into available registers, and the performance penalty
9860     of using memory instead of registers.  Note that all modules in a
9861     program must be compiled with the same value for this option.
9862     Because of that, you must not use this option with the default
9863     runtime libraries gcc builds.
9864
9865
9866
9867File: gcc.info,  Node: M32R/D Options,  Next: M680x0 Options,  Prev: M32C Options,  Up: Submodel Options
9868
98693.17.17 M32R/D Options
9870----------------------
9871
9872These `-m' options are defined for Renesas M32R/D architectures:
9873
9874`-m32r2'
9875     Generate code for the M32R/2.
9876
9877`-m32rx'
9878     Generate code for the M32R/X.
9879
9880`-m32r'
9881     Generate code for the M32R.  This is the default.
9882
9883`-mmodel=small'
9884     Assume all objects live in the lower 16MB of memory (so that their
9885     addresses can be loaded with the `ld24' instruction), and assume
9886     all subroutines are reachable with the `bl' instruction.  This is
9887     the default.
9888
9889     The addressability of a particular object can be set with the
9890     `model' attribute.
9891
9892`-mmodel=medium'
9893     Assume objects may be anywhere in the 32-bit address space (the
9894     compiler will generate `seth/add3' instructions to load their
9895     addresses), and assume all subroutines are reachable with the `bl'
9896     instruction.
9897
9898`-mmodel=large'
9899     Assume objects may be anywhere in the 32-bit address space (the
9900     compiler will generate `seth/add3' instructions to load their
9901     addresses), and assume subroutines may not be reachable with the
9902     `bl' instruction (the compiler will generate the much slower
9903     `seth/add3/jl' instruction sequence).
9904
9905`-msdata=none'
9906     Disable use of the small data area.  Variables will be put into
9907     one of `.data', `bss', or `.rodata' (unless the `section'
9908     attribute has been specified).  This is the default.
9909
9910     The small data area consists of sections `.sdata' and `.sbss'.
9911     Objects may be explicitly put in the small data area with the
9912     `section' attribute using one of these sections.
9913
9914`-msdata=sdata'
9915     Put small global and static data in the small data area, but do not
9916     generate special code to reference them.
9917
9918`-msdata=use'
9919     Put small global and static data in the small data area, and
9920     generate special instructions to reference them.
9921
9922`-G NUM'
9923     Put global and static objects less than or equal to NUM bytes into
9924     the small data or bss sections instead of the normal data or bss
9925     sections.  The default value of NUM is 8.  The `-msdata' option
9926     must be set to one of `sdata' or `use' for this option to have any
9927     effect.
9928
9929     All modules should be compiled with the same `-G NUM' value.
9930     Compiling with different values of NUM may or may not work; if it
9931     doesn't the linker will give an error message--incorrect code will
9932     not be generated.
9933
9934`-mdebug'
9935     Makes the M32R specific code in the compiler display some
9936     statistics that might help in debugging programs.
9937
9938`-malign-loops'
9939     Align all loops to a 32-byte boundary.
9940
9941`-mno-align-loops'
9942     Do not enforce a 32-byte alignment for loops.  This is the default.
9943
9944`-missue-rate=NUMBER'
9945     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
9946
9947`-mbranch-cost=NUMBER'
9948     NUMBER can only be 1 or 2.  If it is 1 then branches will be
9949     preferred over conditional code, if it is 2, then the opposite will
9950     apply.
9951
9952`-mflush-trap=NUMBER'
9953     Specifies the trap number to use to flush the cache.  The default
9954     is 12.  Valid numbers are between 0 and 15 inclusive.
9955
9956`-mno-flush-trap'
9957     Specifies that the cache cannot be flushed by using a trap.
9958
9959`-mflush-func=NAME'
9960     Specifies the name of the operating system function to call to
9961     flush the cache.  The default is __flush_cache_, but a function
9962     call will only be used if a trap is not available.
9963
9964`-mno-flush-func'
9965     Indicates that there is no OS function for flushing the cache.
9966
9967
9968
9969File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Prev: M32R/D Options,  Up: Submodel Options
9970
99713.17.18 M680x0 Options
9972----------------------
9973
9974These are the `-m' options defined for the 68000 series.  The default
9975values for these options depends on which style of 68000 was selected
9976when the compiler was configured; the defaults for the most common
9977choices are given below.
9978
9979`-m68000'
9980`-mc68000'
9981     Generate output for a 68000.  This is the default when the
9982     compiler is configured for 68000-based systems.
9983
9984     Use this option for microcontrollers with a 68000 or EC000 core,
9985     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
9986
9987`-m68020'
9988`-mc68020'
9989     Generate output for a 68020.  This is the default when the
9990     compiler is configured for 68020-based systems.
9991
9992`-m68881'
9993     Generate output containing 68881 instructions for floating point.
9994     This is the default for most 68020 systems unless `--nfp' was
9995     specified when the compiler was configured.
9996
9997`-m68030'
9998     Generate output for a 68030.  This is the default when the
9999     compiler is configured for 68030-based systems.
10000
10001`-m68040'
10002     Generate output for a 68040.  This is the default when the
10003     compiler is configured for 68040-based systems.
10004
10005     This option inhibits the use of 68881/68882 instructions that have
10006     to be emulated by software on the 68040.  Use this option if your
10007     68040 does not have code to emulate those instructions.
10008
10009`-m68060'
10010     Generate output for a 68060.  This is the default when the
10011     compiler is configured for 68060-based systems.
10012
10013     This option inhibits the use of 68020 and 68881/68882 instructions
10014     that have to be emulated by software on the 68060.  Use this
10015     option if your 68060 does not have code to emulate those
10016     instructions.
10017
10018`-mcpu32'
10019     Generate output for a CPU32.  This is the default when the
10020     compiler is configured for CPU32-based systems.
10021
10022     Use this option for microcontrollers with a CPU32 or CPU32+ core,
10023     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
10024     68341, 68349 and 68360.
10025
10026`-m5200'
10027     Generate output for a 520X "coldfire" family cpu.  This is the
10028     default when the compiler is configured for 520X-based systems.
10029
10030     Use this option for microcontroller with a 5200 core, including
10031     the MCF5202, MCF5203, MCF5204 and MCF5202.
10032
10033`-mcfv4e'
10034     Generate output for a ColdFire V4e family cpu (e.g. 547x/548x).
10035     This includes use of hardware floating point instructions.
10036
10037`-m68020-40'
10038     Generate output for a 68040, without using any of the new
10039     instructions.  This results in code which can run relatively
10040     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10041     generated code does use the 68881 instructions that are emulated
10042     on the 68040.
10043
10044`-m68020-60'
10045     Generate output for a 68060, without using any of the new
10046     instructions.  This results in code which can run relatively
10047     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
10048     generated code does use the 68881 instructions that are emulated
10049     on the 68060.
10050
10051`-msoft-float'
10052     Generate output containing library calls for floating point.
10053     *Warning:* the requisite libraries are not available for all m68k
10054     targets.  Normally the facilities of the machine's usual C
10055     compiler are used, but this can't be done directly in
10056     cross-compilation.  You must make your own arrangements to provide
10057     suitable library functions for cross-compilation.  The embedded
10058     targets `m68k-*-aout' and `m68k-*-coff' do provide software
10059     floating point support.
10060
10061`-mshort'
10062     Consider type `int' to be 16 bits wide, like `short int'.
10063     Additionally, parameters passed on the stack are also aligned to a
10064     16-bit boundary even on targets whose API mandates promotion to
10065     32-bit.
10066
10067`-mnobitfield'
10068     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
10069     and `-m5200' options imply `-mnobitfield'.
10070
10071`-mbitfield'
10072     Do use the bit-field instructions.  The `-m68020' option implies
10073     `-mbitfield'.  This is the default if you use a configuration
10074     designed for a 68020.
10075
10076`-mrtd'
10077     Use a different function-calling convention, in which functions
10078     that take a fixed number of arguments return with the `rtd'
10079     instruction, which pops their arguments while returning.  This
10080     saves one instruction in the caller since there is no need to pop
10081     the arguments there.
10082
10083     This calling convention is incompatible with the one normally used
10084     on Unix, so you cannot use it if you need to call libraries
10085     compiled with the Unix compiler.
10086
10087     Also, you must provide function prototypes for all functions that
10088     take variable numbers of arguments (including `printf'); otherwise
10089     incorrect code will be generated for calls to those functions.
10090
10091     In addition, seriously incorrect code will result if you call a
10092     function with too many arguments.  (Normally, extra arguments are
10093     harmlessly ignored.)
10094
10095     The `rtd' instruction is supported by the 68010, 68020, 68030,
10096     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
10097
10098`-malign-int'
10099`-mno-align-int'
10100     Control whether GCC aligns `int', `long', `long long', `float',
10101     `double', and `long double' variables on a 32-bit boundary
10102     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
10103     variables on 32-bit boundaries produces code that runs somewhat
10104     faster on processors with 32-bit busses at the expense of more
10105     memory.
10106
10107     *Warning:* if you use the `-malign-int' switch, GCC will align
10108     structures containing the above types  differently than most
10109     published application binary interface specifications for the m68k.
10110
10111`-mpcrel'
10112     Use the pc-relative addressing mode of the 68000 directly, instead
10113     of using a global offset table.  At present, this option implies
10114     `-fpic', allowing at most a 16-bit offset for pc-relative
10115     addressing.  `-fPIC' is not presently supported with `-mpcrel',
10116     though this could be supported for 68020 and higher processors.
10117
10118`-mno-strict-align'
10119`-mstrict-align'
10120     Do not (do) assume that unaligned memory references will be
10121     handled by the system.
10122
10123`-msep-data'
10124     Generate code that allows the data segment to be located in a
10125     different area of memory from the text segment.  This allows for
10126     execute in place in an environment without virtual memory
10127     management.  This option implies `-fPIC'.
10128
10129`-mno-sep-data'
10130     Generate code that assumes that the data segment follows the text
10131     segment.  This is the default.
10132
10133`-mid-shared-library'
10134     Generate code that supports shared libraries via the library ID
10135     method.  This allows for execute in place and shared libraries in
10136     an environment without virtual memory management.  This option
10137     implies `-fPIC'.
10138
10139`-mno-id-shared-library'
10140     Generate code that doesn't assume ID based shared libraries are
10141     being used.  This is the default.
10142
10143`-mshared-library-id=n'
10144     Specified the identification number of the ID based shared library
10145     being compiled.  Specifying a value of 0 will generate more
10146     compact code, specifying other values will force the allocation of
10147     that number to the current library but is no more space or time
10148     efficient than omitting this option.
10149
10150
10151
10152File: gcc.info,  Node: M68hc1x Options,  Next: MCore Options,  Prev: M680x0 Options,  Up: Submodel Options
10153
101543.17.19 M68hc1x Options
10155-----------------------
10156
10157These are the `-m' options defined for the 68hc11 and 68hc12
10158microcontrollers.  The default values for these options depends on
10159which style of microcontroller was selected when the compiler was
10160configured; the defaults for the most common choices are given below.
10161
10162`-m6811'
10163`-m68hc11'
10164     Generate output for a 68HC11.  This is the default when the
10165     compiler is configured for 68HC11-based systems.
10166
10167`-m6812'
10168`-m68hc12'
10169     Generate output for a 68HC12.  This is the default when the
10170     compiler is configured for 68HC12-based systems.
10171
10172`-m68S12'
10173`-m68hcs12'
10174     Generate output for a 68HCS12.
10175
10176`-mauto-incdec'
10177     Enable the use of 68HC12 pre and post auto-increment and
10178     auto-decrement addressing modes.
10179
10180`-minmax'
10181`-nominmax'
10182     Enable the use of 68HC12 min and max instructions.
10183
10184`-mlong-calls'
10185`-mno-long-calls'
10186     Treat all calls as being far away (near).  If calls are assumed to
10187     be far away, the compiler will use the `call' instruction to call
10188     a function and the `rtc' instruction for returning.
10189
10190`-mshort'
10191     Consider type `int' to be 16 bits wide, like `short int'.
10192
10193`-msoft-reg-count=COUNT'
10194     Specify the number of pseudo-soft registers which are used for the
10195     code generation.  The maximum number is 32.  Using more pseudo-soft
10196     register may or may not result in better code depending on the
10197     program.  The default is 4 for 68HC11 and 2 for 68HC12.
10198
10199
10200
10201File: gcc.info,  Node: MCore Options,  Next: MIPS Options,  Prev: M68hc1x Options,  Up: Submodel Options
10202
102033.17.20 MCore Options
10204---------------------
10205
10206These are the `-m' options defined for the Motorola M*Core processors.
10207
10208`-mhardlit'
10209`-mno-hardlit'
10210     Inline constants into the code stream if it can be done in two
10211     instructions or less.
10212
10213`-mdiv'
10214`-mno-div'
10215     Use the divide instruction.  (Enabled by default).
10216
10217`-mrelax-immediate'
10218`-mno-relax-immediate'
10219     Allow arbitrary sized immediates in bit operations.
10220
10221`-mwide-bitfields'
10222`-mno-wide-bitfields'
10223     Always treat bit-fields as int-sized.
10224
10225`-m4byte-functions'
10226`-mno-4byte-functions'
10227     Force all functions to be aligned to a four byte boundary.
10228
10229`-mcallgraph-data'
10230`-mno-callgraph-data'
10231     Emit callgraph information.
10232
10233`-mslow-bytes'
10234`-mno-slow-bytes'
10235     Prefer word access when reading byte quantities.
10236
10237`-mlittle-endian'
10238`-mbig-endian'
10239     Generate code for a little endian target.
10240
10241`-m210'
10242`-m340'
10243     Generate code for the 210 processor.
10244
10245
10246File: gcc.info,  Node: MIPS Options,  Next: MMIX Options,  Prev: MCore Options,  Up: Submodel Options
10247
102483.17.21 MIPS Options
10249--------------------
10250
10251`-EB'
10252     Generate big-endian code.
10253
10254`-EL'
10255     Generate little-endian code.  This is the default for `mips*el-*-*'
10256     configurations.
10257
10258`-march=ARCH'
10259     Generate code that will run on ARCH, which can be the name of a
10260     generic MIPS ISA, or the name of a particular processor.  The ISA
10261     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
10262     `mips32r2', and `mips64'.  The processor names are: `4kc', `4km',
10263     `4kp', `5kc', `5kf', `20kc', `24k', `24kc', `24kf', `24kx', `m4k',
10264     `orion', `r2000', `r3000', `r3900', `r4000', `r4400', `r4600',
10265     `r4650', `r6000', `r8000', `rm7000', `rm9000', `sb1', `sr71000',
10266     `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000',
10267     `vr5400' and `vr5500'.  The special value `from-abi' selects the
10268     most compatible architecture for the selected ABI (that is,
10269     `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs).
10270
10271     In processor names, a final `000' can be abbreviated as `k' (for
10272     example, `-march=r2k').  Prefixes are optional, and `vr' may be
10273     written `r'.
10274
10275     GCC defines two macros based on the value of this option.  The
10276     first is `_MIPS_ARCH', which gives the name of target
10277     architecture, as a string.  The second has the form
10278     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
10279     `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
10280     to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
10281
10282     Note that the `_MIPS_ARCH' macro uses the processor names given
10283     above.  In other words, it will have the full prefix and will not
10284     abbreviate `000' as `k'.  In the case of `from-abi', the macro
10285     names the resolved architecture (either `"mips1"' or `"mips3"').
10286     It names the default architecture when no `-march' option is given.
10287
10288`-mtune=ARCH'
10289     Optimize for ARCH.  Among other things, this option controls the
10290     way instructions are scheduled, and the perceived cost of
10291     arithmetic operations.  The list of ARCH values is the same as for
10292     `-march'.
10293
10294     When this option is not used, GCC will optimize for the processor
10295     specified by `-march'.  By using `-march' and `-mtune' together,
10296     it is possible to generate code that will run on a family of
10297     processors, but optimize the code for one particular member of
10298     that family.
10299
10300     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
10301     which work in the same way as the `-march' ones described above.
10302
10303`-mips1'
10304     Equivalent to `-march=mips1'.
10305
10306`-mips2'
10307     Equivalent to `-march=mips2'.
10308
10309`-mips3'
10310     Equivalent to `-march=mips3'.
10311
10312`-mips4'
10313     Equivalent to `-march=mips4'.
10314
10315`-mips32'
10316     Equivalent to `-march=mips32'.
10317
10318`-mips32r2'
10319     Equivalent to `-march=mips32r2'.
10320
10321`-mips64'
10322     Equivalent to `-march=mips64'.
10323
10324`-mips16'
10325`-mno-mips16'
10326     Generate (do not generate) MIPS16 code.  If GCC is targetting a
10327     MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
10328
10329`-mabi=32'
10330`-mabi=o64'
10331`-mabi=n32'
10332`-mabi=64'
10333`-mabi=eabi'
10334     Generate code for the given ABI.
10335
10336     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
10337     generates 64-bit code when you select a 64-bit architecture, but
10338     you can use `-mgp32' to get 32-bit code instead.
10339
10340     For information about the O64 ABI, see
10341     `http://gcc.gnu.org/projects/mipso64-abi.html'.
10342
10343`-mabicalls'
10344`-mno-abicalls'
10345     Generate (do not generate) code that is suitable for SVR4-style
10346     dynamic objects.  `-mabicalls' is the default for SVR4-based
10347     systems.
10348
10349`-mshared'
10350`-mno-shared'
10351     Generate (do not generate) code that is fully position-independent,
10352     and that can therefore be linked into shared libraries.  This
10353     option only affects `-mabicalls'.
10354
10355     All `-mabicalls' code has traditionally been position-independent,
10356     regardless of options like `-fPIC' and `-fpic'.  However, as an
10357     extension, the GNU toolchain allows executables to use absolute
10358     accesses for locally-binding symbols.  It can also use shorter GP
10359     initialization sequences and generate direct calls to
10360     locally-defined functions.  This mode is selected by `-mno-shared'.
10361
10362     `-mno-shared' depends on binutils 2.16 or higher and generates
10363     objects that can only be linked by the GNU linker.  However, the
10364     option does not affect the ABI of the final executable; it only
10365     affects the ABI of relocatable objects.  Using `-mno-shared' will
10366     generally make executables both smaller and quicker.
10367
10368     `-mshared' is the default.
10369
10370`-mxgot'
10371`-mno-xgot'
10372     Lift (do not lift) the usual restrictions on the size of the global
10373     offset table.
10374
10375     GCC normally uses a single instruction to load values from the GOT.
10376     While this is relatively efficient, it will only work if the GOT
10377     is smaller than about 64k.  Anything larger will cause the linker
10378     to report an error such as:
10379
10380          relocation truncated to fit: R_MIPS_GOT16 foobar
10381
10382     If this happens, you should recompile your code with `-mxgot'.  It
10383     should then work with very large GOTs, although it will also be
10384     less efficient, since it will take three instructions to fetch the
10385     value of a global symbol.
10386
10387     Note that some linkers can create multiple GOTs.  If you have such
10388     a linker, you should only need to use `-mxgot' when a single object
10389     file accesses more than 64k's worth of GOT entries.  Very few do.
10390
10391     These options have no effect unless GCC is generating position
10392     independent code.
10393
10394`-mgp32'
10395     Assume that general-purpose registers are 32 bits wide.
10396
10397`-mgp64'
10398     Assume that general-purpose registers are 64 bits wide.
10399
10400`-mfp32'
10401     Assume that floating-point registers are 32 bits wide.
10402
10403`-mfp64'
10404     Assume that floating-point registers are 64 bits wide.
10405
10406`-mhard-float'
10407     Use floating-point coprocessor instructions.
10408
10409`-msoft-float'
10410     Do not use floating-point coprocessor instructions.  Implement
10411     floating-point calculations using library calls instead.
10412
10413`-msingle-float'
10414     Assume that the floating-point coprocessor only supports
10415     single-precision operations.
10416
10417`-mdouble-float'
10418     Assume that the floating-point coprocessor supports
10419     double-precision operations.  This is the default.
10420
10421`-mdsp'
10422`-mno-dsp'
10423     Use (do not use) the MIPS DSP ASE.  *Note MIPS DSP Built-in
10424     Functions::.
10425
10426`-mpaired-single'
10427`-mno-paired-single'
10428     Use (do not use) paired-single floating-point instructions.  *Note
10429     MIPS Paired-Single Support::.  This option can only be used when
10430     generating 64-bit code and requires hardware floating-point
10431     support to be enabled.
10432
10433`-mips3d'
10434`-mno-mips3d'
10435     Use (do not use) the MIPS-3D ASE.  *Note MIPS-3D Built-in
10436     Functions::.  The option `-mips3d' implies `-mpaired-single'.
10437
10438`-mlong64'
10439     Force `long' types to be 64 bits wide.  See `-mlong32' for an
10440     explanation of the default and the way that the pointer size is
10441     determined.
10442
10443`-mlong32'
10444     Force `long', `int', and pointer types to be 32 bits wide.
10445
10446     The default size of `int's, `long's and pointers depends on the
10447     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
10448     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
10449     `long's.  Pointers are the same size as `long's, or the same size
10450     as integer registers, whichever is smaller.
10451
10452`-msym32'
10453`-mno-sym32'
10454     Assume (do not assume) that all symbols have 32-bit values,
10455     regardless of the selected ABI.  This option is useful in
10456     combination with `-mabi=64' and `-mno-abicalls' because it allows
10457     GCC to generate shorter and faster references to symbolic
10458     addresses.
10459
10460`-G NUM'
10461     Put global and static items less than or equal to NUM bytes into
10462     the small data or bss section instead of the normal data or bss
10463     section.  This allows the data to be accessed using a single
10464     instruction.
10465
10466     All modules should be compiled with the same `-G NUM' value.
10467
10468`-membedded-data'
10469`-mno-embedded-data'
10470     Allocate variables to the read-only data section first if
10471     possible, then next in the small data section if possible,
10472     otherwise in data.  This gives slightly slower code than the
10473     default, but reduces the amount of RAM required when executing,
10474     and thus may be preferred for some embedded systems.
10475
10476`-muninit-const-in-rodata'
10477`-mno-uninit-const-in-rodata'
10478     Put uninitialized `const' variables in the read-only data section.
10479     This option is only meaningful in conjunction with
10480     `-membedded-data'.
10481
10482`-msplit-addresses'
10483`-mno-split-addresses'
10484     Enable (disable) use of the `%hi()' and `%lo()' assembler
10485     relocation operators.  This option has been superseded by
10486     `-mexplicit-relocs' but is retained for backwards compatibility.
10487
10488`-mexplicit-relocs'
10489`-mno-explicit-relocs'
10490     Use (do not use) assembler relocation operators when dealing with
10491     symbolic addresses.  The alternative, selected by
10492     `-mno-explicit-relocs', is to use assembler macros instead.
10493
10494     `-mexplicit-relocs' is the default if GCC was configured to use an
10495     assembler that supports relocation operators.
10496
10497`-mcheck-zero-division'
10498`-mno-check-zero-division'
10499     Trap (do not trap) on integer division by zero.  The default is
10500     `-mcheck-zero-division'.
10501
10502`-mdivide-traps'
10503`-mdivide-breaks'
10504     MIPS systems check for division by zero by generating either a
10505     conditional trap or a break instruction.  Using traps results in
10506     smaller code, but is only supported on MIPS II and later.  Also,
10507     some versions of the Linux kernel have a bug that prevents trap
10508     from generating the proper signal (`SIGFPE').  Use
10509     `-mdivide-traps' to allow conditional traps on architectures that
10510     support them and `-mdivide-breaks' to force the use of breaks.
10511
10512     The default is usually `-mdivide-traps', but this can be
10513     overridden at configure time using `--with-divide=breaks'.
10514     Divide-by-zero checks can be completely disabled using
10515     `-mno-check-zero-division'.
10516
10517`-mmemcpy'
10518`-mno-memcpy'
10519     Force (do not force) the use of `memcpy()' for non-trivial block
10520     moves.  The default is `-mno-memcpy', which allows GCC to inline
10521     most constant-sized copies.
10522
10523`-mlong-calls'
10524`-mno-long-calls'
10525     Disable (do not disable) use of the `jal' instruction.  Calling
10526     functions using `jal' is more efficient but requires the caller
10527     and callee to be in the same 256 megabyte segment.
10528
10529     This option has no effect on abicalls code.  The default is
10530     `-mno-long-calls'.
10531
10532`-mmad'
10533`-mno-mad'
10534     Enable (disable) use of the `mad', `madu' and `mul' instructions,
10535     as provided by the R4650 ISA.
10536
10537`-mfused-madd'
10538`-mno-fused-madd'
10539     Enable (disable) use of the floating point multiply-accumulate
10540     instructions, when they are available.  The default is
10541     `-mfused-madd'.
10542
10543     When multiply-accumulate instructions are used, the intermediate
10544     product is calculated to infinite precision and is not subject to
10545     the FCSR Flush to Zero bit.  This may be undesirable in some
10546     circumstances.
10547
10548`-nocpp'
10549     Tell the MIPS assembler to not run its preprocessor over user
10550     assembler files (with a `.s' suffix) when assembling them.
10551
10552`-mfix-r4000'
10553`-mno-fix-r4000'
10554     Work around certain R4000 CPU errata:
10555        - A double-word or a variable shift may give an incorrect
10556          result if executed immediately after starting an integer
10557          division.
10558
10559        - A double-word or a variable shift may give an incorrect
10560          result if executed while an integer multiplication is in
10561          progress.
10562
10563        - An integer division may give an incorrect result if started
10564          in a delay slot of a taken branch or a jump.
10565
10566`-mfix-r4400'
10567`-mno-fix-r4400'
10568     Work around certain R4400 CPU errata:
10569        - A double-word or a variable shift may give an incorrect
10570          result if executed immediately after starting an integer
10571          division.
10572
10573`-mfix-vr4120'
10574`-mno-fix-vr4120'
10575     Work around certain VR4120 errata:
10576        - `dmultu' does not always produce the correct result.
10577
10578        - `div' and `ddiv' do not always produce the correct result if
10579          one of the operands is negative.
10580     The workarounds for the division errata rely on special functions
10581     in `libgcc.a'.  At present, these functions are only provided by
10582     the `mips64vr*-elf' configurations.
10583
10584     Other VR4120 errata require a nop to be inserted between certain
10585     pairs of instructions.  These errata are handled by the assembler,
10586     not by GCC itself.
10587
10588`-mfix-vr4130'
10589     Work around the VR4130 `mflo'/`mfhi' errata.  The workarounds are
10590     implemented by the assembler rather than by GCC, although GCC will
10591     avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
10592     `dmacc' and `dmacchi' instructions are available instead.
10593
10594`-mfix-sb1'
10595`-mno-fix-sb1'
10596     Work around certain SB-1 CPU core errata.  (This flag currently
10597     works around the SB-1 revision 2 "F1" and "F2" floating point
10598     errata.)
10599
10600`-mflush-func=FUNC'
10601`-mno-flush-func'
10602     Specifies the function to call to flush the I and D caches, or to
10603     not call any such function.  If called, the function must take the
10604     same arguments as the common `_flush_func()', that is, the address
10605     of the memory range for which the cache is being flushed, the size
10606     of the memory range, and the number 3 (to flush both caches).  The
10607     default depends on the target GCC was configured for, but commonly
10608     is either `_flush_func' or `__cpu_flush'.
10609
10610`-mbranch-likely'
10611`-mno-branch-likely'
10612     Enable or disable use of Branch Likely instructions, regardless of
10613     the default for the selected architecture.  By default, Branch
10614     Likely instructions may be generated if they are supported by the
10615     selected architecture.  An exception is for the MIPS32 and MIPS64
10616     architectures and processors which implement those architectures;
10617     for those, Branch Likely instructions will not be generated by
10618     default because the MIPS32 and MIPS64 architectures specifically
10619     deprecate their use.
10620
10621`-mfp-exceptions'
10622`-mno-fp-exceptions'
10623     Specifies whether FP exceptions are enabled.  This affects how we
10624     schedule FP instructions for some processors.  The default is that
10625     FP exceptions are enabled.
10626
10627     For instance, on the SB-1, if FP exceptions are disabled, and we
10628     are emitting 64-bit code, then we can use both FP pipes.
10629     Otherwise, we can only use one FP pipe.
10630
10631`-mvr4130-align'
10632`-mno-vr4130-align'
10633     The VR4130 pipeline is two-way superscalar, but can only issue two
10634     instructions together if the first one is 8-byte aligned.  When
10635     this option is enabled, GCC will align pairs of instructions that
10636     it thinks should execute in parallel.
10637
10638     This option only has an effect when optimizing for the VR4130.  It
10639     normally makes code faster, but at the expense of making it bigger.
10640     It is enabled by default at optimization level `-O3'.
10641
10642
10643File: gcc.info,  Node: MMIX Options,  Next: MN10300 Options,  Prev: MIPS Options,  Up: Submodel Options
10644
106453.17.22 MMIX Options
10646--------------------
10647
10648These options are defined for the MMIX:
10649
10650`-mlibfuncs'
10651`-mno-libfuncs'
10652     Specify that intrinsic library functions are being compiled,
10653     passing all values in registers, no matter the size.
10654
10655`-mepsilon'
10656`-mno-epsilon'
10657     Generate floating-point comparison instructions that compare with
10658     respect to the `rE' epsilon register.
10659
10660`-mabi=mmixware'
10661`-mabi=gnu'
10662     Generate code that passes function parameters and return values
10663     that (in the called function) are seen as registers `$0' and up,
10664     as opposed to the GNU ABI which uses global registers `$231' and
10665     up.
10666
10667`-mzero-extend'
10668`-mno-zero-extend'
10669     When reading data from memory in sizes shorter than 64 bits, use
10670     (do not use) zero-extending load instructions by default, rather
10671     than sign-extending ones.
10672
10673`-mknuthdiv'
10674`-mno-knuthdiv'
10675     Make the result of a division yielding a remainder have the same
10676     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
10677     of the remainder follows the sign of the dividend.  Both methods
10678     are arithmetically valid, the latter being almost exclusively used.
10679
10680`-mtoplevel-symbols'
10681`-mno-toplevel-symbols'
10682     Prepend (do not prepend) a `:' to all global symbols, so the
10683     assembly code can be used with the `PREFIX' assembly directive.
10684
10685`-melf'
10686     Generate an executable in the ELF format, rather than the default
10687     `mmo' format used by the `mmix' simulator.
10688
10689`-mbranch-predict'
10690`-mno-branch-predict'
10691     Use (do not use) the probable-branch instructions, when static
10692     branch prediction indicates a probable branch.
10693
10694`-mbase-addresses'
10695`-mno-base-addresses'
10696     Generate (do not generate) code that uses _base addresses_.  Using
10697     a base address automatically generates a request (handled by the
10698     assembler and the linker) for a constant to be set up in a global
10699     register.  The register is used for one or more base address
10700     requests within the range 0 to 255 from the value held in the
10701     register.  The generally leads to short and fast code, but the
10702     number of different data items that can be addressed is limited.
10703     This means that a program that uses lots of static data may
10704     require `-mno-base-addresses'.
10705
10706`-msingle-exit'
10707`-mno-single-exit'
10708     Force (do not force) generated code to have a single exit point in
10709     each function.
10710
10711
10712File: gcc.info,  Node: MN10300 Options,  Next: MT Options,  Prev: MMIX Options,  Up: Submodel Options
10713
107143.17.23 MN10300 Options
10715-----------------------
10716
10717These `-m' options are defined for Matsushita MN10300 architectures:
10718
10719`-mmult-bug'
10720     Generate code to avoid bugs in the multiply instructions for the
10721     MN10300 processors.  This is the default.
10722
10723`-mno-mult-bug'
10724     Do not generate code to avoid bugs in the multiply instructions
10725     for the MN10300 processors.
10726
10727`-mam33'
10728     Generate code which uses features specific to the AM33 processor.
10729
10730`-mno-am33'
10731     Do not generate code which uses features specific to the AM33
10732     processor.  This is the default.
10733
10734`-mreturn-pointer-on-d0'
10735     When generating a function which returns a pointer, return the
10736     pointer in both `a0' and `d0'.  Otherwise, the pointer is returned
10737     only in a0, and attempts to call such functions without a prototype
10738     would result in errors.  Note that this option is on by default;
10739     use `-mno-return-pointer-on-d0' to disable it.
10740
10741`-mno-crt0'
10742     Do not link in the C run-time initialization object file.
10743
10744`-mrelax'
10745     Indicate to the linker that it should perform a relaxation
10746     optimization pass to shorten branches, calls and absolute memory
10747     addresses.  This option only has an effect when used on the
10748     command line for the final link step.
10749
10750     This option makes symbolic debugging impossible.
10751
10752
10753File: gcc.info,  Node: MT Options,  Next: PDP-11 Options,  Prev: MN10300 Options,  Up: Submodel Options
10754
107553.17.24 MT Options
10756------------------
10757
10758These `-m' options are defined for Morpho MT architectures:
10759
10760`-march=CPU-TYPE'
10761     Generate code that will run on CPU-TYPE, which is the name of a
10762     system representing a certain processor type.  Possible values for
10763     CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'.
10764
10765     When this option is not used, the default is `-march=ms1-16-002'.
10766
10767`-mbacc'
10768     Use byte loads and stores when generating code.
10769
10770`-mno-bacc'
10771     Do not use byte loads and stores when generating code.
10772
10773`-msim'
10774     Use simulator runtime
10775
10776`-mno-crt0'
10777     Do not link in the C run-time initialization object file `crti.o'.
10778     Other run-time initialization and termination files such as
10779     `startup.o' and `exit.o' are still included on the linker command
10780     line.
10781
10782
10783
10784File: gcc.info,  Node: PDP-11 Options,  Next: PowerPC Options,  Prev: MT Options,  Up: Submodel Options
10785
107863.17.25 PDP-11 Options
10787----------------------
10788
10789These options are defined for the PDP-11:
10790
10791`-mfpu'
10792     Use hardware FPP floating point.  This is the default.  (FIS
10793     floating point on the PDP-11/40 is not supported.)
10794
10795`-msoft-float'
10796     Do not use hardware floating point.
10797
10798`-mac0'
10799     Return floating-point results in ac0 (fr0 in Unix assembler
10800     syntax).
10801
10802`-mno-ac0'
10803     Return floating-point results in memory.  This is the default.
10804
10805`-m40'
10806     Generate code for a PDP-11/40.
10807
10808`-m45'
10809     Generate code for a PDP-11/45.  This is the default.
10810
10811`-m10'
10812     Generate code for a PDP-11/10.
10813
10814`-mbcopy-builtin'
10815     Use inline `movmemhi' patterns for copying memory.  This is the
10816     default.
10817
10818`-mbcopy'
10819     Do not use inline `movmemhi' patterns for copying memory.
10820
10821`-mint16'
10822`-mno-int32'
10823     Use 16-bit `int'.  This is the default.
10824
10825`-mint32'
10826`-mno-int16'
10827     Use 32-bit `int'.
10828
10829`-mfloat64'
10830`-mno-float32'
10831     Use 64-bit `float'.  This is the default.
10832
10833`-mfloat32'
10834`-mno-float64'
10835     Use 32-bit `float'.
10836
10837`-mabshi'
10838     Use `abshi2' pattern.  This is the default.
10839
10840`-mno-abshi'
10841     Do not use `abshi2' pattern.
10842
10843`-mbranch-expensive'
10844     Pretend that branches are expensive.  This is for experimenting
10845     with code generation only.
10846
10847`-mbranch-cheap'
10848     Do not pretend that branches are expensive.  This is the default.
10849
10850`-msplit'
10851     Generate code for a system with split I&D.
10852
10853`-mno-split'
10854     Generate code for a system without split I&D.  This is the default.
10855
10856`-munix-asm'
10857     Use Unix assembler syntax.  This is the default when configured for
10858     `pdp11-*-bsd'.
10859
10860`-mdec-asm'
10861     Use DEC assembler syntax.  This is the default when configured for
10862     any PDP-11 target other than `pdp11-*-bsd'.
10863
10864
10865File: gcc.info,  Node: PowerPC Options,  Next: RS/6000 and PowerPC Options,  Prev: PDP-11 Options,  Up: Submodel Options
10866
108673.17.26 PowerPC Options
10868-----------------------
10869
10870These are listed under *Note RS/6000 and PowerPC Options::.
10871
10872
10873File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: S/390 and zSeries Options,  Prev: PowerPC Options,  Up: Submodel Options
10874
108753.17.27 IBM RS/6000 and PowerPC Options
10876---------------------------------------
10877
10878These `-m' options are defined for the IBM RS/6000 and PowerPC:
10879`-mpower'
10880`-mno-power'
10881`-mpower2'
10882`-mno-power2'
10883`-mpowerpc'
10884`-mno-powerpc'
10885`-mpowerpc-gpopt'
10886`-mno-powerpc-gpopt'
10887`-mpowerpc-gfxopt'
10888`-mno-powerpc-gfxopt'
10889`-mpowerpc64'
10890`-mno-powerpc64'
10891`-mmfcrf'
10892`-mno-mfcrf'
10893`-mpopcntb'
10894`-mno-popcntb'
10895`-mfprnd'
10896`-mno-fprnd'
10897     GCC supports two related instruction set architectures for the
10898     RS/6000 and PowerPC.  The "POWER" instruction set are those
10899     instructions supported by the `rios' chip set used in the original
10900     RS/6000 systems and the "PowerPC" instruction set is the
10901     architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
10902     microprocessors, and the IBM 4xx, 6xx, and follow-on
10903     microprocessors.
10904
10905     Neither architecture is a subset of the other.  However there is a
10906     large common subset of instructions supported by both.  An MQ
10907     register is included in processors supporting the POWER
10908     architecture.
10909
10910     You use these options to specify which instructions are available
10911     on the processor you are using.  The default value of these
10912     options is determined when configuring GCC.  Specifying the
10913     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
10914     recommend you use the `-mcpu=CPU_TYPE' option rather than the
10915     options listed above.
10916
10917     The `-mpower' option allows GCC to generate instructions that are
10918     found only in the POWER architecture and to use the MQ register.
10919     Specifying `-mpower2' implies `-power' and also allows GCC to
10920     generate instructions that are present in the POWER2 architecture
10921     but not the original POWER architecture.
10922
10923     The `-mpowerpc' option allows GCC to generate instructions that
10924     are found only in the 32-bit subset of the PowerPC architecture.
10925     Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
10926     GCC to use the optional PowerPC architecture instructions in the
10927     General Purpose group, including floating-point square root.
10928     Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
10929     GCC to use the optional PowerPC architecture instructions in the
10930     Graphics group, including floating-point select.
10931
10932     The `-mmfcrf' option allows GCC to generate the move from
10933     condition register field instruction implemented on the POWER4
10934     processor and other processors that support the PowerPC V2.01
10935     architecture.  The `-mpopcntb' option allows GCC to generate the
10936     popcount and double precision FP reciprocal estimate instruction
10937     implemented on the POWER5 processor and other processors that
10938     support the PowerPC V2.02 architecture.  The `-mfprnd' option
10939     allows GCC to generate the FP round to integer instructions
10940     implemented on the POWER5+ processor and other processors that
10941     support the PowerPC V2.03 architecture.
10942
10943     The `-mpowerpc64' option allows GCC to generate the additional
10944     64-bit instructions that are found in the full PowerPC64
10945     architecture and to treat GPRs as 64-bit, doubleword quantities.
10946     GCC defaults to `-mno-powerpc64'.
10947
10948     If you specify both `-mno-power' and `-mno-powerpc', GCC will use
10949     only the instructions in the common subset of both architectures
10950     plus some special AIX common-mode calls, and will not use the MQ
10951     register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
10952     to use any instruction from either architecture and to allow use
10953     of the MQ register; specify this for the Motorola MPC601.
10954
10955`-mnew-mnemonics'
10956`-mold-mnemonics'
10957     Select which mnemonics to use in the generated assembler code.
10958     With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
10959     for the PowerPC architecture.  With `-mold-mnemonics' it uses the
10960     assembler mnemonics defined for the POWER architecture.
10961     Instructions defined in only one architecture have only one
10962     mnemonic; GCC uses that mnemonic irrespective of which of these
10963     options is specified.
10964
10965     GCC defaults to the mnemonics appropriate for the architecture in
10966     use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
10967     these option.  Unless you are building a cross-compiler, you
10968     should normally not specify either `-mnew-mnemonics' or
10969     `-mold-mnemonics', but should instead accept the default.
10970
10971`-mcpu=CPU_TYPE'
10972     Set architecture type, register usage, choice of mnemonics, and
10973     instruction scheduling parameters for machine type CPU_TYPE.
10974     Supported values for CPU_TYPE are `401', `403', `405', `405fp',
10975     `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e',
10976     `620', `630', `740', `7400', `7450', `750', `801', `821', `823',
10977     `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power',
10978     `power2', `power3', `power4', `power5', `power5+', `power6',
10979     `common', `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc',
10980     and `rs64'.
10981
10982     `-mcpu=common' selects a completely generic processor.  Code
10983     generated under this option will run on any POWER or PowerPC
10984     processor.  GCC will use only the instructions in the common
10985     subset of both architectures, and will not use the MQ register.
10986     GCC assumes a generic processor model for scheduling purposes.
10987
10988     `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
10989     `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
10990     PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
10991     types, with an appropriate, generic processor model assumed for
10992     scheduling purposes.
10993
10994     The other options specify a specific processor.  Code generated
10995     under those options will run best on that processor, and may not
10996     run at all on others.
10997
10998     The `-mcpu' options automatically enable or disable the following
10999     options: `-maltivec', `-mfprnd', `-mhard-float', `-mmfcrf',
11000     `-mmultiple', `-mnew-mnemonics', `-mpopcntb', `-mpower',
11001     `-mpower2', `-mpowerpc64', `-mpowerpc-gpopt', `-mpowerpc-gfxopt',
11002     `-mstring', `-mmulhw', `-mdlmzb'.  The particular options set for
11003     any particular CPU will vary between compiler versions, depending
11004     on what setting seems to produce optimal code for that CPU; it
11005     doesn't necessarily reflect the actual hardware's capabilities.  If
11006     you wish to set an individual option to a particular value, you may
11007     specify it after the `-mcpu' option, like `-mcpu=970 -mno-altivec'.
11008
11009     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
11010     or disabled by the `-mcpu' option at present because AIX does not
11011     have full support for these options.  You may still enable or
11012     disable them individually if you're sure it'll work in your
11013     environment.
11014
11015`-mtune=CPU_TYPE'
11016     Set the instruction scheduling parameters for machine type
11017     CPU_TYPE, but do not set the architecture type, register usage, or
11018     choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
11019     for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
11020     specified, the code generated will use the architecture,
11021     registers, and mnemonics set by `-mcpu', but the scheduling
11022     parameters set by `-mtune'.
11023
11024`-mswdiv'
11025`-mno-swdiv'
11026     Generate code to compute division as reciprocal estimate and
11027     iterative refinement, creating opportunities for increased
11028     throughput.  This feature requires: optional PowerPC Graphics
11029     instruction set for single precision and FRE instruction for
11030     double precision, assuming divides cannot generate user-visible
11031     traps, and the domain values not include Infinities, denormals or
11032     zero denominator.
11033
11034`-maltivec'
11035`-mno-altivec'
11036     Generate code that uses (does not use) AltiVec instructions, and
11037     also enable the use of built-in functions that allow more direct
11038     access to the AltiVec instruction set.  You may also need to set
11039     `-mabi=altivec' to adjust the current ABI with AltiVec ABI
11040     enhancements.
11041
11042`-mvrsave'
11043
11044`-mno-vrsave'
11045     Generate VRSAVE instructions when generating AltiVec code.
11046
11047`-msecure-plt'
11048     Generate code that allows ld and ld.so to build executables and
11049     shared libraries with non-exec .plt and .got sections.  This is a
11050     PowerPC 32-bit SYSV ABI option.
11051
11052`-mbss-plt'
11053     Generate code that uses a BSS .plt section that ld.so fills in, and
11054     requires .plt and .got sections that are both writable and
11055     executable.  This is a PowerPC 32-bit SYSV ABI option.
11056
11057`-misel'
11058`-mno-isel'
11059     This switch enables or disables the generation of ISEL
11060     instructions.
11061
11062`-misel=YES/NO'
11063     This switch has been deprecated.  Use `-misel' and `-mno-isel'
11064     instead.
11065
11066`-mspe'
11067`-mno-spe'
11068     This switch enables or disables the generation of SPE simd
11069     instructions.
11070
11071`-mspe=YES/NO'
11072     This option has been deprecated.  Use `-mspe' and `-mno-spe'
11073     instead.
11074
11075`-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
11076`-mfloat-gprs'
11077     This switch enables or disables the generation of floating point
11078     operations on the general purpose registers for architectures that
11079     support it.
11080
11081     The argument YES or SINGLE enables the use of single-precision
11082     floating point operations.
11083
11084     The argument DOUBLE enables the use of single and double-precision
11085     floating point operations.
11086
11087     The argument NO disables floating point operations on the general
11088     purpose registers.
11089
11090     This option is currently only available on the MPC854x.
11091
11092`-m32'
11093`-m64'
11094     Generate code for 32-bit or 64-bit environments of Darwin and SVR4
11095     targets (including GNU/Linux).  The 32-bit environment sets int,
11096     long and pointer to 32 bits and generates code that runs on any
11097     PowerPC variant.  The 64-bit environment sets int to 32 bits and
11098     long and pointer to 64 bits, and generates code for PowerPC64, as
11099     for `-mpowerpc64'.
11100
11101`-mfull-toc'
11102`-mno-fp-in-toc'
11103`-mno-sum-in-toc'
11104`-mminimal-toc'
11105     Modify generation of the TOC (Table Of Contents), which is created
11106     for every executable file.  The `-mfull-toc' option is selected by
11107     default.  In that case, GCC will allocate at least one TOC entry
11108     for each unique non-automatic variable reference in your program.
11109     GCC will also place floating-point constants in the TOC.  However,
11110     only 16,384 entries are available in the TOC.
11111
11112     If you receive a linker error message that saying you have
11113     overflowed the available TOC space, you can reduce the amount of
11114     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
11115     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
11116     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
11117     code to calculate the sum of an address and a constant at run-time
11118     instead of putting that sum into the TOC.  You may specify one or
11119     both of these options.  Each causes GCC to produce very slightly
11120     slower and larger code at the expense of conserving TOC space.
11121
11122     If you still run out of space in the TOC even when you specify
11123     both of these options, specify `-mminimal-toc' instead.  This
11124     option causes GCC to make only one TOC entry for every file.  When
11125     you specify this option, GCC will produce code that is slower and
11126     larger but which uses extremely little TOC space.  You may wish to
11127     use this option only on files that contain less frequently
11128     executed code.
11129
11130`-maix64'
11131`-maix32'
11132     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
11133     64-bit `long' type, and the infrastructure needed to support them.
11134     Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
11135     `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
11136     GCC defaults to `-maix32'.
11137
11138`-mxl-compat'
11139`-mno-xl-compat'
11140     Produce code that conforms more closely to IBM XL compiler
11141     semantics when using AIX-compatible ABI.  Pass floating-point
11142     arguments to prototyped functions beyond the register save area
11143     (RSA) on the stack in addition to argument FPRs.  Do not assume
11144     that most significant double in 128-bit long double value is
11145     properly rounded when comparing values and converting to double.
11146     Use XL symbol names for long double support routines.
11147
11148     The AIX calling convention was extended but not initially
11149     documented to handle an obscure K&R C case of calling a function
11150     that takes the address of its arguments with fewer arguments than
11151     declared.  IBM XL compilers access floating point arguments which
11152     do not fit in the RSA from the stack when a subroutine is compiled
11153     without optimization.  Because always storing floating-point
11154     arguments on the stack is inefficient and rarely needed, this
11155     option is not enabled by default and only is necessary when
11156     calling subroutines compiled by IBM XL compilers without
11157     optimization.
11158
11159`-mpe'
11160     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
11161     application written to use message passing with special startup
11162     code to enable the application to run.  The system must have PE
11163     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
11164     `specs' file must be overridden with the `-specs=' option to
11165     specify the appropriate directory location.  The Parallel
11166     Environment does not support threads, so the `-mpe' option and the
11167     `-pthread' option are incompatible.
11168
11169`-malign-natural'
11170`-malign-power'
11171     On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
11172     `-malign-natural' overrides the ABI-defined alignment of larger
11173     types, such as floating-point doubles, on their natural size-based
11174     boundary.  The option `-malign-power' instructs GCC to follow the
11175     ABI-specified alignment rules.  GCC defaults to the standard
11176     alignment defined in the ABI.
11177
11178     On 64-bit Darwin, natural alignment is the default, and
11179     `-malign-power' is not supported.
11180
11181`-msoft-float'
11182`-mhard-float'
11183     Generate code that does not use (uses) the floating-point register
11184     set.  Software floating point emulation is provided if you use the
11185     `-msoft-float' option, and pass the option to GCC when linking.
11186
11187`-mmultiple'
11188`-mno-multiple'
11189     Generate code that uses (does not use) the load multiple word
11190     instructions and the store multiple word instructions.  These
11191     instructions are generated by default on POWER systems, and not
11192     generated on PowerPC systems.  Do not use `-mmultiple' on little
11193     endian PowerPC systems, since those instructions do not work when
11194     the processor is in little endian mode.  The exceptions are PPC740
11195     and PPC750 which permit the instructions usage in little endian
11196     mode.
11197
11198`-mstring'
11199`-mno-string'
11200     Generate code that uses (does not use) the load string instructions
11201     and the store string word instructions to save multiple registers
11202     and do small block moves.  These instructions are generated by
11203     default on POWER systems, and not generated on PowerPC systems.
11204     Do not use `-mstring' on little endian PowerPC systems, since those
11205     instructions do not work when the processor is in little endian
11206     mode.  The exceptions are PPC740 and PPC750 which permit the
11207     instructions usage in little endian mode.
11208
11209`-mupdate'
11210`-mno-update'
11211     Generate code that uses (does not use) the load or store
11212     instructions that update the base register to the address of the
11213     calculated memory location.  These instructions are generated by
11214     default.  If you use `-mno-update', there is a small window
11215     between the time that the stack pointer is updated and the address
11216     of the previous frame is stored, which means code that walks the
11217     stack frame across interrupts or signals may get corrupted data.
11218
11219`-mfused-madd'
11220`-mno-fused-madd'
11221     Generate code that uses (does not use) the floating point multiply
11222     and accumulate instructions.  These instructions are generated by
11223     default if hardware floating is used.
11224
11225`-mmulhw'
11226`-mno-mulhw'
11227     Generate code that uses (does not use) the half-word multiply and
11228     multiply-accumulate instructions on the IBM 405 and 440 processors.
11229     These instructions are generated by default when targetting those
11230     processors.
11231
11232`-mdlmzb'
11233`-mno-dlmzb'
11234     Generate code that uses (does not use) the string-search `dlmzb'
11235     instruction on the IBM 405 and 440 processors.  This instruction is
11236     generated by default when targetting those processors.
11237
11238`-mno-bit-align'
11239`-mbit-align'
11240     On System V.4 and embedded PowerPC systems do not (do) force
11241     structures and unions that contain bit-fields to be aligned to the
11242     base type of the bit-field.
11243
11244     For example, by default a structure containing nothing but 8
11245     `unsigned' bit-fields of length 1 would be aligned to a 4 byte
11246     boundary and have a size of 4 bytes.  By using `-mno-bit-align',
11247     the structure would be aligned to a 1 byte boundary and be one
11248     byte in size.
11249
11250`-mno-strict-align'
11251`-mstrict-align'
11252     On System V.4 and embedded PowerPC systems do not (do) assume that
11253     unaligned memory references will be handled by the system.
11254
11255`-mrelocatable'
11256`-mno-relocatable'
11257     On embedded PowerPC systems generate code that allows (does not
11258     allow) the program to be relocated to a different address at
11259     runtime.  If you use `-mrelocatable' on any module, all objects
11260     linked together must be compiled with `-mrelocatable' or
11261     `-mrelocatable-lib'.
11262
11263`-mrelocatable-lib'
11264`-mno-relocatable-lib'
11265     On embedded PowerPC systems generate code that allows (does not
11266     allow) the program to be relocated to a different address at
11267     runtime.  Modules compiled with `-mrelocatable-lib' can be linked
11268     with either modules compiled without `-mrelocatable' and
11269     `-mrelocatable-lib' or with modules compiled with the
11270     `-mrelocatable' options.
11271
11272`-mno-toc'
11273`-mtoc'
11274     On System V.4 and embedded PowerPC systems do not (do) assume that
11275     register 2 contains a pointer to a global area pointing to the
11276     addresses used in the program.
11277
11278`-mlittle'
11279`-mlittle-endian'
11280     On System V.4 and embedded PowerPC systems compile code for the
11281     processor in little endian mode.  The `-mlittle-endian' option is
11282     the same as `-mlittle'.
11283
11284`-mbig'
11285`-mbig-endian'
11286     On System V.4 and embedded PowerPC systems compile code for the
11287     processor in big endian mode.  The `-mbig-endian' option is the
11288     same as `-mbig'.
11289
11290`-mdynamic-no-pic'
11291     On Darwin and Mac OS X systems, compile code so that it is not
11292     relocatable, but that its external references are relocatable.  The
11293     resulting code is suitable for applications, but not shared
11294     libraries.
11295
11296`-mprioritize-restricted-insns=PRIORITY'
11297     This option controls the priority that is assigned to
11298     dispatch-slot restricted instructions during the second scheduling
11299     pass.  The argument PRIORITY takes the value 0/1/2 to assign
11300     NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
11301     instructions.
11302
11303`-msched-costly-dep=DEPENDENCE_TYPE'
11304     This option controls which dependences are considered costly by
11305     the target during instruction scheduling.  The argument
11306     DEPENDENCE_TYPE takes one of the following values: NO: no
11307     dependence is costly, ALL: all dependences are costly,
11308     TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
11309     STORE_TO_LOAD: any dependence from store to load is costly,
11310     NUMBER: any dependence which latency >= NUMBER is costly.
11311
11312`-minsert-sched-nops=SCHEME'
11313     This option controls which nop insertion scheme will be used during
11314     the second scheduling pass.  The argument SCHEME takes one of the
11315     following values: NO: Don't insert nops.  PAD: Pad with nops any
11316     dispatch group which has vacant issue slots, according to the
11317     scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
11318     dependent insns into separate groups.  Insert exactly as many nops
11319     as needed to force an insn to a new group, according to the
11320     estimated processor grouping.  NUMBER: Insert nops to force costly
11321     dependent insns into separate groups.  Insert NUMBER nops to force
11322     an insn to a new group.
11323
11324`-mcall-sysv'
11325     On System V.4 and embedded PowerPC systems compile code using
11326     calling conventions that adheres to the March 1995 draft of the
11327     System V Application Binary Interface, PowerPC processor
11328     supplement.  This is the default unless you configured GCC using
11329     `powerpc-*-eabiaix'.
11330
11331`-mcall-sysv-eabi'
11332     Specify both `-mcall-sysv' and `-meabi' options.
11333
11334`-mcall-sysv-noeabi'
11335     Specify both `-mcall-sysv' and `-mno-eabi' options.
11336
11337`-mcall-solaris'
11338     On System V.4 and embedded PowerPC systems compile code for the
11339     Solaris operating system.
11340
11341`-mcall-linux'
11342     On System V.4 and embedded PowerPC systems compile code for the
11343     Linux-based GNU system.
11344
11345`-mcall-gnu'
11346     On System V.4 and embedded PowerPC systems compile code for the
11347     Hurd-based GNU system.
11348
11349`-mcall-netbsd'
11350     On System V.4 and embedded PowerPC systems compile code for the
11351     NetBSD operating system.
11352
11353`-maix-struct-return'
11354     Return all structures in memory (as specified by the AIX ABI).
11355
11356`-msvr4-struct-return'
11357     Return structures smaller than 8 bytes in registers (as specified
11358     by the SVR4 ABI).
11359
11360`-mabi=ABI-TYPE'
11361     Extend the current ABI with a particular extension, or remove such
11362     extension.  Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
11363     IBMLONGDOUBLE, IEEELONGDOUBLE.
11364
11365`-mabi=spe'
11366     Extend the current ABI with SPE ABI extensions.  This does not
11367     change the default ABI, instead it adds the SPE ABI extensions to
11368     the current ABI.
11369
11370`-mabi=no-spe'
11371     Disable Booke SPE ABI extensions for the current ABI.
11372
11373`-mabi=ibmlongdouble'
11374     Change the current ABI to use IBM extended precision long double.
11375     This is a PowerPC 32-bit SYSV ABI option.
11376
11377`-mabi=ieeelongdouble'
11378     Change the current ABI to use IEEE extended precision long double.
11379     This is a PowerPC 32-bit Linux ABI option.
11380
11381`-mprototype'
11382`-mno-prototype'
11383     On System V.4 and embedded PowerPC systems assume that all calls to
11384     variable argument functions are properly prototyped.  Otherwise,
11385     the compiler must insert an instruction before every non
11386     prototyped call to set or clear bit 6 of the condition code
11387     register (CR) to indicate whether floating point values were
11388     passed in the floating point registers in case the function takes
11389     a variable arguments.  With `-mprototype', only calls to
11390     prototyped variable argument functions will set or clear the bit.
11391
11392`-msim'
11393     On embedded PowerPC systems, assume that the startup module is
11394     called `sim-crt0.o' and that the standard C libraries are
11395     `libsim.a' and `libc.a'.  This is the default for
11396     `powerpc-*-eabisim'.  configurations.
11397
11398`-mmvme'
11399     On embedded PowerPC systems, assume that the startup module is
11400     called `crt0.o' and the standard C libraries are `libmvme.a' and
11401     `libc.a'.
11402
11403`-mads'
11404     On embedded PowerPC systems, assume that the startup module is
11405     called `crt0.o' and the standard C libraries are `libads.a' and
11406     `libc.a'.
11407
11408`-myellowknife'
11409     On embedded PowerPC systems, assume that the startup module is
11410     called `crt0.o' and the standard C libraries are `libyk.a' and
11411     `libc.a'.
11412
11413`-mvxworks'
11414     On System V.4 and embedded PowerPC systems, specify that you are
11415     compiling for a VxWorks system.
11416
11417`-mwindiss'
11418     Specify that you are compiling for the WindISS simulation
11419     environment.
11420
11421`-memb'
11422     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
11423     header to indicate that `eabi' extended relocations are used.
11424
11425`-meabi'
11426`-mno-eabi'
11427     On System V.4 and embedded PowerPC systems do (do not) adhere to
11428     the Embedded Applications Binary Interface (eabi) which is a set of
11429     modifications to the System V.4 specifications.  Selecting `-meabi'
11430     means that the stack is aligned to an 8 byte boundary, a function
11431     `__eabi' is called to from `main' to set up the eabi environment,
11432     and the `-msdata' option can use both `r2' and `r13' to point to
11433     two separate small data areas.  Selecting `-mno-eabi' means that
11434     the stack is aligned to a 16 byte boundary, do not call an
11435     initialization function from `main', and the `-msdata' option will
11436     only use `r13' to point to a single small data area.  The `-meabi'
11437     option is on by default if you configured GCC using one of the
11438     `powerpc*-*-eabi*' options.
11439
11440`-msdata=eabi'
11441     On System V.4 and embedded PowerPC systems, put small initialized
11442     `const' global and static data in the `.sdata2' section, which is
11443     pointed to by register `r2'.  Put small initialized non-`const'
11444     global and static data in the `.sdata' section, which is pointed
11445     to by register `r13'.  Put small uninitialized global and static
11446     data in the `.sbss' section, which is adjacent to the `.sdata'
11447     section.  The `-msdata=eabi' option is incompatible with the
11448     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
11449     `-memb' option.
11450
11451`-msdata=sysv'
11452     On System V.4 and embedded PowerPC systems, put small global and
11453     static data in the `.sdata' section, which is pointed to by
11454     register `r13'.  Put small uninitialized global and static data in
11455     the `.sbss' section, which is adjacent to the `.sdata' section.
11456     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
11457     option.
11458
11459`-msdata=default'
11460`-msdata'
11461     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
11462     compile code the same as `-msdata=eabi', otherwise compile code the
11463     same as `-msdata=sysv'.
11464
11465`-msdata-data'
11466     On System V.4 and embedded PowerPC systems, put small global data
11467     in the `.sdata' section.  Put small uninitialized global data in
11468     the `.sbss' section.  Do not use register `r13' to address small
11469     data however.  This is the default behavior unless other `-msdata'
11470     options are used.
11471
11472`-msdata=none'
11473`-mno-sdata'
11474     On embedded PowerPC systems, put all initialized global and static
11475     data in the `.data' section, and all uninitialized data in the
11476     `.bss' section.
11477
11478`-G NUM'
11479     On embedded PowerPC systems, put global and static items less than
11480     or equal to NUM bytes into the small data or bss sections instead
11481     of the normal data or bss section.  By default, NUM is 8.  The `-G
11482     NUM' switch is also passed to the linker.  All modules should be
11483     compiled with the same `-G NUM' value.
11484
11485`-mregnames'
11486`-mno-regnames'
11487     On System V.4 and embedded PowerPC systems do (do not) emit
11488     register names in the assembly language output using symbolic
11489     forms.
11490
11491`-mlongcall'
11492`-mno-longcall'
11493     By default assume that all calls are far away so that a longer more
11494     expensive calling sequence is required.  This is required for calls
11495     further than 32 megabytes (33,554,432 bytes) from the current
11496     location.  A short call will be generated if the compiler knows
11497     the call cannot be that far away.  This setting can be overridden
11498     by the `shortcall' function attribute, or by `#pragma longcall(0)'.
11499
11500     Some linkers are capable of detecting out-of-range calls and
11501     generating glue code on the fly.  On these systems, long calls are
11502     unnecessary and generate slower code.  As of this writing, the AIX
11503     linker can do this, as can the GNU linker for PowerPC/64.  It is
11504     planned to add this feature to the GNU linker for 32-bit PowerPC
11505     systems as well.
11506
11507     On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
11508     callee, L42", plus a "branch island" (glue code).  The two target
11509     addresses represent the callee and the "branch island".  The
11510     Darwin/PPC linker will prefer the first address and generate a "bl
11511     callee" if the PPC "bl" instruction will reach the callee directly;
11512     otherwise, the linker will generate "bl L42" to call the "branch
11513     island".  The "branch island" is appended to the body of the
11514     calling function; it computes the full 32-bit address of the callee
11515     and jumps to it.
11516
11517     On Mach-O (Darwin) systems, this option directs the compiler emit
11518     to the glue for every direct call, and the Darwin linker decides
11519     whether to use or discard it.
11520
11521     In the future, we may cause GCC to ignore all longcall
11522     specifications when the linker is known to generate glue.
11523
11524`-pthread'
11525     Adds support for multithreading with the "pthreads" library.  This
11526     option sets flags for both the preprocessor and linker.
11527
11528
11529
11530File: gcc.info,  Node: S/390 and zSeries Options,  Next: Score Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
11531
115323.17.28 S/390 and zSeries Options
11533---------------------------------
11534
11535These are the `-m' options defined for the S/390 and zSeries
11536architecture.
11537
11538`-mhard-float'
11539`-msoft-float'
11540     Use (do not use) the hardware floating-point instructions and
11541     registers for floating-point operations.  When `-msoft-float' is
11542     specified, functions in `libgcc.a' will be used to perform
11543     floating-point operations.  When `-mhard-float' is specified, the
11544     compiler generates IEEE floating-point instructions.  This is the
11545     default.
11546
11547`-mlong-double-64'
11548`-mlong-double-128'
11549     These switches control the size of `long double' type. A size of
11550     64bit makes the `long double' type equivalent to the `double'
11551     type. This is the default.
11552
11553`-mbackchain'
11554`-mno-backchain'
11555     Store (do not store) the address of the caller's frame as
11556     backchain pointer into the callee's stack frame.  A backchain may
11557     be needed to allow debugging using tools that do not understand
11558     DWARF-2 call frame information.  When `-mno-packed-stack' is in
11559     effect, the backchain pointer is stored at the bottom of the stack
11560     frame; when `-mpacked-stack' is in effect, the backchain is placed
11561     into the topmost word of the 96/160 byte register save area.
11562
11563     In general, code compiled with `-mbackchain' is call-compatible
11564     with code compiled with `-mmo-backchain'; however, use of the
11565     backchain for debugging purposes usually requires that the whole
11566     binary is built with `-mbackchain'.  Note that the combination of
11567     `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
11568     supported.  In order to build a linux kernel use `-msoft-float'.
11569
11570     The default is to not maintain the backchain.
11571
11572`-mpacked-stack'
11573
11574`-mno-packed-stack'
11575     Use (do not use) the packed stack layout.  When
11576     `-mno-packed-stack' is specified, the compiler uses the all fields
11577     of the 96/160 byte register save area only for their default
11578     purpose; unused fields still take up stack space.  When
11579     `-mpacked-stack' is specified, register save slots are densely
11580     packed at the top of the register save area; unused space is
11581     reused for other purposes, allowing for more efficient use of the
11582     available stack space.  However, when `-mbackchain' is also in
11583     effect, the topmost word of the save area is always used to store
11584     the backchain, and the return address register is always saved two
11585     words below the backchain.
11586
11587     As long as the stack frame backchain is not used, code generated
11588     with `-mpacked-stack' is call-compatible with code generated with
11589     `-mno-packed-stack'.  Note that some non-FSF releases of GCC 2.95
11590     for S/390 or zSeries generated code that uses the stack frame
11591     backchain at run time, not just for debugging purposes.  Such code
11592     is not call-compatible with code compiled with `-mpacked-stack'.
11593     Also, note that the combination of `-mbackchain', `-mpacked-stack'
11594     and `-mhard-float' is not supported.  In order to build a linux
11595     kernel use `-msoft-float'.
11596
11597     The default is to not use the packed stack layout.
11598
11599`-msmall-exec'
11600`-mno-small-exec'
11601     Generate (or do not generate) code using the `bras' instruction to
11602     do subroutine calls.  This only works reliably if the total
11603     executable size does not exceed 64k.  The default is to use the
11604     `basr' instruction instead, which does not have this limitation.
11605
11606`-m64'
11607`-m31'
11608     When `-m31' is specified, generate code compliant to the GNU/Linux
11609     for S/390 ABI.  When `-m64' is specified, generate code compliant
11610     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
11611     to generate 64-bit instructions.  For the `s390' targets, the
11612     default is `-m31', while the `s390x' targets default to `-m64'.
11613
11614`-mzarch'
11615`-mesa'
11616     When `-mzarch' is specified, generate code using the instructions
11617     available on z/Architecture.  When `-mesa' is specified, generate
11618     code using the instructions available on ESA/390.  Note that
11619     `-mesa' is not possible with `-m64'.  When generating code
11620     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
11621     When generating code compliant to the GNU/Linux for zSeries ABI,
11622     the default is `-mzarch'.
11623
11624`-mmvcle'
11625`-mno-mvcle'
11626     Generate (or do not generate) code using the `mvcle' instruction
11627     to perform block moves.  When `-mno-mvcle' is specified, use a
11628     `mvc' loop instead.  This is the default unless optimizing for
11629     size.
11630
11631`-mdebug'
11632`-mno-debug'
11633     Print (or do not print) additional debug information when
11634     compiling.  The default is to not print debug information.
11635
11636`-march=CPU-TYPE'
11637     Generate code that will run on CPU-TYPE, which is the name of a
11638     system representing a certain processor type.  Possible values for
11639     CPU-TYPE are `g5', `g6', `z900', and `z990'.  When generating code
11640     using the instructions available on z/Architecture, the default is
11641     `-march=z900'.  Otherwise, the default is `-march=g5'.
11642
11643`-mtune=CPU-TYPE'
11644     Tune to CPU-TYPE everything applicable about the generated code,
11645     except for the ABI and the set of available instructions.  The
11646     list of CPU-TYPE values is the same as for `-march'.  The default
11647     is the value used for `-march'.
11648
11649`-mtpf-trace'
11650`-mno-tpf-trace'
11651     Generate code that adds (does not add) in TPF OS specific branches
11652     to trace routines in the operating system.  This option is off by
11653     default, even when compiling for the TPF OS.
11654
11655`-mfused-madd'
11656`-mno-fused-madd'
11657     Generate code that uses (does not use) the floating point multiply
11658     and accumulate instructions.  These instructions are generated by
11659     default if hardware floating point is used.
11660
11661`-mwarn-framesize=FRAMESIZE'
11662     Emit a warning if the current function exceeds the given frame
11663     size.  Because this is a compile time check it doesn't need to be
11664     a real problem when the program runs.  It is intended to identify
11665     functions which most probably cause a stack overflow.  It is
11666     useful to be used in an environment with limited stack size e.g.
11667     the linux kernel.
11668
11669`-mwarn-dynamicstack'
11670     Emit a warning if the function calls alloca or uses dynamically
11671     sized arrays.  This is generally a bad idea with a limited stack
11672     size.
11673
11674`-mstack-guard=STACK-GUARD'
11675
11676`-mstack-size=STACK-SIZE'
11677     These arguments always have to be used in conjunction.  If they
11678     are present the s390 back end emits additional instructions in the
11679     function prologue which trigger a trap if the stack size is
11680     STACK-GUARD bytes above the STACK-SIZE (remember that the stack on
11681     s390 grows downward).  These options are intended to be used to
11682     help debugging stack overflow problems.  The additionally emitted
11683     code causes only little overhead and hence can also be used in
11684     production like systems without greater performance degradation.
11685     The given values have to be exact powers of 2 and STACK-SIZE has
11686     to be greater than STACK-GUARD without exceeding 64k.  In order to
11687     be efficient the extra code makes the assumption that the stack
11688     starts at an address aligned to the value given by STACK-SIZE.
11689
11690
11691File: gcc.info,  Node: Score Options,  Next: SH Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
11692
116933.17.29 Score Options
11694---------------------
11695
11696These options are defined for Score implementations:
11697
11698`-meb'
11699     Compile code for big endian mode.  This is the default.
11700
11701`-mel'
11702     Compile code for little endian mode.
11703
11704`-mnhwloop'
11705     Disable generate bcnz instruction.
11706
11707`-muls'
11708     Enable generate unaligned load and store instruction.
11709
11710`-mmac'
11711     Enable the use of multiply-accumulate instructions. Disabled by
11712     default.
11713
11714`-mscore5'
11715     Specify the SCORE5 as the target architecture.
11716
11717`-mscore5u'
11718     Specify the SCORE5U of the target architecture.
11719
11720`-mscore7'
11721     Specify the SCORE7 as the target architecture. This is the default.
11722
11723`-mscore7d'
11724     Specify the SCORE7D as the target architecture.
11725
11726
11727File: gcc.info,  Node: SH Options,  Next: SPARC Options,  Prev: Score Options,  Up: Submodel Options
11728
117293.17.30 SH Options
11730------------------
11731
11732These `-m' options are defined for the SH implementations:
11733
11734`-m1'
11735     Generate code for the SH1.
11736
11737`-m2'
11738     Generate code for the SH2.
11739
11740`-m2e'
11741     Generate code for the SH2e.
11742
11743`-m3'
11744     Generate code for the SH3.
11745
11746`-m3e'
11747     Generate code for the SH3e.
11748
11749`-m4-nofpu'
11750     Generate code for the SH4 without a floating-point unit.
11751
11752`-m4-single-only'
11753     Generate code for the SH4 with a floating-point unit that only
11754     supports single-precision arithmetic.
11755
11756`-m4-single'
11757     Generate code for the SH4 assuming the floating-point unit is in
11758     single-precision mode by default.
11759
11760`-m4'
11761     Generate code for the SH4.
11762
11763`-m4a-nofpu'
11764     Generate code for the SH4al-dsp, or for a SH4a in such a way that
11765     the floating-point unit is not used.
11766
11767`-m4a-single-only'
11768     Generate code for the SH4a, in such a way that no double-precision
11769     floating point operations are used.
11770
11771`-m4a-single'
11772     Generate code for the SH4a assuming the floating-point unit is in
11773     single-precision mode by default.
11774
11775`-m4a'
11776     Generate code for the SH4a.
11777
11778`-m4al'
11779     Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
11780     the assembler.  GCC doesn't generate any DSP instructions at the
11781     moment.
11782
11783`-mb'
11784     Compile code for the processor in big endian mode.
11785
11786`-ml'
11787     Compile code for the processor in little endian mode.
11788
11789`-mdalign'
11790     Align doubles at 64-bit boundaries.  Note that this changes the
11791     calling conventions, and thus some functions from the standard C
11792     library will not work unless you recompile it first with
11793     `-mdalign'.
11794
11795`-mrelax'
11796     Shorten some address references at link time, when possible; uses
11797     the linker option `-relax'.
11798
11799`-mbigtable'
11800     Use 32-bit offsets in `switch' tables.  The default is to use
11801     16-bit offsets.
11802
11803`-mfmovd'
11804     Enable the use of the instruction `fmovd'.
11805
11806`-mhitachi'
11807     Comply with the calling conventions defined by Renesas.
11808
11809`-mrenesas'
11810     Comply with the calling conventions defined by Renesas.
11811
11812`-mno-renesas'
11813     Comply with the calling conventions defined for GCC before the
11814     Renesas conventions were available.  This option is the default
11815     for all targets of the SH toolchain except for `sh-symbianelf'.
11816
11817`-mnomacsave'
11818     Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
11819     given.
11820
11821`-mieee'
11822     Increase IEEE-compliance of floating-point code.  At the moment,
11823     this is equivalent to `-fno-finite-math-only'.  When generating 16
11824     bit SH opcodes, getting IEEE-conforming results for comparisons of
11825     NANs / infinities incurs extra overhead in every floating point
11826     comparison, therefore the default is set to `-ffinite-math-only'.
11827
11828`-misize'
11829     Dump instruction size and location in the assembly code.
11830
11831`-mpadstruct'
11832     This option is deprecated.  It pads structures to multiple of 4
11833     bytes, which is incompatible with the SH ABI.
11834
11835`-mspace'
11836     Optimize for space instead of speed.  Implied by `-Os'.
11837
11838`-mprefergot'
11839     When generating position-independent code, emit function calls
11840     using the Global Offset Table instead of the Procedure Linkage
11841     Table.
11842
11843`-musermode'
11844     Generate a library function call to invalidate instruction cache
11845     entries, after fixing up a trampoline.  This library function call
11846     doesn't assume it can write to the whole memory address space.
11847     This is the default when the target is `sh-*-linux*'.
11848
11849`-multcost=NUMBER'
11850     Set the cost to assume for a multiply insn.
11851
11852`-mdiv=STRATEGY'
11853     Set the division strategy to use for SHmedia code.  STRATEGY must
11854     be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
11855     inv:call, inv:call2, inv:fp .  "fp" performs the operation in
11856     floating point.  This has a very high latency, but needs only a
11857     few instructions, so it might be a good choice if your code has
11858     enough easily exploitable ILP to allow the compiler to schedule
11859     the floating point instructions together with other instructions.
11860     Division by zero causes a floating point exception.  "inv" uses
11861     integer operations to calculate the inverse of the divisor, and
11862     then multiplies the dividend with the inverse.  This strategy
11863     allows cse and hoisting of the inverse calculation.  Division by
11864     zero calculates an unspecified result, but does not trap.
11865     "inv:minlat" is a variant of "inv" where if no cse / hoisting
11866     opportunities have been found, or if the entire operation has been
11867     hoisted to the same place, the last stages of the inverse
11868     calculation are intertwined with the final multiply to reduce the
11869     overall latency, at the expense of using a few more instructions,
11870     and thus offering fewer scheduling opportunities with other code.
11871     "call" calls a library function that usually implements the
11872     inv:minlat strategy.  This gives high code density for
11873     m5-*media-nofpu compilations.  "call2" uses a different entry
11874     point of the same library function, where it assumes that a
11875     pointer to a lookup table has already been set up, which exposes
11876     the pointer load to cse / code hoisting optimizations.
11877     "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
11878     for initial code generation, but if the code stays unoptimized,
11879     revert to the "call", "call2", or "fp" strategies, respectively.
11880     Note that the potentially-trapping side effect of division by zero
11881     is carried by a separate instruction, so it is possible that all
11882     the integer instructions are hoisted out, but the marker for the
11883     side effect stays where it is.  A recombination to fp operations
11884     or a call is not possible in that case.  "inv20u" and "inv20l" are
11885     variants of the "inv:minlat" strategy.  In the case that the
11886     inverse calculation was nor separated from the multiply, they speed
11887     up division where the dividend fits into 20 bits (plus sign where
11888     applicable), by inserting a test to skip a number of operations in
11889     this case; this test slows down the case of larger dividends.
11890     inv20u assumes the case of a such a small dividend to be unlikely,
11891     and inv20l assumes it to be likely.
11892
11893`-mdivsi3_libfunc=NAME'
11894     Set the name of the library function used for 32 bit signed
11895     division to NAME.  This only affect the name used in the call and
11896     inv:call division strategies, and the compiler will still expect
11897     the same sets of input/output/clobbered registers as if this
11898     option was not present.
11899
11900`-madjust-unroll'
11901     Throttle unrolling to avoid thrashing target registers.  This
11902     option only has an effect if the gcc code base supports the
11903     TARGET_ADJUST_UNROLL_MAX target hook.
11904
11905`-mindexed-addressing'
11906     Enable the use of the indexed addressing mode for
11907     SHmedia32/SHcompact.  This is only safe if the hardware and/or OS
11908     implement 32 bit wrap-around semantics for the indexed addressing
11909     mode.  The architecture allows the implementation of processors
11910     with 64 bit MMU, which the OS could use to get 32 bit addressing,
11911     but since no current hardware implementation supports this or any
11912     other way to make the indexed addressing mode safe to use in the
11913     32 bit ABI, the default is -mno-indexed-addressing.
11914
11915`-mgettrcost=NUMBER'
11916     Set the cost assumed for the gettr instruction to NUMBER.  The
11917     default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
11918
11919`-mpt-fixed'
11920     Assume pt* instructions won't trap.  This will generally generate
11921     better scheduled code, but is unsafe on current hardware.  The
11922     current architecture definition says that ptabs and ptrel trap
11923     when the target anded with 3 is 3.  This has the unintentional
11924     effect of making it unsafe to schedule ptabs / ptrel before a
11925     branch, or hoist it out of a loop.  For example,
11926     __do_global_ctors, a part of libgcc that runs constructors at
11927     program startup, calls functions in a list which is delimited by
11928     -1.  With the -mpt-fixed option, the ptabs will be done before
11929     testing against -1.  That means that all the constructors will be
11930     run a bit quicker, but when the loop comes to the end of the list,
11931     the program crashes because ptabs loads -1 into a target register.
11932     Since this option is unsafe for any hardware implementing the
11933     current architecture specification, the default is -mno-pt-fixed.
11934     Unless the user specifies a specific cost with `-mgettrcost',
11935     -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
11936     allocation using target registers for storing ordinary integers.
11937
11938`-minvalid-symbols'
11939     Assume symbols might be invalid.  Ordinary function symbols
11940     generated by the compiler will always be valid to load with
11941     movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
11942     linker tricks it is possible to generate symbols that will cause
11943     ptabs / ptrel to trap.  This option is only meaningful when
11944     `-mno-pt-fixed' is in effect.  It will then prevent
11945     cross-basic-block cse, hoisting and most scheduling of symbol
11946     loads.  The default is `-mno-invalid-symbols'.
11947
11948
11949File: gcc.info,  Node: SPARC Options,  Next: System V Options,  Prev: SH Options,  Up: Submodel Options
11950
119513.17.31 SPARC Options
11952---------------------
11953
11954These `-m' options are supported on the SPARC:
11955
11956`-mno-app-regs'
11957`-mapp-regs'
11958     Specify `-mapp-regs' to generate output using the global registers
11959     2 through 4, which the SPARC SVR4 ABI reserves for applications.
11960     This is the default.
11961
11962     To be fully SVR4 ABI compliant at the cost of some performance
11963     loss, specify `-mno-app-regs'.  You should compile libraries and
11964     system software with this option.
11965
11966`-mfpu'
11967`-mhard-float'
11968     Generate output containing floating point instructions.  This is
11969     the default.
11970
11971`-mno-fpu'
11972`-msoft-float'
11973     Generate output containing library calls for floating point.
11974     *Warning:* the requisite libraries are not available for all SPARC
11975     targets.  Normally the facilities of the machine's usual C
11976     compiler are used, but this cannot be done directly in
11977     cross-compilation.  You must make your own arrangements to provide
11978     suitable library functions for cross-compilation.  The embedded
11979     targets `sparc-*-aout' and `sparclite-*-*' do provide software
11980     floating point support.
11981
11982     `-msoft-float' changes the calling convention in the output file;
11983     therefore, it is only useful if you compile _all_ of a program with
11984     this option.  In particular, you need to compile `libgcc.a', the
11985     library that comes with GCC, with `-msoft-float' in order for this
11986     to work.
11987
11988`-mhard-quad-float'
11989     Generate output containing quad-word (long double) floating point
11990     instructions.
11991
11992`-msoft-quad-float'
11993     Generate output containing library calls for quad-word (long
11994     double) floating point instructions.  The functions called are
11995     those specified in the SPARC ABI.  This is the default.
11996
11997     As of this writing, there are no SPARC implementations that have
11998     hardware support for the quad-word floating point instructions.
11999     They all invoke a trap handler for one of these instructions, and
12000     then the trap handler emulates the effect of the instruction.
12001     Because of the trap handler overhead, this is much slower than
12002     calling the ABI library routines.  Thus the `-msoft-quad-float'
12003     option is the default.
12004
12005`-mno-unaligned-doubles'
12006`-munaligned-doubles'
12007     Assume that doubles have 8 byte alignment.  This is the default.
12008
12009     With `-munaligned-doubles', GCC assumes that doubles have 8 byte
12010     alignment only if they are contained in another type, or if they
12011     have an absolute address.  Otherwise, it assumes they have 4 byte
12012     alignment.  Specifying this option avoids some rare compatibility
12013     problems with code generated by other compilers.  It is not the
12014     default because it results in a performance loss, especially for
12015     floating point code.
12016
12017`-mno-faster-structs'
12018`-mfaster-structs'
12019     With `-mfaster-structs', the compiler assumes that structures
12020     should have 8 byte alignment.  This enables the use of pairs of
12021     `ldd' and `std' instructions for copies in structure assignment,
12022     in place of twice as many `ld' and `st' pairs.  However, the use
12023     of this changed alignment directly violates the SPARC ABI.  Thus,
12024     it's intended only for use on targets where the developer
12025     acknowledges that their resulting code will not be directly in
12026     line with the rules of the ABI.
12027
12028`-mimpure-text'
12029     `-mimpure-text', used in addition to `-shared', tells the compiler
12030     to not pass `-z text' to the linker when linking a shared object.
12031     Using this option, you can link position-dependent code into a
12032     shared object.
12033
12034     `-mimpure-text' suppresses the "relocations remain against
12035     allocatable but non-writable sections" linker error message.
12036     However, the necessary relocations will trigger copy-on-write, and
12037     the shared object is not actually shared across processes.
12038     Instead of using `-mimpure-text', you should compile all source
12039     code with `-fpic' or `-fPIC'.
12040
12041     This option is only available on SunOS and Solaris.
12042
12043`-mcpu=CPU_TYPE'
12044     Set the instruction set, register set, and instruction scheduling
12045     parameters for machine type CPU_TYPE.  Supported values for
12046     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
12047     `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
12048     `tsc701', `v9', `ultrasparc', `ultrasparc3', and `niagara'.
12049
12050     Default instruction scheduling parameters are used for values that
12051     select an architecture and not an implementation.  These are `v7',
12052     `v8', `sparclite', `sparclet', `v9'.
12053
12054     Here is a list of each supported architecture and their supported
12055     implementations.
12056
12057              v7:             cypress
12058              v8:             supersparc, hypersparc
12059              sparclite:      f930, f934, sparclite86x
12060              sparclet:       tsc701
12061              v9:             ultrasparc, ultrasparc3, niagara
12062
12063     By default (unless configured otherwise), GCC generates code for
12064     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
12065     the compiler additionally optimizes it for the Cypress CY7C602
12066     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
12067     also appropriate for the older SPARCStation 1, 2, IPX etc.
12068
12069     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
12070     architecture.  The only difference from V7 code is that the
12071     compiler emits the integer multiply and integer divide
12072     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
12073     `-mcpu=supersparc', the compiler additionally optimizes it for the
12074     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
12075     series.
12076
12077     With `-mcpu=sparclite', GCC generates code for the SPARClite
12078     variant of the SPARC architecture.  This adds the integer
12079     multiply, integer divide step and scan (`ffs') instructions which
12080     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
12081     compiler additionally optimizes it for the Fujitsu MB86930 chip,
12082     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
12083     the compiler additionally optimizes it for the Fujitsu MB86934
12084     chip, which is the more recent SPARClite with FPU.
12085
12086     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
12087     of the SPARC architecture.  This adds the integer multiply,
12088     multiply/accumulate, integer divide step and scan (`ffs')
12089     instructions which exist in SPARClet but not in SPARC-V7.  With
12090     `-mcpu=tsc701', the compiler additionally optimizes it for the
12091     TEMIC SPARClet chip.
12092
12093     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
12094     architecture.  This adds 64-bit integer and floating-point move
12095     instructions, 3 additional floating-point condition code registers
12096     and conditional move instructions.  With `-mcpu=ultrasparc', the
12097     compiler additionally optimizes it for the Sun UltraSPARC I/II/IIi
12098     chips.  With `-mcpu=ultrasparc3', the compiler additionally
12099     optimizes it for the Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+
12100     chips.  With `-mcpu=niagara', the compiler additionally optimizes
12101     it for Sun UltraSPARC T1 chips.
12102
12103`-mtune=CPU_TYPE'
12104     Set the instruction scheduling parameters for machine type
12105     CPU_TYPE, but do not set the instruction set or register set that
12106     the option `-mcpu=CPU_TYPE' would.
12107
12108     The same values for `-mcpu=CPU_TYPE' can be used for
12109     `-mtune=CPU_TYPE', but the only useful values are those that
12110     select a particular cpu implementation.  Those are `cypress',
12111     `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
12112     `tsc701', `ultrasparc', `ultrasparc3', and `niagara'.
12113
12114`-mv8plus'
12115`-mno-v8plus'
12116     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
12117     difference from the V8 ABI is that the global and out registers are
12118     considered 64-bit wide.  This is enabled by default on Solaris in
12119     32-bit mode for all SPARC-V9 processors.
12120
12121`-mvis'
12122`-mno-vis'
12123     With `-mvis', GCC generates code that takes advantage of the
12124     UltraSPARC Visual Instruction Set extensions.  The default is
12125     `-mno-vis'.
12126
12127 These `-m' options are supported in addition to the above on SPARC-V9
12128processors in 64-bit environments:
12129
12130`-mlittle-endian'
12131     Generate code for a processor running in little-endian mode.  It
12132     is only available for a few configurations and most notably not on
12133     Solaris and Linux.
12134
12135`-m32'
12136`-m64'
12137     Generate code for a 32-bit or 64-bit environment.  The 32-bit
12138     environment sets int, long and pointer to 32 bits.  The 64-bit
12139     environment sets int to 32 bits and long and pointer to 64 bits.
12140
12141`-mcmodel=medlow'
12142     Generate code for the Medium/Low code model: 64-bit addresses,
12143     programs must be linked in the low 32 bits of memory.  Programs
12144     can be statically or dynamically linked.
12145
12146`-mcmodel=medmid'
12147     Generate code for the Medium/Middle code model: 64-bit addresses,
12148     programs must be linked in the low 44 bits of memory, the text and
12149     data segments must be less than 2GB in size and the data segment
12150     must be located within 2GB of the text segment.
12151
12152`-mcmodel=medany'
12153     Generate code for the Medium/Anywhere code model: 64-bit
12154     addresses, programs may be linked anywhere in memory, the text and
12155     data segments must be less than 2GB in size and the data segment
12156     must be located within 2GB of the text segment.
12157
12158`-mcmodel=embmedany'
12159     Generate code for the Medium/Anywhere code model for embedded
12160     systems: 64-bit addresses, the text and data segments must be less
12161     than 2GB in size, both starting anywhere in memory (determined at
12162     link time).  The global register %g4 points to the base of the
12163     data segment.  Programs are statically linked and PIC is not
12164     supported.
12165
12166`-mstack-bias'
12167`-mno-stack-bias'
12168     With `-mstack-bias', GCC assumes that the stack pointer, and frame
12169     pointer if present, are offset by -2047 which must be added back
12170     when making stack frame references.  This is the default in 64-bit
12171     mode.  Otherwise, assume no such offset is present.
12172
12173 These switches are supported in addition to the above on Solaris:
12174
12175`-threads'
12176     Add support for multithreading using the Solaris threads library.
12177     This option sets flags for both the preprocessor and linker.  This
12178     option does not affect the thread safety of object code produced
12179     by the compiler or that of libraries supplied with it.
12180
12181`-pthreads'
12182     Add support for multithreading using the POSIX threads library.
12183     This option sets flags for both the preprocessor and linker.  This
12184     option does not affect the thread safety of object code produced
12185     by the compiler or that of libraries supplied with it.
12186
12187`-pthread'
12188     This is a synonym for `-pthreads'.
12189
12190
12191File: gcc.info,  Node: System V Options,  Next: TMS320C3x/C4x Options,  Prev: SPARC Options,  Up: Submodel Options
12192
121933.17.32 Options for System V
12194----------------------------
12195
12196These additional options are available on System V Release 4 for
12197compatibility with other compilers on those systems:
12198
12199`-G'
12200     Create a shared object.  It is recommended that `-symbolic' or
12201     `-shared' be used instead.
12202
12203`-Qy'
12204     Identify the versions of each tool used by the compiler, in a
12205     `.ident' assembler directive in the output.
12206
12207`-Qn'
12208     Refrain from adding `.ident' directives to the output file (this is
12209     the default).
12210
12211`-YP,DIRS'
12212     Search the directories DIRS, and no others, for libraries
12213     specified with `-l'.
12214
12215`-Ym,DIR'
12216     Look in the directory DIR to find the M4 preprocessor.  The
12217     assembler uses this option.
12218
12219
12220File: gcc.info,  Node: TMS320C3x/C4x Options,  Next: V850 Options,  Prev: System V Options,  Up: Submodel Options
12221
122223.17.33 TMS320C3x/C4x Options
12223-----------------------------
12224
12225These `-m' options are defined for TMS320C3x/C4x implementations:
12226
12227`-mcpu=CPU_TYPE'
12228     Set the instruction set, register set, and instruction scheduling
12229     parameters for machine type CPU_TYPE.  Supported values for
12230     CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'.  The default
12231     is `c40' to generate code for the TMS320C40.
12232
12233`-mbig-memory'
12234`-mbig'
12235`-msmall-memory'
12236`-msmall'
12237     Generates code for the big or small memory model.  The small memory
12238     model assumed that all data fits into one 64K word page.  At
12239     run-time the data page (DP) register must be set to point to the
12240     64K page containing the .bss and .data program sections.  The big
12241     memory model is the default and requires reloading of the DP
12242     register for every direct memory access.
12243
12244`-mbk'
12245`-mno-bk'
12246     Allow (disallow) allocation of general integer operands into the
12247     block count register BK.
12248
12249`-mdb'
12250`-mno-db'
12251     Enable (disable) generation of code using decrement and branch,
12252     DBcond(D), instructions.  This is enabled by default for the C4x.
12253     To be on the safe side, this is disabled for the C3x, since the
12254     maximum iteration count on the C3x is 2^23 + 1 (but who iterates
12255     loops more than 2^23 times on the C3x?).  Note that GCC will try
12256     to reverse a loop so that it can utilize the decrement and branch
12257     instruction, but will give up if there is more than one memory
12258     reference in the loop.  Thus a loop where the loop counter is
12259     decremented can generate slightly more efficient code, in cases
12260     where the RPTB instruction cannot be utilized.
12261
12262`-mdp-isr-reload'
12263`-mparanoid'
12264     Force the DP register to be saved on entry to an interrupt service
12265     routine (ISR), reloaded to point to the data section, and restored
12266     on exit from the ISR.  This should not be required unless someone
12267     has violated the small memory model by modifying the DP register,
12268     say within an object library.
12269
12270`-mmpyi'
12271`-mno-mpyi'
12272     For the C3x use the 24-bit MPYI instruction for integer multiplies
12273     instead of a library call to guarantee 32-bit results.  Note that
12274     if one of the operands is a constant, then the multiplication will
12275     be performed using shifts and adds.  If the `-mmpyi' option is not
12276     specified for the C3x, then squaring operations are performed
12277     inline instead of a library call.
12278
12279`-mfast-fix'
12280`-mno-fast-fix'
12281     The C3x/C4x FIX instruction to convert a floating point value to an
12282     integer value chooses the nearest integer less than or equal to the
12283     floating point value rather than to the nearest integer.  Thus if
12284     the floating point number is negative, the result will be
12285     incorrectly truncated an additional code is necessary to detect
12286     and correct this case.  This option can be used to disable
12287     generation of the additional code required to correct the result.
12288
12289`-mrptb'
12290`-mno-rptb'
12291     Enable (disable) generation of repeat block sequences using the
12292     RPTB instruction for zero overhead looping.  The RPTB construct is
12293     only used for innermost loops that do not call functions or jump
12294     across the loop boundaries.  There is no advantage having nested
12295     RPTB loops due to the overhead required to save and restore the
12296     RC, RS, and RE registers.  This is enabled by default with `-O2'.
12297
12298`-mrpts=COUNT'
12299`-mno-rpts'
12300     Enable (disable) the use of the single instruction repeat
12301     instruction RPTS.  If a repeat block contains a single
12302     instruction, and the loop count can be guaranteed to be less than
12303     the value COUNT, GCC will emit a RPTS instruction instead of a
12304     RPTB.  If no value is specified, then a RPTS will be emitted even
12305     if the loop count cannot be determined at compile time.  Note that
12306     the repeated instruction following RPTS does not have to be
12307     reloaded from memory each iteration, thus freeing up the CPU buses
12308     for operands.  However, since interrupts are blocked by this
12309     instruction, it is disabled by default.
12310
12311`-mloop-unsigned'
12312`-mno-loop-unsigned'
12313     The maximum iteration count when using RPTS and RPTB (and DB on
12314     the C40) is 2^31 + 1 since these instructions test if the
12315     iteration count is negative to terminate the loop.  If the
12316     iteration count is unsigned there is a possibility than the 2^31 +
12317     1 maximum iteration count may be exceeded.  This switch allows an
12318     unsigned iteration count.
12319
12320`-mti'
12321     Try to emit an assembler syntax that the TI assembler (asm30) is
12322     happy with.  This also enforces compatibility with the API
12323     employed by the TI C3x C compiler.  For example, long doubles are
12324     passed as structures rather than in floating point registers.
12325
12326`-mregparm'
12327`-mmemparm'
12328     Generate code that uses registers (stack) for passing arguments to
12329     functions.  By default, arguments are passed in registers where
12330     possible rather than by pushing arguments on to the stack.
12331
12332`-mparallel-insns'
12333`-mno-parallel-insns'
12334     Allow the generation of parallel instructions.  This is enabled by
12335     default with `-O2'.
12336
12337`-mparallel-mpy'
12338`-mno-parallel-mpy'
12339     Allow the generation of MPY||ADD and MPY||SUB parallel
12340     instructions, provided `-mparallel-insns' is also specified.
12341     These instructions have tight register constraints which can
12342     pessimize the code generation of large functions.
12343
12344
12345
12346File: gcc.info,  Node: V850 Options,  Next: VAX Options,  Prev: TMS320C3x/C4x Options,  Up: Submodel Options
12347
123483.17.34 V850 Options
12349--------------------
12350
12351These `-m' options are defined for V850 implementations:
12352
12353`-mlong-calls'
12354`-mno-long-calls'
12355     Treat all calls as being far away (near).  If calls are assumed to
12356     be far away, the compiler will always load the functions address
12357     up into a register, and call indirect through the pointer.
12358
12359`-mno-ep'
12360`-mep'
12361     Do not optimize (do optimize) basic blocks that use the same index
12362     pointer 4 or more times to copy pointer into the `ep' register, and
12363     use the shorter `sld' and `sst' instructions.  The `-mep' option
12364     is on by default if you optimize.
12365
12366`-mno-prolog-function'
12367`-mprolog-function'
12368     Do not use (do use) external functions to save and restore
12369     registers at the prologue and epilogue of a function.  The
12370     external functions are slower, but use less code space if more
12371     than one function saves the same number of registers.  The
12372     `-mprolog-function' option is on by default if you optimize.
12373
12374`-mspace'
12375     Try to make the code as small as possible.  At present, this just
12376     turns on the `-mep' and `-mprolog-function' options.
12377
12378`-mtda=N'
12379     Put static or global variables whose size is N bytes or less into
12380     the tiny data area that register `ep' points to.  The tiny data
12381     area can hold up to 256 bytes in total (128 bytes for byte
12382     references).
12383
12384`-msda=N'
12385     Put static or global variables whose size is N bytes or less into
12386     the small data area that register `gp' points to.  The small data
12387     area can hold up to 64 kilobytes.
12388
12389`-mzda=N'
12390     Put static or global variables whose size is N bytes or less into
12391     the first 32 kilobytes of memory.
12392
12393`-mv850'
12394     Specify that the target processor is the V850.
12395
12396`-mbig-switch'
12397     Generate code suitable for big switch tables.  Use this option
12398     only if the assembler/linker complain about out of range branches
12399     within a switch table.
12400
12401`-mapp-regs'
12402     This option will cause r2 and r5 to be used in the code generated
12403     by the compiler.  This setting is the default.
12404
12405`-mno-app-regs'
12406     This option will cause r2 and r5 to be treated as fixed registers.
12407
12408`-mv850e1'
12409     Specify that the target processor is the V850E1.  The preprocessor
12410     constants `__v850e1__' and `__v850e__' will be defined if this
12411     option is used.
12412
12413`-mv850e'
12414     Specify that the target processor is the V850E.  The preprocessor
12415     constant `__v850e__' will be defined if this option is used.
12416
12417     If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
12418     a default target processor will be chosen and the relevant
12419     `__v850*__' preprocessor constant will be defined.
12420
12421     The preprocessor constants `__v850' and `__v851__' are always
12422     defined, regardless of which processor variant is the target.
12423
12424`-mdisable-callt'
12425     This option will suppress generation of the CALLT instruction for
12426     the v850e and v850e1 flavors of the v850 architecture.  The
12427     default is `-mno-disable-callt' which allows the CALLT instruction
12428     to be used.
12429
12430
12431
12432File: gcc.info,  Node: VAX Options,  Next: x86-64 Options,  Prev: V850 Options,  Up: Submodel Options
12433
124343.17.35 VAX Options
12435-------------------
12436
12437These `-m' options are defined for the VAX:
12438
12439`-munix'
12440     Do not output certain jump instructions (`aobleq' and so on) that
12441     the Unix assembler for the VAX cannot handle across long ranges.
12442
12443`-mgnu'
12444     Do output those jump instructions, on the assumption that you will
12445     assemble with the GNU assembler.
12446
12447`-mg'
12448     Output code for g-format floating point numbers instead of
12449     d-format.
12450
12451
12452File: gcc.info,  Node: x86-64 Options,  Next: Xstormy16 Options,  Prev: VAX Options,  Up: Submodel Options
12453
124543.17.36 x86-64 Options
12455----------------------
12456
12457These are listed under *Note i386 and x86-64 Options::.
12458
12459
12460File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: x86-64 Options,  Up: Submodel Options
12461
124623.17.37 Xstormy16 Options
12463-------------------------
12464
12465These options are defined for Xstormy16:
12466
12467`-msim'
12468     Choose startup files and linker script suitable for the simulator.
12469
12470
12471File: gcc.info,  Node: Xtensa Options,  Next: zSeries Options,  Prev: Xstormy16 Options,  Up: Submodel Options
12472
124733.17.38 Xtensa Options
12474----------------------
12475
12476These options are supported for Xtensa targets:
12477
12478`-mconst16'
12479`-mno-const16'
12480     Enable or disable use of `CONST16' instructions for loading
12481     constant values.  The `CONST16' instruction is currently not a
12482     standard option from Tensilica.  When enabled, `CONST16'
12483     instructions are always used in place of the standard `L32R'
12484     instructions.  The use of `CONST16' is enabled by default only if
12485     the `L32R' instruction is not available.
12486
12487`-mfused-madd'
12488`-mno-fused-madd'
12489     Enable or disable use of fused multiply/add and multiply/subtract
12490     instructions in the floating-point option.  This has no effect if
12491     the floating-point option is not also enabled.  Disabling fused
12492     multiply/add and multiply/subtract instructions forces the
12493     compiler to use separate instructions for the multiply and
12494     add/subtract operations.  This may be desirable in some cases
12495     where strict IEEE 754-compliant results are required: the fused
12496     multiply add/subtract instructions do not round the intermediate
12497     result, thereby producing results with _more_ bits of precision
12498     than specified by the IEEE standard.  Disabling fused multiply
12499     add/subtract instructions also ensures that the program output is
12500     not sensitive to the compiler's ability to combine multiply and
12501     add/subtract operations.
12502
12503`-mtext-section-literals'
12504`-mno-text-section-literals'
12505     Control the treatment of literal pools.  The default is
12506     `-mno-text-section-literals', which places literals in a separate
12507     section in the output file.  This allows the literal pool to be
12508     placed in a data RAM/ROM, and it also allows the linker to combine
12509     literal pools from separate object files to remove redundant
12510     literals and improve code size.  With `-mtext-section-literals',
12511     the literals are interspersed in the text section in order to keep
12512     them as close as possible to their references.  This may be
12513     necessary for large assembly files.
12514
12515`-mtarget-align'
12516`-mno-target-align'
12517     When this option is enabled, GCC instructs the assembler to
12518     automatically align instructions to reduce branch penalties at the
12519     expense of some code density.  The assembler attempts to widen
12520     density instructions to align branch targets and the instructions
12521     following call instructions.  If there are not enough preceding
12522     safe density instructions to align a target, no widening will be
12523     performed.  The default is `-mtarget-align'.  These options do not
12524     affect the treatment of auto-aligned instructions like `LOOP',
12525     which the assembler will always align, either by widening density
12526     instructions or by inserting no-op instructions.
12527
12528`-mlongcalls'
12529`-mno-longcalls'
12530     When this option is enabled, GCC instructs the assembler to
12531     translate direct calls to indirect calls unless it can determine
12532     that the target of a direct call is in the range allowed by the
12533     call instruction.  This translation typically occurs for calls to
12534     functions in other source files.  Specifically, the assembler
12535     translates a direct `CALL' instruction into an `L32R' followed by
12536     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
12537     option should be used in programs where the call target can
12538     potentially be out of range.  This option is implemented in the
12539     assembler, not the compiler, so the assembly code generated by GCC
12540     will still show direct call instructions--look at the disassembled
12541     object code to see the actual instructions.  Note that the
12542     assembler will use an indirect call for every cross-file call, not
12543     just those that really will be out of range.
12544
12545
12546File: gcc.info,  Node: zSeries Options,  Prev: Xtensa Options,  Up: Submodel Options
12547
125483.17.39 zSeries Options
12549-----------------------
12550
12551These are listed under *Note S/390 and zSeries Options::.
12552
12553
12554File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
12555
125563.18 Options for Code Generation Conventions
12557============================================
12558
12559These machine-independent options control the interface conventions
12560used in code generation.
12561
12562 Most of them have both positive and negative forms; the negative form
12563of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
12564forms is listed--the one which is not the default.  You can figure out
12565the other form by either removing `no-' or adding it.
12566
12567`-fbounds-check'
12568     For front-ends that support it, generate additional code to check
12569     that indices used to access arrays are within the declared range.
12570     This is currently only supported by the Java and Fortran
12571     front-ends, where this option defaults to true and false
12572     respectively.
12573
12574`-ftrapv'
12575     This option generates traps for signed overflow on addition,
12576     subtraction, multiplication operations.
12577
12578`-fwrapv'
12579     This option instructs the compiler to assume that signed arithmetic
12580     overflow of addition, subtraction and multiplication wraps around
12581     using twos-complement representation.  This flag enables some
12582     optimizations and disables others.  This option is enabled by
12583     default for the Java front-end, as required by the Java language
12584     specification.
12585
12586`-fexceptions'
12587     Enable exception handling.  Generates extra code needed to
12588     propagate exceptions.  For some targets, this implies GCC will
12589     generate frame unwind information for all functions, which can
12590     produce significant data size overhead, although it does not
12591     affect execution.  If you do not specify this option, GCC will
12592     enable it by default for languages like C++ which normally require
12593     exception handling, and disable it for languages like C that do
12594     not normally require it.  However, you may need to enable this
12595     option when compiling C code that needs to interoperate properly
12596     with exception handlers written in C++.  You may also wish to
12597     disable this option if you are compiling older C++ programs that
12598     don't use exception handling.
12599
12600`-fnon-call-exceptions'
12601     Generate code that allows trapping instructions to throw
12602     exceptions.  Note that this requires platform-specific runtime
12603     support that does not exist everywhere.  Moreover, it only allows
12604     _trapping_ instructions to throw exceptions, i.e. memory
12605     references or floating point instructions.  It does not allow
12606     exceptions to be thrown from arbitrary signal handlers such as
12607     `SIGALRM'.
12608
12609`-funwind-tables'
12610     Similar to `-fexceptions', except that it will just generate any
12611     needed static data, but will not affect the generated code in any
12612     other way.  You will normally not enable this option; instead, a
12613     language processor that needs this handling would enable it on
12614     your behalf.
12615
12616`-fasynchronous-unwind-tables'
12617     Generate unwind table in dwarf2 format, if supported by target
12618     machine.  The table is exact at each instruction boundary, so it
12619     can be used for stack unwinding from asynchronous events (such as
12620     debugger or garbage collector).
12621
12622`-fpcc-struct-return'
12623     Return "short" `struct' and `union' values in memory like longer
12624     ones, rather than in registers.  This convention is less
12625     efficient, but it has the advantage of allowing intercallability
12626     between GCC-compiled files and files compiled with other
12627     compilers, particularly the Portable C Compiler (pcc).
12628
12629     The precise convention for returning structures in memory depends
12630     on the target configuration macros.
12631
12632     Short structures and unions are those whose size and alignment
12633     match that of some integer type.
12634
12635     *Warning:* code compiled with the `-fpcc-struct-return' switch is
12636     not binary compatible with code compiled with the
12637     `-freg-struct-return' switch.  Use it to conform to a non-default
12638     application binary interface.
12639
12640`-freg-struct-return'
12641     Return `struct' and `union' values in registers when possible.
12642     This is more efficient for small structures than
12643     `-fpcc-struct-return'.
12644
12645     If you specify neither `-fpcc-struct-return' nor
12646     `-freg-struct-return', GCC defaults to whichever convention is
12647     standard for the target.  If there is no standard convention, GCC
12648     defaults to `-fpcc-struct-return', except on targets where GCC is
12649     the principal compiler.  In those cases, we can choose the
12650     standard, and we chose the more efficient register return
12651     alternative.
12652
12653     *Warning:* code compiled with the `-freg-struct-return' switch is
12654     not binary compatible with code compiled with the
12655     `-fpcc-struct-return' switch.  Use it to conform to a non-default
12656     application binary interface.
12657
12658`-fshort-enums'
12659     Allocate to an `enum' type only as many bytes as it needs for the
12660     declared range of possible values.  Specifically, the `enum' type
12661     will be equivalent to the smallest integer type which has enough
12662     room.
12663
12664     *Warning:* the `-fshort-enums' switch causes GCC to generate code
12665     that is not binary compatible with code generated without that
12666     switch.  Use it to conform to a non-default application binary
12667     interface.
12668
12669`-fshort-double'
12670     Use the same size for `double' as for `float'.
12671
12672     *Warning:* the `-fshort-double' switch causes GCC to generate code
12673     that is not binary compatible with code generated without that
12674     switch.  Use it to conform to a non-default application binary
12675     interface.
12676
12677`-fshort-wchar'
12678     Override the underlying type for `wchar_t' to be `short unsigned
12679     int' instead of the default for the target.  This option is useful
12680     for building programs to run under WINE.
12681
12682     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
12683     that is not binary compatible with code generated without that
12684     switch.  Use it to conform to a non-default application binary
12685     interface.
12686
12687`-fno-common'
12688     In C, allocate even uninitialized global variables in the data
12689     section of the object file, rather than generating them as common
12690     blocks.  This has the effect that if the same variable is declared
12691     (without `extern') in two different compilations, you will get an
12692     error when you link them.  The only reason this might be useful is
12693     if you wish to verify that the program will work on other systems
12694     which always work this way.
12695
12696`-fno-ident'
12697     Ignore the `#ident' directive.
12698
12699`-finhibit-size-directive'
12700     Don't output a `.size' assembler directive, or anything else that
12701     would cause trouble if the function is split in the middle, and the
12702     two halves are placed at locations far apart in memory.  This
12703     option is used when compiling `crtstuff.c'; you should not need to
12704     use it for anything else.
12705
12706`-fverbose-asm'
12707     Put extra commentary information in the generated assembly code to
12708     make it more readable.  This option is generally only of use to
12709     those who actually need to read the generated assembly code
12710     (perhaps while debugging the compiler itself).
12711
12712     `-fno-verbose-asm', the default, causes the extra information to
12713     be omitted and is useful when comparing two assembler files.
12714
12715`-fpic'
12716     Generate position-independent code (PIC) suitable for use in a
12717     shared library, if supported for the target machine.  Such code
12718     accesses all constant addresses through a global offset table
12719     (GOT).  The dynamic loader resolves the GOT entries when the
12720     program starts (the dynamic loader is not part of GCC; it is part
12721     of the operating system).  If the GOT size for the linked
12722     executable exceeds a machine-specific maximum size, you get an
12723     error message from the linker indicating that `-fpic' does not
12724     work; in that case, recompile with `-fPIC' instead.  (These
12725     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
12726     386 has no such limit.)
12727
12728     Position-independent code requires special support, and therefore
12729     works only on certain machines.  For the 386, GCC supports PIC for
12730     System V but not for the Sun 386i.  Code generated for the IBM
12731     RS/6000 is always position-independent.
12732
12733     When this flag is set, the macros `__pic__' and `__PIC__' are
12734     defined to 1.
12735
12736`-fPIC'
12737     If supported for the target machine, emit position-independent
12738     code, suitable for dynamic linking and avoiding any limit on the
12739     size of the global offset table.  This option makes a difference
12740     on the m68k, PowerPC and SPARC.
12741
12742     Position-independent code requires special support, and therefore
12743     works only on certain machines.
12744
12745     When this flag is set, the macros `__pic__' and `__PIC__' are
12746     defined to 2.
12747
12748`-fpie'
12749`-fPIE'
12750     These options are similar to `-fpic' and `-fPIC', but generated
12751     position independent code can be only linked into executables.
12752     Usually these options are used when `-pie' GCC option will be used
12753     during linking.
12754
12755`-fno-jump-tables'
12756     Do not use jump tables for switch statements even where it would be
12757     more efficient than other code generation strategies.  This option
12758     is of use in conjunction with `-fpic' or `-fPIC' for building code
12759     which forms part of a dynamic linker and cannot reference the
12760     address of a jump table.  On some targets, jump tables do not
12761     require a GOT and this option is not needed.
12762
12763`-ffixed-REG'
12764     Treat the register named REG as a fixed register; generated code
12765     should never refer to it (except perhaps as a stack pointer, frame
12766     pointer or in some other fixed role).
12767
12768     REG must be the name of a register.  The register names accepted
12769     are machine-specific and are defined in the `REGISTER_NAMES' macro
12770     in the machine description macro file.
12771
12772     This flag does not have a negative form, because it specifies a
12773     three-way choice.
12774
12775`-fcall-used-REG'
12776     Treat the register named REG as an allocable register that is
12777     clobbered by function calls.  It may be allocated for temporaries
12778     or variables that do not live across a call.  Functions compiled
12779     this way will not save and restore the register REG.
12780
12781     It is an error to used this flag with the frame pointer or stack
12782     pointer.  Use of this flag for other registers that have fixed
12783     pervasive roles in the machine's execution model will produce
12784     disastrous results.
12785
12786     This flag does not have a negative form, because it specifies a
12787     three-way choice.
12788
12789`-fcall-saved-REG'
12790     Treat the register named REG as an allocable register saved by
12791     functions.  It may be allocated even for temporaries or variables
12792     that live across a call.  Functions compiled this way will save
12793     and restore the register REG if they use it.
12794
12795     It is an error to used this flag with the frame pointer or stack
12796     pointer.  Use of this flag for other registers that have fixed
12797     pervasive roles in the machine's execution model will produce
12798     disastrous results.
12799
12800     A different sort of disaster will result from the use of this flag
12801     for a register in which function values may be returned.
12802
12803     This flag does not have a negative form, because it specifies a
12804     three-way choice.
12805
12806`-fpack-struct[=N]'
12807     Without a value specified, pack all structure members together
12808     without holes.  When a value is specified (which must be a small
12809     power of two), pack structure members according to this value,
12810     representing the maximum alignment (that is, objects with default
12811     alignment requirements larger than this will be output potentially
12812     unaligned at the next fitting location.
12813
12814     *Warning:* the `-fpack-struct' switch causes GCC to generate code
12815     that is not binary compatible with code generated without that
12816     switch.  Additionally, it makes the code suboptimal.  Use it to
12817     conform to a non-default application binary interface.
12818
12819`-finstrument-functions'
12820     Generate instrumentation calls for entry and exit to functions.
12821     Just after function entry and just before function exit, the
12822     following profiling functions will be called with the address of
12823     the current function and its call site.  (On some platforms,
12824     `__builtin_return_address' does not work beyond the current
12825     function, so the call site information may not be available to the
12826     profiling functions otherwise.)
12827
12828          void __cyg_profile_func_enter (void *this_fn,
12829                                         void *call_site);
12830          void __cyg_profile_func_exit  (void *this_fn,
12831                                         void *call_site);
12832
12833     The first argument is the address of the start of the current
12834     function, which may be looked up exactly in the symbol table.
12835
12836     This instrumentation is also done for functions expanded inline in
12837     other functions.  The profiling calls will indicate where,
12838     conceptually, the inline function is entered and exited.  This
12839     means that addressable versions of such functions must be
12840     available.  If all your uses of a function are expanded inline,
12841     this may mean an additional expansion of code size.  If you use
12842     `extern inline' in your C code, an addressable version of such
12843     functions must be provided.  (This is normally the case anyways,
12844     but if you get lucky and the optimizer always expands the
12845     functions inline, you might have gotten away without providing
12846     static copies.)
12847
12848     A function may be given the attribute `no_instrument_function', in
12849     which case this instrumentation will not be done.  This can be
12850     used, for example, for the profiling functions listed above,
12851     high-priority interrupt routines, and any functions from which the
12852     profiling functions cannot safely be called (perhaps signal
12853     handlers, if the profiling routines generate output or allocate
12854     memory).
12855
12856`-fstack-check'
12857     Generate code to verify that you do not go beyond the boundary of
12858     the stack.  You should specify this flag if you are running in an
12859     environment with multiple threads, but only rarely need to specify
12860     it in a single-threaded environment since stack overflow is
12861     automatically detected on nearly all systems if there is only one
12862     stack.
12863
12864     Note that this switch does not actually cause checking to be done;
12865     the operating system must do that.  The switch causes generation
12866     of code to ensure that the operating system sees the stack being
12867     extended.
12868
12869`-fstack-limit-register=REG'
12870`-fstack-limit-symbol=SYM'
12871`-fno-stack-limit'
12872     Generate code to ensure that the stack does not grow beyond a
12873     certain value, either the value of a register or the address of a
12874     symbol.  If the stack would grow beyond the value, a signal is
12875     raised.  For most targets, the signal is raised before the stack
12876     overruns the boundary, so it is possible to catch the signal
12877     without taking special precautions.
12878
12879     For instance, if the stack starts at absolute address `0x80000000'
12880     and grows downwards, you can use the flags
12881     `-fstack-limit-symbol=__stack_limit' and
12882     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
12883     of 128KB.  Note that this may only work with the GNU linker.
12884
12885`-fargument-alias'
12886`-fargument-noalias'
12887`-fargument-noalias-global'
12888`-fargument-noalias-anything'
12889     Specify the possible relationships among parameters and between
12890     parameters and global data.
12891
12892     `-fargument-alias' specifies that arguments (parameters) may alias
12893     each other and may alias global storage.
12894     `-fargument-noalias' specifies that arguments do not alias each
12895     other, but may alias global storage.
12896     `-fargument-noalias-global' specifies that arguments do not alias
12897     each other and do not alias global storage.
12898     `-fargument-noalias-anything' specifies that arguments do not
12899     alias any other storage.
12900
12901     Each language will automatically use whatever option is required by
12902     the language standard.  You should not need to use these options
12903     yourself.
12904
12905`-fleading-underscore'
12906     This option and its counterpart, `-fno-leading-underscore',
12907     forcibly change the way C symbols are represented in the object
12908     file.  One use is to help link with legacy assembly code.
12909
12910     *Warning:* the `-fleading-underscore' switch causes GCC to
12911     generate code that is not binary compatible with code generated
12912     without that switch.  Use it to conform to a non-default
12913     application binary interface.  Not all targets provide complete
12914     support for this switch.
12915
12916`-ftls-model=MODEL'
12917     Alter the thread-local storage model to be used (*note
12918     Thread-Local::).  The MODEL argument should be one of
12919     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
12920
12921     The default without `-fpic' is `initial-exec'; with `-fpic' the
12922     default is `global-dynamic'.
12923
12924`-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
12925     Set the default ELF image symbol visibility to the specified
12926     option--all symbols will be marked with this unless overridden
12927     within the code.  Using this feature can very substantially
12928     improve linking and load times of shared object libraries, produce
12929     more optimized code, provide near-perfect API export and prevent
12930     symbol clashes.  It is *strongly* recommended that you use this in
12931     any shared objects you distribute.
12932
12933     Despite the nomenclature, `default' always means public ie;
12934     available to be linked against from outside the shared object.
12935     `protected' and `internal' are pretty useless in real-world usage
12936     so the only other commonly used option will be `hidden'.  The
12937     default if `-fvisibility' isn't specified is `default', i.e., make
12938     every symbol public--this causes the same behavior as previous
12939     versions of GCC.
12940
12941     A good explanation of the benefits offered by ensuring ELF symbols
12942     have the correct visibility is given by "How To Write Shared
12943     Libraries" by Ulrich Drepper (which can be found at
12944     `http://people.redhat.com/~drepper/')--however a superior solution
12945     made possible by this option to marking things hidden when the
12946     default is public is to make the default hidden and mark things
12947     public.  This is the norm with DLL's on Windows and with
12948     `-fvisibility=hidden' and `__attribute__
12949     ((visibility("default")))' instead of `__declspec(dllexport)' you
12950     get almost identical semantics with identical syntax.  This is a
12951     great boon to those working with cross-platform projects.
12952
12953     For those adding visibility support to existing code, you may find
12954     `#pragma GCC visibility' of use.  This works by you enclosing the
12955     declarations you wish to set visibility for with (for example)
12956     `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
12957     pop'.  Bear in mind that symbol visibility should be viewed *as
12958     part of the API interface contract* and thus all new code should
12959     always specify visibility when it is not the default ie;
12960     declarations only for use within the local DSO should *always* be
12961     marked explicitly as hidden as so to avoid PLT indirection
12962     overheads--making this abundantly clear also aids readability and
12963     self-documentation of the code.  Note that due to ISO C++
12964     specification requirements, operator new and operator delete must
12965     always be of default visibility.
12966
12967     Be aware that headers from outside your project, in particular
12968     system headers and headers from any other library you use, may not
12969     be expecting to be compiled with visibility other than the
12970     default.  You may need to explicitly say `#pragma GCC visibility
12971     push(default)' before including any such headers.
12972
12973     `extern' declarations are not affected by `-fvisibility', so a lot
12974     of code can be recompiled with `-fvisibility=hidden' with no
12975     modifications.  However, this means that calls to `extern'
12976     functions with no explicit visibility will use the PLT, so it is
12977     more effective to use `__attribute ((visibility))' and/or `#pragma
12978     GCC visibility' to tell the compiler which `extern' declarations
12979     should be treated as hidden.
12980
12981     Note that `-fvisibility' does affect C++ vague linkage entities.
12982     This means that, for instance, an exception class that will be
12983     thrown between DSOs must be explicitly marked with default
12984     visibility so that the `type_info' nodes will be unified between
12985     the DSOs.
12986
12987     An overview of these techniques, their benefits and how to use them
12988     is at `http://gcc.gnu.org/wiki/Visibility'.
12989
12990
12991
12992File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
12993
129943.19 Environment Variables Affecting GCC
12995========================================
12996
12997This section describes several environment variables that affect how GCC
12998operates.  Some of them work by specifying directories or prefixes to
12999use when searching for various kinds of files.  Some are used to
13000specify other aspects of the compilation environment.
13001
13002 Note that you can also specify places to search using options such as
13003`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
13004over places specified using environment variables, which in turn take
13005precedence over those specified by the configuration of GCC.  *Note
13006Controlling the Compilation Driver `gcc': (gccint)Driver.
13007
13008`LANG'
13009`LC_CTYPE'
13010`LC_MESSAGES'
13011`LC_ALL'
13012     These environment variables control the way that GCC uses
13013     localization information that allow GCC to work with different
13014     national conventions.  GCC inspects the locale categories
13015     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
13016     These locale categories can be set to any value supported by your
13017     installation.  A typical value is `en_GB.UTF-8' for English in the
13018     United Kingdom encoded in UTF-8.
13019
13020     The `LC_CTYPE' environment variable specifies character
13021     classification.  GCC uses it to determine the character boundaries
13022     in a string; this is needed for some multibyte encodings that
13023     contain quote and escape characters that would otherwise be
13024     interpreted as a string end or escape.
13025
13026     The `LC_MESSAGES' environment variable specifies the language to
13027     use in diagnostic messages.
13028
13029     If the `LC_ALL' environment variable is set, it overrides the value
13030     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
13031     `LC_MESSAGES' default to the value of the `LANG' environment
13032     variable.  If none of these variables are set, GCC defaults to
13033     traditional C English behavior.
13034
13035`TMPDIR'
13036     If `TMPDIR' is set, it specifies the directory to use for temporary
13037     files.  GCC uses temporary files to hold the output of one stage of
13038     compilation which is to be used as input to the next stage: for
13039     example, the output of the preprocessor, which is the input to the
13040     compiler proper.
13041
13042`GCC_EXEC_PREFIX'
13043     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
13044     names of the subprograms executed by the compiler.  No slash is
13045     added when this prefix is combined with the name of a subprogram,
13046     but you can specify a prefix that ends with a slash if you wish.
13047
13048     If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
13049     appropriate prefix to use based on the pathname it was invoked
13050     with.
13051
13052     If GCC cannot find the subprogram using the specified prefix, it
13053     tries looking in the usual places for the subprogram.
13054
13055     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
13056     PREFIX is the value of `prefix' when you ran the `configure'
13057     script.
13058
13059     Other prefixes specified with `-B' take precedence over this
13060     prefix.
13061
13062     This prefix is also used for finding files such as `crt0.o' that
13063     are used for linking.
13064
13065     In addition, the prefix is used in an unusual way in finding the
13066     directories to search for header files.  For each of the standard
13067     directories whose name normally begins with `/usr/local/lib/gcc'
13068     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
13069     replacing that beginning with the specified prefix to produce an
13070     alternate directory name.  Thus, with `-Bfoo/', GCC will search
13071     `foo/bar' where it would normally search `/usr/local/lib/bar'.
13072     These alternate directories are searched first; the standard
13073     directories come next.
13074
13075`COMPILER_PATH'
13076     The value of `COMPILER_PATH' is a colon-separated list of
13077     directories, much like `PATH'.  GCC tries the directories thus
13078     specified when searching for subprograms, if it can't find the
13079     subprograms using `GCC_EXEC_PREFIX'.
13080
13081`LIBRARY_PATH'
13082     The value of `LIBRARY_PATH' is a colon-separated list of
13083     directories, much like `PATH'.  When configured as a native
13084     compiler, GCC tries the directories thus specified when searching
13085     for special linker files, if it can't find them using
13086     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
13087     when searching for ordinary libraries for the `-l' option (but
13088     directories specified with `-L' come first).
13089
13090`LANG'
13091     This variable is used to pass locale information to the compiler.
13092     One way in which this information is used is to determine the
13093     character set to be used when character literals, string literals
13094     and comments are parsed in C and C++.  When the compiler is
13095     configured to allow multibyte characters, the following values for
13096     `LANG' are recognized:
13097
13098    `C-JIS'
13099          Recognize JIS characters.
13100
13101    `C-SJIS'
13102          Recognize SJIS characters.
13103
13104    `C-EUCJP'
13105          Recognize EUCJP characters.
13106
13107     If `LANG' is not defined, or if it has some other value, then the
13108     compiler will use mblen and mbtowc as defined by the default
13109     locale to recognize and translate multibyte characters.
13110
13111Some additional environments variables affect the behavior of the
13112preprocessor.
13113
13114`CPATH'
13115`C_INCLUDE_PATH'
13116`CPLUS_INCLUDE_PATH'
13117`OBJC_INCLUDE_PATH'
13118     Each variable's value is a list of directories separated by a
13119     special character, much like `PATH', in which to look for header
13120     files.  The special character, `PATH_SEPARATOR', is
13121     target-dependent and determined at GCC build time.  For Microsoft
13122     Windows-based targets it is a semicolon, and for almost all other
13123     targets it is a colon.
13124
13125     `CPATH' specifies a list of directories to be searched as if
13126     specified with `-I', but after any paths given with `-I' options
13127     on the command line.  This environment variable is used regardless
13128     of which language is being preprocessed.
13129
13130     The remaining environment variables apply only when preprocessing
13131     the particular language indicated.  Each specifies a list of
13132     directories to be searched as if specified with `-isystem', but
13133     after any paths given with `-isystem' options on the command line.
13134
13135     In all these variables, an empty element instructs the compiler to
13136     search its current working directory.  Empty elements can appear
13137     at the beginning or end of a path.  For instance, if the value of
13138     `CPATH' is `:/special/include', that has the same effect as
13139     `-I. -I/special/include'.
13140
13141`DEPENDENCIES_OUTPUT'
13142     If this variable is set, its value specifies how to output
13143     dependencies for Make based on the non-system header files
13144     processed by the compiler.  System header files are ignored in the
13145     dependency output.
13146
13147     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
13148     which case the Make rules are written to that file, guessing the
13149     target name from the source file name.  Or the value can have the
13150     form `FILE TARGET', in which case the rules are written to file
13151     FILE using TARGET as the target name.
13152
13153     In other words, this environment variable is equivalent to
13154     combining the options `-MM' and `-MF' (*note Preprocessor
13155     Options::), with an optional `-MT' switch too.
13156
13157`SUNPRO_DEPENDENCIES'
13158     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
13159     except that system header files are not ignored, so it implies
13160     `-M' rather than `-MM'.  However, the dependence on the main input
13161     file is omitted.  *Note Preprocessor Options::.
13162
13163
13164File: gcc.info,  Node: Precompiled Headers,  Next: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
13165
131663.20 Using Precompiled Headers
13167==============================
13168
13169Often large projects have many header files that are included in every
13170source file.  The time the compiler takes to process these header files
13171over and over again can account for nearly all of the time required to
13172build the project.  To make builds faster, GCC allows users to
13173`precompile' a header file; then, if builds can use the precompiled
13174header file they will be much faster.
13175
13176 To create a precompiled header file, simply compile it as you would any
13177other file, if necessary using the `-x' option to make the driver treat
13178it as a C or C++ header file.  You will probably want to use a tool
13179like `make' to keep the precompiled header up-to-date when the headers
13180it contains change.
13181
13182 A precompiled header file will be searched for when `#include' is seen
13183in the compilation.  As it searches for the included file (*note Search
13184Path: (cpp)Search Path.) the compiler looks for a precompiled header in
13185each directory just before it looks for the include file in that
13186directory.  The name searched for is the name specified in the
13187`#include' with `.gch' appended.  If the precompiled header file can't
13188be used, it is ignored.
13189
13190 For instance, if you have `#include "all.h"', and you have `all.h.gch'
13191in the same directory as `all.h', then the precompiled header file will
13192be used if possible, and the original header will be used otherwise.
13193
13194 Alternatively, you might decide to put the precompiled header file in a
13195directory and use `-I' to ensure that directory is searched before (or
13196instead of) the directory containing the original header.  Then, if you
13197want to check that the precompiled header file is always used, you can
13198put a file of the same name as the original header in this directory
13199containing an `#error' command.
13200
13201 This also works with `-include'.  So yet another way to use
13202precompiled headers, good for projects not designed with precompiled
13203header files in mind, is to simply take most of the header files used by
13204a project, include them from another header file, precompile that header
13205file, and `-include' the precompiled header.  If the header files have
13206guards against multiple inclusion, they will be skipped because they've
13207already been included (in the precompiled header).
13208
13209 If you need to precompile the same header file for different
13210languages, targets, or compiler options, you can instead make a
13211_directory_ named like `all.h.gch', and put each precompiled header in
13212the directory, perhaps using `-o'.  It doesn't matter what you call the
13213files in the directory, every precompiled header in the directory will
13214be considered.  The first precompiled header encountered in the
13215directory that is valid for this compilation will be used; they're
13216searched in no particular order.
13217
13218 There are many other possibilities, limited only by your imagination,
13219good sense, and the constraints of your build system.
13220
13221 A precompiled header file can be used only when these conditions apply:
13222
13223   * Only one precompiled header can be used in a particular
13224     compilation.
13225
13226   * A precompiled header can't be used once the first C token is seen.
13227     You can have preprocessor directives before a precompiled header;
13228     you can even include a precompiled header from inside another
13229     header, so long as there are no C tokens before the `#include'.
13230
13231   * The precompiled header file must be produced for the same language
13232     as the current compilation.  You can't use a C precompiled header
13233     for a C++ compilation.
13234
13235   * The precompiled header file must have been produced by the same
13236     compiler binary as the current compilation is using.
13237
13238   * Any macros defined before the precompiled header is included must
13239     either be defined in the same way as when the precompiled header
13240     was generated, or must not affect the precompiled header, which
13241     usually means that they don't appear in the precompiled header at
13242     all.
13243
13244     The `-D' option is one way to define a macro before a precompiled
13245     header is included; using a `#define' can also do it.  There are
13246     also some options that define macros implicitly, like `-O' and
13247     `-Wdeprecated'; the same rule applies to macros defined this way.
13248
13249   * If debugging information is output when using the precompiled
13250     header, using `-g' or similar, the same kind of debugging
13251     information must have been output when building the precompiled
13252     header.  However, a precompiled header built using `-g' can be
13253     used in a compilation when no debugging information is being
13254     output.
13255
13256   * The same `-m' options must generally be used when building and
13257     using the precompiled header.  *Note Submodel Options::, for any
13258     cases where this rule is relaxed.
13259
13260   * Each of the following options must be the same when building and
13261     using the precompiled header:
13262
13263          -fexceptions -funit-at-a-time
13264
13265   * Some other command-line options starting with `-f', `-p', or `-O'
13266     must be defined in the same way as when the precompiled header was
13267     generated.  At present, it's not clear which options are safe to
13268     change and which are not; the safest choice is to use exactly the
13269     same options when generating and using the precompiled header.
13270     The following are known to be safe:
13271
13272          -fmessage-length= -fpreprocessed
13273          -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
13274          -fsched-verbose=<number> -fschedule-insns -fvisibility=
13275          -pedantic-errors
13276
13277
13278 For all of these except the last, the compiler will automatically
13279ignore the precompiled header if the conditions aren't met.  If you
13280find an option combination that doesn't work and doesn't cause the
13281precompiled header to be ignored, please consider filing a bug report,
13282see *Note Bugs::.
13283
13284 If you do use differing options when generating and using the
13285precompiled header, the actual behavior will be a mixture of the
13286behavior for the options.  For instance, if you use `-g' to generate
13287the precompiled header but not when using it, you may or may not get
13288debugging information for routines in the precompiled header.
13289
13290
13291File: gcc.info,  Node: Running Protoize,  Prev: Precompiled Headers,  Up: Invoking GCC
13292
132933.21 Running Protoize
13294=====================
13295
13296The program `protoize' is an optional part of GCC.  You can use it to
13297add prototypes to a program, thus converting the program to ISO C in
13298one respect.  The companion program `unprotoize' does the reverse: it
13299removes argument types from any prototypes that are found.
13300
13301 When you run these programs, you must specify a set of source files as
13302command line arguments.  The conversion programs start out by compiling
13303these files to see what functions they define.  The information gathered
13304about a file FOO is saved in a file named `FOO.X'.
13305
13306 After scanning comes actual conversion.  The specified files are all
13307eligible to be converted; any files they include (whether sources or
13308just headers) are eligible as well.
13309
13310 But not all the eligible files are converted.  By default, `protoize'
13311and `unprotoize' convert only source and header files in the current
13312directory.  You can specify additional directories whose files should
13313be converted with the `-d DIRECTORY' option.  You can also specify
13314particular files to exclude with the `-x FILE' option.  A file is
13315converted if it is eligible, its directory name matches one of the
13316specified directory names, and its name within the directory has not
13317been excluded.
13318
13319 Basic conversion with `protoize' consists of rewriting most function
13320definitions and function declarations to specify the types of the
13321arguments.  The only ones not rewritten are those for varargs functions.
13322
13323 `protoize' optionally inserts prototype declarations at the beginning
13324of the source file, to make them available for any calls that precede
13325the function's definition.  Or it can insert prototype declarations
13326with block scope in the blocks where undeclared functions are called.
13327
13328 Basic conversion with `unprotoize' consists of rewriting most function
13329declarations to remove any argument types, and rewriting function
13330definitions to the old-style pre-ISO form.
13331
13332 Both conversion programs print a warning for any function declaration
13333or definition that they can't convert.  You can suppress these warnings
13334with `-q'.
13335
13336 The output from `protoize' or `unprotoize' replaces the original
13337source file.  The original file is renamed to a name ending with
13338`.save' (for DOS, the saved filename ends in `.sav' without the
13339original `.c' suffix).  If the `.save' (`.sav' for DOS) file already
13340exists, then the source file is simply discarded.
13341
13342 `protoize' and `unprotoize' both depend on GCC itself to scan the
13343program and collect information about the functions it uses.  So
13344neither of these programs will work until GCC is installed.
13345
13346 Here is a table of the options you can use with `protoize' and
13347`unprotoize'.  Each option works with both programs unless otherwise
13348stated.
13349
13350`-B DIRECTORY'
13351     Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
13352     usual directory (normally `/usr/local/lib').  This file contains
13353     prototype information about standard system functions.  This option
13354     applies only to `protoize'.
13355
13356`-c COMPILATION-OPTIONS'
13357     Use COMPILATION-OPTIONS as the options when running `gcc' to
13358     produce the `.X' files.  The special option `-aux-info' is always
13359     passed in addition, to tell `gcc' to write a `.X' file.
13360
13361     Note that the compilation options must be given as a single
13362     argument to `protoize' or `unprotoize'.  If you want to specify
13363     several `gcc' options, you must quote the entire set of
13364     compilation options to make them a single word in the shell.
13365
13366     There are certain `gcc' arguments that you cannot use, because they
13367     would produce the wrong kind of output.  These include `-g', `-O',
13368     `-c', `-S', and `-o' If you include these in the
13369     COMPILATION-OPTIONS, they are ignored.
13370
13371`-C'
13372     Rename files to end in `.C' (`.cc' for DOS-based file systems)
13373     instead of `.c'.  This is convenient if you are converting a C
13374     program to C++.  This option applies only to `protoize'.
13375
13376`-g'
13377     Add explicit global declarations.  This means inserting explicit
13378     declarations at the beginning of each source file for each function
13379     that is called in the file and was not declared.  These
13380     declarations precede the first function definition that contains a
13381     call to an undeclared function.  This option applies only to
13382     `protoize'.
13383
13384`-i STRING'
13385     Indent old-style parameter declarations with the string STRING.
13386     This option applies only to `protoize'.
13387
13388     `unprotoize' converts prototyped function definitions to old-style
13389     function definitions, where the arguments are declared between the
13390     argument list and the initial `{'.  By default, `unprotoize' uses
13391     five spaces as the indentation.  If you want to indent with just
13392     one space instead, use `-i " "'.
13393
13394`-k'
13395     Keep the `.X' files.  Normally, they are deleted after conversion
13396     is finished.
13397
13398`-l'
13399     Add explicit local declarations.  `protoize' with `-l' inserts a
13400     prototype declaration for each function in each block which calls
13401     the function without any declaration.  This option applies only to
13402     `protoize'.
13403
13404`-n'
13405     Make no real changes.  This mode just prints information about the
13406     conversions that would have been done without `-n'.
13407
13408`-N'
13409     Make no `.save' files.  The original files are simply deleted.
13410     Use this option with caution.
13411
13412`-p PROGRAM'
13413     Use the program PROGRAM as the compiler.  Normally, the name `gcc'
13414     is used.
13415
13416`-q'
13417     Work quietly.  Most warnings are suppressed.
13418
13419`-v'
13420     Print the version number, just like `-v' for `gcc'.
13421
13422 If you need special compiler options to compile one of your program's
13423source files, then you should generate that file's `.X' file specially,
13424by running `gcc' on that source file with the appropriate options and
13425the option `-aux-info'.  Then run `protoize' on the entire set of
13426files.  `protoize' will use the existing `.X' file because it is newer
13427than the source file.  For example:
13428
13429     gcc -Dfoo=bar file1.c -aux-info file1.X
13430     protoize *.c
13431
13432You need to include the special files along with the rest in the
13433`protoize' command, even though their `.X' files already exist, because
13434otherwise they won't get converted.
13435
13436 *Note Protoize Caveats::, for more information on how to use
13437`protoize' successfully.
13438
13439
13440File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
13441
134424 C Implementation-defined behavior
13443***********************************
13444
13445A conforming implementation of ISO C is required to document its choice
13446of behavior in each of the areas that are designated "implementation
13447defined".  The following lists all such areas, along with the section
13448numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
13449Some areas are only implementation-defined in one version of the
13450standard.
13451
13452 Some choices depend on the externally determined ABI for the platform
13453(including standard character encodings) which GCC follows; these are
13454listed as "determined by ABI" below.  *Note Binary Compatibility:
13455Compatibility, and `http://gcc.gnu.org/readings.html'.  Some choices
13456are documented in the preprocessor manual.  *Note
13457Implementation-defined behavior: (cpp)Implementation-defined behavior.
13458Some choices are made by the library and operating system (or other
13459environment when compiling for a freestanding environment); refer to
13460their documentation for details.
13461
13462* Menu:
13463
13464* Translation implementation::
13465* Environment implementation::
13466* Identifiers implementation::
13467* Characters implementation::
13468* Integers implementation::
13469* Floating point implementation::
13470* Arrays and pointers implementation::
13471* Hints implementation::
13472* Structures unions enumerations and bit-fields implementation::
13473* Qualifiers implementation::
13474* Declarators implementation::
13475* Statements implementation::
13476* Preprocessing directives implementation::
13477* Library functions implementation::
13478* Architecture implementation::
13479* Locale-specific behavior implementation::
13480
13481
13482File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
13483
134844.1 Translation
13485===============
13486
13487   * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
13488     5.1.1.3).'
13489
13490     Diagnostics consist of all the output sent to stderr by GCC.
13491
13492   * `Whether each nonempty sequence of white-space characters other
13493     than new-line is retained or replaced by one space character in
13494     translation phase 3 (C90 and C99 5.1.1.2).'
13495
13496     *Note Implementation-defined behavior: (cpp)Implementation-defined
13497     behavior.
13498
13499
13500
13501File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
13502
135034.2 Environment
13504===============
13505
13506The behavior of most of these points are dependent on the implementation
13507of the C library, and are not defined by GCC itself.
13508
13509   * `The mapping between physical source file multibyte characters and
13510     the source character set in translation phase 1 (C90 and C99
13511     5.1.1.2).'
13512
13513     *Note Implementation-defined behavior: (cpp)Implementation-defined
13514     behavior.
13515
13516
13517
13518File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
13519
135204.3 Identifiers
13521===============
13522
13523   * `Which additional multibyte characters may appear in identifiers
13524     and their correspondence to universal character names (C99 6.4.2).'
13525
13526     *Note Implementation-defined behavior: (cpp)Implementation-defined
13527     behavior.
13528
13529   * `The number of significant initial characters in an identifier
13530     (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
13531
13532     For internal names, all characters are significant.  For external
13533     names, the number of significant characters are defined by the
13534     linker; for almost all targets, all characters are significant.
13535
13536   * `Whether case distinctions are significant in an identifier with
13537     external linkage (C90 6.1.2).'
13538
13539     This is a property of the linker.  C99 requires that case
13540     distinctions are always significant in identifiers with external
13541     linkage and systems without this property are not supported by GCC.
13542
13543
13544
13545File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
13546
135474.4 Characters
13548==============
13549
13550   * `The number of bits in a byte (C90 3.4, C99 3.6).'
13551
13552     Determined by ABI.
13553
13554   * `The values of the members of the execution character set (C90 and
13555     C99 5.2.1).'
13556
13557     Determined by ABI.
13558
13559   * `The unique value of the member of the execution character set
13560     produced for each of the standard alphabetic escape sequences (C90
13561     and C99 5.2.2).'
13562
13563     Determined by ABI.
13564
13565   * `The value of a `char' object into which has been stored any
13566     character other than a member of the basic execution character set
13567     (C90 6.1.2.5, C99 6.2.5).'
13568
13569     Determined by ABI.
13570
13571   * `Which of `signed char' or `unsigned char' has the same range,
13572     representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
13573     6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
13574
13575     Determined by ABI.  The options `-funsigned-char' and
13576     `-fsigned-char' change the default.  *Note Options Controlling C
13577     Dialect: C Dialect Options.
13578
13579   * `The mapping of members of the source character set (in character
13580     constants and string literals) to members of the execution
13581     character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
13582
13583     Determined by ABI.
13584
13585   * `The value of an integer character constant containing more than
13586     one character or containing a character or escape sequence that
13587     does not map to a single-byte execution character (C90 6.1.3.4,
13588     C99 6.4.4.4).'
13589
13590     *Note Implementation-defined behavior: (cpp)Implementation-defined
13591     behavior.
13592
13593   * `The value of a wide character constant containing more than one
13594     multibyte character, or containing a multibyte character or escape
13595     sequence not represented in the extended execution character set
13596     (C90 6.1.3.4, C99 6.4.4.4).'
13597
13598     *Note Implementation-defined behavior: (cpp)Implementation-defined
13599     behavior.
13600
13601   * `The current locale used to convert a wide character constant
13602     consisting of a single multibyte character that maps to a member
13603     of the extended execution character set into a corresponding wide
13604     character code (C90 6.1.3.4, C99 6.4.4.4).'
13605
13606     *Note Implementation-defined behavior: (cpp)Implementation-defined
13607     behavior.
13608
13609   * `The current locale used to convert a wide string literal into
13610     corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
13611
13612     *Note Implementation-defined behavior: (cpp)Implementation-defined
13613     behavior.
13614
13615   * `The value of a string literal containing a multibyte character or
13616     escape sequence not represented in the execution character set
13617     (C90 6.1.4, C99 6.4.5).'
13618
13619     *Note Implementation-defined behavior: (cpp)Implementation-defined
13620     behavior.
13621
13622
13623File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
13624
136254.5 Integers
13626============
13627
13628   * `Any extended integer types that exist in the implementation (C99
13629     6.2.5).'
13630
13631     GCC does not support any extended integer types.
13632
13633   * `Whether signed integer types are represented using sign and
13634     magnitude, two's complement, or one's complement, and whether the
13635     extraordinary value is a trap representation or an ordinary value
13636     (C99 6.2.6.2).'
13637
13638     GCC supports only two's complement integer types, and all bit
13639     patterns are ordinary values.
13640
13641   * `The rank of any extended integer type relative to another extended
13642     integer type with the same precision (C99 6.3.1.1).'
13643
13644     GCC does not support any extended integer types.
13645
13646   * `The result of, or the signal raised by, converting an integer to a
13647     signed integer type when the value cannot be represented in an
13648     object of that type (C90 6.2.1.2, C99 6.3.1.3).'
13649
13650     For conversion to a type of width N, the value is reduced modulo
13651     2^N to be within range of the type; no signal is raised.
13652
13653   * `The results of some bitwise operations on signed integers (C90
13654     6.3, C99 6.5).'
13655
13656     Bitwise operators act on the representation of the value including
13657     both the sign and value bits, where the sign bit is considered
13658     immediately above the highest-value value bit.  Signed `>>' acts
13659     on negative numbers by sign extension.
13660
13661     GCC does not use the latitude given in C99 only to treat certain
13662     aspects of signed `<<' as undefined, but this is subject to change.
13663
13664   * `The sign of the remainder on integer division (C90 6.3.5).'
13665
13666     GCC always follows the C99 requirement that the result of division
13667     is truncated towards zero.
13668
13669
13670
13671File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
13672
136734.6 Floating point
13674==================
13675
13676   * `The accuracy of the floating-point operations and of the library
13677     functions in `<math.h>' and `<complex.h>' that return
13678     floating-point results (C90 and C99 5.2.4.2.2).'
13679
13680     The accuracy is unknown.
13681
13682   * `The rounding behaviors characterized by non-standard values of
13683     `FLT_ROUNDS'  (C90 and C99 5.2.4.2.2).'
13684
13685     GCC does not use such values.
13686
13687   * `The evaluation methods characterized by non-standard negative
13688     values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
13689
13690     GCC does not use such values.
13691
13692   * `The direction of rounding when an integer is converted to a
13693     floating-point number that cannot exactly represent the original
13694     value (C90 6.2.1.3, C99 6.3.1.4).'
13695
13696     C99 Annex F is followed.
13697
13698   * `The direction of rounding when a floating-point number is
13699     converted to a narrower floating-point number (C90 6.2.1.4, C99
13700     6.3.1.5).'
13701
13702     C99 Annex F is followed.
13703
13704   * `How the nearest representable value or the larger or smaller
13705     representable value immediately adjacent to the nearest
13706     representable value is chosen for certain floating constants (C90
13707     6.1.3.1, C99 6.4.4.2).'
13708
13709     C99 Annex F is followed.
13710
13711   * `Whether and how floating expressions are contracted when not
13712     disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
13713
13714     Expressions are currently only contracted if
13715     `-funsafe-math-optimizations' or `-ffast-math' are used.  This is
13716     subject to change.
13717
13718   * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
13719
13720     This pragma is not implemented, but the default is to "off" unless
13721     `-frounding-math' is used in which case it is "on".
13722
13723   * `Additional floating-point exceptions, rounding modes,
13724     environments, and classifications, and their macro names (C99 7.6,
13725     C99 7.12).'
13726
13727     This is dependent on the implementation of the C library, and is
13728     not defined by GCC itself.
13729
13730   * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
13731
13732     This pragma is not implemented.  Expressions are currently only
13733     contracted if `-funsafe-math-optimizations' or `-ffast-math' are
13734     used.  This is subject to change.
13735
13736   * `Whether the "inexact" floating-point exception can be raised when
13737     the rounded result actually does equal the mathematical result in
13738     an IEC 60559 conformant implementation (C99 F.9).'
13739
13740     This is dependent on the implementation of the C library, and is
13741     not defined by GCC itself.
13742
13743   * `Whether the "underflow" (and "inexact") floating-point exception
13744     can be raised when a result is tiny but not inexact in an IEC
13745     60559 conformant implementation (C99 F.9).'
13746
13747     This is dependent on the implementation of the C library, and is
13748     not defined by GCC itself.
13749
13750
13751
13752File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
13753
137544.7 Arrays and pointers
13755=======================
13756
13757   * `The result of converting a pointer to an integer or vice versa
13758     (C90 6.3.4, C99 6.3.2.3).'
13759
13760     A cast from pointer to integer discards most-significant bits if
13761     the pointer representation is larger than the integer type,
13762     sign-extends(1) if the pointer representation is smaller than the
13763     integer type, otherwise the bits are unchanged.
13764
13765     A cast from integer to pointer discards most-significant bits if
13766     the pointer representation is smaller than the integer type,
13767     extends according to the signedness of the integer type if the
13768     pointer representation is larger than the integer type, otherwise
13769     the bits are unchanged.
13770
13771     When casting from pointer to integer and back again, the resulting
13772     pointer must reference the same object as the original pointer,
13773     otherwise the behavior is undefined.  That is, one may not use
13774     integer arithmetic to avoid the undefined behavior of pointer
13775     arithmetic as proscribed in C99 6.5.6/8.
13776
13777   * `The size of the result of subtracting two pointers to elements of
13778     the same array (C90 6.3.6, C99 6.5.6).'
13779
13780     The value is as specified in the standard and the type is
13781     determined by the ABI.
13782
13783
13784 ---------- Footnotes ----------
13785
13786 (1) Future versions of GCC may zero-extend, or use a target-defined
13787`ptr_extend' pattern.  Do not rely on sign extension.
13788
13789
13790File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
13791
137924.8 Hints
13793=========
13794
13795   * `The extent to which suggestions made by using the `register'
13796     storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
13797
13798     The `register' specifier affects code generation only in these
13799     ways:
13800
13801        * When used as part of the register variable extension, see
13802          *Note Explicit Reg Vars::.
13803
13804        * When `-O0' is in use, the compiler allocates distinct stack
13805          memory for all variables that do not have the `register'
13806          storage-class specifier; if `register' is specified, the
13807          variable may have a shorter lifespan than the code would
13808          indicate and may never be placed in memory.
13809
13810        * On some rare x86 targets, `setjmp' doesn't save the registers
13811          in all circumstances.  In those cases, GCC doesn't allocate
13812          any variables in registers unless they are marked `register'.
13813
13814
13815   * `The extent to which suggestions made by using the inline function
13816     specifier are effective (C99 6.7.4).'
13817
13818     GCC will not inline any functions if the `-fno-inline' option is
13819     used or if `-O0' is used.  Otherwise, GCC may still be unable to
13820     inline a function for many reasons; the `-Winline' option may be
13821     used to determine if a function has not been inlined and why not.
13822
13823
13824
13825File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
13826
138274.9 Structures, unions, enumerations, and bit-fields
13828====================================================
13829
13830   * `A member of a union object is accessed using a member of a
13831     different type (C90 6.3.2.3).'
13832
13833     The relevant bytes of the representation of the object are treated
13834     as an object of the type used for the access.  This may be a trap
13835     representation.
13836
13837   * `Whether a "plain" `int' bit-field is treated as a `signed int'
13838     bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
13839     6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
13840
13841     By default it is treated as `signed int' but this may be changed
13842     by the `-funsigned-bitfields' option.
13843
13844   * `Allowable bit-field types other than `_Bool', `signed int', and
13845     `unsigned int' (C99 6.7.2.1).'
13846
13847     No other types are permitted in strictly conforming mode.
13848
13849   * `Whether a bit-field can straddle a storage-unit boundary (C90
13850     6.5.2.1, C99 6.7.2.1).'
13851
13852     Determined by ABI.
13853
13854   * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
13855     C99 6.7.2.1).'
13856
13857     Determined by ABI.
13858
13859   * `The alignment of non-bit-field members of structures (C90
13860     6.5.2.1, C99 6.7.2.1).'
13861
13862     Determined by ABI.
13863
13864   * `The integer type compatible with each enumerated type (C90
13865     6.5.2.2, C99 6.7.2.2).'
13866
13867     Normally, the type is `unsigned int' if there are no negative
13868     values in the enumeration, otherwise `int'.  If `-fshort-enums' is
13869     specified, then if there are negative values it is the first of
13870     `signed char', `short' and `int' that can represent all the
13871     values, otherwise it is the first of `unsigned char', `unsigned
13872     short' and `unsigned int' that can represent all the values.
13873
13874     On some targets, `-fshort-enums' is the default; this is
13875     determined by the ABI.
13876
13877
13878
13879File: gcc.info,  Node: Qualifiers implementation,  Next: Declarators implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
13880
138814.10 Qualifiers
13882===============
13883
13884   * `What constitutes an access to an object that has
13885     volatile-qualified type (C90 6.5.3, C99 6.7.3).'
13886
13887     Such an object is normally accessed by pointers and used for
13888     accessing hardware.  In most expressions, it is intuitively
13889     obvious what is a read and what is a write.  For example
13890
13891          volatile int *dst = SOMEVALUE;
13892          volatile int *src = SOMEOTHERVALUE;
13893          *dst = *src;
13894
13895     will cause a read of the volatile object pointed to by SRC and
13896     store the value into the volatile object pointed to by DST.  There
13897     is no guarantee that these reads and writes are atomic, especially
13898     for objects larger than `int'.
13899
13900     However, if the volatile storage is not being modified, and the
13901     value of the volatile storage is not used, then the situation is
13902     less obvious.  For example
13903
13904          volatile int *src = SOMEVALUE;
13905          *src;
13906
13907     According to the C standard, such an expression is an rvalue whose
13908     type is the unqualified version of its original type, i.e. `int'.
13909     Whether GCC interprets this as a read of the volatile object being
13910     pointed to or only as a request to evaluate the expression for its
13911     side-effects depends on this type.
13912
13913     If it is a scalar type, or on most targets an aggregate type whose
13914     only member object is of a scalar type, or a union type whose
13915     member objects are of scalar types, the expression is interpreted
13916     by GCC as a read of the volatile object; in the other cases, the
13917     expression is only evaluated for its side-effects.
13918
13919
13920
13921File: gcc.info,  Node: Declarators implementation,  Next: Statements implementation,  Prev: Qualifiers implementation,  Up: C Implementation
13922
139234.11 Declarators
13924================
13925
13926   * `The maximum number of declarators that may modify an arithmetic,
13927     structure or union type (C90 6.5.4).'
13928
13929     GCC is only limited by available memory.
13930
13931
13932
13933File: gcc.info,  Node: Statements implementation,  Next: Preprocessing directives implementation,  Prev: Declarators implementation,  Up: C Implementation
13934
139354.12 Statements
13936===============
13937
13938   * `The maximum number of `case' values in a `switch' statement (C90
13939     6.6.4.2).'
13940
13941     GCC is only limited by available memory.
13942
13943
13944
13945File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Statements implementation,  Up: C Implementation
13946
139474.13 Preprocessing directives
13948=============================
13949
13950*Note Implementation-defined behavior: (cpp)Implementation-defined
13951behavior, for details of these aspects of implementation-defined
13952behavior.
13953
13954   * `How sequences in both forms of header names are mapped to headers
13955     or external source file names (C90 6.1.7, C99 6.4.7).'
13956
13957   * `Whether the value of a character constant in a constant expression
13958     that controls conditional inclusion matches the value of the same
13959     character constant in the execution character set (C90 6.8.1, C99
13960     6.10.1).'
13961
13962   * `Whether the value of a single-character character constant in a
13963     constant expression that controls conditional inclusion may have a
13964     negative value (C90 6.8.1, C99 6.10.1).'
13965
13966   * `The places that are searched for an included `<>' delimited
13967     header, and how the places are specified or the header is
13968     identified (C90 6.8.2, C99 6.10.2).'
13969
13970   * `How the named source file is searched for in an included `""'
13971     delimited header (C90 6.8.2, C99 6.10.2).'
13972
13973   * `The method by which preprocessing tokens (possibly resulting from
13974     macro expansion) in a `#include' directive are combined into a
13975     header name (C90 6.8.2, C99 6.10.2).'
13976
13977   * `The nesting limit for `#include' processing (C90 6.8.2, C99
13978     6.10.2).'
13979
13980   * `Whether the `#' operator inserts a `\' character before the `\'
13981     character that begins a universal character name in a character
13982     constant or string literal (C99 6.10.3.2).'
13983
13984   * `The behavior on each recognized non-`STDC #pragma' directive (C90
13985     6.8.6, C99 6.10.6).'
13986
13987     *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
13988     GCC on all targets.  *Note Pragmas Accepted by GCC: Pragmas, for
13989     details of target-specific pragmas.
13990
13991   * `The definitions for `__DATE__' and `__TIME__' when respectively,
13992     the date and time of translation are not available (C90 6.8.8, C99
13993     6.10.8).'
13994
13995
13996
13997File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
13998
139994.14 Library functions
14000======================
14001
14002The behavior of most of these points are dependent on the implementation
14003of the C library, and are not defined by GCC itself.
14004
14005   * `The null pointer constant to which the macro `NULL' expands (C90
14006     7.1.6, C99 7.17).'
14007
14008     In `<stddef.h>', `NULL' expands to `((void *)0)'.  GCC does not
14009     provide the other headers which define `NULL' and some library
14010     implementations may use other definitions in those headers.
14011
14012
14013
14014File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
14015
140164.15 Architecture
14017=================
14018
14019   * `The values or expressions assigned to the macros specified in the
14020     headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
14021     5.2.4.2, C99 7.18.2, C99 7.18.3).'
14022
14023     Determined by ABI.
14024
14025   * `The number, order, and encoding of bytes in any object (when not
14026     explicitly specified in this International Standard) (C99
14027     6.2.6.1).'
14028
14029     Determined by ABI.
14030
14031   * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
14032     C99 6.5.3.4).'
14033
14034     Determined by ABI.
14035
14036
14037
14038File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
14039
140404.16 Locale-specific behavior
14041=============================
14042
14043The behavior of these points are dependent on the implementation of the
14044C library, and are not defined by GCC itself.
14045
14046
14047File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C Implementation,  Up: Top
14048
140495 Extensions to the C Language Family
14050*************************************
14051
14052GNU C provides several language features not found in ISO standard C.
14053(The `-pedantic' option directs GCC to print a warning message if any
14054of these features is used.)  To test for the availability of these
14055features in conditional compilation, check for a predefined macro
14056`__GNUC__', which is always defined under GCC.
14057
14058 These extensions are available in C and Objective-C.  Most of them are
14059also available in C++.  *Note Extensions to the C++ Language: C++
14060Extensions, for extensions that apply _only_ to C++.
14061
14062 Some features that are in ISO C99 but not C89 or C++ are also, as
14063extensions, accepted by GCC in C89 mode and in C++.
14064
14065* Menu:
14066
14067* Statement Exprs::     Putting statements and declarations inside expressions.
14068* Local Labels::        Labels local to a block.
14069* Labels as Values::    Getting pointers to labels, and computed gotos.
14070* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
14071* Constructing Calls::	Dispatching a call to another function.
14072* Typeof::              `typeof': referring to the type of an expression.
14073* Conditionals::        Omitting the middle operand of a `?:' expression.
14074* Long Long::		Double-word integers---`long long int'.
14075* Complex::             Data types for complex numbers.
14076* Decimal Float::       Decimal Floating Types.
14077* Hex Floats::          Hexadecimal floating-point constants.
14078* Zero Length::         Zero-length arrays.
14079* Variable Length::     Arrays whose length is computed at run time.
14080* Empty Structures::    Structures with no members.
14081* Variadic Macros::	Macros with a variable number of arguments.
14082* Escaped Newlines::    Slightly looser rules for escaped newlines.
14083* Subscripting::        Any array can be subscripted, even if not an lvalue.
14084* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
14085* Initializers::        Non-constant initializers.
14086* Compound Literals::   Compound literals give structures, unions
14087                         or arrays as values.
14088* Designated Inits::	Labeling elements of initializers.
14089* Cast to Union::       Casting to union type from any member of the union.
14090* Case Ranges::		`case 1 ... 9' and such.
14091* Mixed Declarations::	Mixing declarations and code.
14092* Function Attributes:: Declaring that functions have no side effects,
14093                         or that they can never return.
14094* Attribute Syntax::    Formal syntax for attributes.
14095* Function Prototypes:: Prototype declarations and old-style definitions.
14096* C++ Comments::        C++ comments are recognized.
14097* Dollar Signs::        Dollar sign is allowed in identifiers.
14098* Character Escapes::   `\e' stands for the character <ESC>.
14099* Variable Attributes::	Specifying attributes of variables.
14100* Type Attributes::	Specifying attributes of types.
14101* Alignment::           Inquiring about the alignment of a type or variable.
14102* Inline::              Defining inline functions (as fast as macros).
14103* Extended Asm::        Assembler instructions with C expressions as operands.
14104                         (With them you can define ``built-in'' functions.)
14105* Constraints::         Constraints for asm operands
14106* Asm Labels::          Specifying the assembler name to use for a C symbol.
14107* Explicit Reg Vars::   Defining variables residing in specified registers.
14108* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
14109* Incomplete Enums::    `enum foo;', with details to follow.
14110* Function Names::	Printable strings which are the name of the current
14111			 function.
14112* Return Address::      Getting the return or frame address of a function.
14113* Vector Extensions::   Using vector instructions through built-in functions.
14114* Offsetof::            Special syntax for implementing `offsetof'.
14115* Atomic Builtins::	Built-in functions for atomic memory access.
14116* Object Size Checking:: Built-in functions for limited buffer overflow
14117                        checking.
14118* Other Builtins::      Other built-in functions.
14119* Target Builtins::     Built-in functions specific to particular targets.
14120* Target Format Checks:: Format checks specific to particular targets.
14121* Pragmas::             Pragmas accepted by GCC.
14122* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
14123* Thread-Local::        Per-thread variables.
14124
14125
14126File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
14127
141285.1 Statements and Declarations in Expressions
14129==============================================
14130
14131A compound statement enclosed in parentheses may appear as an expression
14132in GNU C.  This allows you to use loops, switches, and local variables
14133within an expression.
14134
14135 Recall that a compound statement is a sequence of statements surrounded
14136by braces; in this construct, parentheses go around the braces.  For
14137example:
14138
14139     ({ int y = foo (); int z;
14140        if (y > 0) z = y;
14141        else z = - y;
14142        z; })
14143
14144is a valid (though slightly more complex than necessary) expression for
14145the absolute value of `foo ()'.
14146
14147 The last thing in the compound statement should be an expression
14148followed by a semicolon; the value of this subexpression serves as the
14149value of the entire construct.  (If you use some other kind of statement
14150last within the braces, the construct has type `void', and thus
14151effectively no value.)
14152
14153 This feature is especially useful in making macro definitions "safe"
14154(so that they evaluate each operand exactly once).  For example, the
14155"maximum" function is commonly defined as a macro in standard C as
14156follows:
14157
14158     #define max(a,b) ((a) > (b) ? (a) : (b))
14159
14160But this definition computes either A or B twice, with bad results if
14161the operand has side effects.  In GNU C, if you know the type of the
14162operands (here taken as `int'), you can define the macro safely as
14163follows:
14164
14165     #define maxint(a,b) \
14166       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
14167
14168 Embedded statements are not allowed in constant expressions, such as
14169the value of an enumeration constant, the width of a bit-field, or the
14170initial value of a static variable.
14171
14172 If you don't know the type of the operand, you can still do this, but
14173you must use `typeof' (*note Typeof::).
14174
14175 In G++, the result value of a statement expression undergoes array and
14176function pointer decay, and is returned by value to the enclosing
14177expression.  For instance, if `A' is a class, then
14178
14179             A a;
14180
14181             ({a;}).Foo ()
14182
14183will construct a temporary `A' object to hold the result of the
14184statement expression, and that will be used to invoke `Foo'.  Therefore
14185the `this' pointer observed by `Foo' will not be the address of `a'.
14186
14187 Any temporaries created within a statement within a statement
14188expression will be destroyed at the statement's end.  This makes
14189statement expressions inside macros slightly different from function
14190calls.  In the latter case temporaries introduced during argument
14191evaluation will be destroyed at the end of the statement that includes
14192the function call.  In the statement expression case they will be
14193destroyed during the statement expression.  For instance,
14194
14195     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
14196     template<typename T> T function(T a) { T b = a; return b + 3; }
14197
14198     void foo ()
14199     {
14200       macro (X ());
14201       function (X ());
14202     }
14203
14204will have different places where temporaries are destroyed.  For the
14205`macro' case, the temporary `X' will be destroyed just after the
14206initialization of `b'.  In the `function' case that temporary will be
14207destroyed when the function returns.
14208
14209 These considerations mean that it is probably a bad idea to use
14210statement-expressions of this form in header files that are designed to
14211work with C++.  (Note that some versions of the GNU C Library contained
14212header files using statement-expression that lead to precisely this
14213bug.)
14214
14215 Jumping into a statement expression with `goto' or using a `switch'
14216statement outside the statement expression with a `case' or `default'
14217label inside the statement expression is not permitted.  Jumping into a
14218statement expression with a computed `goto' (*note Labels as Values::)
14219yields undefined behavior.  Jumping out of a statement expression is
14220permitted, but if the statement expression is part of a larger
14221expression then it is unspecified which other subexpressions of that
14222expression have been evaluated except where the language definition
14223requires certain subexpressions to be evaluated before or after the
14224statement expression.  In any case, as with a function call the
14225evaluation of a statement expression is not interleaved with the
14226evaluation of other parts of the containing expression.  For example,
14227
14228       foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
14229
14230will call `foo' and `bar1' and will not call `baz' but may or may not
14231call `bar2'.  If `bar2' is called, it will be called after `foo' and
14232before `bar1'
14233
14234
14235File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
14236
142375.2 Locally Declared Labels
14238===========================
14239
14240GCC allows you to declare "local labels" in any nested block scope.  A
14241local label is just like an ordinary label, but you can only reference
14242it (with a `goto' statement, or by taking its address) within the block
14243in which it was declared.
14244
14245 A local label declaration looks like this:
14246
14247     __label__ LABEL;
14248
14249or
14250
14251     __label__ LABEL1, LABEL2, /* ... */;
14252
14253 Local label declarations must come at the beginning of the block,
14254before any ordinary declarations or statements.
14255
14256 The label declaration defines the label _name_, but does not define
14257the label itself.  You must do this in the usual way, with `LABEL:',
14258within the statements of the statement expression.
14259
14260 The local label feature is useful for complex macros.  If a macro
14261contains nested loops, a `goto' can be useful for breaking out of them.
14262However, an ordinary label whose scope is the whole function cannot be
14263used: if the macro can be expanded several times in one function, the
14264label will be multiply defined in that function.  A local label avoids
14265this problem.  For example:
14266
14267     #define SEARCH(value, array, target)              \
14268     do {                                              \
14269       __label__ found;                                \
14270       typeof (target) _SEARCH_target = (target);      \
14271       typeof (*(array)) *_SEARCH_array = (array);     \
14272       int i, j;                                       \
14273       int value;                                      \
14274       for (i = 0; i < max; i++)                       \
14275         for (j = 0; j < max; j++)                     \
14276           if (_SEARCH_array[i][j] == _SEARCH_target)  \
14277             { (value) = i; goto found; }              \
14278       (value) = -1;                                   \
14279      found:;                                          \
14280     } while (0)
14281
14282 This could also be written using a statement-expression:
14283
14284     #define SEARCH(array, target)                     \
14285     ({                                                \
14286       __label__ found;                                \
14287       typeof (target) _SEARCH_target = (target);      \
14288       typeof (*(array)) *_SEARCH_array = (array);     \
14289       int i, j;                                       \
14290       int value;                                      \
14291       for (i = 0; i < max; i++)                       \
14292         for (j = 0; j < max; j++)                     \
14293           if (_SEARCH_array[i][j] == _SEARCH_target)  \
14294             { value = i; goto found; }                \
14295       value = -1;                                     \
14296      found:                                           \
14297       value;                                          \
14298     })
14299
14300 Local label declarations also make the labels they declare visible to
14301nested functions, if there are any.  *Note Nested Functions::, for
14302details.
14303
14304
14305File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
14306
143075.3 Labels as Values
14308====================
14309
14310You can get the address of a label defined in the current function (or
14311a containing function) with the unary operator `&&'.  The value has
14312type `void *'.  This value is a constant and can be used wherever a
14313constant of that type is valid.  For example:
14314
14315     void *ptr;
14316     /* ... */
14317     ptr = &&foo;
14318
14319 To use these values, you need to be able to jump to one.  This is done
14320with the computed goto statement(1), `goto *EXP;'.  For example,
14321
14322     goto *ptr;
14323
14324Any expression of type `void *' is allowed.
14325
14326 One way of using these constants is in initializing a static array that
14327will serve as a jump table:
14328
14329     static void *array[] = { &&foo, &&bar, &&hack };
14330
14331 Then you can select a label with indexing, like this:
14332
14333     goto *array[i];
14334
14335Note that this does not check whether the subscript is in bounds--array
14336indexing in C never does that.
14337
14338 Such an array of label values serves a purpose much like that of the
14339`switch' statement.  The `switch' statement is cleaner, so use that
14340rather than an array unless the problem does not fit a `switch'
14341statement very well.
14342
14343 Another use of label values is in an interpreter for threaded code.
14344The labels within the interpreter function can be stored in the
14345threaded code for super-fast dispatching.
14346
14347 You may not use this mechanism to jump to code in a different function.
14348If you do that, totally unpredictable things will happen.  The best way
14349to avoid this is to store the label address only in automatic variables
14350and never pass it as an argument.
14351
14352 An alternate way to write the above example is
14353
14354     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
14355                                  &&hack - &&foo };
14356     goto *(&&foo + array[i]);
14357
14358This is more friendly to code living in shared libraries, as it reduces
14359the number of dynamic relocations that are needed, and by consequence,
14360allows the data to be read-only.
14361
14362 ---------- Footnotes ----------
14363
14364 (1) The analogous feature in Fortran is called an assigned goto, but
14365that name seems inappropriate in C, where one can do more than simply
14366store label addresses in label variables.
14367
14368
14369File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
14370
143715.4 Nested Functions
14372====================
14373
14374A "nested function" is a function defined inside another function.
14375(Nested functions are not supported for GNU C++.)  The nested function's
14376name is local to the block where it is defined.  For example, here we
14377define a nested function named `square', and call it twice:
14378
14379     foo (double a, double b)
14380     {
14381       double square (double z) { return z * z; }
14382
14383       return square (a) + square (b);
14384     }
14385
14386 The nested function can access all the variables of the containing
14387function that are visible at the point of its definition.  This is
14388called "lexical scoping".  For example, here we show a nested function
14389which uses an inherited variable named `offset':
14390
14391     bar (int *array, int offset, int size)
14392     {
14393       int access (int *array, int index)
14394         { return array[index + offset]; }
14395       int i;
14396       /* ... */
14397       for (i = 0; i < size; i++)
14398         /* ... */ access (array, i) /* ... */
14399     }
14400
14401 Nested function definitions are permitted within functions in the
14402places where variable definitions are allowed; that is, in any block,
14403mixed with the other declarations and statements in the block.
14404
14405 It is possible to call the nested function from outside the scope of
14406its name by storing its address or passing the address to another
14407function:
14408
14409     hack (int *array, int size)
14410     {
14411       void store (int index, int value)
14412         { array[index] = value; }
14413
14414       intermediate (store, size);
14415     }
14416
14417 Here, the function `intermediate' receives the address of `store' as
14418an argument.  If `intermediate' calls `store', the arguments given to
14419`store' are used to store into `array'.  But this technique works only
14420so long as the containing function (`hack', in this example) does not
14421exit.
14422
14423 If you try to call the nested function through its address after the
14424containing function has exited, all hell will break loose.  If you try
14425to call it after a containing scope level has exited, and if it refers
14426to some of the variables that are no longer in scope, you may be lucky,
14427but it's not wise to take the risk.  If, however, the nested function
14428does not refer to anything that has gone out of scope, you should be
14429safe.
14430
14431 GCC implements taking the address of a nested function using a
14432technique called "trampolines".  A paper describing them is available as
14433
14434`http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
14435
14436 A nested function can jump to a label inherited from a containing
14437function, provided the label was explicitly declared in the containing
14438function (*note Local Labels::).  Such a jump returns instantly to the
14439containing function, exiting the nested function which did the `goto'
14440and any intermediate functions as well.  Here is an example:
14441
14442     bar (int *array, int offset, int size)
14443     {
14444       __label__ failure;
14445       int access (int *array, int index)
14446         {
14447           if (index > size)
14448             goto failure;
14449           return array[index + offset];
14450         }
14451       int i;
14452       /* ... */
14453       for (i = 0; i < size; i++)
14454         /* ... */ access (array, i) /* ... */
14455       /* ... */
14456       return 0;
14457
14458      /* Control comes here from `access'
14459         if it detects an error.  */
14460      failure:
14461       return -1;
14462     }
14463
14464 A nested function always has no linkage.  Declaring one with `extern'
14465or `static' is erroneous.  If you need to declare the nested function
14466before its definition, use `auto' (which is otherwise meaningless for
14467function declarations).
14468
14469     bar (int *array, int offset, int size)
14470     {
14471       __label__ failure;
14472       auto int access (int *, int);
14473       /* ... */
14474       int access (int *array, int index)
14475         {
14476           if (index > size)
14477             goto failure;
14478           return array[index + offset];
14479         }
14480       /* ... */
14481     }
14482
14483
14484File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
14485
144865.5 Constructing Function Calls
14487===============================
14488
14489Using the built-in functions described below, you can record the
14490arguments a function received, and call another function with the same
14491arguments, without knowing the number or types of the arguments.
14492
14493 You can also record the return value of that function call, and later
14494return that value, without knowing what data type the function tried to
14495return (as long as your caller expects that data type).
14496
14497 However, these built-in functions may interact badly with some
14498sophisticated features or other extensions of the language.  It is,
14499therefore, not recommended to use them outside very simple functions
14500acting as mere forwarders for their arguments.
14501
14502 -- Built-in Function: void * __builtin_apply_args ()
14503     This built-in function returns a pointer to data describing how to
14504     perform a call with the same arguments as were passed to the
14505     current function.
14506
14507     The function saves the arg pointer register, structure value
14508     address, and all registers that might be used to pass arguments to
14509     a function into a block of memory allocated on the stack.  Then it
14510     returns the address of that block.
14511
14512 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
14513          *ARGUMENTS, size_t SIZE)
14514     This built-in function invokes FUNCTION with a copy of the
14515     parameters described by ARGUMENTS and SIZE.
14516
14517     The value of ARGUMENTS should be the value returned by
14518     `__builtin_apply_args'.  The argument SIZE specifies the size of
14519     the stack argument data, in bytes.
14520
14521     This function returns a pointer to data describing how to return
14522     whatever value was returned by FUNCTION.  The data is saved in a
14523     block of memory allocated on the stack.
14524
14525     It is not always simple to compute the proper value for SIZE.  The
14526     value is used by `__builtin_apply' to compute the amount of data
14527     that should be pushed on the stack and copied from the incoming
14528     argument area.
14529
14530 -- Built-in Function: void __builtin_return (void *RESULT)
14531     This built-in function returns the value described by RESULT from
14532     the containing function.  You should specify, for RESULT, a value
14533     returned by `__builtin_apply'.
14534
14535
14536File: gcc.info,  Node: Typeof,  Next: Conditionals,  Prev: Constructing Calls,  Up: C Extensions
14537
145385.6 Referring to a Type with `typeof'
14539=====================================
14540
14541Another way to refer to the type of an expression is with `typeof'.
14542The syntax of using of this keyword looks like `sizeof', but the
14543construct acts semantically like a type name defined with `typedef'.
14544
14545 There are two ways of writing the argument to `typeof': with an
14546expression or with a type.  Here is an example with an expression:
14547
14548     typeof (x[0](1))
14549
14550This assumes that `x' is an array of pointers to functions; the type
14551described is that of the values of the functions.
14552
14553 Here is an example with a typename as the argument:
14554
14555     typeof (int *)
14556
14557Here the type described is that of pointers to `int'.
14558
14559 If you are writing a header file that must work when included in ISO C
14560programs, write `__typeof__' instead of `typeof'.  *Note Alternate
14561Keywords::.
14562
14563 A `typeof'-construct can be used anywhere a typedef name could be
14564used.  For example, you can use it in a declaration, in a cast, or
14565inside of `sizeof' or `typeof'.
14566
14567 `typeof' is often useful in conjunction with the
14568statements-within-expressions feature.  Here is how the two together can
14569be used to define a safe "maximum" macro that operates on any
14570arithmetic type and evaluates each of its arguments exactly once:
14571
14572     #define max(a,b) \
14573       ({ typeof (a) _a = (a); \
14574           typeof (b) _b = (b); \
14575         _a > _b ? _a : _b; })
14576
14577 The reason for using names that start with underscores for the local
14578variables is to avoid conflicts with variable names that occur within
14579the expressions that are substituted for `a' and `b'.  Eventually we
14580hope to design a new form of declaration syntax that allows you to
14581declare variables whose scopes start only after their initializers;
14582this will be a more reliable way to prevent such conflicts.
14583
14584Some more examples of the use of `typeof':
14585
14586   * This declares `y' with the type of what `x' points to.
14587
14588          typeof (*x) y;
14589
14590   * This declares `y' as an array of such values.
14591
14592          typeof (*x) y[4];
14593
14594   * This declares `y' as an array of pointers to characters:
14595
14596          typeof (typeof (char *)[4]) y;
14597
14598     It is equivalent to the following traditional C declaration:
14599
14600          char *y[4];
14601
14602     To see the meaning of the declaration using `typeof', and why it
14603     might be a useful way to write, rewrite it with these macros:
14604
14605          #define pointer(T)  typeof(T *)
14606          #define array(T, N) typeof(T [N])
14607
14608     Now the declaration can be rewritten this way:
14609
14610          array (pointer (char), 4) y;
14611
14612     Thus, `array (pointer (char), 4)' is the type of arrays of 4
14613     pointers to `char'.
14614
14615 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
14616limited extension which permitted one to write
14617
14618     typedef T = EXPR;
14619
14620with the effect of declaring T to have the type of the expression EXPR.
14621This extension does not work with GCC 3 (versions between 3.0 and 3.2
14622will crash; 3.2.1 and later give an error).  Code which relies on it
14623should be rewritten to use `typeof':
14624
14625     typedef typeof(EXPR) T;
14626
14627This will work with all versions of GCC.
14628
14629
14630File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Typeof,  Up: C Extensions
14631
146325.7 Conditionals with Omitted Operands
14633======================================
14634
14635The middle operand in a conditional expression may be omitted.  Then if
14636the first operand is nonzero, its value is the value of the conditional
14637expression.
14638
14639 Therefore, the expression
14640
14641     x ? : y
14642
14643has the value of `x' if that is nonzero; otherwise, the value of `y'.
14644
14645 This example is perfectly equivalent to
14646
14647     x ? x : y
14648
14649In this simple case, the ability to omit the middle operand is not
14650especially useful.  When it becomes useful is when the first operand
14651does, or may (if it is a macro argument), contain a side effect.  Then
14652repeating the operand in the middle would perform the side effect
14653twice.  Omitting the middle operand uses the value already computed
14654without the undesirable effects of recomputing it.
14655
14656
14657File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
14658
146595.8 Double-Word Integers
14660========================
14661
14662ISO C99 supports data types for integers that are at least 64 bits wide,
14663and as an extension GCC supports them in C89 mode and in C++.  Simply
14664write `long long int' for a signed integer, or `unsigned long long int'
14665for an unsigned integer.  To make an integer constant of type `long
14666long int', add the suffix `LL' to the integer.  To make an integer
14667constant of type `unsigned long long int', add the suffix `ULL' to the
14668integer.
14669
14670 You can use these types in arithmetic like any other integer types.
14671Addition, subtraction, and bitwise boolean operations on these types
14672are open-coded on all types of machines.  Multiplication is open-coded
14673if the machine supports fullword-to-doubleword a widening multiply
14674instruction.  Division and shifts are open-coded only on machines that
14675provide special support.  The operations that are not open-coded use
14676special library routines that come with GCC.
14677
14678 There may be pitfalls when you use `long long' types for function
14679arguments, unless you declare function prototypes.  If a function
14680expects type `int' for its argument, and you pass a value of type `long
14681long int', confusion will result because the caller and the subroutine
14682will disagree about the number of bytes for the argument.  Likewise, if
14683the function expects `long long int' and you pass `int'.  The best way
14684to avoid such problems is to use prototypes.
14685
14686
14687File: gcc.info,  Node: Complex,  Next: Decimal Float,  Prev: Long Long,  Up: C Extensions
14688
146895.9 Complex Numbers
14690===================
14691
14692ISO C99 supports complex floating data types, and as an extension GCC
14693supports them in C89 mode and in C++, and supports complex integer data
14694types which are not part of ISO C99.  You can declare complex types
14695using the keyword `_Complex'.  As an extension, the older GNU keyword
14696`__complex__' is also supported.
14697
14698 For example, `_Complex double x;' declares `x' as a variable whose
14699real part and imaginary part are both of type `double'.  `_Complex
14700short int y;' declares `y' to have real and imaginary parts of type
14701`short int'; this is not likely to be useful, but it shows that the set
14702of complex types is complete.
14703
14704 To write a constant with a complex data type, use the suffix `i' or
14705`j' (either one; they are equivalent).  For example, `2.5fi' has type
14706`_Complex float' and `3i' has type `_Complex int'.  Such a constant
14707always has a pure imaginary value, but you can form any complex value
14708you like by adding one to a real constant.  This is a GNU extension; if
14709you have an ISO C99 conforming C library (such as GNU libc), and want
14710to construct complex constants of floating type, you should include
14711`<complex.h>' and use the macros `I' or `_Complex_I' instead.
14712
14713 To extract the real part of a complex-valued expression EXP, write
14714`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
14715part.  This is a GNU extension; for values of floating type, you should
14716use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
14717`cimag' and `cimagl', declared in `<complex.h>' and also provided as
14718built-in functions by GCC.
14719
14720 The operator `~' performs complex conjugation when used on a value
14721with a complex type.  This is a GNU extension; for values of floating
14722type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
14723declared in `<complex.h>' and also provided as built-in functions by
14724GCC.
14725
14726 GCC can allocate complex automatic variables in a noncontiguous
14727fashion; it's even possible for the real part to be in a register while
14728the imaginary part is on the stack (or vice-versa).  Only the DWARF2
14729debug info format can represent this, so use of DWARF2 is recommended.
14730If you are using the stabs debug info format, GCC describes a
14731noncontiguous complex variable as if it were two separate variables of
14732noncomplex type.  If the variable's actual name is `foo', the two
14733fictitious variables are named `foo$real' and `foo$imag'.  You can
14734examine and set these two fictitious variables with your debugger.
14735
14736
14737File: gcc.info,  Node: Decimal Float,  Next: Hex Floats,  Prev: Complex,  Up: C Extensions
14738
147395.10 Decimal Floating Types
14740===========================
14741
14742As an extension, the GNU C compiler supports decimal floating types as
14743defined in the N1176 draft of ISO/IEC WDTR24732.  Support for decimal
14744floating types in GCC will evolve as the draft technical report changes.
14745Calling conventions for any target might also change.  Not all targets
14746support decimal floating types.
14747
14748 The decimal floating types are `_Decimal32', `_Decimal64', and
14749`_Decimal128'.  They use a radix of ten, unlike the floating types
14750`float', `double', and `long double' whose radix is not specified by
14751the C standard but is usually two.
14752
14753 Support for decimal floating types includes the arithmetic operators
14754add, subtract, multiply, divide; unary arithmetic operators; relational
14755operators; equality operators; and conversions to and from integer and
14756other floating types.  Use a suffix `df' or `DF' in a literal constant
14757of type `_Decimal32', `dd' or `DD' for `_Decimal64', and `dl' or `DL'
14758for `_Decimal128'.
14759
14760 GCC support of decimal float as specified by the draft technical report
14761is incomplete:
14762
14763   * Translation time data type (TTDT) is not supported.
14764
14765   * Characteristics of decimal floating types are defined in header
14766     file `decfloat.h' rather than `float.h'.
14767
14768   * When the value of a decimal floating type cannot be represented in
14769     the integer type to which it is being converted, the result is
14770     undefined rather than the result value specified by the draft
14771     technical report.
14772
14773 Types `_Decimal32', `_Decimal64', and `_Decimal128' are supported by
14774the DWARF2 debug information format.
14775
14776
14777File: gcc.info,  Node: Hex Floats,  Next: Zero Length,  Prev: Decimal Float,  Up: C Extensions
14778
147795.11 Hex Floats
14780===============
14781
14782ISO C99 supports floating-point numbers written not only in the usual
14783decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
14784written in hexadecimal format.  As a GNU extension, GCC supports this
14785in C89 mode (except in some cases when strictly conforming) and in C++.
14786In that format the `0x' hex introducer and the `p' or `P' exponent
14787field are mandatory.  The exponent is a decimal number that indicates
14788the power of 2 by which the significant part will be multiplied.  Thus
14789`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
14790is the same as `1.55e1'.
14791
14792 Unlike for floating-point numbers in the decimal notation the exponent
14793is always required in the hexadecimal notation.  Otherwise the compiler
14794would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
14795could mean `1.0f' or `1.9375' since `f' is also the extension for
14796floating-point constants of type `float'.
14797
14798
14799File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Hex Floats,  Up: C Extensions
14800
148015.12 Arrays of Length Zero
14802==========================
14803
14804Zero-length arrays are allowed in GNU C.  They are very useful as the
14805last element of a structure which is really a header for a
14806variable-length object:
14807
14808     struct line {
14809       int length;
14810       char contents[0];
14811     };
14812
14813     struct line *thisline = (struct line *)
14814       malloc (sizeof (struct line) + this_length);
14815     thisline->length = this_length;
14816
14817 In ISO C90, you would have to give `contents' a length of 1, which
14818means either you waste space or complicate the argument to `malloc'.
14819
14820 In ISO C99, you would use a "flexible array member", which is slightly
14821different in syntax and semantics:
14822
14823   * Flexible array members are written as `contents[]' without the `0'.
14824
14825   * Flexible array members have incomplete type, and so the `sizeof'
14826     operator may not be applied.  As a quirk of the original
14827     implementation of zero-length arrays, `sizeof' evaluates to zero.
14828
14829   * Flexible array members may only appear as the last member of a
14830     `struct' that is otherwise non-empty.
14831
14832   * A structure containing a flexible array member, or a union
14833     containing such a structure (possibly recursively), may not be a
14834     member of a structure or an element of an array.  (However, these
14835     uses are permitted by GCC as extensions.)
14836
14837 GCC versions before 3.0 allowed zero-length arrays to be statically
14838initialized, as if they were flexible arrays.  In addition to those
14839cases that were useful, it also allowed initializations in situations
14840that would corrupt later data.  Non-empty initialization of zero-length
14841arrays is now treated like any case where there are more initializer
14842elements than the array holds, in that a suitable warning about "excess
14843elements in array" is given, and the excess elements (all of them, in
14844this case) are ignored.
14845
14846 Instead GCC allows static initialization of flexible array members.
14847This is equivalent to defining a new structure containing the original
14848structure followed by an array of sufficient size to contain the data.
14849I.e. in the following, `f1' is constructed as if it were declared like
14850`f2'.
14851
14852     struct f1 {
14853       int x; int y[];
14854     } f1 = { 1, { 2, 3, 4 } };
14855
14856     struct f2 {
14857       struct f1 f1; int data[3];
14858     } f2 = { { 1 }, { 2, 3, 4 } };
14859
14860The convenience of this extension is that `f1' has the desired type,
14861eliminating the need to consistently refer to `f2.f1'.
14862
14863 This has symmetry with normal static arrays, in that an array of
14864unknown size is also written with `[]'.
14865
14866 Of course, this extension only makes sense if the extra data comes at
14867the end of a top-level object, as otherwise we would be overwriting
14868data at subsequent offsets.  To avoid undue complication and confusion
14869with initialization of deeply nested arrays, we simply disallow any
14870non-empty initialization except when the structure is the top-level
14871object.  For example:
14872
14873     struct foo { int x; int y[]; };
14874     struct bar { struct foo z; };
14875
14876     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
14877     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
14878     struct bar c = { { 1, { } } };            // Valid.
14879     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
14880
14881
14882File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
14883
148845.13 Structures With No Members
14885===============================
14886
14887GCC permits a C structure to have no members:
14888
14889     struct empty {
14890     };
14891
14892 The structure will have size zero.  In C++, empty structures are part
14893of the language.  G++ treats empty structures as if they had a single
14894member of type `char'.
14895
14896
14897File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
14898
148995.14 Arrays of Variable Length
14900==============================
14901
14902Variable-length automatic arrays are allowed in ISO C99, and as an
14903extension GCC accepts them in C89 mode and in C++.  (However, GCC's
14904implementation of variable-length arrays does not yet conform in detail
14905to the ISO C99 standard.)  These arrays are declared like any other
14906automatic arrays, but with a length that is not a constant expression.
14907The storage is allocated at the point of declaration and deallocated
14908when the brace-level is exited.  For example:
14909
14910     FILE *
14911     concat_fopen (char *s1, char *s2, char *mode)
14912     {
14913       char str[strlen (s1) + strlen (s2) + 1];
14914       strcpy (str, s1);
14915       strcat (str, s2);
14916       return fopen (str, mode);
14917     }
14918
14919 Jumping or breaking out of the scope of the array name deallocates the
14920storage.  Jumping into the scope is not allowed; you get an error
14921message for it.
14922
14923 You can use the function `alloca' to get an effect much like
14924variable-length arrays.  The function `alloca' is available in many
14925other C implementations (but not in all).  On the other hand,
14926variable-length arrays are more elegant.
14927
14928 There are other differences between these two methods.  Space allocated
14929with `alloca' exists until the containing _function_ returns.  The
14930space for a variable-length array is deallocated as soon as the array
14931name's scope ends.  (If you use both variable-length arrays and
14932`alloca' in the same function, deallocation of a variable-length array
14933will also deallocate anything more recently allocated with `alloca'.)
14934
14935 You can also use variable-length arrays as arguments to functions:
14936
14937     struct entry
14938     tester (int len, char data[len][len])
14939     {
14940       /* ... */
14941     }
14942
14943 The length of an array is computed once when the storage is allocated
14944and is remembered for the scope of the array in case you access it with
14945`sizeof'.
14946
14947 If you want to pass the array first and the length afterward, you can
14948use a forward declaration in the parameter list--another GNU extension.
14949
14950     struct entry
14951     tester (int len; char data[len][len], int len)
14952     {
14953       /* ... */
14954     }
14955
14956 The `int len' before the semicolon is a "parameter forward
14957declaration", and it serves the purpose of making the name `len' known
14958when the declaration of `data' is parsed.
14959
14960 You can write any number of such parameter forward declarations in the
14961parameter list.  They can be separated by commas or semicolons, but the
14962last one must end with a semicolon, which is followed by the "real"
14963parameter declarations.  Each forward declaration must match a "real"
14964declaration in parameter name and data type.  ISO C99 does not support
14965parameter forward declarations.
14966
14967
14968File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
14969
149705.15 Macros with a Variable Number of Arguments.
14971================================================
14972
14973In the ISO C standard of 1999, a macro can be declared to accept a
14974variable number of arguments much as a function can.  The syntax for
14975defining the macro is similar to that of a function.  Here is an
14976example:
14977
14978     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
14979
14980 Here `...' is a "variable argument".  In the invocation of such a
14981macro, it represents the zero or more tokens until the closing
14982parenthesis that ends the invocation, including any commas.  This set of
14983tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
14984it appears.  See the CPP manual for more information.
14985
14986 GCC has long supported variadic macros, and used a different syntax
14987that allowed you to give a name to the variable arguments just like any
14988other argument.  Here is an example:
14989
14990     #define debug(format, args...) fprintf (stderr, format, args)
14991
14992 This is in all ways equivalent to the ISO C example above, but arguably
14993more readable and descriptive.
14994
14995 GNU CPP has two further variadic macro extensions, and permits them to
14996be used with either of the above forms of macro definition.
14997
14998 In standard C, you are not allowed to leave the variable argument out
14999entirely; but you are allowed to pass an empty argument.  For example,
15000this invocation is invalid in ISO C, because there is no comma after
15001the string:
15002
15003     debug ("A message")
15004
15005 GNU CPP permits you to completely omit the variable arguments in this
15006way.  In the above examples, the compiler would complain, though since
15007the expansion of the macro still has the extra comma after the format
15008string.
15009
15010 To help solve this problem, CPP behaves specially for variable
15011arguments used with the token paste operator, `##'.  If instead you
15012write
15013
15014     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
15015
15016 and if the variable arguments are omitted or empty, the `##' operator
15017causes the preprocessor to remove the comma before it.  If you do
15018provide some variable arguments in your macro invocation, GNU CPP does
15019not complain about the paste operation and instead places the variable
15020arguments after the comma.  Just like any other pasted macro argument,
15021these arguments are not macro expanded.
15022
15023
15024File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
15025
150265.16 Slightly Looser Rules for Escaped Newlines
15027===============================================
15028
15029Recently, the preprocessor has relaxed its treatment of escaped
15030newlines.  Previously, the newline had to immediately follow a
15031backslash.  The current implementation allows whitespace in the form of
15032spaces, horizontal and vertical tabs, and form feeds between the
15033backslash and the subsequent newline.  The preprocessor issues a
15034warning, but treats it as a valid escaped newline and combines the two
15035lines to form a single logical line.  This works within comments and
15036tokens, as well as between tokens.  Comments are _not_ treated as
15037whitespace for the purposes of this relaxation, since they have not yet
15038been replaced with spaces.
15039
15040
15041File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
15042
150435.17 Non-Lvalue Arrays May Have Subscripts
15044==========================================
15045
15046In ISO C99, arrays that are not lvalues still decay to pointers, and
15047may be subscripted, although they may not be modified or used after the
15048next sequence point and the unary `&' operator may not be applied to
15049them.  As an extension, GCC allows such arrays to be subscripted in C89
15050mode, though otherwise they do not decay to pointers outside C99 mode.
15051For example, this is valid in GNU C though not valid in C89:
15052
15053     struct foo {int a[4];};
15054
15055     struct foo f();
15056
15057     bar (int index)
15058     {
15059       return f().a[index];
15060     }
15061
15062
15063File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
15064
150655.18 Arithmetic on `void'- and Function-Pointers
15066================================================
15067
15068In GNU C, addition and subtraction operations are supported on pointers
15069to `void' and on pointers to functions.  This is done by treating the
15070size of a `void' or of a function as 1.
15071
15072 A consequence of this is that `sizeof' is also allowed on `void' and
15073on function types, and returns 1.
15074
15075 The option `-Wpointer-arith' requests a warning if these extensions
15076are used.
15077
15078
15079File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
15080
150815.19 Non-Constant Initializers
15082==============================
15083
15084As in standard C++ and ISO C99, the elements of an aggregate
15085initializer for an automatic variable are not required to be constant
15086expressions in GNU C.  Here is an example of an initializer with
15087run-time varying elements:
15088
15089     foo (float f, float g)
15090     {
15091       float beat_freqs[2] = { f-g, f+g };
15092       /* ... */
15093     }
15094
15095
15096File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
15097
150985.20 Compound Literals
15099======================
15100
15101ISO C99 supports compound literals.  A compound literal looks like a
15102cast containing an initializer.  Its value is an object of the type
15103specified in the cast, containing the elements specified in the
15104initializer; it is an lvalue.  As an extension, GCC supports compound
15105literals in C89 mode and in C++.
15106
15107 Usually, the specified type is a structure.  Assume that `struct foo'
15108and `structure' are declared as shown:
15109
15110     struct foo {int a; char b[2];} structure;
15111
15112Here is an example of constructing a `struct foo' with a compound
15113literal:
15114
15115     structure = ((struct foo) {x + y, 'a', 0});
15116
15117This is equivalent to writing the following:
15118
15119     {
15120       struct foo temp = {x + y, 'a', 0};
15121       structure = temp;
15122     }
15123
15124 You can also construct an array.  If all the elements of the compound
15125literal are (made up of) simple constant expressions, suitable for use
15126in initializers of objects of static storage duration, then the compound
15127literal can be coerced to a pointer to its first element and used in
15128such an initializer, as shown here:
15129
15130     char **foo = (char *[]) { "x", "y", "z" };
15131
15132 Compound literals for scalar types and union types are is also
15133allowed, but then the compound literal is equivalent to a cast.
15134
15135 As a GNU extension, GCC allows initialization of objects with static
15136storage duration by compound literals (which is not possible in ISO
15137C99, because the initializer is not a constant).  It is handled as if
15138the object was initialized only with the bracket enclosed list if the
15139types of the compound literal and the object match.  The initializer
15140list of the compound literal must be constant.  If the object being
15141initialized has array type of unknown size, the size is determined by
15142compound literal size.
15143
15144     static struct foo x = (struct foo) {1, 'a', 'b'};
15145     static int y[] = (int []) {1, 2, 3};
15146     static int z[] = (int [3]) {1};
15147
15148The above lines are equivalent to the following:
15149     static struct foo x = {1, 'a', 'b'};
15150     static int y[] = {1, 2, 3};
15151     static int z[] = {1, 0, 0};
15152
15153
15154File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
15155
151565.21 Designated Initializers
15157============================
15158
15159Standard C89 requires the elements of an initializer to appear in a
15160fixed order, the same as the order of the elements in the array or
15161structure being initialized.
15162
15163 In ISO C99 you can give the elements in any order, specifying the array
15164indices or structure field names they apply to, and GNU C allows this as
15165an extension in C89 mode as well.  This extension is not implemented in
15166GNU C++.
15167
15168 To specify an array index, write `[INDEX] =' before the element value.
15169For example,
15170
15171     int a[6] = { [4] = 29, [2] = 15 };
15172
15173is equivalent to
15174
15175     int a[6] = { 0, 0, 15, 0, 29, 0 };
15176
15177The index values must be constant expressions, even if the array being
15178initialized is automatic.
15179
15180 An alternative syntax for this which has been obsolete since GCC 2.5
15181but GCC still accepts is to write `[INDEX]' before the element value,
15182with no `='.
15183
15184 To initialize a range of elements to the same value, write `[FIRST ...
15185LAST] = VALUE'.  This is a GNU extension.  For example,
15186
15187     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
15188
15189If the value in it has side-effects, the side-effects will happen only
15190once, not for each initialized field by the range initializer.
15191
15192Note that the length of the array is the highest value specified plus
15193one.
15194
15195 In a structure initializer, specify the name of a field to initialize
15196with `.FIELDNAME =' before the element value.  For example, given the
15197following structure,
15198
15199     struct point { int x, y; };
15200
15201the following initialization
15202
15203     struct point p = { .y = yvalue, .x = xvalue };
15204
15205is equivalent to
15206
15207     struct point p = { xvalue, yvalue };
15208
15209 Another syntax which has the same meaning, obsolete since GCC 2.5, is
15210`FIELDNAME:', as shown here:
15211
15212     struct point p = { y: yvalue, x: xvalue };
15213
15214 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
15215also use a designator (or the obsolete colon syntax) when initializing
15216a union, to specify which element of the union should be used.  For
15217example,
15218
15219     union foo { int i; double d; };
15220
15221     union foo f = { .d = 4 };
15222
15223will convert 4 to a `double' to store it in the union using the second
15224element.  By contrast, casting 4 to type `union foo' would store it
15225into the union as the integer `i', since it is an integer.  (*Note Cast
15226to Union::.)
15227
15228 You can combine this technique of naming elements with ordinary C
15229initialization of successive elements.  Each initializer element that
15230does not have a designator applies to the next consecutive element of
15231the array or structure.  For example,
15232
15233     int a[6] = { [1] = v1, v2, [4] = v4 };
15234
15235is equivalent to
15236
15237     int a[6] = { 0, v1, v2, 0, v4, 0 };
15238
15239 Labeling the elements of an array initializer is especially useful
15240when the indices are characters or belong to an `enum' type.  For
15241example:
15242
15243     int whitespace[256]
15244       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
15245           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
15246
15247 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
15248before an `=' to specify a nested subobject to initialize; the list is
15249taken relative to the subobject corresponding to the closest
15250surrounding brace pair.  For example, with the `struct point'
15251declaration above:
15252
15253     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
15254
15255If the same field is initialized multiple times, it will have value from
15256the last initialization.  If any such overridden initialization has
15257side-effect, it is unspecified whether the side-effect happens or not.
15258Currently, GCC will discard them and issue a warning.
15259
15260
15261File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
15262
152635.22 Case Ranges
15264================
15265
15266You can specify a range of consecutive values in a single `case' label,
15267like this:
15268
15269     case LOW ... HIGH:
15270
15271This has the same effect as the proper number of individual `case'
15272labels, one for each integer value from LOW to HIGH, inclusive.
15273
15274 This feature is especially useful for ranges of ASCII character codes:
15275
15276     case 'A' ... 'Z':
15277
15278 *Be careful:* Write spaces around the `...', for otherwise it may be
15279parsed wrong when you use it with integer values.  For example, write
15280this:
15281
15282     case 1 ... 5:
15283
15284rather than this:
15285
15286     case 1...5:
15287
15288
15289File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
15290
152915.23 Cast to a Union Type
15292=========================
15293
15294A cast to union type is similar to other casts, except that the type
15295specified is a union type.  You can specify the type either with `union
15296TAG' or with a typedef name.  A cast to union is actually a constructor
15297though, not a cast, and hence does not yield an lvalue like normal
15298casts.  (*Note Compound Literals::.)
15299
15300 The types that may be cast to the union type are those of the members
15301of the union.  Thus, given the following union and variables:
15302
15303     union foo { int i; double d; };
15304     int x;
15305     double y;
15306
15307both `x' and `y' can be cast to type `union foo'.
15308
15309 Using the cast as the right-hand side of an assignment to a variable of
15310union type is equivalent to storing in a member of the union:
15311
15312     union foo u;
15313     /* ... */
15314     u = (union foo) x  ==  u.i = x
15315     u = (union foo) y  ==  u.d = y
15316
15317 You can also use the union cast as a function argument:
15318
15319     void hack (union foo);
15320     /* ... */
15321     hack ((union foo) x);
15322
15323
15324File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
15325
153265.24 Mixed Declarations and Code
15327================================
15328
15329ISO C99 and ISO C++ allow declarations and code to be freely mixed
15330within compound statements.  As an extension, GCC also allows this in
15331C89 mode.  For example, you could do:
15332
15333     int i;
15334     /* ... */
15335     i++;
15336     int j = i + 2;
15337
15338 Each identifier is visible from where it is declared until the end of
15339the enclosing block.
15340
15341
15342File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
15343
153445.25 Declaring Attributes of Functions
15345======================================
15346
15347In GNU C, you declare certain things about functions called in your
15348program which help the compiler optimize function calls and check your
15349code more carefully.
15350
15351 The keyword `__attribute__' allows you to specify special attributes
15352when making a declaration.  This keyword is followed by an attribute
15353specification inside double parentheses.  The following attributes are
15354currently defined for functions on all targets: `noreturn',
15355`returns_twice', `noinline', `always_inline', `flatten', `pure',
15356`const', `nothrow', `sentinel', `format', `format_arg',
15357`no_instrument_function', `section', `constructor', `destructor',
15358`used', `unused', `deprecated', `weak', `malloc', `alias',
15359`warn_unused_result', `nonnull', `gnu_inline' and `externally_visible'.
15360Several other attributes are defined for functions on particular
15361target systems.  Other attributes, including `section' are supported
15362for variables declarations (*note Variable Attributes::) and for types
15363(*note Type Attributes::).
15364
15365 You may also specify attributes with `__' preceding and following each
15366keyword.  This allows you to use them in header files without being
15367concerned about a possible macro of the same name.  For example, you
15368may use `__noreturn__' instead of `noreturn'.
15369
15370 *Note Attribute Syntax::, for details of the exact syntax for using
15371attributes.
15372
15373`alias ("TARGET")'
15374     The `alias' attribute causes the declaration to be emitted as an
15375     alias for another symbol, which must be specified.  For instance,
15376
15377          void __f () { /* Do something. */; }
15378          void f () __attribute__ ((weak, alias ("__f")));
15379
15380     defines `f' to be a weak alias for `__f'.  In C++, the mangled
15381     name for the target must be used.  It is an error if `__f' is not
15382     defined in the same translation unit.
15383
15384     Not all target machines support this attribute.
15385
15386`always_inline'
15387     Generally, functions are not inlined unless optimization is
15388     specified.  For functions declared inline, this attribute inlines
15389     the function even if no optimization level was specified.
15390
15391`gnu_inline'
15392     This attribute should be used with a function which is also
15393     declared with the `inline' keyword.  It directs GCC to treat the
15394     function as if it were defined in gnu89 mode even when compiling
15395     in C99 or gnu99 mode.
15396
15397     If the function is declared `extern', then this definition of the
15398     function is used only for inlining.  In no case is the function
15399     compiled as a standalone function, not even if you take its address
15400     explicitly.  Such an address becomes an external reference, as if
15401     you had only declared the function, and had not defined it.  This
15402     has almost the effect of a macro.  The way to use this is to put a
15403     function definition in a header file with this attribute, and put
15404     another copy of the function, without `extern', in a library file.
15405     The definition in the header file will cause most calls to the
15406     function to be inlined.  If any uses of the function remain, they
15407     will refer to the single copy in the library.  Note that the two
15408     definitions of the functions need not be precisely the same,
15409     although if they do not have the same effect your program may
15410     behave oddly.
15411
15412     If the function is neither `extern' nor `static', then the
15413     function is compiled as a standalone function, as well as being
15414     inlined where possible.
15415
15416     This is how GCC traditionally handled functions declared `inline'.
15417     Since ISO C99 specifies a different semantics for `inline', this
15418     function attribute is provided as a transition measure and as a
15419     useful feature in its own right.  This attribute is available in
15420     GCC 4.1.3 and later.  It is available if either of the
15421     preprocessor macros `__GNUC_GNU_INLINE__' or
15422     `__GNUC_STDC_INLINE__' are defined.  *Note An Inline Function is
15423     As Fast As a Macro: Inline.
15424
15425     Note that since the first version of GCC to support C99 inline
15426     semantics is 4.3, earlier versions of GCC which accept this
15427     attribute effectively assume that it is always present, whether or
15428     not it is given explicitly.  In versions prior to 4.3, the only
15429     effect of explicitly including it is to disable warnings about
15430     using inline functions in C99 mode.
15431
15432`flatten'
15433     Generally, inlining into a function is limited.  For a function
15434     marked with this attribute, every call inside this function will
15435     be inlined, if possible.  Whether the function itself is
15436     considered for inlining depends on its size and the current
15437     inlining parameters.  The `flatten' attribute only works reliably
15438     in unit-at-a-time mode.
15439
15440`cdecl'
15441     On the Intel 386, the `cdecl' attribute causes the compiler to
15442     assume that the calling function will pop off the stack space used
15443     to pass arguments.  This is useful to override the effects of the
15444     `-mrtd' switch.
15445
15446`const'
15447     Many functions do not examine any values except their arguments,
15448     and have no effects except the return value.  Basically this is
15449     just slightly more strict class than the `pure' attribute below,
15450     since function is not allowed to read global memory.
15451
15452     Note that a function that has pointer arguments and examines the
15453     data pointed to must _not_ be declared `const'.  Likewise, a
15454     function that calls a non-`const' function usually must not be
15455     `const'.  It does not make sense for a `const' function to return
15456     `void'.
15457
15458     The attribute `const' is not implemented in GCC versions earlier
15459     than 2.5.  An alternative way to declare that a function has no
15460     side effects, which works in the current version and in some older
15461     versions, is as follows:
15462
15463          typedef int intfn ();
15464
15465          extern const intfn square;
15466
15467     This approach does not work in GNU C++ from 2.6.0 on, since the
15468     language specifies that the `const' must be attached to the return
15469     value.
15470
15471`constructor'
15472`destructor'
15473     The `constructor' attribute causes the function to be called
15474     automatically before execution enters `main ()'.  Similarly, the
15475     `destructor' attribute causes the function to be called
15476     automatically after `main ()' has completed or `exit ()' has been
15477     called.  Functions with these attributes are useful for
15478     initializing data that will be used implicitly during the
15479     execution of the program.
15480
15481     These attributes are not currently implemented for Objective-C.
15482
15483`deprecated'
15484     The `deprecated' attribute results in a warning if the function is
15485     used anywhere in the source file.  This is useful when identifying
15486     functions that are expected to be removed in a future version of a
15487     program.  The warning also includes the location of the declaration
15488     of the deprecated function, to enable users to easily find further
15489     information about why the function is deprecated, or what they
15490     should do instead.  Note that the warnings only occurs for uses:
15491
15492          int old_fn () __attribute__ ((deprecated));
15493          int old_fn ();
15494          int (*fn_ptr)() = old_fn;
15495
15496     results in a warning on line 3 but not line 2.
15497
15498     The `deprecated' attribute can also be used for variables and
15499     types (*note Variable Attributes::, *note Type Attributes::.)
15500
15501`dllexport'
15502     On Microsoft Windows targets and Symbian OS targets the
15503     `dllexport' attribute causes the compiler to provide a global
15504     pointer to a pointer in a DLL, so that it can be referenced with
15505     the `dllimport' attribute.  On Microsoft Windows targets, the
15506     pointer name is formed by combining `_imp__' and the function or
15507     variable name.
15508
15509     You can use `__declspec(dllexport)' as a synonym for
15510     `__attribute__ ((dllexport))' for compatibility with other
15511     compilers.
15512
15513     On systems that support the `visibility' attribute, this attribute
15514     also implies "default" visibility, unless a `visibility' attribute
15515     is explicitly specified.  You should avoid the use of `dllexport'
15516     with "hidden" or "internal" visibility; in the future GCC may
15517     issue an error for those cases.
15518
15519     Currently, the `dllexport' attribute is ignored for inlined
15520     functions, unless the `-fkeep-inline-functions' flag has been
15521     used.  The attribute is also ignored for undefined symbols.
15522
15523     When applied to C++ classes, the attribute marks defined
15524     non-inlined member functions and static data members as exports.
15525     Static consts initialized in-class are not marked unless they are
15526     also defined out-of-class.
15527
15528     For Microsoft Windows targets there are alternative methods for
15529     including the symbol in the DLL's export table such as using a
15530     `.def' file with an `EXPORTS' section or, with GNU ld, using the
15531     `--export-all' linker flag.
15532
15533`dllimport'
15534     On Microsoft Windows and Symbian OS targets, the `dllimport'
15535     attribute causes the compiler to reference a function or variable
15536     via a global pointer to a pointer that is set up by the DLL
15537     exporting the symbol.  The attribute implies `extern' storage.  On
15538     Microsoft Windows targets, the pointer name is formed by combining
15539     `_imp__' and the function or variable name.
15540
15541     You can use `__declspec(dllimport)' as a synonym for
15542     `__attribute__ ((dllimport))' for compatibility with other
15543     compilers.
15544
15545     Currently, the attribute is ignored for inlined functions.  If the
15546     attribute is applied to a symbol _definition_, an error is
15547     reported.  If a symbol previously declared `dllimport' is later
15548     defined, the attribute is ignored in subsequent references, and a
15549     warning is emitted.  The attribute is also overridden by a
15550     subsequent declaration as `dllexport'.
15551
15552     When applied to C++ classes, the attribute marks non-inlined
15553     member functions and static data members as imports.  However, the
15554     attribute is ignored for virtual methods to allow creation of
15555     vtables using thunks.
15556
15557     On the SH Symbian OS target the `dllimport' attribute also has
15558     another affect--it can cause the vtable and run-time type
15559     information for a class to be exported.  This happens when the
15560     class has a dllimport'ed constructor or a non-inline, non-pure
15561     virtual function and, for either of those two conditions, the
15562     class also has a inline constructor or destructor and has a key
15563     function that is defined in the current translation unit.
15564
15565     For Microsoft Windows based targets the use of the `dllimport'
15566     attribute on functions is not necessary, but provides a small
15567     performance benefit by eliminating a thunk in the DLL.  The use of
15568     the `dllimport' attribute on imported variables was required on
15569     older versions of the GNU linker, but can now be avoided by
15570     passing the `--enable-auto-import' switch to the GNU linker.  As
15571     with functions, using the attribute for a variable eliminates a
15572     thunk in the DLL.
15573
15574     One drawback to using this attribute is that a pointer to a
15575     function or variable marked as `dllimport' cannot be used as a
15576     constant address.  On Microsoft Windows targets, the attribute can
15577     be disabled for functions by setting the `-mnop-fun-dllimport'
15578     flag.
15579
15580`eightbit_data'
15581     Use this attribute on the H8/300, H8/300H, and H8S to indicate
15582     that the specified variable should be placed into the eight bit
15583     data section.  The compiler will generate more efficient code for
15584     certain operations on data in the eight bit data area.  Note the
15585     eight bit data area is limited to 256 bytes of data.
15586
15587     You must use GAS and GLD from GNU binutils version 2.7 or later for
15588     this attribute to work correctly.
15589
15590`exception_handler'
15591     Use this attribute on the Blackfin to indicate that the specified
15592     function is an exception handler.  The compiler will generate
15593     function entry and exit sequences suitable for use in an exception
15594     handler when this attribute is present.
15595
15596`far'
15597     On 68HC11 and 68HC12 the `far' attribute causes the compiler to
15598     use a calling convention that takes care of switching memory banks
15599     when entering and leaving a function.  This calling convention is
15600     also the default when using the `-mlong-calls' option.
15601
15602     On 68HC12 the compiler will use the `call' and `rtc' instructions
15603     to call and return from a function.
15604
15605     On 68HC11 the compiler will generate a sequence of instructions to
15606     invoke a board-specific routine to switch the memory bank and call
15607     the real function.  The board-specific routine simulates a `call'.
15608     At the end of a function, it will jump to a board-specific routine
15609     instead of using `rts'.  The board-specific return routine
15610     simulates the `rtc'.
15611
15612`fastcall'
15613     On the Intel 386, the `fastcall' attribute causes the compiler to
15614     pass the first argument (if of integral type) in the register ECX
15615     and the second argument (if of integral type) in the register EDX.
15616     Subsequent and other typed arguments are passed on the stack.
15617     The called function will pop the arguments off the stack.  If the
15618     number of arguments is variable all arguments are pushed on the
15619     stack.
15620
15621`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
15622     The `format' attribute specifies that a function takes `printf',
15623     `scanf', `strftime' or `strfmon' style arguments which should be
15624     type-checked against a format string.  For example, the
15625     declaration:
15626
15627          extern int
15628          my_printf (void *my_object, const char *my_format, ...)
15629                __attribute__ ((format (printf, 2, 3)));
15630
15631     causes the compiler to check the arguments in calls to `my_printf'
15632     for consistency with the `printf' style format string argument
15633     `my_format'.
15634
15635     The parameter ARCHETYPE determines how the format string is
15636     interpreted, and should be `printf', `scanf', `strftime' or
15637     `strfmon'.  (You can also use `__printf__', `__scanf__',
15638     `__strftime__' or `__strfmon__'.)  The parameter STRING-INDEX
15639     specifies which argument is the format string argument (starting
15640     from 1), while FIRST-TO-CHECK is the number of the first argument
15641     to check against the format string.  For functions where the
15642     arguments are not available to be checked (such as `vprintf'),
15643     specify the third parameter as zero.  In this case the compiler
15644     only checks the format string for consistency.  For `strftime'
15645     formats, the third parameter is required to be zero.  Since
15646     non-static C++ methods have an implicit `this' argument, the
15647     arguments of such methods should be counted from two, not one, when
15648     giving values for STRING-INDEX and FIRST-TO-CHECK.
15649
15650     In the example above, the format string (`my_format') is the second
15651     argument of the function `my_print', and the arguments to check
15652     start with the third argument, so the correct parameters for the
15653     format attribute are 2 and 3.
15654
15655     The `format' attribute allows you to identify your own functions
15656     which take format strings as arguments, so that GCC can check the
15657     calls to these functions for errors.  The compiler always (unless
15658     `-ffreestanding' or `-fno-builtin' is used) checks formats for the
15659     standard library functions `printf', `fprintf', `sprintf',
15660     `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
15661     `vsprintf' whenever such warnings are requested (using
15662     `-Wformat'), so there is no need to modify the header file
15663     `stdio.h'.  In C99 mode, the functions `snprintf', `vsnprintf',
15664     `vscanf', `vfscanf' and `vsscanf' are also checked.  Except in
15665     strictly conforming C standard modes, the X/Open function
15666     `strfmon' is also checked as are `printf_unlocked' and
15667     `fprintf_unlocked'.  *Note Options Controlling C Dialect: C
15668     Dialect Options.
15669
15670     The target may provide additional types of format checks.  *Note
15671     Format Checks Specific to Particular Target Machines: Target
15672     Format Checks.
15673
15674`format_arg (STRING-INDEX)'
15675     The `format_arg' attribute specifies that a function takes a format
15676     string for a `printf', `scanf', `strftime' or `strfmon' style
15677     function and modifies it (for example, to translate it into
15678     another language), so the result can be passed to a `printf',
15679     `scanf', `strftime' or `strfmon' style function (with the
15680     remaining arguments to the format function the same as they would
15681     have been for the unmodified string).  For example, the
15682     declaration:
15683
15684          extern char *
15685          my_dgettext (char *my_domain, const char *my_format)
15686                __attribute__ ((format_arg (2)));
15687
15688     causes the compiler to check the arguments in calls to a `printf',
15689     `scanf', `strftime' or `strfmon' type function, whose format
15690     string argument is a call to the `my_dgettext' function, for
15691     consistency with the format string argument `my_format'.  If the
15692     `format_arg' attribute had not been specified, all the compiler
15693     could tell in such calls to format functions would be that the
15694     format string argument is not constant; this would generate a
15695     warning when `-Wformat-nonliteral' is used, but the calls could
15696     not be checked without the attribute.
15697
15698     The parameter STRING-INDEX specifies which argument is the format
15699     string argument (starting from one).  Since non-static C++ methods
15700     have an implicit `this' argument, the arguments of such methods
15701     should be counted from two.
15702
15703     The `format-arg' attribute allows you to identify your own
15704     functions which modify format strings, so that GCC can check the
15705     calls to `printf', `scanf', `strftime' or `strfmon' type function
15706     whose operands are a call to one of your own function.  The
15707     compiler always treats `gettext', `dgettext', and `dcgettext' in
15708     this manner except when strict ISO C support is requested by
15709     `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
15710     `-fno-builtin' is used.  *Note Options Controlling C Dialect: C
15711     Dialect Options.
15712
15713`function_vector'
15714     Use this attribute on the H8/300, H8/300H, and H8S to indicate
15715     that the specified function should be called through the function
15716     vector.  Calling a function through the function vector will
15717     reduce code size, however; the function vector has a limited size
15718     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
15719     and H8S) and shares space with the interrupt vector.
15720
15721     You must use GAS and GLD from GNU binutils version 2.7 or later for
15722     this attribute to work correctly.
15723
15724`interrupt'
15725     Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1,
15726     and Xstormy16 ports to indicate that the specified function is an
15727     interrupt handler.  The compiler will generate function entry and
15728     exit sequences suitable for use in an interrupt handler when this
15729     attribute is present.
15730
15731     Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H,
15732     H8S, and SH processors can be specified via the
15733     `interrupt_handler' attribute.
15734
15735     Note, on the AVR, interrupts will be enabled inside the function.
15736
15737     Note, for the ARM, you can specify the kind of interrupt to be
15738     handled by adding an optional parameter to the interrupt attribute
15739     like this:
15740
15741          void f () __attribute__ ((interrupt ("IRQ")));
15742
15743     Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
15744     and UNDEF.
15745
15746`interrupt_handler'
15747     Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
15748     and SH to indicate that the specified function is an interrupt
15749     handler.  The compiler will generate function entry and exit
15750     sequences suitable for use in an interrupt handler when this
15751     attribute is present.
15752
15753`kspisusp'
15754     When used together with `interrupt_handler', `exception_handler'
15755     or `nmi_handler', code will be generated to load the stack pointer
15756     from the USP register in the function prologue.
15757
15758`long_call/short_call'
15759     This attribute specifies how a particular function is called on
15760     ARM.  Both attributes override the `-mlong-calls' (*note ARM
15761     Options::) command line switch and `#pragma long_calls' settings.
15762     The `long_call' attribute indicates that the function might be far
15763     away from the call site and require a different (more expensive)
15764     calling sequence.   The `short_call' attribute always places the
15765     offset to the function from the call site into the `BL'
15766     instruction directly.
15767
15768`longcall/shortcall'
15769     On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
15770     indicates that the function might be far away from the call site
15771     and require a different (more expensive) calling sequence.  The
15772     `shortcall' attribute indicates that the function is always close
15773     enough for the shorter calling sequence to be used.  These
15774     attributes override both the `-mlongcall' switch and, on the
15775     RS/6000 and PowerPC, the `#pragma longcall' setting.
15776
15777     *Note RS/6000 and PowerPC Options::, for more information on
15778     whether long calls are necessary.
15779
15780`long_call'
15781     This attribute specifies how a particular function is called on
15782     MIPS.  The attribute overrides the `-mlong-calls' (*note MIPS
15783     Options::) command line switch.  This attribute causes the
15784     compiler to always call the function by first loading its address
15785     into a register, and then using the contents of that register.
15786
15787`malloc'
15788     The `malloc' attribute is used to tell the compiler that a function
15789     may be treated as if any non-`NULL' pointer it returns cannot
15790     alias any other pointer valid when the function returns.  This
15791     will often improve optimization.  Standard functions with this
15792     property include `malloc' and `calloc'.  `realloc'-like functions
15793     have this property as long as the old pointer is never referred to
15794     (including comparing it to the new pointer) after the function
15795     returns a non-`NULL' value.
15796
15797`model (MODEL-NAME)'
15798     On the M32R/D, use this attribute to set the addressability of an
15799     object, and of the code generated for a function.  The identifier
15800     MODEL-NAME is one of `small', `medium', or `large', representing
15801     each of the code models.
15802
15803     Small model objects live in the lower 16MB of memory (so that their
15804     addresses can be loaded with the `ld24' instruction), and are
15805     callable with the `bl' instruction.
15806
15807     Medium model objects may live anywhere in the 32-bit address space
15808     (the compiler will generate `seth/add3' instructions to load their
15809     addresses), and are callable with the `bl' instruction.
15810
15811     Large model objects may live anywhere in the 32-bit address space
15812     (the compiler will generate `seth/add3' instructions to load their
15813     addresses), and may not be reachable with the `bl' instruction
15814     (the compiler will generate the much slower `seth/add3/jl'
15815     instruction sequence).
15816
15817     On IA-64, use this attribute to set the addressability of an
15818     object.  At present, the only supported identifier for MODEL-NAME
15819     is `small', indicating addressability via "small" (22-bit)
15820     addresses (so that their addresses can be loaded with the `addl'
15821     instruction).  Caveat: such addressing is by definition not
15822     position independent and hence this attribute must not be used for
15823     objects defined by shared libraries.
15824
15825`naked'
15826     Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
15827     that the specified function does not need prologue/epilogue
15828     sequences generated by the compiler.  It is up to the programmer
15829     to provide these sequences.
15830
15831`near'
15832     On 68HC11 and 68HC12 the `near' attribute causes the compiler to
15833     use the normal calling convention based on `jsr' and `rts'.  This
15834     attribute can be used to cancel the effect of the `-mlong-calls'
15835     option.
15836
15837`nesting'
15838     Use this attribute together with `interrupt_handler',
15839     `exception_handler' or `nmi_handler' to indicate that the function
15840     entry code should enable nested interrupts or exceptions.
15841
15842`nmi_handler'
15843     Use this attribute on the Blackfin to indicate that the specified
15844     function is an NMI handler.  The compiler will generate function
15845     entry and exit sequences suitable for use in an NMI handler when
15846     this attribute is present.
15847
15848`no_instrument_function'
15849     If `-finstrument-functions' is given, profiling function calls will
15850     be generated at entry and exit of most user-compiled functions.
15851     Functions with this attribute will not be so instrumented.
15852
15853`noinline'
15854     This function attribute prevents a function from being considered
15855     for inlining.
15856
15857`nonnull (ARG-INDEX, ...)'
15858     The `nonnull' attribute specifies that some function parameters
15859     should be non-null pointers.  For instance, the declaration:
15860
15861          extern void *
15862          my_memcpy (void *dest, const void *src, size_t len)
15863          	__attribute__((nonnull (1, 2)));
15864
15865     causes the compiler to check that, in calls to `my_memcpy',
15866     arguments DEST and SRC are non-null.  If the compiler determines
15867     that a null pointer is passed in an argument slot marked as
15868     non-null, and the `-Wnonnull' option is enabled, a warning is
15869     issued.  The compiler may also choose to make optimizations based
15870     on the knowledge that certain function arguments will not be null.
15871
15872     If no argument index list is given to the `nonnull' attribute, all
15873     pointer arguments are marked as non-null.  To illustrate, the
15874     following declaration is equivalent to the previous example:
15875
15876          extern void *
15877          my_memcpy (void *dest, const void *src, size_t len)
15878          	__attribute__((nonnull));
15879
15880`noreturn'
15881     A few standard library functions, such as `abort' and `exit',
15882     cannot return.  GCC knows this automatically.  Some programs define
15883     their own functions that never return.  You can declare them
15884     `noreturn' to tell the compiler this fact.  For example,
15885
15886          void fatal () __attribute__ ((noreturn));
15887
15888          void
15889          fatal (/* ... */)
15890          {
15891            /* ... */ /* Print error message. */ /* ... */
15892            exit (1);
15893          }
15894
15895     The `noreturn' keyword tells the compiler to assume that `fatal'
15896     cannot return.  It can then optimize without regard to what would
15897     happen if `fatal' ever did return.  This makes slightly better
15898     code.  More importantly, it helps avoid spurious warnings of
15899     uninitialized variables.
15900
15901     The `noreturn' keyword does not affect the exceptional path when
15902     that applies: a `noreturn'-marked function may still return to the
15903     caller by throwing an exception or calling `longjmp'.
15904
15905     Do not assume that registers saved by the calling function are
15906     restored before calling the `noreturn' function.
15907
15908     It does not make sense for a `noreturn' function to have a return
15909     type other than `void'.
15910
15911     The attribute `noreturn' is not implemented in GCC versions
15912     earlier than 2.5.  An alternative way to declare that a function
15913     does not return, which works in the current version and in some
15914     older versions, is as follows:
15915
15916          typedef void voidfn ();
15917
15918          volatile voidfn fatal;
15919
15920     This approach does not work in GNU C++.
15921
15922`nothrow'
15923     The `nothrow' attribute is used to inform the compiler that a
15924     function cannot throw an exception.  For example, most functions in
15925     the standard C library can be guaranteed not to throw an exception
15926     with the notable exceptions of `qsort' and `bsearch' that take
15927     function pointer arguments.  The `nothrow' attribute is not
15928     implemented in GCC versions earlier than 3.3.
15929
15930`pure'
15931     Many functions have no effects except the return value and their
15932     return value depends only on the parameters and/or global
15933     variables.  Such a function can be subject to common subexpression
15934     elimination and loop optimization just as an arithmetic operator
15935     would be.  These functions should be declared with the attribute
15936     `pure'.  For example,
15937
15938          int square (int) __attribute__ ((pure));
15939
15940     says that the hypothetical function `square' is safe to call fewer
15941     times than the program says.
15942
15943     Some of common examples of pure functions are `strlen' or `memcmp'.
15944     Interesting non-pure functions are functions with infinite loops
15945     or those depending on volatile memory or other system resource,
15946     that may change between two consecutive calls (such as `feof' in a
15947     multithreading environment).
15948
15949     The attribute `pure' is not implemented in GCC versions earlier
15950     than 2.96.
15951
15952`regparm (NUMBER)'
15953     On the Intel 386, the `regparm' attribute causes the compiler to
15954     pass arguments number one to NUMBER if they are of integral type
15955     in registers EAX, EDX, and ECX instead of on the stack.  Functions
15956     that take a variable number of arguments will continue to be
15957     passed all of their arguments on the stack.
15958
15959     Beware that on some ELF systems this attribute is unsuitable for
15960     global functions in shared libraries with lazy binding (which is
15961     the default).  Lazy binding will send the first call via resolving
15962     code in the loader, which might assume EAX, EDX and ECX can be
15963     clobbered, as per the standard calling conventions.  Solaris 8 is
15964     affected by this.  GNU systems with GLIBC 2.1 or higher, and
15965     FreeBSD, are believed to be safe since the loaders there save all
15966     registers.  (Lazy binding can be disabled with the linker or the
15967     loader if desired, to avoid the problem.)
15968
15969`sseregparm'
15970     On the Intel 386 with SSE support, the `sseregparm' attribute
15971     causes the compiler to pass up to 3 floating point arguments in
15972     SSE registers instead of on the stack.  Functions that take a
15973     variable number of arguments will continue to pass all of their
15974     floating point arguments on the stack.
15975
15976`force_align_arg_pointer'
15977     On the Intel x86, the `force_align_arg_pointer' attribute may be
15978     applied to individual function definitions, generating an alternate
15979     prologue and epilogue that realigns the runtime stack.  This
15980     supports mixing legacy codes that run with a 4-byte aligned stack
15981     with modern codes that keep a 16-byte stack for SSE compatibility.
15982     The alternate prologue and epilogue are slower and bigger than
15983     the regular ones, and the alternate prologue requires a scratch
15984     register; this lowers the number of registers available if used in
15985     conjunction with the `regparm' attribute.  The
15986     `force_align_arg_pointer' attribute is incompatible with nested
15987     functions; this is considered a hard error.
15988
15989`returns_twice'
15990     The `returns_twice' attribute tells the compiler that a function
15991     may return more than one time.  The compiler will ensure that all
15992     registers are dead before calling such a function and will emit a
15993     warning about the variables that may be clobbered after the second
15994     return from the function.  Examples of such functions are `setjmp'
15995     and `vfork'.  The `longjmp'-like counterpart of such function, if
15996     any, might need to be marked with the `noreturn' attribute.
15997
15998`saveall'
15999     Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
16000     indicate that all registers except the stack pointer should be
16001     saved in the prologue regardless of whether they are used or not.
16002
16003`section ("SECTION-NAME")'
16004     Normally, the compiler places the code it generates in the `text'
16005     section.  Sometimes, however, you need additional sections, or you
16006     need certain particular functions to appear in special sections.
16007     The `section' attribute specifies that a function lives in a
16008     particular section.  For example, the declaration:
16009
16010          extern void foobar (void) __attribute__ ((section ("bar")));
16011
16012     puts the function `foobar' in the `bar' section.
16013
16014     Some file formats do not support arbitrary sections so the
16015     `section' attribute is not available on all platforms.  If you
16016     need to map the entire contents of a module to a particular
16017     section, consider using the facilities of the linker instead.
16018
16019`sentinel'
16020     This function attribute ensures that a parameter in a function
16021     call is an explicit `NULL'.  The attribute is only valid on
16022     variadic functions.  By default, the sentinel is located at
16023     position zero, the last parameter of the function call.  If an
16024     optional integer position argument P is supplied to the attribute,
16025     the sentinel must be located at position P counting backwards from
16026     the end of the argument list.
16027
16028          __attribute__ ((sentinel))
16029          is equivalent to
16030          __attribute__ ((sentinel(0)))
16031
16032     The attribute is automatically set with a position of 0 for the
16033     built-in functions `execl' and `execlp'.  The built-in function
16034     `execle' has the attribute set with a position of 1.
16035
16036     A valid `NULL' in this context is defined as zero with any pointer
16037     type.  If your system defines the `NULL' macro with an integer type
16038     then you need to add an explicit cast.  GCC replaces `stddef.h'
16039     with a copy that redefines NULL appropriately.
16040
16041     The warnings for missing or incorrect sentinels are enabled with
16042     `-Wformat'.
16043
16044`short_call'
16045     See long_call/short_call.
16046
16047`shortcall'
16048     See longcall/shortcall.
16049
16050`signal'
16051     Use this attribute on the AVR to indicate that the specified
16052     function is a signal handler.  The compiler will generate function
16053     entry and exit sequences suitable for use in a signal handler when
16054     this attribute is present.  Interrupts will be disabled inside the
16055     function.
16056
16057`sp_switch'
16058     Use this attribute on the SH to indicate an `interrupt_handler'
16059     function should switch to an alternate stack.  It expects a string
16060     argument that names a global variable holding the address of the
16061     alternate stack.
16062
16063          void *alt_stack;
16064          void f () __attribute__ ((interrupt_handler,
16065                                    sp_switch ("alt_stack")));
16066
16067`stdcall'
16068     On the Intel 386, the `stdcall' attribute causes the compiler to
16069     assume that the called function will pop off the stack space used
16070     to pass arguments, unless it takes a variable number of arguments.
16071
16072`tiny_data'
16073     Use this attribute on the H8/300H and H8S to indicate that the
16074     specified variable should be placed into the tiny data section.
16075     The compiler will generate more efficient code for loads and stores
16076     on data in the tiny data section.  Note the tiny data area is
16077     limited to slightly under 32kbytes of data.
16078
16079`trap_exit'
16080     Use this attribute on the SH for an `interrupt_handler' to return
16081     using `trapa' instead of `rte'.  This attribute expects an integer
16082     argument specifying the trap number to be used.
16083
16084`unused'
16085     This attribute, attached to a function, means that the function is
16086     meant to be possibly unused.  GCC will not produce a warning for
16087     this function.
16088
16089`used'
16090     This attribute, attached to a function, means that code must be
16091     emitted for the function even if it appears that the function is
16092     not referenced.  This is useful, for example, when the function is
16093     referenced only in inline assembly.
16094
16095`visibility ("VISIBILITY_TYPE")'
16096     This attribute affects the linkage of the declaration to which it
16097     is attached.  There are four supported VISIBILITY_TYPE values:
16098     default, hidden, protected or internal visibility.
16099
16100          void __attribute__ ((visibility ("protected")))
16101          f () { /* Do something. */; }
16102          int i __attribute__ ((visibility ("hidden")));
16103
16104     The possible values of VISIBILITY_TYPE correspond to the
16105     visibility settings in the ELF gABI.
16106
16107    "default"
16108          Default visibility is the normal case for the object file
16109          format.  This value is available for the visibility attribute
16110          to override other options that may change the assumed
16111          visibility of entities.
16112
16113          On ELF, default visibility means that the declaration is
16114          visible to other modules and, in shared libraries, means that
16115          the declared entity may be overridden.
16116
16117          On Darwin, default visibility means that the declaration is
16118          visible to other modules.
16119
16120          Default visibility corresponds to "external linkage" in the
16121          language.
16122
16123    "hidden"
16124          Hidden visibility indicates that the entity declared will
16125          have a new form of linkage, which we'll call "hidden
16126          linkage".  Two declarations of an object with hidden linkage
16127          refer to the same object if they are in the same shared
16128          object.
16129
16130    "internal"
16131          Internal visibility is like hidden visibility, but with
16132          additional processor specific semantics.  Unless otherwise
16133          specified by the psABI, GCC defines internal visibility to
16134          mean that a function is _never_ called from another module.
16135          Compare this with hidden functions which, while they cannot
16136          be referenced directly by other modules, can be referenced
16137          indirectly via function pointers.  By indicating that a
16138          function cannot be called from outside the module, GCC may
16139          for instance omit the load of a PIC register since it is known
16140          that the calling function loaded the correct value.
16141
16142    "protected"
16143          Protected visibility is like default visibility except that it
16144          indicates that references within the defining module will
16145          bind to the definition in that module.  That is, the declared
16146          entity cannot be overridden by another module.
16147
16148
16149     All visibilities are supported on many, but not all, ELF targets
16150     (supported when the assembler supports the `.visibility'
16151     pseudo-op).  Default visibility is supported everywhere.  Hidden
16152     visibility is supported on Darwin targets.
16153
16154     The visibility attribute should be applied only to declarations
16155     which would otherwise have external linkage.  The attribute should
16156     be applied consistently, so that the same entity should not be
16157     declared with different settings of the attribute.
16158
16159     In C++, the visibility attribute applies to types as well as
16160     functions and objects, because in C++ types have linkage.  A class
16161     must not have greater visibility than its non-static data member
16162     types and bases, and class members default to the visibility of
16163     their class.  Also, a declaration without explicit visibility is
16164     limited to the visibility of its type.
16165
16166     In C++, you can mark member functions and static member variables
16167     of a class with the visibility attribute.  This is useful if if
16168     you know a particular method or static member variable should only
16169     be used from one shared object; then you can mark it hidden while
16170     the rest of the class has default visibility.  Care must be taken
16171     to avoid breaking the One Definition Rule; for example, it is
16172     usually not useful to mark an inline method as hidden without
16173     marking the whole class as hidden.
16174
16175     A C++ namespace declaration can also have the visibility attribute.
16176     This attribute applies only to the particular namespace body, not
16177     to other definitions of the same namespace; it is equivalent to
16178     using `#pragma GCC visibility' before and after the namespace
16179     definition (*note Visibility Pragmas::).
16180
16181     In C++, if a template argument has limited visibility, this
16182     restriction is implicitly propagated to the template instantiation.
16183     Otherwise, template instantiations and specializations default to
16184     the visibility of their template.
16185
16186     If both the template and enclosing class have explicit visibility,
16187     the visibility from the template is used.
16188
16189`warn_unused_result'
16190     The `warn_unused_result' attribute causes a warning to be emitted
16191     if a caller of the function with this attribute does not use its
16192     return value.  This is useful for functions where not checking the
16193     result is either a security problem or always a bug, such as
16194     `realloc'.
16195
16196          int fn () __attribute__ ((warn_unused_result));
16197          int foo ()
16198          {
16199            if (fn () < 0) return -1;
16200            fn ();
16201            return 0;
16202          }
16203
16204     results in warning on line 5.
16205
16206`weak'
16207     The `weak' attribute causes the declaration to be emitted as a weak
16208     symbol rather than a global.  This is primarily useful in defining
16209     library functions which can be overridden in user code, though it
16210     can also be used with non-function declarations.  Weak symbols are
16211     supported for ELF targets, and also for a.out targets when using
16212     the GNU assembler and linker.
16213
16214`weakref'
16215`weakref ("TARGET")'
16216     The `weakref' attribute marks a declaration as a weak reference.
16217     Without arguments, it should be accompanied by an `alias' attribute
16218     naming the target symbol.  Optionally, the TARGET may be given as
16219     an argument to `weakref' itself.  In either case, `weakref'
16220     implicitly marks the declaration as `weak'.  Without a TARGET,
16221     given as an argument to `weakref' or to `alias', `weakref' is
16222     equivalent to `weak'.
16223
16224          static int x() __attribute__ ((weakref ("y")));
16225          /* is equivalent to... */
16226          static int x() __attribute__ ((weak, weakref, alias ("y")));
16227          /* and to... */
16228          static int x() __attribute__ ((weakref));
16229          static int x() __attribute__ ((alias ("y")));
16230
16231     A weak reference is an alias that does not by itself require a
16232     definition to be given for the target symbol.  If the target
16233     symbol is only referenced through weak references, then the
16234     becomes a `weak' undefined symbol.  If it is directly referenced,
16235     however, then such strong references prevail, and a definition
16236     will be required for the symbol, not necessarily in the same
16237     translation unit.
16238
16239     The effect is equivalent to moving all references to the alias to a
16240     separate translation unit, renaming the alias to the aliased
16241     symbol, declaring it as weak, compiling the two separate
16242     translation units and performing a reloadable link on them.
16243
16244     At present, a declaration to which `weakref' is attached can only
16245     be `static'.
16246
16247`externally_visible'
16248     This attribute, attached to a global variable or function nullify
16249     effect of `-fwhole-program' command line option, so the object
16250     remain visible outside the current compilation unit
16251
16252
16253 You can specify multiple attributes in a declaration by separating them
16254by commas within the double parentheses or by immediately following an
16255attribute declaration with another attribute declaration.
16256
16257 Some people object to the `__attribute__' feature, suggesting that ISO
16258C's `#pragma' should be used instead.  At the time `__attribute__' was
16259designed, there were two reasons for not doing this.
16260
16261  1. It is impossible to generate `#pragma' commands from a macro.
16262
16263  2. There is no telling what the same `#pragma' might mean in another
16264     compiler.
16265
16266 These two reasons applied to almost any application that might have
16267been proposed for `#pragma'.  It was basically a mistake to use
16268`#pragma' for _anything_.
16269
16270 The ISO C99 standard includes `_Pragma', which now allows pragmas to
16271be generated from macros.  In addition, a `#pragma GCC' namespace is
16272now in use for GCC-specific pragmas.  However, it has been found
16273convenient to use `__attribute__' to achieve a natural attachment of
16274attributes to their corresponding declarations, whereas `#pragma GCC'
16275is of use for constructs that do not naturally form part of the
16276grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
16277Directives.
16278
16279
16280File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
16281
162825.26 Attribute Syntax
16283=====================
16284
16285This section describes the syntax with which `__attribute__' may be
16286used, and the constructs to which attribute specifiers bind, for the C
16287language.  Some details may vary for C++ and Objective-C.  Because of
16288infelicities in the grammar for attributes, some forms described here
16289may not be successfully parsed in all cases.
16290
16291 There are some problems with the semantics of attributes in C++.  For
16292example, there are no manglings for attributes, although they may affect
16293code generation, so problems may arise when attributed types are used in
16294conjunction with templates or overloading.  Similarly, `typeid' does
16295not distinguish between types with different attributes.  Support for
16296attributes in C++ may be restricted in future to attributes on
16297declarations only, but not on nested declarators.
16298
16299 *Note Function Attributes::, for details of the semantics of attributes
16300applying to functions.  *Note Variable Attributes::, for details of the
16301semantics of attributes applying to variables.  *Note Type Attributes::,
16302for details of the semantics of attributes applying to structure, union
16303and enumerated types.
16304
16305 An "attribute specifier" is of the form `__attribute__
16306((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
16307comma-separated sequence of "attributes", where each attribute is one
16308of the following:
16309
16310   * Empty.  Empty attributes are ignored.
16311
16312   * A word (which may be an identifier such as `unused', or a reserved
16313     word such as `const').
16314
16315   * A word, followed by, in parentheses, parameters for the attribute.
16316     These parameters take one of the following forms:
16317
16318        * An identifier.  For example, `mode' attributes use this form.
16319
16320        * An identifier followed by a comma and a non-empty
16321          comma-separated list of expressions.  For example, `format'
16322          attributes use this form.
16323
16324        * A possibly empty comma-separated list of expressions.  For
16325          example, `format_arg' attributes use this form with the list
16326          being a single integer constant expression, and `alias'
16327          attributes use this form with the list being a single string
16328          constant.
16329
16330 An "attribute specifier list" is a sequence of one or more attribute
16331specifiers, not separated by any other tokens.
16332
16333 In GNU C, an attribute specifier list may appear after the colon
16334following a label, other than a `case' or `default' label.  The only
16335attribute it makes sense to use after a label is `unused'.  This
16336feature is intended for code generated by programs which contains labels
16337that may be unused but which is compiled with `-Wall'.  It would not
16338normally be appropriate to use in it human-written code, though it
16339could be useful in cases where the code that jumps to the label is
16340contained within an `#ifdef' conditional.  GNU C++ does not permit such
16341placement of attribute lists, as it is permissible for a declaration,
16342which could begin with an attribute list, to be labelled in C++.
16343Declarations cannot be labelled in C90 or C99, so the ambiguity does
16344not arise there.
16345
16346 An attribute specifier list may appear as part of a `struct', `union'
16347or `enum' specifier.  It may go either immediately after the `struct',
16348`union' or `enum' keyword, or after the closing brace.  The former
16349syntax is preferred.  Where attribute specifiers follow the closing
16350brace, they are considered to relate to the structure, union or
16351enumerated type defined, not to any enclosing declaration the type
16352specifier appears in, and the type defined is not complete until after
16353the attribute specifiers.
16354
16355 Otherwise, an attribute specifier appears as part of a declaration,
16356counting declarations of unnamed parameters and type names, and relates
16357to that declaration (which may be nested in another declaration, for
16358example in the case of a parameter declaration), or to a particular
16359declarator within a declaration.  Where an attribute specifier is
16360applied to a parameter declared as a function or an array, it should
16361apply to the function or array rather than the pointer to which the
16362parameter is implicitly converted, but this is not yet correctly
16363implemented.
16364
16365 Any list of specifiers and qualifiers at the start of a declaration may
16366contain attribute specifiers, whether or not such a list may in that
16367context contain storage class specifiers.  (Some attributes, however,
16368are essentially in the nature of storage class specifiers, and only make
16369sense where storage class specifiers may be used; for example,
16370`section'.)  There is one necessary limitation to this syntax: the
16371first old-style parameter declaration in a function definition cannot
16372begin with an attribute specifier, because such an attribute applies to
16373the function instead by syntax described below (which, however, is not
16374yet implemented in this case).  In some other cases, attribute
16375specifiers are permitted by this grammar but not yet supported by the
16376compiler.  All attribute specifiers in this place relate to the
16377declaration as a whole.  In the obsolescent usage where a type of `int'
16378is implied by the absence of type specifiers, such a list of specifiers
16379and qualifiers may be an attribute specifier list with no other
16380specifiers or qualifiers.
16381
16382 At present, the first parameter in a function prototype must have some
16383type specifier which is not an attribute specifier; this resolves an
16384ambiguity in the interpretation of `void f(int (__attribute__((foo))
16385x))', but is subject to change.  At present, if the parentheses of a
16386function declarator contain only attributes then those attributes are
16387ignored, rather than yielding an error or warning or implying a single
16388parameter of type int, but this is subject to change.
16389
16390 An attribute specifier list may appear immediately before a declarator
16391(other than the first) in a comma-separated list of declarators in a
16392declaration of more than one identifier using a single list of
16393specifiers and qualifiers.  Such attribute specifiers apply only to the
16394identifier before whose declarator they appear.  For example, in
16395
16396     __attribute__((noreturn)) void d0 (void),
16397         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
16398          d2 (void)
16399
16400the `noreturn' attribute applies to all the functions declared; the
16401`format' attribute only applies to `d1'.
16402
16403 An attribute specifier list may appear immediately before the comma,
16404`=' or semicolon terminating the declaration of an identifier other
16405than a function definition.  At present, such attribute specifiers apply
16406to the declared object or function, but in future they may attach to the
16407outermost adjacent declarator.  In simple cases there is no difference,
16408but, for example, in
16409
16410     void (****f)(void) __attribute__((noreturn));
16411
16412at present the `noreturn' attribute applies to `f', which causes a
16413warning since `f' is not a function, but in future it may apply to the
16414function `****f'.  The precise semantics of what attributes in such
16415cases will apply to are not yet specified.  Where an assembler name for
16416an object or function is specified (*note Asm Labels::), at present the
16417attribute must follow the `asm' specification; in future, attributes
16418before the `asm' specification may apply to the adjacent declarator,
16419and those after it to the declared object or function.
16420
16421 An attribute specifier list may, in future, be permitted to appear
16422after the declarator in a function definition (before any old-style
16423parameter declarations or the function body).
16424
16425 Attribute specifiers may be mixed with type qualifiers appearing inside
16426the `[]' of a parameter array declarator, in the C99 construct by which
16427such qualifiers are applied to the pointer to which the array is
16428implicitly converted.  Such attribute specifiers apply to the pointer,
16429not to the array, but at present this is not implemented and they are
16430ignored.
16431
16432 An attribute specifier list may appear at the start of a nested
16433declarator.  At present, there are some limitations in this usage: the
16434attributes correctly apply to the declarator, but for most individual
16435attributes the semantics this implies are not implemented.  When
16436attribute specifiers follow the `*' of a pointer declarator, they may
16437be mixed with any type qualifiers present.  The following describes the
16438formal semantics of this syntax.  It will make the most sense if you
16439are familiar with the formal specification of declarators in the ISO C
16440standard.
16441
16442 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
16443where `T' contains declaration specifiers that specify a type TYPE
16444(such as `int') and `D1' is a declarator that contains an identifier
16445IDENT.  The type specified for IDENT for derived declarators whose type
16446does not include an attribute specifier is as in the ISO C standard.
16447
16448 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
16449declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
16450TYPE" for IDENT, then `T D1' specifies the type
16451"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
16452
16453 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
16454D', and the declaration `T D' specifies the type
16455"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
16456the type "DERIVED-DECLARATOR-TYPE-LIST
16457TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
16458
16459 For example,
16460
16461     void (__attribute__((noreturn)) ****f) (void);
16462
16463specifies the type "pointer to pointer to pointer to pointer to
16464non-returning function returning `void'".  As another example,
16465
16466     char *__attribute__((aligned(8))) *f;
16467
16468specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
16469again that this does not work with most attributes; for example, the
16470usage of `aligned' and `noreturn' attributes given above is not yet
16471supported.
16472
16473 For compatibility with existing code written for compiler versions that
16474did not implement attributes on nested declarators, some laxity is
16475allowed in the placing of attributes.  If an attribute that only applies
16476to types is applied to a declaration, it will be treated as applying to
16477the type of that declaration.  If an attribute that only applies to
16478declarations is applied to the type of a declaration, it will be treated
16479as applying to that declaration; and, for compatibility with code
16480placing the attributes immediately before the identifier declared, such
16481an attribute applied to a function return type will be treated as
16482applying to the function type, and such an attribute applied to an array
16483element type will be treated as applying to the array type.  If an
16484attribute that only applies to function types is applied to a
16485pointer-to-function type, it will be treated as applying to the pointer
16486target type; if such an attribute is applied to a function return type
16487that is not a pointer-to-function type, it will be treated as applying
16488to the function type.
16489
16490
16491File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
16492
164935.27 Prototypes and Old-Style Function Definitions
16494==================================================
16495
16496GNU C extends ISO C to allow a function prototype to override a later
16497old-style non-prototype definition.  Consider the following example:
16498
16499     /* Use prototypes unless the compiler is old-fashioned.  */
16500     #ifdef __STDC__
16501     #define P(x) x
16502     #else
16503     #define P(x) ()
16504     #endif
16505
16506     /* Prototype function declaration.  */
16507     int isroot P((uid_t));
16508
16509     /* Old-style function definition.  */
16510     int
16511     isroot (x)   /* ??? lossage here ??? */
16512          uid_t x;
16513     {
16514       return x == 0;
16515     }
16516
16517 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
16518this example, because subword arguments in old-style non-prototype
16519definitions are promoted.  Therefore in this example the function
16520definition's argument is really an `int', which does not match the
16521prototype argument type of `short'.
16522
16523 This restriction of ISO C makes it hard to write code that is portable
16524to traditional C compilers, because the programmer does not know
16525whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
16526cases like these GNU C allows a prototype to override a later old-style
16527definition.  More precisely, in GNU C, a function prototype argument
16528type overrides the argument type specified by a later old-style
16529definition if the former type is the same as the latter type before
16530promotion.  Thus in GNU C the above example is equivalent to the
16531following:
16532
16533     int isroot (uid_t);
16534
16535     int
16536     isroot (uid_t x)
16537     {
16538       return x == 0;
16539     }
16540
16541GNU C++ does not support old-style function definitions, so this
16542extension is irrelevant.
16543
16544
16545File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
16546
165475.28 C++ Style Comments
16548=======================
16549
16550In GNU C, you may use C++ style comments, which start with `//' and
16551continue until the end of the line.  Many other C implementations allow
16552such comments, and they are included in the 1999 C standard.  However,
16553C++ style comments are not recognized if you specify an `-std' option
16554specifying a version of ISO C before C99, or `-ansi' (equivalent to
16555`-std=c89').
16556
16557
16558File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
16559
165605.29 Dollar Signs in Identifier Names
16561=====================================
16562
16563In GNU C, you may normally use dollar signs in identifier names.  This
16564is because many traditional C implementations allow such identifiers.
16565However, dollar signs in identifiers are not supported on a few target
16566machines, typically because the target assembler does not allow them.
16567
16568
16569File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
16570
165715.30 The Character <ESC> in Constants
16572=====================================
16573
16574You can use the sequence `\e' in a string or character constant to
16575stand for the ASCII character <ESC>.
16576
16577
16578File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
16579
165805.31 Inquiring on Alignment of Types or Variables
16581=================================================
16582
16583The keyword `__alignof__' allows you to inquire about how an object is
16584aligned, or the minimum alignment usually required by a type.  Its
16585syntax is just like `sizeof'.
16586
16587 For example, if the target machine requires a `double' value to be
16588aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
16589is true on many RISC machines.  On more traditional machine designs,
16590`__alignof__ (double)' is 4 or even 2.
16591
16592 Some machines never actually require alignment; they allow reference
16593to any data type even at an odd address.  For these machines,
16594`__alignof__' reports the _recommended_ alignment of a type.
16595
16596 If the operand of `__alignof__' is an lvalue rather than a type, its
16597value is the required alignment for its type, taking into account any
16598minimum alignment specified with GCC's `__attribute__' extension (*note
16599Variable Attributes::).  For example, after this declaration:
16600
16601     struct foo { int x; char y; } foo1;
16602
16603the value of `__alignof__ (foo1.y)' is 1, even though its actual
16604alignment is probably 2 or 4, the same as `__alignof__ (int)'.
16605
16606 It is an error to ask for the alignment of an incomplete type.
16607
16608
16609File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
16610
166115.32 Specifying Attributes of Variables
16612=======================================
16613
16614The keyword `__attribute__' allows you to specify special attributes of
16615variables or structure fields.  This keyword is followed by an
16616attribute specification inside double parentheses.  Some attributes are
16617currently defined generically for variables.  Other attributes are
16618defined for variables on particular target systems.  Other attributes
16619are available for functions (*note Function Attributes::) and for types
16620(*note Type Attributes::).  Other front ends might define more
16621attributes (*note Extensions to the C++ Language: C++ Extensions.).
16622
16623 You may also specify attributes with `__' preceding and following each
16624keyword.  This allows you to use them in header files without being
16625concerned about a possible macro of the same name.  For example, you
16626may use `__aligned__' instead of `aligned'.
16627
16628 *Note Attribute Syntax::, for details of the exact syntax for using
16629attributes.
16630
16631`aligned (ALIGNMENT)'
16632     This attribute specifies a minimum alignment for the variable or
16633     structure field, measured in bytes.  For example, the declaration:
16634
16635          int x __attribute__ ((aligned (16))) = 0;
16636
16637     causes the compiler to allocate the global variable `x' on a
16638     16-byte boundary.  On a 68040, this could be used in conjunction
16639     with an `asm' expression to access the `move16' instruction which
16640     requires 16-byte aligned operands.
16641
16642     You can also specify the alignment of structure fields.  For
16643     example, to create a double-word aligned `int' pair, you could
16644     write:
16645
16646          struct foo { int x[2] __attribute__ ((aligned (8))); };
16647
16648     This is an alternative to creating a union with a `double' member
16649     that forces the union to be double-word aligned.
16650
16651     As in the preceding examples, you can explicitly specify the
16652     alignment (in bytes) that you wish the compiler to use for a given
16653     variable or structure field.  Alternatively, you can leave out the
16654     alignment factor and just ask the compiler to align a variable or
16655     field to the maximum useful alignment for the target machine you
16656     are compiling for.  For example, you could write:
16657
16658          short array[3] __attribute__ ((aligned));
16659
16660     Whenever you leave out the alignment factor in an `aligned'
16661     attribute specification, the compiler automatically sets the
16662     alignment for the declared variable or field to the largest
16663     alignment which is ever used for any data type on the target
16664     machine you are compiling for.  Doing this can often make copy
16665     operations more efficient, because the compiler can use whatever
16666     instructions copy the biggest chunks of memory when performing
16667     copies to or from the variables or fields that you have aligned
16668     this way.
16669
16670     The `aligned' attribute can only increase the alignment; but you
16671     can decrease it by specifying `packed' as well.  See below.
16672
16673     Note that the effectiveness of `aligned' attributes may be limited
16674     by inherent limitations in your linker.  On many systems, the
16675     linker is only able to arrange for variables to be aligned up to a
16676     certain maximum alignment.  (For some linkers, the maximum
16677     supported alignment may be very very small.)  If your linker is
16678     only able to align variables up to a maximum of 8 byte alignment,
16679     then specifying `aligned(16)' in an `__attribute__' will still
16680     only provide you with 8 byte alignment.  See your linker
16681     documentation for further information.
16682
16683`cleanup (CLEANUP_FUNCTION)'
16684     The `cleanup' attribute runs a function when the variable goes out
16685     of scope.  This attribute can only be applied to auto function
16686     scope variables; it may not be applied to parameters or variables
16687     with static storage duration.  The function must take one
16688     parameter, a pointer to a type compatible with the variable.  The
16689     return value of the function (if any) is ignored.
16690
16691     If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
16692     during the stack unwinding that happens during the processing of
16693     the exception.  Note that the `cleanup' attribute does not allow
16694     the exception to be caught, only to perform an action.  It is
16695     undefined what happens if CLEANUP_FUNCTION does not return
16696     normally.
16697
16698`common'
16699`nocommon'
16700     The `common' attribute requests GCC to place a variable in
16701     "common" storage.  The `nocommon' attribute requests the
16702     opposite--to allocate space for it directly.
16703
16704     These attributes override the default chosen by the `-fno-common'
16705     and `-fcommon' flags respectively.
16706
16707`deprecated'
16708     The `deprecated' attribute results in a warning if the variable is
16709     used anywhere in the source file.  This is useful when identifying
16710     variables that are expected to be removed in a future version of a
16711     program.  The warning also includes the location of the declaration
16712     of the deprecated variable, to enable users to easily find further
16713     information about why the variable is deprecated, or what they
16714     should do instead.  Note that the warning only occurs for uses:
16715
16716          extern int old_var __attribute__ ((deprecated));
16717          extern int old_var;
16718          int new_fn () { return old_var; }
16719
16720     results in a warning on line 3 but not line 2.
16721
16722     The `deprecated' attribute can also be used for functions and
16723     types (*note Function Attributes::, *note Type Attributes::.)
16724
16725`mode (MODE)'
16726     This attribute specifies the data type for the
16727     declaration--whichever type corresponds to the mode MODE.  This in
16728     effect lets you request an integer or floating point type
16729     according to its width.
16730
16731     You may also specify a mode of `byte' or `__byte__' to indicate
16732     the mode corresponding to a one-byte integer, `word' or `__word__'
16733     for the mode of a one-word integer, and `pointer' or `__pointer__'
16734     for the mode used to represent pointers.
16735
16736`packed'
16737     The `packed' attribute specifies that a variable or structure field
16738     should have the smallest possible alignment--one byte for a
16739     variable, and one bit for a field, unless you specify a larger
16740     value with the `aligned' attribute.
16741
16742     Here is a structure in which the field `x' is packed, so that it
16743     immediately follows `a':
16744
16745          struct foo
16746          {
16747            char a;
16748            int x[2] __attribute__ ((packed));
16749          };
16750
16751`section ("SECTION-NAME")'
16752     Normally, the compiler places the objects it generates in sections
16753     like `data' and `bss'.  Sometimes, however, you need additional
16754     sections, or you need certain particular variables to appear in
16755     special sections, for example to map to special hardware.  The
16756     `section' attribute specifies that a variable (or function) lives
16757     in a particular section.  For example, this small program uses
16758     several specific section names:
16759
16760          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
16761          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
16762          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
16763          int init_data __attribute__ ((section ("INITDATA"))) = 0;
16764
16765          main()
16766          {
16767            /* Initialize stack pointer */
16768            init_sp (stack + sizeof (stack));
16769
16770            /* Initialize initialized data */
16771            memcpy (&init_data, &data, &edata - &data);
16772
16773            /* Turn on the serial ports */
16774            init_duart (&a);
16775            init_duart (&b);
16776          }
16777
16778     Use the `section' attribute with an _initialized_ definition of a
16779     _global_ variable, as shown in the example.  GCC issues a warning
16780     and otherwise ignores the `section' attribute in uninitialized
16781     variable declarations.
16782
16783     You may only use the `section' attribute with a fully initialized
16784     global definition because of the way linkers work.  The linker
16785     requires each object be defined once, with the exception that
16786     uninitialized variables tentatively go in the `common' (or `bss')
16787     section and can be multiply "defined".  You can force a variable
16788     to be initialized with the `-fno-common' flag or the `nocommon'
16789     attribute.
16790
16791     Some file formats do not support arbitrary sections so the
16792     `section' attribute is not available on all platforms.  If you
16793     need to map the entire contents of a module to a particular
16794     section, consider using the facilities of the linker instead.
16795
16796`shared'
16797     On Microsoft Windows, in addition to putting variable definitions
16798     in a named section, the section can also be shared among all
16799     running copies of an executable or DLL.  For example, this small
16800     program defines shared data by putting it in a named section
16801     `shared' and marking the section shareable:
16802
16803          int foo __attribute__((section ("shared"), shared)) = 0;
16804
16805          int
16806          main()
16807          {
16808            /* Read and write foo.  All running
16809               copies see the same value.  */
16810            return 0;
16811          }
16812
16813     You may only use the `shared' attribute along with `section'
16814     attribute with a fully initialized global definition because of
16815     the way linkers work.  See `section' attribute for more
16816     information.
16817
16818     The `shared' attribute is only available on Microsoft Windows.
16819
16820`tls_model ("TLS_MODEL")'
16821     The `tls_model' attribute sets thread-local storage model (*note
16822     Thread-Local::) of a particular `__thread' variable, overriding
16823     `-ftls-model=' command line switch on a per-variable basis.  The
16824     TLS_MODEL argument should be one of `global-dynamic',
16825     `local-dynamic', `initial-exec' or `local-exec'.
16826
16827     Not all targets support this attribute.
16828
16829`unused'
16830     This attribute, attached to a variable, means that the variable is
16831     meant to be possibly unused.  GCC will not produce a warning for
16832     this variable.
16833
16834`used'
16835     This attribute, attached to a variable, means that the variable
16836     must be emitted even if it appears that the variable is not
16837     referenced.
16838
16839`vector_size (BYTES)'
16840     This attribute specifies the vector size for the variable,
16841     measured in bytes.  For example, the declaration:
16842
16843          int foo __attribute__ ((vector_size (16)));
16844
16845     causes the compiler to set the mode for `foo', to be 16 bytes,
16846     divided into `int' sized units.  Assuming a 32-bit int (a vector of
16847     4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
16848
16849     This attribute is only applicable to integral and float scalars,
16850     although arrays, pointers, and function return values are allowed
16851     in conjunction with this construct.
16852
16853     Aggregates with this attribute are invalid, even if they are of
16854     the same size as a corresponding scalar.  For example, the
16855     declaration:
16856
16857          struct S { int a; };
16858          struct S  __attribute__ ((vector_size (16))) foo;
16859
16860     is invalid even if the size of the structure is the same as the
16861     size of the `int'.
16862
16863`selectany'
16864     The `selectany' attribute causes an initialized global variable to
16865     have link-once semantics.  When multiple definitions of the
16866     variable are encountered by the linker, the first is selected and
16867     the remainder are discarded.  Following usage by the Microsoft
16868     compiler, the linker is told _not_ to warn about size or content
16869     differences of the multiple definitions.
16870
16871     Although the primary usage of this attribute is for POD types, the
16872     attribute can also be applied to global C++ objects that are
16873     initialized by a constructor.  In this case, the static
16874     initialization and destruction code for the object is emitted in
16875     each translation defining the object, but the calls to the
16876     constructor and destructor are protected by a link-once guard
16877     variable.
16878
16879     The `selectany' attribute is only available on Microsoft Windows
16880     targets.  You can use `__declspec (selectany)' as a synonym for
16881     `__attribute__ ((selectany))' for compatibility with other
16882     compilers.
16883
16884`weak'
16885     The `weak' attribute is described in *Note Function Attributes::.
16886
16887`dllimport'
16888     The `dllimport' attribute is described in *Note Function
16889     Attributes::.
16890
16891`dllexport'
16892     The `dllexport' attribute is described in *Note Function
16893     Attributes::.
16894
16895
168965.32.1 M32R/D Variable Attributes
16897---------------------------------
16898
16899One attribute is currently defined for the M32R/D.
16900
16901`model (MODEL-NAME)'
16902     Use this attribute on the M32R/D to set the addressability of an
16903     object.  The identifier MODEL-NAME is one of `small', `medium', or
16904     `large', representing each of the code models.
16905
16906     Small model objects live in the lower 16MB of memory (so that their
16907     addresses can be loaded with the `ld24' instruction).
16908
16909     Medium and large model objects may live anywhere in the 32-bit
16910     address space (the compiler will generate `seth/add3' instructions
16911     to load their addresses).
16912
169135.32.2 i386 Variable Attributes
16914-------------------------------
16915
16916Two attributes are currently defined for i386 configurations:
16917`ms_struct' and `gcc_struct'
16918
16919`ms_struct'
16920`gcc_struct'
16921     If `packed' is used on a structure, or if bit-fields are used it
16922     may be that the Microsoft ABI packs them differently than GCC
16923     would normally pack them.  Particularly when moving packed data
16924     between functions compiled with GCC and the native Microsoft
16925     compiler (either via function call or as data in a file), it may
16926     be necessary to access either format.
16927
16928     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
16929     Windows X86 compilers to match the native Microsoft compiler.
16930
16931     The Microsoft structure layout algorithm is fairly simple with the
16932     exception of the bitfield packing:
16933
16934     The padding and alignment of members of structures and whether a
16935     bit field can straddle a storage-unit boundary
16936
16937       1. Structure members are stored sequentially in the order in
16938          which they are declared: the first member has the lowest
16939          memory address and the last member the highest.
16940
16941       2. Every data object has an alignment-requirement. The
16942          alignment-requirement for all data except structures, unions,
16943          and arrays is either the size of the object or the current
16944          packing size (specified with either the aligned attribute or
16945          the pack pragma), whichever is less. For structures,  unions,
16946          and arrays, the alignment-requirement is the largest
16947          alignment-requirement of its members.  Every object is
16948          allocated an offset so that:
16949
16950          offset %  alignment-requirement == 0
16951
16952       3. Adjacent bit fields are packed into the same 1-, 2-, or
16953          4-byte allocation unit if the integral types are the same
16954          size and if the next bit field fits into the current
16955          allocation unit without crossing the boundary imposed by the
16956          common alignment requirements of the bit fields.
16957
16958     Handling of zero-length bitfields:
16959
16960     MSVC interprets zero-length bitfields in the following ways:
16961
16962       1. If a zero-length bitfield is inserted between two bitfields
16963          that would normally be coalesced, the bitfields will not be
16964          coalesced.
16965
16966          For example:
16967
16968               struct
16969                {
16970                  unsigned long bf_1 : 12;
16971                  unsigned long : 0;
16972                  unsigned long bf_2 : 12;
16973                } t1;
16974
16975          The size of `t1' would be 8 bytes with the zero-length
16976          bitfield.  If the zero-length bitfield were removed, `t1''s
16977          size would be 4 bytes.
16978
16979       2. If a zero-length bitfield is inserted after a bitfield,
16980          `foo', and the alignment of the zero-length bitfield is
16981          greater than the member that follows it, `bar', `bar' will be
16982          aligned as the type of the zero-length bitfield.
16983
16984          For example:
16985
16986               struct
16987                {
16988                  char foo : 4;
16989                  short : 0;
16990                  char bar;
16991                } t2;
16992
16993               struct
16994                {
16995                  char foo : 4;
16996                  short : 0;
16997                  double bar;
16998                } t3;
16999
17000          For `t2', `bar' will be placed at offset 2, rather than
17001          offset 1.  Accordingly, the size of `t2' will be 4.  For
17002          `t3', the zero-length bitfield will not affect the alignment
17003          of `bar' or, as a result, the size of the structure.
17004
17005          Taking this into account, it is important to note the
17006          following:
17007
17008            1. If a zero-length bitfield follows a normal bitfield, the
17009               type of the zero-length bitfield may affect the
17010               alignment of the structure as whole. For example, `t2'
17011               has a size of 4 bytes, since the zero-length bitfield
17012               follows a normal bitfield, and is of type short.
17013
17014            2. Even if a zero-length bitfield is not followed by a
17015               normal bitfield, it may still affect the alignment of
17016               the structure:
17017
17018                    struct
17019                     {
17020                       char foo : 6;
17021                       long : 0;
17022                     } t4;
17023
17024               Here, `t4' will take up 4 bytes.
17025
17026       3. Zero-length bitfields following non-bitfield members are
17027          ignored:
17028
17029               struct
17030                {
17031                  char foo;
17032                  long : 0;
17033                  char bar;
17034                } t5;
17035
17036          Here, `t5' will take up 2 bytes.
17037
170385.32.3 PowerPC Variable Attributes
17039----------------------------------
17040
17041Three attributes currently are defined for PowerPC configurations:
17042`altivec', `ms_struct' and `gcc_struct'.
17043
17044 For full documentation of the struct attributes please see the
17045documentation in the *Note i386 Variable Attributes::, section.
17046
17047 For documentation of `altivec' attribute please see the documentation
17048in the *Note PowerPC Type Attributes::, section.
17049
170505.32.4 Xstormy16 Variable Attributes
17051------------------------------------
17052
17053One attribute is currently defined for xstormy16 configurations:
17054`below100'
17055
17056`below100'
17057     If a variable has the `below100' attribute (`BELOW100' is allowed
17058     also), GCC will place the variable in the first 0x100 bytes of
17059     memory and use special opcodes to access it.  Such variables will
17060     be placed in either the `.bss_below100' section or the
17061     `.data_below100' section.
17062
17063
17064
17065File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
17066
170675.33 Specifying Attributes of Types
17068===================================
17069
17070The keyword `__attribute__' allows you to specify special attributes of
17071`struct' and `union' types when you define such types.  This keyword is
17072followed by an attribute specification inside double parentheses.
17073Seven attributes are currently defined for types: `aligned', `packed',
17074`transparent_union', `unused', `deprecated', `visibility', and
17075`may_alias'.  Other attributes are defined for functions (*note
17076Function Attributes::) and for variables (*note Variable Attributes::).
17077
17078 You may also specify any one of these attributes with `__' preceding
17079and following its keyword.  This allows you to use these attributes in
17080header files without being concerned about a possible macro of the same
17081name.  For example, you may use `__aligned__' instead of `aligned'.
17082
17083 You may specify type attributes either in a `typedef' declaration or
17084in an enum, struct or union type declaration or definition.
17085
17086 For an enum, struct or union type, you may specify attributes either
17087between the enum, struct or union tag and the name of the type, or just
17088past the closing curly brace of the _definition_.  The former syntax is
17089preferred.
17090
17091 *Note Attribute Syntax::, for details of the exact syntax for using
17092attributes.
17093
17094`aligned (ALIGNMENT)'
17095     This attribute specifies a minimum alignment (in bytes) for
17096     variables of the specified type.  For example, the declarations:
17097
17098          struct S { short f[3]; } __attribute__ ((aligned (8)));
17099          typedef int more_aligned_int __attribute__ ((aligned (8)));
17100
17101     force the compiler to insure (as far as it can) that each variable
17102     whose type is `struct S' or `more_aligned_int' will be allocated
17103     and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
17104     all variables of type `struct S' aligned to 8-byte boundaries
17105     allows the compiler to use the `ldd' and `std' (doubleword load and
17106     store) instructions when copying one variable of type `struct S' to
17107     another, thus improving run-time efficiency.
17108
17109     Note that the alignment of any given `struct' or `union' type is
17110     required by the ISO C standard to be at least a perfect multiple of
17111     the lowest common multiple of the alignments of all of the members
17112     of the `struct' or `union' in question.  This means that you _can_
17113     effectively adjust the alignment of a `struct' or `union' type by
17114     attaching an `aligned' attribute to any one of the members of such
17115     a type, but the notation illustrated in the example above is a
17116     more obvious, intuitive, and readable way to request the compiler
17117     to adjust the alignment of an entire `struct' or `union' type.
17118
17119     As in the preceding example, you can explicitly specify the
17120     alignment (in bytes) that you wish the compiler to use for a given
17121     `struct' or `union' type.  Alternatively, you can leave out the
17122     alignment factor and just ask the compiler to align a type to the
17123     maximum useful alignment for the target machine you are compiling
17124     for.  For example, you could write:
17125
17126          struct S { short f[3]; } __attribute__ ((aligned));
17127
17128     Whenever you leave out the alignment factor in an `aligned'
17129     attribute specification, the compiler automatically sets the
17130     alignment for the type to the largest alignment which is ever used
17131     for any data type on the target machine you are compiling for.
17132     Doing this can often make copy operations more efficient, because
17133     the compiler can use whatever instructions copy the biggest chunks
17134     of memory when performing copies to or from the variables which
17135     have types that you have aligned this way.
17136
17137     In the example above, if the size of each `short' is 2 bytes, then
17138     the size of the entire `struct S' type is 6 bytes.  The smallest
17139     power of two which is greater than or equal to that is 8, so the
17140     compiler sets the alignment for the entire `struct S' type to 8
17141     bytes.
17142
17143     Note that although you can ask the compiler to select a
17144     time-efficient alignment for a given type and then declare only
17145     individual stand-alone objects of that type, the compiler's
17146     ability to select a time-efficient alignment is primarily useful
17147     only when you plan to create arrays of variables having the
17148     relevant (efficiently aligned) type.  If you declare or use arrays
17149     of variables of an efficiently-aligned type, then it is likely
17150     that your program will also be doing pointer arithmetic (or
17151     subscripting, which amounts to the same thing) on pointers to the
17152     relevant type, and the code that the compiler generates for these
17153     pointer arithmetic operations will often be more efficient for
17154     efficiently-aligned types than for other types.
17155
17156     The `aligned' attribute can only increase the alignment; but you
17157     can decrease it by specifying `packed' as well.  See below.
17158
17159     Note that the effectiveness of `aligned' attributes may be limited
17160     by inherent limitations in your linker.  On many systems, the
17161     linker is only able to arrange for variables to be aligned up to a
17162     certain maximum alignment.  (For some linkers, the maximum
17163     supported alignment may be very very small.)  If your linker is
17164     only able to align variables up to a maximum of 8 byte alignment,
17165     then specifying `aligned(16)' in an `__attribute__' will still
17166     only provide you with 8 byte alignment.  See your linker
17167     documentation for further information.
17168
17169`packed'
17170     This attribute, attached to `struct' or `union' type definition,
17171     specifies that each member (other than zero-width bitfields) of
17172     the structure or union is placed to minimize the memory required.
17173     When attached to an `enum' definition, it indicates that the
17174     smallest integral type should be used.
17175
17176     Specifying this attribute for `struct' and `union' types is
17177     equivalent to specifying the `packed' attribute on each of the
17178     structure or union members.  Specifying the `-fshort-enums' flag
17179     on the line is equivalent to specifying the `packed' attribute on
17180     all `enum' definitions.
17181
17182     In the following example `struct my_packed_struct''s members are
17183     packed closely together, but the internal layout of its `s' member
17184     is not packed--to do that, `struct my_unpacked_struct' would need
17185     to be packed too.
17186
17187          struct my_unpacked_struct
17188           {
17189              char c;
17190              int i;
17191           };
17192
17193          struct __attribute__ ((__packed__)) my_packed_struct
17194            {
17195               char c;
17196               int  i;
17197               struct my_unpacked_struct s;
17198            };
17199
17200     You may only specify this attribute on the definition of a `enum',
17201     `struct' or `union', not on a `typedef' which does not also define
17202     the enumerated type, structure or union.
17203
17204`transparent_union'
17205     This attribute, attached to a `union' type definition, indicates
17206     that any function parameter having that union type causes calls to
17207     that function to be treated in a special way.
17208
17209     First, the argument corresponding to a transparent union type can
17210     be of any type in the union; no cast is required.  Also, if the
17211     union contains a pointer type, the corresponding argument can be a
17212     null pointer constant or a void pointer expression; and if the
17213     union contains a void pointer type, the corresponding argument can
17214     be any pointer expression.  If the union member type is a pointer,
17215     qualifiers like `const' on the referenced type must be respected,
17216     just as with normal pointer conversions.
17217
17218     Second, the argument is passed to the function using the calling
17219     conventions of the first member of the transparent union, not the
17220     calling conventions of the union itself.  All members of the union
17221     must have the same machine representation; this is necessary for
17222     this argument passing to work properly.
17223
17224     Transparent unions are designed for library functions that have
17225     multiple interfaces for compatibility reasons.  For example,
17226     suppose the `wait' function must accept either a value of type
17227     `int *' to comply with Posix, or a value of type `union wait *' to
17228     comply with the 4.1BSD interface.  If `wait''s parameter were
17229     `void *', `wait' would accept both kinds of arguments, but it
17230     would also accept any other pointer type and this would make
17231     argument type checking less useful.  Instead, `<sys/wait.h>' might
17232     define the interface as follows:
17233
17234          typedef union
17235            {
17236              int *__ip;
17237              union wait *__up;
17238            } wait_status_ptr_t __attribute__ ((__transparent_union__));
17239
17240          pid_t wait (wait_status_ptr_t);
17241
17242     This interface allows either `int *' or `union wait *' arguments
17243     to be passed, using the `int *' calling convention.  The program
17244     can call `wait' with arguments of either type:
17245
17246          int w1 () { int w; return wait (&w); }
17247          int w2 () { union wait w; return wait (&w); }
17248
17249     With this interface, `wait''s implementation might look like this:
17250
17251          pid_t wait (wait_status_ptr_t p)
17252          {
17253            return waitpid (-1, p.__ip, 0);
17254          }
17255
17256`unused'
17257     When attached to a type (including a `union' or a `struct'), this
17258     attribute means that variables of that type are meant to appear
17259     possibly unused.  GCC will not produce a warning for any variables
17260     of that type, even if the variable appears to do nothing.  This is
17261     often the case with lock or thread classes, which are usually
17262     defined and then not referenced, but contain constructors and
17263     destructors that have nontrivial bookkeeping functions.
17264
17265`deprecated'
17266     The `deprecated' attribute results in a warning if the type is
17267     used anywhere in the source file.  This is useful when identifying
17268     types that are expected to be removed in a future version of a
17269     program.  If possible, the warning also includes the location of
17270     the declaration of the deprecated type, to enable users to easily
17271     find further information about why the type is deprecated, or what
17272     they should do instead.  Note that the warnings only occur for
17273     uses and then only if the type is being applied to an identifier
17274     that itself is not being declared as deprecated.
17275
17276          typedef int T1 __attribute__ ((deprecated));
17277          T1 x;
17278          typedef T1 T2;
17279          T2 y;
17280          typedef T1 T3 __attribute__ ((deprecated));
17281          T3 z __attribute__ ((deprecated));
17282
17283     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
17284     warning is issued for line 4 because T2 is not explicitly
17285     deprecated.  Line 5 has no warning because T3 is explicitly
17286     deprecated.  Similarly for line 6.
17287
17288     The `deprecated' attribute can also be used for functions and
17289     variables (*note Function Attributes::, *note Variable
17290     Attributes::.)
17291
17292`may_alias'
17293     Accesses to objects with types with this attribute are not
17294     subjected to type-based alias analysis, but are instead assumed to
17295     be able to alias any other type of objects, just like the `char'
17296     type.  See `-fstrict-aliasing' for more information on aliasing
17297     issues.
17298
17299     Example of use:
17300
17301          typedef short __attribute__((__may_alias__)) short_a;
17302
17303          int
17304          main (void)
17305          {
17306            int a = 0x12345678;
17307            short_a *b = (short_a *) &a;
17308
17309            b[1] = 0;
17310
17311            if (a == 0x12345678)
17312              abort();
17313
17314            exit(0);
17315          }
17316
17317     If you replaced `short_a' with `short' in the variable
17318     declaration, the above program would abort when compiled with
17319     `-fstrict-aliasing', which is on by default at `-O2' or above in
17320     recent GCC versions.
17321
17322`visibility'
17323     In C++, attribute visibility (*note Function Attributes::) can
17324     also be applied to class, struct, union and enum types.  Unlike
17325     other type attributes, the attribute must appear between the
17326     initial keyword and the name of the type; it cannot appear after
17327     the body of the type.
17328
17329     Note that the type visibility is applied to vague linkage entities
17330     associated with the class (vtable, typeinfo node, etc.).  In
17331     particular, if a class is thrown as an exception in one shared
17332     object and caught in another, the class must have default
17333     visibility.  Otherwise the two shared objects will be unable to
17334     use the same typeinfo node and exception handling will break.
17335
173365.33.1 ARM Type Attributes
17337--------------------------
17338
17339     On those ARM targets that support `dllimport' (such as Symbian
17340OS), you can use the `notshared' attribute to indicate that the virtual
17341table and other similar data for a class should not be exported from a
17342DLL.  For example:
17343
17344          class __declspec(notshared) C {
17345          public:
17346            __declspec(dllimport) C();
17347            virtual void f();
17348          }
17349
17350          __declspec(dllexport)
17351          C::C() {}
17352
17353     In this code, `C::C' is exported from the current DLL, but the
17354virtual table for `C' is not exported.  (You can use `__attribute__'
17355instead of `__declspec' if you prefer, but most Symbian OS code uses
17356`__declspec'.)
17357
173585.33.2 i386 Type Attributes
17359---------------------------
17360
17361     Two attributes are currently defined for i386 configurations:
17362`ms_struct' and `gcc_struct'
17363
17364`ms_struct'
17365`gcc_struct'
17366     If `packed' is used on a structure, or if bit-fields are used it
17367     may be that the Microsoft ABI packs them differently than GCC
17368     would normally pack them.  Particularly when moving packed data
17369     between functions compiled with GCC and the native Microsoft
17370     compiler (either via function call or as data in a file), it may
17371     be necessary to access either format.
17372
17373     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
17374     Windows X86 compilers to match the native Microsoft compiler.
17375
17376 To specify multiple attributes, separate them by commas within the
17377double parentheses: for example, `__attribute__ ((aligned (16),
17378packed))'.
17379
173805.33.3 PowerPC Type Attributes
17381------------------------------
17382
17383Three attributes currently are defined for PowerPC configurations:
17384`altivec', `ms_struct' and `gcc_struct'.
17385
17386 For full documentation of the struct attributes please see the
17387documentation in the *Note i386 Type Attributes::, section.
17388
17389 The `altivec' attribute allows one to declare AltiVec vector data
17390types supported by the AltiVec Programming Interface Manual.  The
17391attribute requires an argument to specify one of three vector types:
17392`vector__', `pixel__' (always followed by unsigned short), and `bool__'
17393(always followed by unsigned).
17394
17395     __attribute__((altivec(vector__)))
17396     __attribute__((altivec(pixel__))) unsigned short
17397     __attribute__((altivec(bool__))) unsigned
17398
17399 These attributes mainly are intended to support the `__vector',
17400`__pixel', and `__bool' AltiVec keywords.
17401
17402
17403File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
17404
174055.34 An Inline Function is As Fast As a Macro
17406=============================================
17407
17408By declaring a function `inline', you can direct GCC to integrate that
17409function's code into the code for its callers.  This makes execution
17410faster by eliminating the function-call overhead; in addition, if any
17411of the actual argument values are constant, their known values may
17412permit simplifications at compile time so that not all of the inline
17413function's code needs to be included.  The effect on code size is less
17414predictable; object code may be larger or smaller with function
17415inlining, depending on the particular case.  Inlining of functions is an
17416optimization and it really "works" only in optimizing compilation.  If
17417you don't use `-O', no function is really inline.
17418
17419 Inline functions are included in the ISO C99 standard, but there are
17420currently substantial differences between what GCC implements and what
17421the ISO C99 standard requires.  GCC will fully support C99 inline
17422functions in version 4.3.  The traditional GCC handling of inline
17423functions will still be available with `-std=gnu89', `-fgnu89-inline'
17424or when `gnu_inline' attribute is present on all inline declarations.
17425The preprocessor macros `__GNUC_GNU_INLINE__' and
17426`__GNUC_STDC_INLINE__' may be used to determine the handling of
17427`inline' during a particular compilation (*note Common Predefined
17428Macros: (cpp)Common Predefined Macros.).
17429
17430 To declare a function inline, use the `inline' keyword in its
17431declaration, like this:
17432
17433     inline int
17434     inc (int *a)
17435     {
17436       (*a)++;
17437     }
17438
17439 (If you are writing a header file to be included in ISO C programs,
17440write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
17441You can also make all "simple enough" functions inline with the option
17442`-finline-functions'.
17443
17444 Note that certain usages in a function definition can make it
17445unsuitable for inline substitution.  Among these usages are: use of
17446varargs, use of alloca, use of variable sized data types (*note
17447Variable Length::), use of computed goto (*note Labels as Values::),
17448use of nonlocal goto, and nested functions (*note Nested Functions::).
17449Using `-Winline' will warn when a function marked `inline' could not be
17450substituted, and will give the reason for the failure.
17451
17452 Note that in C and Objective-C, unlike C++, the `inline' keyword does
17453not affect the linkage of the function.
17454
17455 GCC automatically inlines member functions defined within the class
17456body of C++ programs even if they are not explicitly declared `inline'.
17457(You can override this with `-fno-default-inline'; *note Options
17458Controlling C++ Dialect: C++ Dialect Options.)
17459
17460 When a function is both inline and `static', if all calls to the
17461function are integrated into the caller, and the function's address is
17462never used, then the function's own assembler code is never referenced.
17463In this case, GCC does not actually output assembler code for the
17464function, unless you specify the option `-fkeep-inline-functions'.
17465Some calls cannot be integrated for various reasons (in particular,
17466calls that precede the function's definition cannot be integrated, and
17467neither can recursive calls within the definition).  If there is a
17468nonintegrated call, then the function is compiled to assembler code as
17469usual.  The function must also be compiled as usual if the program
17470refers to its address, because that can't be inlined.
17471
17472 When an inline function is not `static', then the compiler must assume
17473that there may be calls from other source files; since a global symbol
17474can be defined only once in any program, the function must not be
17475defined in the other source files, so the calls therein cannot be
17476integrated.  Therefore, a non-`static' inline function is always
17477compiled on its own in the usual fashion.
17478
17479 If you specify both `inline' and `extern' in the function definition,
17480then the definition is used only for inlining.  In no case is the
17481function compiled on its own, not even if you refer to its address
17482explicitly.  Such an address becomes an external reference, as if you
17483had only declared the function, and had not defined it.
17484
17485 This combination of `inline' and `extern' has almost the effect of a
17486macro.  The way to use it is to put a function definition in a header
17487file with these keywords, and put another copy of the definition
17488(lacking `inline' and `extern') in a library file.  The definition in
17489the header file will cause most calls to the function to be inlined.
17490If any uses of the function remain, they will refer to the single copy
17491in the library.
17492
17493 Since GCC 4.3 will implement ISO C99 semantics for inline functions,
17494it is simplest to use `static inline' only to guarantee compatibility.
17495(The existing semantics will remain available when `-std=gnu89' is
17496specified, but eventually the default will be `-std=gnu99'; that will
17497implement the C99 semantics, though it does not do so in versions of
17498GCC before 4.3.  After the default changes, the existing semantics will
17499still be available via the `-fgnu89-inline' option or the `gnu_inline'
17500function attribute.)
17501
17502 GCC does not inline any functions when not optimizing unless you
17503specify the `always_inline' attribute for the function, like this:
17504
17505     /* Prototype.  */
17506     inline void foo (const char) __attribute__((always_inline));
17507
17508
17509File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
17510
175115.35 Assembler Instructions with C Expression Operands
17512======================================================
17513
17514In an assembler instruction using `asm', you can specify the operands
17515of the instruction using C expressions.  This means you need not guess
17516which registers or memory locations will contain the data you want to
17517use.
17518
17519 You must specify an assembler instruction template much like what
17520appears in a machine description, plus an operand constraint string for
17521each operand.
17522
17523 For example, here is how to use the 68881's `fsinx' instruction:
17524
17525     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
17526
17527Here `angle' is the C expression for the input operand while `result'
17528is that of the output operand.  Each has `"f"' as its operand
17529constraint, saying that a floating point register is required.  The `='
17530in `=f' indicates that the operand is an output; all output operands'
17531constraints must use `='.  The constraints use the same language used
17532in the machine description (*note Constraints::).
17533
17534 Each operand is described by an operand-constraint string followed by
17535the C expression in parentheses.  A colon separates the assembler
17536template from the first output operand and another separates the last
17537output operand from the first input, if any.  Commas separate the
17538operands within each group.  The total number of operands is currently
17539limited to 30; this limitation may be lifted in some future version of
17540GCC.
17541
17542 If there are no output operands but there are input operands, you must
17543place two consecutive colons surrounding the place where the output
17544operands would go.
17545
17546 As of GCC version 3.1, it is also possible to specify input and output
17547operands using symbolic names which can be referenced within the
17548assembler code.  These names are specified inside square brackets
17549preceding the constraint string, and can be referenced inside the
17550assembler code using `%[NAME]' instead of a percentage sign followed by
17551the operand number.  Using named operands the above example could look
17552like:
17553
17554     asm ("fsinx %[angle],%[output]"
17555          : [output] "=f" (result)
17556          : [angle] "f" (angle));
17557
17558Note that the symbolic operand names have no relation whatsoever to
17559other C identifiers.  You may use any name you like, even those of
17560existing C symbols, but you must ensure that no two operands within the
17561same assembler construct use the same symbolic name.
17562
17563 Output operand expressions must be lvalues; the compiler can check
17564this.  The input operands need not be lvalues.  The compiler cannot
17565check whether the operands have data types that are reasonable for the
17566instruction being executed.  It does not parse the assembler instruction
17567template and does not know what it means or even whether it is valid
17568assembler input.  The extended `asm' feature is most often used for
17569machine instructions the compiler itself does not know exist.  If the
17570output expression cannot be directly addressed (for example, it is a
17571bit-field), your constraint must allow a register.  In that case, GCC
17572will use the register as the output of the `asm', and then store that
17573register into the output.
17574
17575 The ordinary output operands must be write-only; GCC will assume that
17576the values in these operands before the instruction are dead and need
17577not be generated.  Extended asm supports input-output or read-write
17578operands.  Use the constraint character `+' to indicate such an operand
17579and list it with the output operands.  You should only use read-write
17580operands when the constraints for the operand (or the operand in which
17581only some of the bits are to be changed) allow a register.
17582
17583 You may, as an alternative, logically split its function into two
17584separate operands, one input operand and one write-only output operand.
17585The connection between them is expressed by constraints which say they
17586need to be in the same location when the instruction executes.  You can
17587use the same C expression for both operands, or different expressions.
17588For example, here we write the (fictitious) `combine' instruction with
17589`bar' as its read-only source operand and `foo' as its read-write
17590destination:
17591
17592     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
17593
17594The constraint `"0"' for operand 1 says that it must occupy the same
17595location as operand 0.  A number in constraint is allowed only in an
17596input operand and it must refer to an output operand.
17597
17598 Only a number in the constraint can guarantee that one operand will be
17599in the same place as another.  The mere fact that `foo' is the value of
17600both operands is not enough to guarantee that they will be in the same
17601place in the generated assembler code.  The following would not work
17602reliably:
17603
17604     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
17605
17606 Various optimizations or reloading could cause operands 0 and 1 to be
17607in different registers; GCC knows no reason not to do so.  For example,
17608the compiler might find a copy of the value of `foo' in one register and
17609use it for operand 1, but generate the output operand 0 in a different
17610register (copying it afterward to `foo''s own address).  Of course,
17611since the register for operand 1 is not even mentioned in the assembler
17612code, the result will not work, but GCC can't tell that.
17613
17614 As of GCC version 3.1, one may write `[NAME]' instead of the operand
17615number for a matching constraint.  For example:
17616
17617     asm ("cmoveq %1,%2,%[result]"
17618          : [result] "=r"(result)
17619          : "r" (test), "r"(new), "[result]"(old));
17620
17621 Sometimes you need to make an `asm' operand be a specific register,
17622but there's no matching constraint letter for that register _by
17623itself_.  To force the operand into that register, use a local variable
17624for the operand and specify the register in the variable declaration.
17625*Note Explicit Reg Vars::.  Then for the `asm' operand, use any
17626register constraint letter that matches the register:
17627
17628     register int *p1 asm ("r0") = ...;
17629     register int *p2 asm ("r1") = ...;
17630     register int *result asm ("r0");
17631     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
17632
17633 In the above example, beware that a register that is call-clobbered by
17634the target ABI will be overwritten by any function call in the
17635assignment, including library calls for arithmetic operators.  Assuming
17636it is a call-clobbered register, this may happen to `r0' above by the
17637assignment to `p2'.  If you have to use such a register, use temporary
17638variables for expressions between the register assignment and use:
17639
17640     int t1 = ...;
17641     register int *p1 asm ("r0") = ...;
17642     register int *p2 asm ("r1") = t1;
17643     register int *result asm ("r0");
17644     asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
17645
17646 Some instructions clobber specific hard registers.  To describe this,
17647write a third colon after the input operands, followed by the names of
17648the clobbered hard registers (given as strings).  Here is a realistic
17649example for the VAX:
17650
17651     asm volatile ("movc3 %0,%1,%2"
17652                   : /* no outputs */
17653                   : "g" (from), "g" (to), "g" (count)
17654                   : "r0", "r1", "r2", "r3", "r4", "r5");
17655
17656 You may not write a clobber description in a way that overlaps with an
17657input or output operand.  For example, you may not have an operand
17658describing a register class with one member if you mention that register
17659in the clobber list.  Variables declared to live in specific registers
17660(*note Explicit Reg Vars::), and used as asm input or output operands
17661must have no part mentioned in the clobber description.  There is no
17662way for you to specify that an input operand is modified without also
17663specifying it as an output operand.  Note that if all the output
17664operands you specify are for this purpose (and hence unused), you will
17665then also need to specify `volatile' for the `asm' construct, as
17666described below, to prevent GCC from deleting the `asm' statement as
17667unused.
17668
17669 If you refer to a particular hardware register from the assembler code,
17670you will probably have to list the register after the third colon to
17671tell the compiler the register's value is modified.  In some assemblers,
17672the register names begin with `%'; to produce one `%' in the assembler
17673code, you must write `%%' in the input.
17674
17675 If your assembler instruction can alter the condition code register,
17676add `cc' to the list of clobbered registers.  GCC on some machines
17677represents the condition codes as a specific hardware register; `cc'
17678serves to name this register.  On other machines, the condition code is
17679handled differently, and specifying `cc' has no effect.  But it is
17680valid no matter what the machine.
17681
17682 If your assembler instructions access memory in an unpredictable
17683fashion, add `memory' to the list of clobbered registers.  This will
17684cause GCC to not keep memory values cached in registers across the
17685assembler instruction and not optimize stores or loads to that memory.
17686You will also want to add the `volatile' keyword if the memory affected
17687is not listed in the inputs or outputs of the `asm', as the `memory'
17688clobber does not count as a side-effect of the `asm'.  If you know how
17689large the accessed memory is, you can add it as input or output but if
17690this is not known, you should add `memory'.  As an example, if you
17691access ten bytes of a string, you can use a memory input like:
17692
17693     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
17694
17695 Note that in the following example the memory input is necessary,
17696otherwise GCC might optimize the store to `x' away:
17697     int foo ()
17698     {
17699       int x = 42;
17700       int *y = &x;
17701       int result;
17702       asm ("magic stuff accessing an 'int' pointed to by '%1'"
17703             "=&d" (r) : "a" (y), "m" (*y));
17704       return result;
17705     }
17706
17707 You can put multiple assembler instructions together in a single `asm'
17708template, separated by the characters normally used in assembly code
17709for the system.  A combination that works in most places is a newline
17710to break the line, plus a tab character to move to the instruction field
17711(written as `\n\t').  Sometimes semicolons can be used, if the
17712assembler allows semicolons as a line-breaking character.  Note that
17713some assembler dialects use semicolons to start a comment.  The input
17714operands are guaranteed not to use any of the clobbered registers, and
17715neither will the output operands' addresses, so you can read and write
17716the clobbered registers as many times as you like.  Here is an example
17717of multiple instructions in a template; it assumes the subroutine
17718`_foo' accepts arguments in registers 9 and 10:
17719
17720     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
17721          : /* no outputs */
17722          : "g" (from), "g" (to)
17723          : "r9", "r10");
17724
17725 Unless an output operand has the `&' constraint modifier, GCC may
17726allocate it in the same register as an unrelated input operand, on the
17727assumption the inputs are consumed before the outputs are produced.
17728This assumption may be false if the assembler code actually consists of
17729more than one instruction.  In such a case, use `&' for each output
17730operand that may not overlap an input.  *Note Modifiers::.
17731
17732 If you want to test the condition code produced by an assembler
17733instruction, you must include a branch and a label in the `asm'
17734construct, as follows:
17735
17736     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
17737          : "g" (result)
17738          : "g" (input));
17739
17740This assumes your assembler supports local labels, as the GNU assembler
17741and most Unix assemblers do.
17742
17743 Speaking of labels, jumps from one `asm' to another are not supported.
17744The compiler's optimizers do not know about these jumps, and therefore
17745they cannot take account of them when deciding how to optimize.
17746
17747 Usually the most convenient way to use these `asm' instructions is to
17748encapsulate them in macros that look like functions.  For example,
17749
17750     #define sin(x)       \
17751     ({ double __value, __arg = (x);   \
17752        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
17753        __value; })
17754
17755Here the variable `__arg' is used to make sure that the instruction
17756operates on a proper `double' value, and to accept only those arguments
17757`x' which can convert automatically to a `double'.
17758
17759 Another way to make sure the instruction operates on the correct data
17760type is to use a cast in the `asm'.  This is different from using a
17761variable `__arg' in that it converts more different types.  For
17762example, if the desired type were `int', casting the argument to `int'
17763would accept a pointer with no complaint, while assigning the argument
17764to an `int' variable named `__arg' would warn about using a pointer
17765unless the caller explicitly casts it.
17766
17767 If an `asm' has output operands, GCC assumes for optimization purposes
17768the instruction has no side effects except to change the output
17769operands.  This does not mean instructions with a side effect cannot be
17770used, but you must be careful, because the compiler may eliminate them
17771if the output operands aren't used, or move them out of loops, or
17772replace two with one if they constitute a common subexpression.  Also,
17773if your instruction does have a side effect on a variable that otherwise
17774appears not to change, the old value of the variable may be reused later
17775if it happens to be found in a register.
17776
17777 You can prevent an `asm' instruction from being deleted by writing the
17778keyword `volatile' after the `asm'.  For example:
17779
17780     #define get_and_set_priority(new)              \
17781     ({ int __old;                                  \
17782        asm volatile ("get_and_set_priority %0, %1" \
17783                      : "=g" (__old) : "g" (new));  \
17784        __old; })
17785
17786The `volatile' keyword indicates that the instruction has important
17787side-effects.  GCC will not delete a volatile `asm' if it is reachable.
17788(The instruction can still be deleted if GCC can prove that
17789control-flow will never reach the location of the instruction.)  Note
17790that even a volatile `asm' instruction can be moved relative to other
17791code, including across jump instructions.  For example, on many targets
17792there is a system register which can be set to control the rounding
17793mode of floating point operations.  You might try setting it with a
17794volatile `asm', like this PowerPC example:
17795
17796            asm volatile("mtfsf 255,%0" : : "f" (fpenv));
17797            sum = x + y;
17798
17799This will not work reliably, as the compiler may move the addition back
17800before the volatile `asm'.  To make it work you need to add an
17801artificial dependency to the `asm' referencing a variable in the code
17802you don't want moved, for example:
17803
17804         asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
17805         sum = x + y;
17806
17807 Similarly, you can't expect a sequence of volatile `asm' instructions
17808to remain perfectly consecutive.  If you want consecutive output, use a
17809single `asm'.  Also, GCC will perform some optimizations across a
17810volatile `asm' instruction; GCC does not "forget everything" when it
17811encounters a volatile `asm' instruction the way some other compilers do.
17812
17813 An `asm' instruction without any output operands will be treated
17814identically to a volatile `asm' instruction.
17815
17816 It is a natural idea to look for a way to give access to the condition
17817code left by the assembler instruction.  However, when we attempted to
17818implement this, we found no way to make it work reliably.  The problem
17819is that output operands might need reloading, which would result in
17820additional following "store" instructions.  On most machines, these
17821instructions would alter the condition code before there was time to
17822test it.  This problem doesn't arise for ordinary "test" and "compare"
17823instructions because they don't have any output operands.
17824
17825 For reasons similar to those described above, it is not possible to
17826give an assembler instruction access to the condition code left by
17827previous instructions.
17828
17829 If you are writing a header file that should be includable in ISO C
17830programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
17831
178325.35.1 Size of an `asm'
17833-----------------------
17834
17835Some targets require that GCC track the size of each instruction used in
17836order to generate correct code.  Because the final length of an `asm'
17837is only known by the assembler, GCC must make an estimate as to how big
17838it will be.  The estimate is formed by counting the number of
17839statements in the pattern of the `asm' and multiplying that by the
17840length of the longest instruction on that processor.  Statements in the
17841`asm' are identified by newline characters and whatever statement
17842separator characters are supported by the assembler; on most processors
17843this is the ``;'' character.
17844
17845 Normally, GCC's estimate is perfectly adequate to ensure that correct
17846code is generated, but it is possible to confuse the compiler if you use
17847pseudo instructions or assembler macros that expand into multiple real
17848instructions or if you use assembler directives that expand to more
17849space in the object file than would be needed for a single instruction.
17850If this happens then the assembler will produce a diagnostic saying that
17851a label is unreachable.
17852
178535.35.2 i386 floating point asm operands
17854---------------------------------------
17855
17856There are several rules on the usage of stack-like regs in asm_operands
17857insns.  These rules apply only to the operands that are stack-like regs:
17858
17859  1. Given a set of input regs that die in an asm_operands, it is
17860     necessary to know which are implicitly popped by the asm, and
17861     which must be explicitly popped by gcc.
17862
17863     An input reg that is implicitly popped by the asm must be
17864     explicitly clobbered, unless it is constrained to match an output
17865     operand.
17866
17867  2. For any input reg that is implicitly popped by an asm, it is
17868     necessary to know how to adjust the stack to compensate for the
17869     pop.  If any non-popped input is closer to the top of the
17870     reg-stack than the implicitly popped reg, it would not be possible
17871     to know what the stack looked like--it's not clear how the rest of
17872     the stack "slides up".
17873
17874     All implicitly popped input regs must be closer to the top of the
17875     reg-stack than any input that is not implicitly popped.
17876
17877     It is possible that if an input dies in an insn, reload might use
17878     the input reg for an output reload.  Consider this example:
17879
17880          asm ("foo" : "=t" (a) : "f" (b));
17881
17882     This asm says that input B is not popped by the asm, and that the
17883     asm pushes a result onto the reg-stack, i.e., the stack is one
17884     deeper after the asm than it was before.  But, it is possible that
17885     reload will think that it can use the same reg for both the input
17886     and the output, if input B dies in this insn.
17887
17888     If any input operand uses the `f' constraint, all output reg
17889     constraints must use the `&' earlyclobber.
17890
17891     The asm above would be written as
17892
17893          asm ("foo" : "=&t" (a) : "f" (b));
17894
17895  3. Some operands need to be in particular places on the stack.  All
17896     output operands fall in this category--there is no other way to
17897     know which regs the outputs appear in unless the user indicates
17898     this in the constraints.
17899
17900     Output operands must specifically indicate which reg an output
17901     appears in after an asm.  `=f' is not allowed: the operand
17902     constraints must select a class with a single reg.
17903
17904  4. Output operands may not be "inserted" between existing stack regs.
17905     Since no 387 opcode uses a read/write operand, all output operands
17906     are dead before the asm_operands, and are pushed by the
17907     asm_operands.  It makes no sense to push anywhere but the top of
17908     the reg-stack.
17909
17910     Output operands must start at the top of the reg-stack: output
17911     operands may not "skip" a reg.
17912
17913  5. Some asm statements may need extra stack space for internal
17914     calculations.  This can be guaranteed by clobbering stack registers
17915     unrelated to the inputs and outputs.
17916
17917
17918 Here are a couple of reasonable asms to want to write.  This asm takes
17919one input, which is internally popped, and produces two outputs.
17920
17921     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
17922
17923 This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
17924and replaces them with one output.  The user must code the `st(1)'
17925clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
17926
17927     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
17928
17929
17930File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
17931
179325.36 Constraints for `asm' Operands
17933===================================
17934
17935Here are specific details on what constraint letters you can use with
17936`asm' operands.  Constraints can say whether an operand may be in a
17937register, and which kinds of register; whether the operand can be a
17938memory reference, and which kinds of address; whether the operand may
17939be an immediate constant, and which possible values it may have.
17940Constraints can also require two operands to match.
17941
17942* Menu:
17943
17944* Simple Constraints::  Basic use of constraints.
17945* Multi-Alternative::   When an insn has two alternative constraint-patterns.
17946* Modifiers::           More precise control over effects of constraints.
17947* Machine Constraints:: Special constraints for some particular machines.
17948
17949
17950File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
17951
179525.36.1 Simple Constraints
17953-------------------------
17954
17955The simplest kind of constraint is a string full of letters, each of
17956which describes one kind of operand that is permitted.  Here are the
17957letters that are allowed:
17958
17959whitespace
17960     Whitespace characters are ignored and can be inserted at any
17961     position except the first.  This enables each alternative for
17962     different operands to be visually aligned in the machine
17963     description even if they have different number of constraints and
17964     modifiers.
17965
17966`m'
17967     A memory operand is allowed, with any kind of address that the
17968     machine supports in general.
17969
17970`o'
17971     A memory operand is allowed, but only if the address is
17972     "offsettable".  This means that adding a small integer (actually,
17973     the width in bytes of the operand, as determined by its machine
17974     mode) may be added to the address and the result is also a valid
17975     memory address.
17976
17977     For example, an address which is constant is offsettable; so is an
17978     address that is the sum of a register and a constant (as long as a
17979     slightly larger constant is also within the range of
17980     address-offsets supported by the machine); but an autoincrement or
17981     autodecrement address is not offsettable.  More complicated
17982     indirect/indexed addresses may or may not be offsettable depending
17983     on the other addressing modes that the machine supports.
17984
17985     Note that in an output operand which can be matched by another
17986     operand, the constraint letter `o' is valid only when accompanied
17987     by both `<' (if the target machine has predecrement addressing)
17988     and `>' (if the target machine has preincrement addressing).
17989
17990`V'
17991     A memory operand that is not offsettable.  In other words,
17992     anything that would fit the `m' constraint but not the `o'
17993     constraint.
17994
17995`<'
17996     A memory operand with autodecrement addressing (either
17997     predecrement or postdecrement) is allowed.
17998
17999`>'
18000     A memory operand with autoincrement addressing (either
18001     preincrement or postincrement) is allowed.
18002
18003`r'
18004     A register operand is allowed provided that it is in a general
18005     register.
18006
18007`i'
18008     An immediate integer operand (one with constant value) is allowed.
18009     This includes symbolic constants whose values will be known only at
18010     assembly time or later.
18011
18012`n'
18013     An immediate integer operand with a known numeric value is allowed.
18014     Many systems cannot support assembly-time constants for operands
18015     less than a word wide.  Constraints for these operands should use
18016     `n' rather than `i'.
18017
18018`I', `J', `K', ... `P'
18019     Other letters in the range `I' through `P' may be defined in a
18020     machine-dependent fashion to permit immediate integer operands with
18021     explicit integer values in specified ranges.  For example, on the
18022     68000, `I' is defined to stand for the range of values 1 to 8.
18023     This is the range permitted as a shift count in the shift
18024     instructions.
18025
18026`E'
18027     An immediate floating operand (expression code `const_double') is
18028     allowed, but only if the target floating point format is the same
18029     as that of the host machine (on which the compiler is running).
18030
18031`F'
18032     An immediate floating operand (expression code `const_double' or
18033     `const_vector') is allowed.
18034
18035`G', `H'
18036     `G' and `H' may be defined in a machine-dependent fashion to
18037     permit immediate floating operands in particular ranges of values.
18038
18039`s'
18040     An immediate integer operand whose value is not an explicit
18041     integer is allowed.
18042
18043     This might appear strange; if an insn allows a constant operand
18044     with a value not known at compile time, it certainly must allow
18045     any known value.  So why use `s' instead of `i'?  Sometimes it
18046     allows better code to be generated.
18047
18048     For example, on the 68000 in a fullword instruction it is possible
18049     to use an immediate operand; but if the immediate value is between
18050     -128 and 127, better code results from loading the value into a
18051     register and using the register.  This is because the load into
18052     the register can be done with a `moveq' instruction.  We arrange
18053     for this to happen by defining the letter `K' to mean "any integer
18054     outside the range -128 to 127", and then specifying `Ks' in the
18055     operand constraints.
18056
18057`g'
18058     Any register, memory or immediate integer operand is allowed,
18059     except for registers that are not general registers.
18060
18061`X'
18062     Any operand whatsoever is allowed.
18063
18064`0', `1', `2', ... `9'
18065     An operand that matches the specified operand number is allowed.
18066     If a digit is used together with letters within the same
18067     alternative, the digit should come last.
18068
18069     This number is allowed to be more than a single digit.  If multiple
18070     digits are encountered consecutively, they are interpreted as a
18071     single decimal integer.  There is scant chance for ambiguity,
18072     since to-date it has never been desirable that `10' be interpreted
18073     as matching either operand 1 _or_ operand 0.  Should this be
18074     desired, one can use multiple alternatives instead.
18075
18076     This is called a "matching constraint" and what it really means is
18077     that the assembler has only a single operand that fills two roles
18078     which `asm' distinguishes.  For example, an add instruction uses
18079     two input operands and an output operand, but on most CISC
18080     machines an add instruction really has only two operands, one of
18081     them an input-output operand:
18082
18083          addl #35,r12
18084
18085     Matching constraints are used in these circumstances.  More
18086     precisely, the two operands that match must include one input-only
18087     operand and one output-only operand.  Moreover, the digit must be a
18088     smaller number than the number of the operand that uses it in the
18089     constraint.
18090
18091`p'
18092     An operand that is a valid memory address is allowed.  This is for
18093     "load address" and "push address" instructions.
18094
18095     `p' in the constraint must be accompanied by `address_operand' as
18096     the predicate in the `match_operand'.  This predicate interprets
18097     the mode specified in the `match_operand' as the mode of the memory
18098     reference for which the address would be valid.
18099
18100OTHER-LETTERS
18101     Other letters can be defined in machine-dependent fashion to stand
18102     for particular classes of registers or other arbitrary operand
18103     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
18104     for data, address and floating point registers.
18105
18106
18107File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
18108
181095.36.2 Multiple Alternative Constraints
18110---------------------------------------
18111
18112Sometimes a single instruction has multiple alternative sets of possible
18113operands.  For example, on the 68000, a logical-or instruction can
18114combine register or an immediate value into memory, or it can combine
18115any kind of operand into a register; but it cannot combine one memory
18116location into another.
18117
18118 These constraints are represented as multiple alternatives.  An
18119alternative can be described by a series of letters for each operand.
18120The overall constraint for an operand is made from the letters for this
18121operand from the first alternative, a comma, the letters for this
18122operand from the second alternative, a comma, and so on until the last
18123alternative.
18124
18125 If all the operands fit any one alternative, the instruction is valid.
18126Otherwise, for each alternative, the compiler counts how many
18127instructions must be added to copy the operands so that that
18128alternative applies.  The alternative requiring the least copying is
18129chosen.  If two alternatives need the same amount of copying, the one
18130that comes first is chosen.  These choices can be altered with the `?'
18131and `!' characters:
18132
18133`?'
18134     Disparage slightly the alternative that the `?' appears in, as a
18135     choice when no alternative applies exactly.  The compiler regards
18136     this alternative as one unit more costly for each `?' that appears
18137     in it.
18138
18139`!'
18140     Disparage severely the alternative that the `!' appears in.  This
18141     alternative can still be used if it fits without reloading, but if
18142     reloading is needed, some other alternative will be used.
18143
18144
18145File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
18146
181475.36.3 Constraint Modifier Characters
18148-------------------------------------
18149
18150Here are constraint modifier characters.
18151
18152`='
18153     Means that this operand is write-only for this instruction: the
18154     previous value is discarded and replaced by output data.
18155
18156`+'
18157     Means that this operand is both read and written by the
18158     instruction.
18159
18160     When the compiler fixes up the operands to satisfy the constraints,
18161     it needs to know which operands are inputs to the instruction and
18162     which are outputs from it.  `=' identifies an output; `+'
18163     identifies an operand that is both input and output; all other
18164     operands are assumed to be input only.
18165
18166     If you specify `=' or `+' in a constraint, you put it in the first
18167     character of the constraint string.
18168
18169`&'
18170     Means (in a particular alternative) that this operand is an
18171     "earlyclobber" operand, which is modified before the instruction is
18172     finished using the input operands.  Therefore, this operand may
18173     not lie in a register that is used as an input operand or as part
18174     of any memory address.
18175
18176     `&' applies only to the alternative in which it is written.  In
18177     constraints with multiple alternatives, sometimes one alternative
18178     requires `&' while others do not.  See, for example, the `movdf'
18179     insn of the 68000.
18180
18181     An input operand can be tied to an earlyclobber operand if its only
18182     use as an input occurs before the early result is written.  Adding
18183     alternatives of this form often allows GCC to produce better code
18184     when only some of the inputs can be affected by the earlyclobber.
18185     See, for example, the `mulsi3' insn of the ARM.
18186
18187     `&' does not obviate the need to write `='.
18188
18189`%'
18190     Declares the instruction to be commutative for this operand and the
18191     following operand.  This means that the compiler may interchange
18192     the two operands if that is the cheapest way to make all operands
18193     fit the constraints.  GCC can only handle one commutative pair in
18194     an asm; if you use more, the compiler may fail.  Note that you
18195     need not use the modifier if the two alternatives are strictly
18196     identical; this would only waste time in the reload pass.  The
18197     modifier is not operational after register allocation, so the
18198     result of `define_peephole2' and `define_split's performed after
18199     reload cannot rely on `%' to make the intended insn match.
18200
18201`#'
18202     Says that all following characters, up to the next comma, are to be
18203     ignored as a constraint.  They are significant only for choosing
18204     register preferences.
18205
18206`*'
18207     Says that the following character should be ignored when choosing
18208     register preferences.  `*' has no effect on the meaning of the
18209     constraint as a constraint, and no effect on reloading.
18210
18211
18212
18213File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
18214
182155.36.4 Constraints for Particular Machines
18216------------------------------------------
18217
18218Whenever possible, you should use the general-purpose constraint letters
18219in `asm' arguments, since they will convey meaning more readily to
18220people reading your code.  Failing that, use the constraint letters
18221that usually have very similar meanings across architectures.  The most
18222commonly used constraints are `m' and `r' (for memory and
18223general-purpose registers respectively; *note Simple Constraints::), and
18224`I', usually the letter indicating the most common immediate-constant
18225format.
18226
18227 Each architecture defines additional constraints.  These constraints
18228are used by the compiler itself for instruction generation, as well as
18229for `asm' statements; therefore, some of the constraints are not
18230particularly useful for `asm'.  Here is a summary of some of the
18231machine-dependent constraints available on some particular machines; it
18232includes both constraints that are useful for `asm' and constraints
18233that aren't.  The compiler source file mentioned in the table heading
18234for each architecture is the definitive reference for the meanings of
18235that architecture's constraints.
18236
18237_ARM family--`config/arm/arm.h'_
18238
18239    `f'
18240          Floating-point register
18241
18242    `w'
18243          VFP floating-point register
18244
18245    `F'
18246          One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
18247          4.0, 5.0 or 10.0
18248
18249    `G'
18250          Floating-point constant that would satisfy the constraint `F'
18251          if it were negated
18252
18253    `I'
18254          Integer that is valid as an immediate operand in a data
18255          processing instruction.  That is, an integer in the range 0
18256          to 255 rotated by a multiple of 2
18257
18258    `J'
18259          Integer in the range -4095 to 4095
18260
18261    `K'
18262          Integer that satisfies constraint `I' when inverted (ones
18263          complement)
18264
18265    `L'
18266          Integer that satisfies constraint `I' when negated (twos
18267          complement)
18268
18269    `M'
18270          Integer in the range 0 to 32
18271
18272    `Q'
18273          A memory reference where the exact address is in a single
18274          register (``m'' is preferable for `asm' statements)
18275
18276    `R'
18277          An item in the constant pool
18278
18279    `S'
18280          A symbol in the text segment of the current file
18281
18282    `Uv'
18283          A memory reference suitable for VFP load/store insns
18284          (reg+constant offset)
18285
18286    `Uy'
18287          A memory reference suitable for iWMMXt load/store
18288          instructions.
18289
18290    `Uq'
18291          A memory reference suitable for the ARMv4 ldrsb instruction.
18292
18293_AVR family--`config/avr/constraints.md'_
18294
18295    `l'
18296          Registers from r0 to r15
18297
18298    `a'
18299          Registers from r16 to r23
18300
18301    `d'
18302          Registers from r16 to r31
18303
18304    `w'
18305          Registers from r24 to r31.  These registers can be used in
18306          `adiw' command
18307
18308    `e'
18309          Pointer register (r26-r31)
18310
18311    `b'
18312          Base pointer register (r28-r31)
18313
18314    `q'
18315          Stack pointer register (SPH:SPL)
18316
18317    `t'
18318          Temporary register r0
18319
18320    `x'
18321          Register pair X (r27:r26)
18322
18323    `y'
18324          Register pair Y (r29:r28)
18325
18326    `z'
18327          Register pair Z (r31:r30)
18328
18329    `I'
18330          Constant greater than -1, less than 64
18331
18332    `J'
18333          Constant greater than -64, less than 1
18334
18335    `K'
18336          Constant integer 2
18337
18338    `L'
18339          Constant integer 0
18340
18341    `M'
18342          Constant that fits in 8 bits
18343
18344    `N'
18345          Constant integer -1
18346
18347    `O'
18348          Constant integer 8, 16, or 24
18349
18350    `P'
18351          Constant integer 1
18352
18353    `G'
18354          A floating point constant 0.0
18355
18356_CRX Architecture--`config/crx/crx.h'_
18357
18358    `b'
18359          Registers from r0 to r14 (registers without stack pointer)
18360
18361    `l'
18362          Register r16 (64-bit accumulator lo register)
18363
18364    `h'
18365          Register r17 (64-bit accumulator hi register)
18366
18367    `k'
18368          Register pair r16-r17. (64-bit accumulator lo-hi pair)
18369
18370    `I'
18371          Constant that fits in 3 bits
18372
18373    `J'
18374          Constant that fits in 4 bits
18375
18376    `K'
18377          Constant that fits in 5 bits
18378
18379    `L'
18380          Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
18381
18382    `G'
18383          Floating point constant that is legal for store immediate
18384
18385_PowerPC and IBM RS6000--`config/rs6000/rs6000.h'_
18386
18387    `b'
18388          Address base register
18389
18390    `f'
18391          Floating point register
18392
18393    `v'
18394          Vector register
18395
18396    `h'
18397          `MQ', `CTR', or `LINK' register
18398
18399    `q'
18400          `MQ' register
18401
18402    `c'
18403          `CTR' register
18404
18405    `l'
18406          `LINK' register
18407
18408    `x'
18409          `CR' register (condition register) number 0
18410
18411    `y'
18412          `CR' register (condition register)
18413
18414    `z'
18415          `FPMEM' stack memory for FPR-GPR transfers
18416
18417    `I'
18418          Signed 16-bit constant
18419
18420    `J'
18421          Unsigned 16-bit constant shifted left 16 bits (use `L'
18422          instead for `SImode' constants)
18423
18424    `K'
18425          Unsigned 16-bit constant
18426
18427    `L'
18428          Signed 16-bit constant shifted left 16 bits
18429
18430    `M'
18431          Constant larger than 31
18432
18433    `N'
18434          Exact power of 2
18435
18436    `O'
18437          Zero
18438
18439    `P'
18440          Constant whose negation is a signed 16-bit constant
18441
18442    `G'
18443          Floating point constant that can be loaded into a register
18444          with one instruction per word
18445
18446    `Q'
18447          Memory operand that is an offset from a register (`m' is
18448          preferable for `asm' statements)
18449
18450    `R'
18451          AIX TOC entry
18452
18453    `S'
18454          Constant suitable as a 64-bit mask operand
18455
18456    `T'
18457          Constant suitable as a 32-bit mask operand
18458
18459    `U'
18460          System V Release 4 small data area reference
18461
18462_MorphoTech family--`config/mt/mt.h'_
18463
18464    `I'
18465          Constant for an arithmetic insn (16-bit signed integer).
18466
18467    `J'
18468          The constant 0.
18469
18470    `K'
18471          Constant for a logical insn (16-bit zero-extended integer).
18472
18473    `L'
18474          A constant that can be loaded with `lui' (i.e. the bottom 16
18475          bits are zero).
18476
18477    `M'
18478          A constant that takes two words to load (i.e. not matched by
18479          `I', `K', or `L').
18480
18481    `N'
18482          Negative 16-bit constants other than -65536.
18483
18484    `O'
18485          A 15-bit signed integer constant.
18486
18487    `P'
18488          A positive 16-bit constant.
18489
18490_Intel 386--`config/i386/constraints.md'_
18491
18492    `R'
18493          Legacy register--the eight integer registers available on all
18494          i386 processors (`a', `b', `c', `d', `si', `di', `bp', `sp').
18495
18496    `q'
18497          Any register accessible as `Rl'.  In 32-bit mode, `a', `b',
18498          `c', and `d'; in 64-bit mode, any integer register.
18499
18500    `Q'
18501          Any register accessible as `Rh': `a', `b', `c', and `d'.
18502
18503    `a'
18504          The `a' register.
18505
18506    `b'
18507          The `b' register.
18508
18509    `c'
18510          The `c' register.
18511
18512    `d'
18513          The `d' register.
18514
18515    `S'
18516          The `si' register.
18517
18518    `D'
18519          The `di' register.
18520
18521    `A'
18522          The `a' and `d' registers, as a pair (for instructions that
18523          return half the result in one and half in the other).
18524
18525    `f'
18526          Any 80387 floating-point (stack) register.
18527
18528    `t'
18529          Top of 80387 floating-point stack (`%st(0)').
18530
18531    `u'
18532          Second from top of 80387 floating-point stack (`%st(1)').
18533
18534    `y'
18535          Any MMX register.
18536
18537    `x'
18538          Any SSE register.
18539
18540    `I'
18541          Integer constant in the range 0 ... 31, for 32-bit shifts.
18542
18543    `J'
18544          Integer constant in the range 0 ... 63, for 64-bit shifts.
18545
18546    `K'
18547          Signed 8-bit integer constant.
18548
18549    `L'
18550          `0xFF' or `0xFFFF', for andsi as a zero-extending move.
18551
18552    `M'
18553          0, 1, 2, or 3 (shifts for the `lea' instruction).
18554
18555    `N'
18556          Unsigned 8-bit integer constant (for `in' and `out'
18557          instructions).
18558
18559    `G'
18560          Standard 80387 floating point constant.
18561
18562    `C'
18563          Standard SSE floating point constant.
18564
18565    `e'
18566          32-bit signed integer constant, or a symbolic reference known
18567          to fit that range (for immediate operands in sign-extending
18568          x86-64 instructions).
18569
18570    `Z'
18571          32-bit unsigned integer constant, or a symbolic reference
18572          known to fit that range (for immediate operands in
18573          zero-extending x86-64 instructions).
18574
18575
18576_Intel IA-64--`config/ia64/ia64.h'_
18577
18578    `a'
18579          General register `r0' to `r3' for `addl' instruction
18580
18581    `b'
18582          Branch register
18583
18584    `c'
18585          Predicate register (`c' as in "conditional")
18586
18587    `d'
18588          Application register residing in M-unit
18589
18590    `e'
18591          Application register residing in I-unit
18592
18593    `f'
18594          Floating-point register
18595
18596    `m'
18597          Memory operand.  Remember that `m' allows postincrement and
18598          postdecrement which require printing with `%Pn' on IA-64.
18599          Use `S' to disallow postincrement and postdecrement.
18600
18601    `G'
18602          Floating-point constant 0.0 or 1.0
18603
18604    `I'
18605          14-bit signed integer constant
18606
18607    `J'
18608          22-bit signed integer constant
18609
18610    `K'
18611          8-bit signed integer constant for logical instructions
18612
18613    `L'
18614          8-bit adjusted signed integer constant for compare pseudo-ops
18615
18616    `M'
18617          6-bit unsigned integer constant for shift counts
18618
18619    `N'
18620          9-bit signed integer constant for load and store
18621          postincrements
18622
18623    `O'
18624          The constant zero
18625
18626    `P'
18627          0 or -1 for `dep' instruction
18628
18629    `Q'
18630          Non-volatile memory for floating-point loads and stores
18631
18632    `R'
18633          Integer constant in the range 1 to 4 for `shladd' instruction
18634
18635    `S'
18636          Memory operand except postincrement and postdecrement
18637
18638_FRV--`config/frv/frv.h'_
18639
18640    `a'
18641          Register in the class `ACC_REGS' (`acc0' to `acc7').
18642
18643    `b'
18644          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
18645
18646    `c'
18647          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
18648          to `icc3').
18649
18650    `d'
18651          Register in the class `GPR_REGS' (`gr0' to `gr63').
18652
18653    `e'
18654          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
18655          registers are excluded not in the class but through the use
18656          of a machine mode larger than 4 bytes.
18657
18658    `f'
18659          Register in the class `FPR_REGS' (`fr0' to `fr63').
18660
18661    `h'
18662          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
18663          registers are excluded not in the class but through the use
18664          of a machine mode larger than 4 bytes.
18665
18666    `l'
18667          Register in the class `LR_REG' (the `lr' register).
18668
18669    `q'
18670          Register in the class `QUAD_REGS' (`gr2' to `gr63').
18671          Register numbers not divisible by 4 are excluded not in the
18672          class but through the use of a machine mode larger than 8
18673          bytes.
18674
18675    `t'
18676          Register in the class `ICC_REGS' (`icc0' to `icc3').
18677
18678    `u'
18679          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
18680
18681    `v'
18682          Register in the class `ICR_REGS' (`cc4' to `cc7').
18683
18684    `w'
18685          Register in the class `FCR_REGS' (`cc0' to `cc3').
18686
18687    `x'
18688          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
18689          Register numbers not divisible by 4 are excluded not in the
18690          class but through the use of a machine mode larger than 8
18691          bytes.
18692
18693    `z'
18694          Register in the class `SPR_REGS' (`lcr' and `lr').
18695
18696    `A'
18697          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
18698
18699    `B'
18700          Register in the class `ACCG_REGS' (`accg0' to `accg7').
18701
18702    `C'
18703          Register in the class `CR_REGS' (`cc0' to `cc7').
18704
18705    `G'
18706          Floating point constant zero
18707
18708    `I'
18709          6-bit signed integer constant
18710
18711    `J'
18712          10-bit signed integer constant
18713
18714    `L'
18715          16-bit signed integer constant
18716
18717    `M'
18718          16-bit unsigned integer constant
18719
18720    `N'
18721          12-bit signed integer constant that is negative--i.e. in the
18722          range of -2048 to -1
18723
18724    `O'
18725          Constant zero
18726
18727    `P'
18728          12-bit signed integer constant that is greater than
18729          zero--i.e. in the range of 1 to 2047.
18730
18731
18732_Blackfin family--`config/bfin/bfin.h'_
18733
18734    `a'
18735          P register
18736
18737    `d'
18738          D register
18739
18740    `z'
18741          A call clobbered P register.
18742
18743    `D'
18744          Even-numbered D register
18745
18746    `W'
18747          Odd-numbered D register
18748
18749    `e'
18750          Accumulator register.
18751
18752    `A'
18753          Even-numbered accumulator register.
18754
18755    `B'
18756          Odd-numbered accumulator register.
18757
18758    `b'
18759          I register
18760
18761    `v'
18762          B register
18763
18764    `f'
18765          M register
18766
18767    `c'
18768          Registers used for circular buffering, i.e. I, B, or L
18769          registers.
18770
18771    `C'
18772          The CC register.
18773
18774    `t'
18775          LT0 or LT1.
18776
18777    `k'
18778          LC0 or LC1.
18779
18780    `u'
18781          LB0 or LB1.
18782
18783    `x'
18784          Any D, P, B, M, I or L register.
18785
18786    `y'
18787          Additional registers typically used only in prologues and
18788          epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
18789          USP.
18790
18791    `w'
18792          Any register except accumulators or CC.
18793
18794    `Ksh'
18795          Signed 16 bit integer (in the range -32768 to 32767)
18796
18797    `Kuh'
18798          Unsigned 16 bit integer (in the range 0 to 65535)
18799
18800    `Ks7'
18801          Signed 7 bit integer (in the range -64 to 63)
18802
18803    `Ku7'
18804          Unsigned 7 bit integer (in the range 0 to 127)
18805
18806    `Ku5'
18807          Unsigned 5 bit integer (in the range 0 to 31)
18808
18809    `Ks4'
18810          Signed 4 bit integer (in the range -8 to 7)
18811
18812    `Ks3'
18813          Signed 3 bit integer (in the range -3 to 4)
18814
18815    `Ku3'
18816          Unsigned 3 bit integer (in the range 0 to 7)
18817
18818    `PN'
18819          Constant N, where N is a single-digit constant in the range 0
18820          to 4.
18821
18822    `M1'
18823          Constant 255.
18824
18825    `M2'
18826          Constant 65535.
18827
18828    `J'
18829          An integer constant with exactly a single bit set.
18830
18831    `L'
18832          An integer constant with all bits set except exactly one.
18833
18834    `H'
18835
18836    `Q'
18837          Any SYMBOL_REF.
18838
18839_M32C--`config/m32c/m32c.c'_
18840
18841    `Rsp'
18842    `Rfb'
18843    `Rsb'
18844          `$sp', `$fb', `$sb'.
18845
18846    `Rcr'
18847          Any control register, when they're 16 bits wide (nothing if
18848          control registers are 24 bits wide)
18849
18850    `Rcl'
18851          Any control register, when they're 24 bits wide.
18852
18853    `R0w'
18854    `R1w'
18855    `R2w'
18856    `R3w'
18857          $r0, $r1, $r2, $r3.
18858
18859    `R02'
18860          $r0 or $r2, or $r2r0 for 32 bit values.
18861
18862    `R13'
18863          $r1 or $r3, or $r3r1 for 32 bit values.
18864
18865    `Rdi'
18866          A register that can hold a 64 bit value.
18867
18868    `Rhl'
18869          $r0 or $r1 (registers with addressable high/low bytes)
18870
18871    `R23'
18872          $r2 or $r3
18873
18874    `Raa'
18875          Address registers
18876
18877    `Raw'
18878          Address registers when they're 16 bits wide.
18879
18880    `Ral'
18881          Address registers when they're 24 bits wide.
18882
18883    `Rqi'
18884          Registers that can hold QI values.
18885
18886    `Rad'
18887          Registers that can be used with displacements ($a0, $a1, $sb).
18888
18889    `Rsi'
18890          Registers that can hold 32 bit values.
18891
18892    `Rhi'
18893          Registers that can hold 16 bit values.
18894
18895    `Rhc'
18896          Registers chat can hold 16 bit values, including all control
18897          registers.
18898
18899    `Rra'
18900          $r0 through R1, plus $a0 and $a1.
18901
18902    `Rfl'
18903          The flags register.
18904
18905    `Rmm'
18906          The memory-based pseudo-registers $mem0 through $mem15.
18907
18908    `Rpi'
18909          Registers that can hold pointers (16 bit registers for r8c,
18910          m16c; 24 bit registers for m32cm, m32c).
18911
18912    `Rpa'
18913          Matches multiple registers in a PARALLEL to form a larger
18914          register.  Used to match function return values.
18915
18916    `Is3'
18917          -8 ... 7
18918
18919    `IS1'
18920          -128 ... 127
18921
18922    `IS2'
18923          -32768 ... 32767
18924
18925    `IU2'
18926          0 ... 65535
18927
18928    `In4'
18929          -8 ... -1 or 1 ... 8
18930
18931    `In5'
18932          -16 ... -1 or 1 ... 16
18933
18934    `In6'
18935          -32 ... -1 or 1 ... 32
18936
18937    `IM2'
18938          -65536 ... -1
18939
18940    `Ilb'
18941          An 8 bit value with exactly one bit set.
18942
18943    `Ilw'
18944          A 16 bit value with exactly one bit set.
18945
18946    `Sd'
18947          The common src/dest memory addressing modes.
18948
18949    `Sa'
18950          Memory addressed using $a0 or $a1.
18951
18952    `Si'
18953          Memory addressed with immediate addresses.
18954
18955    `Ss'
18956          Memory addressed using the stack pointer ($sp).
18957
18958    `Sf'
18959          Memory addressed using the frame base register ($fb).
18960
18961    `Ss'
18962          Memory addressed using the small base register ($sb).
18963
18964    `S1'
18965          $r1h
18966
18967_MIPS--`config/mips/constraints.md'_
18968
18969    `d'
18970          An address register.  This is equivalent to `r' unless
18971          generating MIPS16 code.
18972
18973    `f'
18974          A floating-point register (if available).
18975
18976    `h'
18977          The `hi' register.
18978
18979    `l'
18980          The `lo' register.
18981
18982    `x'
18983          The `hi' and `lo' registers.
18984
18985    `c'
18986          A register suitable for use in an indirect jump.  This will
18987          always be `$25' for `-mabicalls'.
18988
18989    `y'
18990          Equivalent to `r'; retained for backwards compatibility.
18991
18992    `z'
18993          A floating-point condition code register.
18994
18995    `I'
18996          A signed 16-bit constant (for arithmetic instructions).
18997
18998    `J'
18999          Integer zero.
19000
19001    `K'
19002          An unsigned 16-bit constant (for logic instructions).
19003
19004    `L'
19005          A signed 32-bit constant in which the lower 16 bits are zero.
19006          Such constants can be loaded using `lui'.
19007
19008    `M'
19009          A constant that cannot be loaded using `lui', `addiu' or
19010          `ori'.
19011
19012    `N'
19013          A constant in the range -65535 to -1 (inclusive).
19014
19015    `O'
19016          A signed 15-bit constant.
19017
19018    `P'
19019          A constant in the range 1 to 65535 (inclusive).
19020
19021    `G'
19022          Floating-point zero.
19023
19024    `R'
19025          An address that can be used in a non-macro load or store.
19026
19027_Motorola 680x0--`config/m68k/m68k.h'_
19028
19029    `a'
19030          Address register
19031
19032    `d'
19033          Data register
19034
19035    `f'
19036          68881 floating-point register, if available
19037
19038    `I'
19039          Integer in the range 1 to 8
19040
19041    `J'
19042          16-bit signed number
19043
19044    `K'
19045          Signed number whose magnitude is greater than 0x80
19046
19047    `L'
19048          Integer in the range -8 to -1
19049
19050    `M'
19051          Signed number whose magnitude is greater than 0x100
19052
19053    `G'
19054          Floating point constant that is not a 68881 constant
19055
19056_Motorola 68HC11 & 68HC12 families--`config/m68hc11/m68hc11.h'_
19057
19058    `a'
19059          Register `a'
19060
19061    `b'
19062          Register `b'
19063
19064    `d'
19065          Register `d'
19066
19067    `q'
19068          An 8-bit register
19069
19070    `t'
19071          Temporary soft register _.tmp
19072
19073    `u'
19074          A soft register _.d1 to _.d31
19075
19076    `w'
19077          Stack pointer register
19078
19079    `x'
19080          Register `x'
19081
19082    `y'
19083          Register `y'
19084
19085    `z'
19086          Pseudo register `z' (replaced by `x' or `y' at the end)
19087
19088    `A'
19089          An address register: x, y or z
19090
19091    `B'
19092          An address register: x or y
19093
19094    `D'
19095          Register pair (x:d) to form a 32-bit value
19096
19097    `L'
19098          Constants in the range -65536 to 65535
19099
19100    `M'
19101          Constants whose 16-bit low part is zero
19102
19103    `N'
19104          Constant integer 1 or -1
19105
19106    `O'
19107          Constant integer 16
19108
19109    `P'
19110          Constants in the range -8 to 2
19111
19112
19113_SPARC--`config/sparc/sparc.h'_
19114
19115    `f'
19116          Floating-point register on the SPARC-V8 architecture and
19117          lower floating-point register on the SPARC-V9 architecture.
19118
19119    `e'
19120          Floating-point register.  It is equivalent to `f' on the
19121          SPARC-V8 architecture and contains both lower and upper
19122          floating-point registers on the SPARC-V9 architecture.
19123
19124    `c'
19125          Floating-point condition code register.
19126
19127    `d'
19128          Lower floating-point register.  It is only valid on the
19129          SPARC-V9 architecture when the Visual Instruction Set is
19130          available.
19131
19132    `b'
19133          Floating-point register.  It is only valid on the SPARC-V9
19134          architecture when the Visual Instruction Set is available.
19135
19136    `h'
19137          64-bit global or out register for the SPARC-V8+ architecture.
19138
19139    `I'
19140          Signed 13-bit constant
19141
19142    `J'
19143          Zero
19144
19145    `K'
19146          32-bit constant with the low 12 bits clear (a constant that
19147          can be loaded with the `sethi' instruction)
19148
19149    `L'
19150          A constant in the range supported by `movcc' instructions
19151
19152    `M'
19153          A constant in the range supported by `movrcc' instructions
19154
19155    `N'
19156          Same as `K', except that it verifies that bits that are not
19157          in the lower 32-bit range are all zero.  Must be used instead
19158          of `K' for modes wider than `SImode'
19159
19160    `O'
19161          The constant 4096
19162
19163    `G'
19164          Floating-point zero
19165
19166    `H'
19167          Signed 13-bit constant, sign-extended to 32 or 64 bits
19168
19169    `Q'
19170          Floating-point constant whose integral representation can be
19171          moved into an integer register using a single sethi
19172          instruction
19173
19174    `R'
19175          Floating-point constant whose integral representation can be
19176          moved into an integer register using a single mov instruction
19177
19178    `S'
19179          Floating-point constant whose integral representation can be
19180          moved into an integer register using a high/lo_sum
19181          instruction sequence
19182
19183    `T'
19184          Memory address aligned to an 8-byte boundary
19185
19186    `U'
19187          Even register
19188
19189    `W'
19190          Memory address for `e' constraint registers
19191
19192    `Y'
19193          Vector zero
19194
19195
19196_TMS320C3x/C4x--`config/c4x/c4x.h'_
19197
19198    `a'
19199          Auxiliary (address) register (ar0-ar7)
19200
19201    `b'
19202          Stack pointer register (sp)
19203
19204    `c'
19205          Standard (32-bit) precision integer register
19206
19207    `f'
19208          Extended (40-bit) precision register (r0-r11)
19209
19210    `k'
19211          Block count register (bk)
19212
19213    `q'
19214          Extended (40-bit) precision low register (r0-r7)
19215
19216    `t'
19217          Extended (40-bit) precision register (r0-r1)
19218
19219    `u'
19220          Extended (40-bit) precision register (r2-r3)
19221
19222    `v'
19223          Repeat count register (rc)
19224
19225    `x'
19226          Index register (ir0-ir1)
19227
19228    `y'
19229          Status (condition code) register (st)
19230
19231    `z'
19232          Data page register (dp)
19233
19234    `G'
19235          Floating-point zero
19236
19237    `H'
19238          Immediate 16-bit floating-point constant
19239
19240    `I'
19241          Signed 16-bit constant
19242
19243    `J'
19244          Signed 8-bit constant
19245
19246    `K'
19247          Signed 5-bit constant
19248
19249    `L'
19250          Unsigned 16-bit constant
19251
19252    `M'
19253          Unsigned 8-bit constant
19254
19255    `N'
19256          Ones complement of unsigned 16-bit constant
19257
19258    `O'
19259          High 16-bit constant (32-bit constant with 16 LSBs zero)
19260
19261    `Q'
19262          Indirect memory reference with signed 8-bit or index register
19263          displacement
19264
19265    `R'
19266          Indirect memory reference with unsigned 5-bit displacement
19267
19268    `S'
19269          Indirect memory reference with 1 bit or index register
19270          displacement
19271
19272    `T'
19273          Direct memory reference
19274
19275    `U'
19276          Symbolic address
19277
19278
19279_S/390 and zSeries--`config/s390/s390.h'_
19280
19281    `a'
19282          Address register (general purpose register except r0)
19283
19284    `c'
19285          Condition code register
19286
19287    `d'
19288          Data register (arbitrary general purpose register)
19289
19290    `f'
19291          Floating-point register
19292
19293    `I'
19294          Unsigned 8-bit constant (0-255)
19295
19296    `J'
19297          Unsigned 12-bit constant (0-4095)
19298
19299    `K'
19300          Signed 16-bit constant (-32768-32767)
19301
19302    `L'
19303          Value appropriate as displacement.
19304         `(0..4095)'
19305               for short displacement
19306
19307         `(-524288..524287)'
19308               for long displacement
19309
19310    `M'
19311          Constant integer with a value of 0x7fffffff.
19312
19313    `N'
19314          Multiple letter constraint followed by 4 parameter letters.
19315         `0..9:'
19316               number of the part counting from most to least
19317               significant
19318
19319         `H,Q:'
19320               mode of the part
19321
19322         `D,S,H:'
19323               mode of the containing operand
19324
19325         `0,F:'
19326               value of the other parts (F--all bits set)
19327          The constraint matches if the specified part of a constant
19328          has a value different from it's other parts.
19329
19330    `Q'
19331          Memory reference without index register and with short
19332          displacement.
19333
19334    `R'
19335          Memory reference with index register and short displacement.
19336
19337    `S'
19338          Memory reference without index register but with long
19339          displacement.
19340
19341    `T'
19342          Memory reference with index register and long displacement.
19343
19344    `U'
19345          Pointer with short displacement.
19346
19347    `W'
19348          Pointer with long displacement.
19349
19350    `Y'
19351          Shift count operand.
19352
19353
19354_Score family--`config/score/score.h'_
19355
19356    `d'
19357          Registers from r0 to r32.
19358
19359    `e'
19360          Registers from r0 to r16.
19361
19362    `t'
19363          r8--r11 or r22--r27 registers.
19364
19365    `h'
19366          hi register.
19367
19368    `l'
19369          lo register.
19370
19371    `x'
19372          hi + lo register.
19373
19374    `q'
19375          cnt register.
19376
19377    `y'
19378          lcb register.
19379
19380    `z'
19381          scb register.
19382
19383    `a'
19384          cnt + lcb + scb register.
19385
19386    `c'
19387          cr0--cr15 register.
19388
19389    `b'
19390          cp1 registers.
19391
19392    `f'
19393          cp2 registers.
19394
19395    `i'
19396          cp3 registers.
19397
19398    `j'
19399          cp1 + cp2 + cp3 registers.
19400
19401    `I'
19402          High 16-bit constant (32-bit constant with 16 LSBs zero).
19403
19404    `J'
19405          Unsigned 5 bit integer (in the range 0 to 31).
19406
19407    `K'
19408          Unsigned 16 bit integer (in the range 0 to 65535).
19409
19410    `L'
19411          Signed 16 bit integer (in the range -32768 to 32767).
19412
19413    `M'
19414          Unsigned 14 bit integer (in the range 0 to 16383).
19415
19416    `N'
19417          Signed 14 bit integer (in the range -8192 to 8191).
19418
19419    `Z'
19420          Any SYMBOL_REF.
19421
19422_Xstormy16--`config/stormy16/stormy16.h'_
19423
19424    `a'
19425          Register r0.
19426
19427    `b'
19428          Register r1.
19429
19430    `c'
19431          Register r2.
19432
19433    `d'
19434          Register r8.
19435
19436    `e'
19437          Registers r0 through r7.
19438
19439    `t'
19440          Registers r0 and r1.
19441
19442    `y'
19443          The carry register.
19444
19445    `z'
19446          Registers r8 and r9.
19447
19448    `I'
19449          A constant between 0 and 3 inclusive.
19450
19451    `J'
19452          A constant that has exactly one bit set.
19453
19454    `K'
19455          A constant that has exactly one bit clear.
19456
19457    `L'
19458          A constant between 0 and 255 inclusive.
19459
19460    `M'
19461          A constant between -255 and 0 inclusive.
19462
19463    `N'
19464          A constant between -3 and 0 inclusive.
19465
19466    `O'
19467          A constant between 1 and 4 inclusive.
19468
19469    `P'
19470          A constant between -4 and -1 inclusive.
19471
19472    `Q'
19473          A memory reference that is a stack push.
19474
19475    `R'
19476          A memory reference that is a stack pop.
19477
19478    `S'
19479          A memory reference that refers to a constant address of known
19480          value.
19481
19482    `T'
19483          The register indicated by Rx (not implemented yet).
19484
19485    `U'
19486          A constant that is not between 2 and 15 inclusive.
19487
19488    `Z'
19489          The constant 0.
19490
19491
19492_Xtensa--`config/xtensa/xtensa.h'_
19493
19494    `a'
19495          General-purpose 32-bit register
19496
19497    `b'
19498          One-bit boolean register
19499
19500    `A'
19501          MAC16 40-bit accumulator register
19502
19503    `I'
19504          Signed 12-bit integer constant, for use in MOVI instructions
19505
19506    `J'
19507          Signed 8-bit integer constant, for use in ADDI instructions
19508
19509    `K'
19510          Integer constant valid for BccI instructions
19511
19512    `L'
19513          Unsigned constant valid for BccUI instructions
19514
19515
19516
19517
19518File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
19519
195205.37 Controlling Names Used in Assembler Code
19521=============================================
19522
19523You can specify the name to be used in the assembler code for a C
19524function or variable by writing the `asm' (or `__asm__') keyword after
19525the declarator as follows:
19526
19527     int foo asm ("myfoo") = 2;
19528
19529This specifies that the name to be used for the variable `foo' in the
19530assembler code should be `myfoo' rather than the usual `_foo'.
19531
19532 On systems where an underscore is normally prepended to the name of a C
19533function or variable, this feature allows you to define names for the
19534linker that do not start with an underscore.
19535
19536 It does not make sense to use this feature with a non-static local
19537variable since such variables do not have assembler names.  If you are
19538trying to put the variable in a particular register, see *Note Explicit
19539Reg Vars::.  GCC presently accepts such code with a warning, but will
19540probably be changed to issue an error, rather than a warning, in the
19541future.
19542
19543 You cannot use `asm' in this way in a function _definition_; but you
19544can get the same effect by writing a declaration for the function
19545before its definition and putting `asm' there, like this:
19546
19547     extern func () asm ("FUNC");
19548
19549     func (x, y)
19550          int x, y;
19551     /* ... */
19552
19553 It is up to you to make sure that the assembler names you choose do not
19554conflict with any other assembler symbols.  Also, you must not use a
19555register name; that would produce completely invalid assembler code.
19556GCC does not as yet have the ability to store static variables in
19557registers.  Perhaps that will be added.
19558
19559
19560File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
19561
195625.38 Variables in Specified Registers
19563=====================================
19564
19565GNU C allows you to put a few global variables into specified hardware
19566registers.  You can also specify the register in which an ordinary
19567register variable should be allocated.
19568
19569   * Global register variables reserve registers throughout the program.
19570     This may be useful in programs such as programming language
19571     interpreters which have a couple of global variables that are
19572     accessed very often.
19573
19574   * Local register variables in specific registers do not reserve the
19575     registers, except at the point where they are used as input or
19576     output operands in an `asm' statement and the `asm' statement
19577     itself is not deleted.  The compiler's data flow analysis is
19578     capable of determining where the specified registers contain live
19579     values, and where they are available for other uses.  Stores into
19580     local register variables may be deleted when they appear to be
19581     dead according to dataflow analysis.  References to local register
19582     variables may be deleted or moved or simplified.
19583
19584     These local variables are sometimes convenient for use with the
19585     extended `asm' feature (*note Extended Asm::), if you want to
19586     write one output of the assembler instruction directly into a
19587     particular register.  (This will work provided the register you
19588     specify fits the constraints specified for that operand in the
19589     `asm'.)
19590
19591* Menu:
19592
19593* Global Reg Vars::
19594* Local Reg Vars::
19595
19596
19597File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
19598
195995.38.1 Defining Global Register Variables
19600-----------------------------------------
19601
19602You can define a global register variable in GNU C like this:
19603
19604     register int *foo asm ("a5");
19605
19606Here `a5' is the name of the register which should be used.  Choose a
19607register which is normally saved and restored by function calls on your
19608machine, so that library routines will not clobber it.
19609
19610 Naturally the register name is cpu-dependent, so you would need to
19611conditionalize your program according to cpu type.  The register `a5'
19612would be a good choice on a 68000 for a variable of pointer type.  On
19613machines with register windows, be sure to choose a "global" register
19614that is not affected magically by the function call mechanism.
19615
19616 In addition, operating systems on one type of cpu may differ in how
19617they name the registers; then you would need additional conditionals.
19618For example, some 68000 operating systems call this register `%a5'.
19619
19620 Eventually there may be a way of asking the compiler to choose a
19621register automatically, but first we need to figure out how it should
19622choose and how to enable you to guide the choice.  No solution is
19623evident.
19624
19625 Defining a global register variable in a certain register reserves that
19626register entirely for this use, at least within the current compilation.
19627The register will not be allocated for any other purpose in the
19628functions in the current compilation.  The register will not be saved
19629and restored by these functions.  Stores into this register are never
19630deleted even if they would appear to be dead, but references may be
19631deleted or moved or simplified.
19632
19633 It is not safe to access the global register variables from signal
19634handlers, or from more than one thread of control, because the system
19635library routines may temporarily use the register for other things
19636(unless you recompile them specially for the task at hand).
19637
19638 It is not safe for one function that uses a global register variable to
19639call another such function `foo' by way of a third function `lose' that
19640was compiled without knowledge of this variable (i.e. in a different
19641source file in which the variable wasn't declared).  This is because
19642`lose' might save the register and put some other value there.  For
19643example, you can't expect a global register variable to be available in
19644the comparison-function that you pass to `qsort', since `qsort' might
19645have put something else in that register.  (If you are prepared to
19646recompile `qsort' with the same global register variable, you can solve
19647this problem.)
19648
19649 If you want to recompile `qsort' or other source files which do not
19650actually use your global register variable, so that they will not use
19651that register for any other purpose, then it suffices to specify the
19652compiler option `-ffixed-REG'.  You need not actually add a global
19653register declaration to their source code.
19654
19655 A function which can alter the value of a global register variable
19656cannot safely be called from a function compiled without this variable,
19657because it could clobber the value the caller expects to find there on
19658return.  Therefore, the function which is the entry point into the part
19659of the program that uses the global register variable must explicitly
19660save and restore the value which belongs to its caller.
19661
19662 On most machines, `longjmp' will restore to each global register
19663variable the value it had at the time of the `setjmp'.  On some
19664machines, however, `longjmp' will not change the value of global
19665register variables.  To be portable, the function that called `setjmp'
19666should make other arrangements to save the values of the global register
19667variables, and to restore them in a `longjmp'.  This way, the same
19668thing will happen regardless of what `longjmp' does.
19669
19670 All global register variable declarations must precede all function
19671definitions.  If such a declaration could appear after function
19672definitions, the declaration would be too late to prevent the register
19673from being used for other purposes in the preceding functions.
19674
19675 Global register variables may not have initial values, because an
19676executable file has no means to supply initial contents for a register.
19677
19678 On the SPARC, there are reports that g3 ... g7 are suitable registers,
19679but certain library functions, such as `getwd', as well as the
19680subroutines for division and remainder, modify g3 and g4.  g1 and g2
19681are local temporaries.
19682
19683 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
19684course, it will not do to use more than a few of those.
19685
19686
19687File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
19688
196895.38.2 Specifying Registers for Local Variables
19690-----------------------------------------------
19691
19692You can define a local register variable with a specified register like
19693this:
19694
19695     register int *foo asm ("a5");
19696
19697Here `a5' is the name of the register which should be used.  Note that
19698this is the same syntax used for defining global register variables,
19699but for a local variable it would appear within a function.
19700
19701 Naturally the register name is cpu-dependent, but this is not a
19702problem, since specific registers are most often useful with explicit
19703assembler instructions (*note Extended Asm::).  Both of these things
19704generally require that you conditionalize your program according to cpu
19705type.
19706
19707 In addition, operating systems on one type of cpu may differ in how
19708they name the registers; then you would need additional conditionals.
19709For example, some 68000 operating systems call this register `%a5'.
19710
19711 Defining such a register variable does not reserve the register; it
19712remains available for other uses in places where flow control determines
19713the variable's value is not live.
19714
19715 This option does not guarantee that GCC will generate code that has
19716this variable in the register you specify at all times.  You may not
19717code an explicit reference to this register in the _assembler
19718instruction template_ part of an `asm' statement and assume it will
19719always refer to this variable.  However, using the variable as an `asm'
19720_operand_ guarantees that the specified register is used for the
19721operand.
19722
19723 Stores into local register variables may be deleted when they appear
19724to be dead according to dataflow analysis.  References to local
19725register variables may be deleted or moved or simplified.
19726
19727 As for global register variables, it's recommended that you choose a
19728register which is normally saved and restored by function calls on your
19729machine, so that library routines will not clobber it.  A common
19730pitfall is to initialize multiple call-clobbered registers with
19731arbitrary expressions, where a function call or library call for an
19732arithmetic operator will overwrite a register value from a previous
19733assignment, for example `r0' below:
19734     register int *p1 asm ("r0") = ...;
19735     register int *p2 asm ("r1") = ...;
19736 In those cases, a solution is to use a temporary variable for each
19737arbitrary expression.   *Note Example of asm with clobbered asm reg::.
19738
19739
19740File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
19741
197425.39 Alternate Keywords
19743=======================
19744
19745`-ansi' and the various `-std' options disable certain keywords.  This
19746causes trouble when you want to use GNU C extensions, or a
19747general-purpose header file that should be usable by all programs,
19748including ISO C programs.  The keywords `asm', `typeof' and `inline'
19749are not available in programs compiled with `-ansi' or `-std' (although
19750`inline' can be used in a program compiled with `-std=c99').  The ISO
19751C99 keyword `restrict' is only available when `-std=gnu99' (which will
19752eventually be the default) or `-std=c99' (or the equivalent
19753`-std=iso9899:1999') is used.
19754
19755 The way to solve these problems is to put `__' at the beginning and
19756end of each problematical keyword.  For example, use `__asm__' instead
19757of `asm', and `__inline__' instead of `inline'.
19758
19759 Other C compilers won't accept these alternative keywords; if you want
19760to compile with another compiler, you can define the alternate keywords
19761as macros to replace them with the customary keywords.  It looks like
19762this:
19763
19764     #ifndef __GNUC__
19765     #define __asm__ asm
19766     #endif
19767
19768 `-pedantic' and other options cause warnings for many GNU C extensions.
19769You can prevent such warnings within one expression by writing
19770`__extension__' before the expression.  `__extension__' has no effect
19771aside from this.
19772
19773
19774File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
19775
197765.40 Incomplete `enum' Types
19777============================
19778
19779You can define an `enum' tag without specifying its possible values.
19780This results in an incomplete type, much like what you get if you write
19781`struct foo' without describing the elements.  A later declaration
19782which does specify the possible values completes the type.
19783
19784 You can't allocate variables or storage using the type while it is
19785incomplete.  However, you can work with pointers to that type.
19786
19787 This extension may not be very useful, but it makes the handling of
19788`enum' more consistent with the way `struct' and `union' are handled.
19789
19790 This extension is not supported by GNU C++.
19791
19792
19793File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
19794
197955.41 Function Names as Strings
19796==============================
19797
19798GCC provides three magic variables which hold the name of the current
19799function, as a string.  The first of these is `__func__', which is part
19800of the C99 standard:
19801
19802     The identifier `__func__' is implicitly declared by the translator
19803     as if, immediately following the opening brace of each function
19804     definition, the declaration
19805          static const char __func__[] = "function-name";
19806
19807     appeared, where function-name is the name of the lexically-enclosing
19808     function.  This name is the unadorned name of the function.
19809
19810 `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
19811recognize only this name.  However, it is not standardized.  For
19812maximum portability, we recommend you use `__func__', but provide a
19813fallback definition with the preprocessor:
19814
19815     #if __STDC_VERSION__ < 199901L
19816     # if __GNUC__ >= 2
19817     #  define __func__ __FUNCTION__
19818     # else
19819     #  define __func__ "<unknown>"
19820     # endif
19821     #endif
19822
19823 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
19824However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
19825the function as well as its bare name.  For example, this program:
19826
19827     extern "C" {
19828     extern int printf (char *, ...);
19829     }
19830
19831     class a {
19832      public:
19833       void sub (int i)
19834         {
19835           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
19836           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
19837         }
19838     };
19839
19840     int
19841     main (void)
19842     {
19843       a ax;
19844       ax.sub (0);
19845       return 0;
19846     }
19847
19848gives this output:
19849
19850     __FUNCTION__ = sub
19851     __PRETTY_FUNCTION__ = void a::sub(int)
19852
19853 These identifiers are not preprocessor macros.  In GCC 3.3 and
19854earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
19855treated as string literals; they could be used to initialize `char'
19856arrays, and they could be concatenated with other string literals.  GCC
198573.4 and later treat them as variables, like `__func__'.  In C++,
19858`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
19859
19860
19861File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
19862
198635.42 Getting the Return or Frame Address of a Function
19864======================================================
19865
19866These functions may be used to get information about the callers of a
19867function.
19868
19869 -- Built-in Function: void * __builtin_return_address (unsigned int
19870          LEVEL)
19871     This function returns the return address of the current function,
19872     or of one of its callers.  The LEVEL argument is number of frames
19873     to scan up the call stack.  A value of `0' yields the return
19874     address of the current function, a value of `1' yields the return
19875     address of the caller of the current function, and so forth.  When
19876     inlining the expected behavior is that the function will return
19877     the address of the function that will be returned to.  To work
19878     around this behavior use the `noinline' function attribute.
19879
19880     The LEVEL argument must be a constant integer.
19881
19882     On some machines it may be impossible to determine the return
19883     address of any function other than the current one; in such cases,
19884     or when the top of the stack has been reached, this function will
19885     return `0' or a random value.  In addition,
19886     `__builtin_frame_address' may be used to determine if the top of
19887     the stack has been reached.
19888
19889     This function should only be used with a nonzero argument for
19890     debugging purposes.
19891
19892 -- Built-in Function: void * __builtin_frame_address (unsigned int
19893          LEVEL)
19894     This function is similar to `__builtin_return_address', but it
19895     returns the address of the function frame rather than the return
19896     address of the function.  Calling `__builtin_frame_address' with a
19897     value of `0' yields the frame address of the current function, a
19898     value of `1' yields the frame address of the caller of the current
19899     function, and so forth.
19900
19901     The frame is the area on the stack which holds local variables and
19902     saved registers.  The frame address is normally the address of the
19903     first word pushed on to the stack by the function.  However, the
19904     exact definition depends upon the processor and the calling
19905     convention.  If the processor has a dedicated frame pointer
19906     register, and the function has a frame, then
19907     `__builtin_frame_address' will return the value of the frame
19908     pointer register.
19909
19910     On some machines it may be impossible to determine the frame
19911     address of any function other than the current one; in such cases,
19912     or when the top of the stack has been reached, this function will
19913     return `0' if the first frame pointer is properly initialized by
19914     the startup code.
19915
19916     This function should only be used with a nonzero argument for
19917     debugging purposes.
19918
19919
19920File: gcc.info,  Node: Vector Extensions,  Next: Offsetof,  Prev: Return Address,  Up: C Extensions
19921
199225.43 Using vector instructions through built-in functions
19923=========================================================
19924
19925On some targets, the instruction set contains SIMD vector instructions
19926that operate on multiple values contained in one large register at the
19927same time.  For example, on the i386 the MMX, 3Dnow! and SSE extensions
19928can be used this way.
19929
19930 The first step in using these extensions is to provide the necessary
19931data types.  This should be done using an appropriate `typedef':
19932
19933     typedef int v4si __attribute__ ((vector_size (16)));
19934
19935 The `int' type specifies the base type, while the attribute specifies
19936the vector size for the variable, measured in bytes.  For example, the
19937declaration above causes the compiler to set the mode for the `v4si'
19938type to be 16 bytes wide and divided into `int' sized units.  For a
1993932-bit `int' this means a vector of 4 units of 4 bytes, and the
19940corresponding mode of `foo' will be V4SI.
19941
19942 The `vector_size' attribute is only applicable to integral and float
19943scalars, although arrays, pointers, and function return values are
19944allowed in conjunction with this construct.
19945
19946 All the basic integer types can be used as base types, both as signed
19947and as unsigned: `char', `short', `int', `long', `long long'.  In
19948addition, `float' and `double' can be used to build floating-point
19949vector types.
19950
19951 Specifying a combination that is not valid for the current architecture
19952will cause GCC to synthesize the instructions using a narrower mode.
19953For example, if you specify a variable of type `V4SI' and your
19954architecture does not allow for this specific SIMD type, GCC will
19955produce code that uses 4 `SIs'.
19956
19957 The types defined in this manner can be used with a subset of normal C
19958operations.  Currently, GCC will allow using the following operators on
19959these types: `+, -, *, /, unary minus, ^, |, &, ~'.
19960
19961 The operations behave like C++ `valarrays'.  Addition is defined as
19962the addition of the corresponding elements of the operands.  For
19963example, in the code below, each of the 4 elements in A will be added
19964to the corresponding 4 elements in B and the resulting vector will be
19965stored in C.
19966
19967     typedef int v4si __attribute__ ((vector_size (16)));
19968
19969     v4si a, b, c;
19970
19971     c = a + b;
19972
19973 Subtraction, multiplication, division, and the logical operations
19974operate in a similar manner.  Likewise, the result of using the unary
19975minus or complement operators on a vector type is a vector whose
19976elements are the negative or complemented values of the corresponding
19977elements in the operand.
19978
19979 You can declare variables and use them in function calls and returns,
19980as well as in assignments and some casts.  You can specify a vector
19981type as a return type for a function.  Vector types can also be used as
19982function arguments.  It is possible to cast from one vector type to
19983another, provided they are of the same size (in fact, you can also cast
19984vectors to and from other datatypes of the same size).
19985
19986 You cannot operate between vectors of different lengths or different
19987signedness without a cast.
19988
19989 A port that supports hardware vector operations, usually provides a set
19990of built-in functions that can be used to operate on vectors.  For
19991example, a function to add two vectors and multiply the result by a
19992third could look like this:
19993
19994     v4si f (v4si a, v4si b, v4si c)
19995     {
19996       v4si tmp = __builtin_addv4si (a, b);
19997       return __builtin_mulv4si (tmp, c);
19998     }
19999
20000
20001File: gcc.info,  Node: Offsetof,  Next: Atomic Builtins,  Prev: Vector Extensions,  Up: C Extensions
20002
200035.44 Offsetof
20004=============
20005
20006GCC implements for both C and C++ a syntactic extension to implement
20007the `offsetof' macro.
20008
20009     primary:
20010     	"__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
20011
20012     offsetof_member_designator:
20013     	  `identifier'
20014     	| offsetof_member_designator "." `identifier'
20015     	| offsetof_member_designator "[" `expr' "]"
20016
20017 This extension is sufficient such that
20018
20019     #define offsetof(TYPE, MEMBER)  __builtin_offsetof (TYPE, MEMBER)
20020
20021 is a suitable definition of the `offsetof' macro.  In C++, TYPE may be
20022dependent.  In either case, MEMBER may consist of a single identifier,
20023or a sequence of member accesses and array references.
20024
20025
20026File: gcc.info,  Node: Atomic Builtins,  Next: Object Size Checking,  Prev: Offsetof,  Up: C Extensions
20027
200285.45 Built-in functions for atomic memory access
20029================================================
20030
20031The following builtins are intended to be compatible with those
20032described in the `Intel Itanium Processor-specific Application Binary
20033Interface', section 7.4.  As such, they depart from the normal GCC
20034practice of using the "__builtin_" prefix, and further that they are
20035overloaded such that they work on multiple types.
20036
20037 The definition given in the Intel documentation allows only for the
20038use of the types `int', `long', `long long' as well as their unsigned
20039counterparts.  GCC will allow any integral scalar or pointer type that
20040is 1, 2, 4 or 8 bytes in length.
20041
20042 Not all operations are supported by all target processors.  If a
20043particular operation cannot be implemented on the target processor, a
20044warning will be generated and a call an external function will be
20045generated.  The external function will carry the same name as the
20046builtin, with an additional suffix `_N' where N is the size of the data
20047type.
20048
20049 In most cases, these builtins are considered a "full barrier".  That
20050is, no memory operand will be moved across the operation, either
20051forward or backward.  Further, instructions will be issued as necessary
20052to prevent the processor from speculating loads across the operation
20053and from queuing stores after the operation.
20054
20055 All of the routines are are described in the Intel documentation to
20056take "an optional list of variables protected by the memory barrier".
20057It's not clear what is meant by that; it could mean that _only_ the
20058following variables are protected, or it could mean that these variables
20059should in addition be protected.  At present GCC ignores this list and
20060protects all variables which are globally accessible.  If in the future
20061we make some use of this list, an empty list will continue to mean all
20062globally accessible variables.
20063
20064`TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
20065`TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
20066`TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
20067`TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
20068`TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
20069`TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
20070     These builtins perform the operation suggested by the name, and
20071     returns the value that had previously been in memory.  That is,
20072
20073          { tmp = *ptr; *ptr OP= value; return tmp; }
20074          { tmp = *ptr; *ptr = ~tmp & value; return tmp; }   // nand
20075
20076`TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
20077`TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
20078`TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
20079`TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
20080`TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
20081`TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
20082     These builtins perform the operation suggested by the name, and
20083     return the new value.  That is,
20084
20085          { *ptr OP= value; return *ptr; }
20086          { *ptr = ~*ptr & value; return *ptr; }   // nand
20087
20088`bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
20089`TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
20090     These builtins perform an atomic compare and swap.  That is, if
20091     the current value of `*PTR' is OLDVAL, then write NEWVAL into
20092     `*PTR'.
20093
20094     The "bool" version returns true if the comparison is successful and
20095     NEWVAL was written.  The "val" version returns the contents of
20096     `*PTR' before the operation.
20097
20098`__sync_synchronize (...)'
20099     This builtin issues a full memory barrier.
20100
20101`TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
20102     This builtin, as described by Intel, is not a traditional
20103     test-and-set operation, but rather an atomic exchange operation.
20104     It writes VALUE into `*PTR', and returns the previous contents of
20105     `*PTR'.
20106
20107     Many targets have only minimal support for such locks, and do not
20108     support a full exchange operation.  In this case, a target may
20109     support reduced functionality here by which the _only_ valid value
20110     to store is the immediate constant 1.  The exact value actually
20111     stored in `*PTR' is implementation defined.
20112
20113     This builtin is not a full barrier, but rather an "acquire
20114     barrier".  This means that references after the builtin cannot
20115     move to (or be speculated to) before the builtin, but previous
20116     memory stores may not be globally visible yet, and previous memory
20117     loads may not yet be satisfied.
20118
20119`void __sync_lock_release (TYPE *ptr, ...)'
20120     This builtin releases the lock acquired by
20121     `__sync_lock_test_and_set'.  Normally this means writing the
20122     constant 0 to `*PTR'.
20123
20124     This builtin is not a full barrier, but rather a "release barrier".
20125     This means that all previous memory stores are globally visible,
20126     and all previous memory loads have been satisfied, but following
20127     memory reads are not prevented from being speculated to before the
20128     barrier.
20129
20130
20131File: gcc.info,  Node: Object Size Checking,  Next: Other Builtins,  Prev: Atomic Builtins,  Up: C Extensions
20132
201335.46 Object Size Checking Builtins
20134==================================
20135
20136GCC implements a limited buffer overflow protection mechanism that can
20137prevent some buffer overflow attacks.
20138
20139 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
20140          TYPE)
20141     is a built-in construct that returns a constant number of bytes
20142     from PTR to the end of the object PTR pointer points to (if known
20143     at compile time).  `__builtin_object_size' never evaluates its
20144     arguments for side-effects.  If there are any side-effects in
20145     them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
20146     for TYPE 2 or 3.  If there are multiple objects PTR can point to
20147     and all of them are known at compile time, the returned number is
20148     the maximum of remaining byte counts in those objects if TYPE & 2
20149     is 0 and minimum if nonzero.  If it is not possible to determine
20150     which objects PTR points to at compile time,
20151     `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
20152     1 and `(size_t) 0' for TYPE 2 or 3.
20153
20154     TYPE is an integer constant from 0 to 3.  If the least significant
20155     bit is clear, objects are whole variables, if it is set, a closest
20156     surrounding subobject is considered the object a pointer points to.
20157     The second bit determines if maximum or minimum of remaining bytes
20158     is computed.
20159
20160          struct V { char buf1[10]; int b; char buf2[10]; } var;
20161          char *p = &var.buf1[1], *q = &var.b;
20162
20163          /* Here the object p points to is var.  */
20164          assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
20165          /* The subobject p points to is var.buf1.  */
20166          assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
20167          /* The object q points to is var.  */
20168          assert (__builtin_object_size (q, 0)
20169          	== (char *) (&var + 1) - (char *) &var.b);
20170          /* The subobject q points to is var.b.  */
20171          assert (__builtin_object_size (q, 1) == sizeof (var.b));
20172
20173 There are built-in functions added for many common string operation
20174functions, e.g. for `memcpy' `__builtin___memcpy_chk' built-in is
20175provided.  This built-in has an additional last argument, which is the
20176number of bytes remaining in object the DEST argument points to or
20177`(size_t) -1' if the size is not known.
20178
20179 The built-in functions are optimized into the normal string functions
20180like `memcpy' if the last argument is `(size_t) -1' or if it is known
20181at compile time that the destination object will not be overflown.  If
20182the compiler can determine at compile time the object will be always
20183overflown, it issues a warning.
20184
20185 The intended use can be e.g.
20186
20187     #undef memcpy
20188     #define bos0(dest) __builtin_object_size (dest, 0)
20189     #define memcpy(dest, src, n) \
20190       __builtin___memcpy_chk (dest, src, n, bos0 (dest))
20191
20192     char *volatile p;
20193     char buf[10];
20194     /* It is unknown what object p points to, so this is optimized
20195        into plain memcpy - no checking is possible.  */
20196     memcpy (p, "abcde", n);
20197     /* Destination is known and length too.  It is known at compile
20198        time there will be no overflow.  */
20199     memcpy (&buf[5], "abcde", 5);
20200     /* Destination is known, but the length is not known at compile time.
20201        This will result in __memcpy_chk call that can check for overflow
20202        at runtime.  */
20203     memcpy (&buf[5], "abcde", n);
20204     /* Destination is known and it is known at compile time there will
20205        be overflow.  There will be a warning and __memcpy_chk call that
20206        will abort the program at runtime.  */
20207     memcpy (&buf[6], "abcde", 5);
20208
20209 Such built-in functions are provided for `memcpy', `mempcpy',
20210`memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
20211`strncat'.
20212
20213 There are also checking built-in functions for formatted output
20214functions.
20215     int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
20216     int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
20217     			      const char *fmt, ...);
20218     int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
20219     			      va_list ap);
20220     int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
20221     			       const char *fmt, va_list ap);
20222
20223 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
20224functions and can contain implementation specific flags on what
20225additional security measures the checking function might take, such as
20226handling `%n' differently.
20227
20228 The OS argument is the object size S points to, like in the other
20229built-in functions.  There is a small difference in the behavior
20230though, if OS is `(size_t) -1', the built-in functions are optimized
20231into the non-checking functions only if FLAG is 0, otherwise the
20232checking function is called with OS argument set to `(size_t) -1'.
20233
20234 In addition to this, there are checking built-in functions
20235`__builtin___printf_chk', `__builtin___vprintf_chk',
20236`__builtin___fprintf_chk' and `__builtin___vfprintf_chk'.  These have
20237just one additional argument, FLAG, right before format string FMT.  If
20238the compiler is able to optimize them to `fputc' etc. functions, it
20239will, otherwise the checking function should be called and the FLAG
20240argument passed to it.
20241
20242
20243File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Object Size Checking,  Up: C Extensions
20244
202455.47 Other built-in functions provided by GCC
20246=============================================
20247
20248GCC provides a large number of built-in functions other than the ones
20249mentioned above.  Some of these are for internal use in the processing
20250of exceptions or variable-length argument lists and will not be
20251documented here because they may change from time to time; we do not
20252recommend general use of these functions.
20253
20254 The remaining functions are provided for optimization purposes.
20255
20256 GCC includes built-in versions of many of the functions in the standard
20257C library.  The versions prefixed with `__builtin_' will always be
20258treated as having the same meaning as the C library function even if you
20259specify the `-fno-builtin' option.  (*note C Dialect Options::) Many of
20260these functions are only optimized in certain cases; if they are not
20261optimized in a particular case, a call to the library function will be
20262emitted.
20263
20264 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
20265functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
20266`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
20267`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
20268`gamma', `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f',
20269`j1l', `j1', `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10',
20270`printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', `signbit',
20271`signbitf', `signbitl', `significandf', `significandl', `significand',
20272`sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp',
20273`strdup', `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l',
20274`y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as
20275built-in functions.  All these functions have corresponding versions
20276prefixed with `__builtin_', which may be used even in strict C89 mode.
20277
20278 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
20279`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
20280`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
20281`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
20282`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
20283`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
20284`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
20285`cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
20286`copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
20287`cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
20288`csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
20289`csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
20290`erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
20291`exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
20292`fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
20293`hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
20294`isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
20295`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
20296`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
20297`logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
20298`lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
20299`nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
20300`remainderf', `remainderl', `remainder', `remquof', `remquol',
20301`remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
20302`scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
20303`snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
20304`vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
20305functions except in strict ISO C90 mode (`-ansi' or `-std=c89').
20306
20307 There are also built-in versions of the ISO C99 functions `acosf',
20308`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
20309`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
20310`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
20311`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
20312`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
20313`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
20314recognized in any mode since ISO C90 reserves these names for the
20315purpose to which ISO C99 puts them.  All these functions have
20316corresponding versions prefixed with `__builtin_'.
20317
20318 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
20319`iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
20320`iswxdigit', `towlower' and `towupper' are handled as built-in functions
20321except in strict ISO C90 mode (`-ansi' or `-std=c89').
20322
20323 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
20324`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
20325`fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
20326`isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
20327`isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
20328`log', `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf',
20329`putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf',
20330`sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn',
20331`strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr',
20332`strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf'
20333are all recognized as built-in functions unless `-fno-builtin' is
20334specified (or `-fno-builtin-FUNCTION' is specified for an individual
20335function).  All of these functions have corresponding versions prefixed
20336with `__builtin_'.
20337
20338 GCC provides built-in versions of the ISO C99 floating point comparison
20339macros that avoid raising exceptions for unordered operands.  They have
20340the same names as the standard macros ( `isgreater', `isgreaterequal',
20341`isless', `islessequal', `islessgreater', and `isunordered') , with
20342`__builtin_' prefixed.  We intend for a library implementor to be able
20343to simply `#define' each standard macro to its built-in equivalent.
20344
20345 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
20346     You can use the built-in function `__builtin_types_compatible_p' to
20347     determine whether two types are the same.
20348
20349     This built-in function returns 1 if the unqualified versions of the
20350     types TYPE1 and TYPE2 (which are types, not expressions) are
20351     compatible, 0 otherwise.  The result of this built-in function can
20352     be used in integer constant expressions.
20353
20354     This built-in function ignores top level qualifiers (e.g., `const',
20355     `volatile').  For example, `int' is equivalent to `const int'.
20356
20357     The type `int[]' and `int[5]' are compatible.  On the other hand,
20358     `int' and `char *' are not compatible, even if the size of their
20359     types, on the particular architecture are the same.  Also, the
20360     amount of pointer indirection is taken into account when
20361     determining similarity.  Consequently, `short *' is not similar to
20362     `short **'.  Furthermore, two types that are typedefed are
20363     considered compatible if their underlying types are compatible.
20364
20365     An `enum' type is not considered to be compatible with another
20366     `enum' type even if both are compatible with the same integer
20367     type; this is what the C standard specifies.  For example, `enum
20368     {foo, bar}' is not similar to `enum {hot, dog}'.
20369
20370     You would typically use this function in code whose execution
20371     varies depending on the arguments' types.  For example:
20372
20373          #define foo(x)                                                  \
20374            ({                                                           \
20375              typeof (x) tmp = (x);                                       \
20376              if (__builtin_types_compatible_p (typeof (x), long double)) \
20377                tmp = foo_long_double (tmp);                              \
20378              else if (__builtin_types_compatible_p (typeof (x), double)) \
20379                tmp = foo_double (tmp);                                   \
20380              else if (__builtin_types_compatible_p (typeof (x), float))  \
20381                tmp = foo_float (tmp);                                    \
20382              else                                                        \
20383                abort ();                                                 \
20384              tmp;                                                        \
20385            })
20386
20387     _Note:_ This construct is only available for C.
20388
20389
20390 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
20391          EXP2)
20392     You can use the built-in function `__builtin_choose_expr' to
20393     evaluate code depending on the value of a constant expression.
20394     This built-in function returns EXP1 if CONST_EXP, which is a
20395     constant expression that must be able to be determined at compile
20396     time, is nonzero.  Otherwise it returns 0.
20397
20398     This built-in function is analogous to the `? :' operator in C,
20399     except that the expression returned has its type unaltered by
20400     promotion rules.  Also, the built-in function does not evaluate
20401     the expression that was not chosen.  For example, if CONST_EXP
20402     evaluates to true, EXP2 is not evaluated even if it has
20403     side-effects.
20404
20405     This built-in function can return an lvalue if the chosen argument
20406     is an lvalue.
20407
20408     If EXP1 is returned, the return type is the same as EXP1's type.
20409     Similarly, if EXP2 is returned, its return type is the same as
20410     EXP2.
20411
20412     Example:
20413
20414          #define foo(x)                                                    \
20415            __builtin_choose_expr (                                         \
20416              __builtin_types_compatible_p (typeof (x), double),            \
20417              foo_double (x),                                               \
20418              __builtin_choose_expr (                                       \
20419                __builtin_types_compatible_p (typeof (x), float),           \
20420                foo_float (x),                                              \
20421                /* The void expression results in a compile-time error  \
20422                   when assigning the result to something.  */          \
20423                (void)0))
20424
20425     _Note:_ This construct is only available for C.  Furthermore, the
20426     unused expression (EXP1 or EXP2 depending on the value of
20427     CONST_EXP) may still generate syntax errors.  This may change in
20428     future revisions.
20429
20430
20431 -- Built-in Function: int __builtin_constant_p (EXP)
20432     You can use the built-in function `__builtin_constant_p' to
20433     determine if a value is known to be constant at compile-time and
20434     hence that GCC can perform constant-folding on expressions
20435     involving that value.  The argument of the function is the value
20436     to test.  The function returns the integer 1 if the argument is
20437     known to be a compile-time constant and 0 if it is not known to be
20438     a compile-time constant.  A return of 0 does not indicate that the
20439     value is _not_ a constant, but merely that GCC cannot prove it is
20440     a constant with the specified value of the `-O' option.
20441
20442     You would typically use this function in an embedded application
20443     where memory was a critical resource.  If you have some complex
20444     calculation, you may want it to be folded if it involves
20445     constants, but need to call a function if it does not.  For
20446     example:
20447
20448          #define Scale_Value(X)      \
20449            (__builtin_constant_p (X) \
20450            ? ((X) * SCALE + OFFSET) : Scale (X))
20451
20452     You may use this built-in function in either a macro or an inline
20453     function.  However, if you use it in an inlined function and pass
20454     an argument of the function as the argument to the built-in, GCC
20455     will never return 1 when you call the inline function with a
20456     string constant or compound literal (*note Compound Literals::)
20457     and will not return 1 when you pass a constant numeric value to
20458     the inline function unless you specify the `-O' option.
20459
20460     You may also use `__builtin_constant_p' in initializers for static
20461     data.  For instance, you can write
20462
20463          static const int table[] = {
20464             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
20465             /* ... */
20466          };
20467
20468     This is an acceptable initializer even if EXPRESSION is not a
20469     constant expression.  GCC must be more conservative about
20470     evaluating the built-in in this case, because it has no
20471     opportunity to perform optimization.
20472
20473     Previous versions of GCC did not accept this built-in in data
20474     initializers.  The earliest version where it is completely safe is
20475     3.0.1.
20476
20477 -- Built-in Function: long __builtin_expect (long EXP, long C)
20478     You may use `__builtin_expect' to provide the compiler with branch
20479     prediction information.  In general, you should prefer to use
20480     actual profile feedback for this (`-fprofile-arcs'), as
20481     programmers are notoriously bad at predicting how their programs
20482     actually perform.  However, there are applications in which this
20483     data is hard to collect.
20484
20485     The return value is the value of EXP, which should be an integral
20486     expression.  The value of C must be a compile-time constant.  The
20487     semantics of the built-in are that it is expected that EXP == C.
20488     For example:
20489
20490          if (__builtin_expect (x, 0))
20491            foo ();
20492
20493     would indicate that we do not expect to call `foo', since we
20494     expect `x' to be zero.  Since you are limited to integral
20495     expressions for EXP, you should use constructions such as
20496
20497          if (__builtin_expect (ptr != NULL, 1))
20498            error ();
20499
20500     when testing pointer or floating-point values.
20501
20502 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
20503     This function is used to minimize cache-miss latency by moving
20504     data into a cache before it is accessed.  You can insert calls to
20505     `__builtin_prefetch' into code for which you know addresses of
20506     data in memory that is likely to be accessed soon.  If the target
20507     supports them, data prefetch instructions will be generated.  If
20508     the prefetch is done early enough before the access then the data
20509     will be in the cache by the time it is accessed.
20510
20511     The value of ADDR is the address of the memory to prefetch.  There
20512     are two optional arguments, RW and LOCALITY.  The value of RW is a
20513     compile-time constant one or zero; one means that the prefetch is
20514     preparing for a write to the memory address and zero, the default,
20515     means that the prefetch is preparing for a read.  The value
20516     LOCALITY must be a compile-time constant integer between zero and
20517     three.  A value of zero means that the data has no temporal
20518     locality, so it need not be left in the cache after the access.  A
20519     value of three means that the data has a high degree of temporal
20520     locality and should be left in all levels of cache possible.
20521     Values of one and two mean, respectively, a low or moderate degree
20522     of temporal locality.  The default is three.
20523
20524          for (i = 0; i < n; i++)
20525            {
20526              a[i] = a[i] + b[i];
20527              __builtin_prefetch (&a[i+j], 1, 1);
20528              __builtin_prefetch (&b[i+j], 0, 1);
20529              /* ... */
20530            }
20531
20532     Data prefetch does not generate faults if ADDR is invalid, but the
20533     address expression itself must be valid.  For example, a prefetch
20534     of `p->next' will not fault if `p->next' is not a valid address,
20535     but evaluation will fault if `p' is not a valid address.
20536
20537     If the target does not support data prefetch, the address
20538     expression is evaluated if it includes side effects but no other
20539     code is generated and GCC does not issue a warning.
20540
20541 -- Built-in Function: double __builtin_huge_val (void)
20542     Returns a positive infinity, if supported by the floating-point
20543     format, else `DBL_MAX'.  This function is suitable for
20544     implementing the ISO C macro `HUGE_VAL'.
20545
20546 -- Built-in Function: float __builtin_huge_valf (void)
20547     Similar to `__builtin_huge_val', except the return type is `float'.
20548
20549 -- Built-in Function: long double __builtin_huge_vall (void)
20550     Similar to `__builtin_huge_val', except the return type is `long
20551     double'.
20552
20553 -- Built-in Function: double __builtin_inf (void)
20554     Similar to `__builtin_huge_val', except a warning is generated if
20555     the target floating-point format does not support infinities.
20556
20557 -- Built-in Function: _Decimal32 __builtin_infd32 (void)
20558     Similar to `__builtin_inf', except the return type is `_Decimal32'.
20559
20560 -- Built-in Function: _Decimal64 __builtin_infd64 (void)
20561     Similar to `__builtin_inf', except the return type is `_Decimal64'.
20562
20563 -- Built-in Function: _Decimal128 __builtin_infd128 (void)
20564     Similar to `__builtin_inf', except the return type is
20565     `_Decimal128'.
20566
20567 -- Built-in Function: float __builtin_inff (void)
20568     Similar to `__builtin_inf', except the return type is `float'.
20569     This function is suitable for implementing the ISO C99 macro
20570     `INFINITY'.
20571
20572 -- Built-in Function: long double __builtin_infl (void)
20573     Similar to `__builtin_inf', except the return type is `long
20574     double'.
20575
20576 -- Built-in Function: double __builtin_nan (const char *str)
20577     This is an implementation of the ISO C99 function `nan'.
20578
20579     Since ISO C99 defines this function in terms of `strtod', which we
20580     do not implement, a description of the parsing is in order.  The
20581     string is parsed as by `strtol'; that is, the base is recognized by
20582     leading `0' or `0x' prefixes.  The number parsed is placed in the
20583     significand such that the least significant bit of the number is
20584     at the least significant bit of the significand.  The number is
20585     truncated to fit the significand field provided.  The significand
20586     is forced to be a quiet NaN.
20587
20588     This function, if given a string literal all of which would have
20589     been consumed by strtol, is evaluated early enough that it is
20590     considered a compile-time constant.
20591
20592 -- Built-in Function: _Decimal32 __builtin_nand32 (const char *str)
20593     Similar to `__builtin_nan', except the return type is `_Decimal32'.
20594
20595 -- Built-in Function: _Decimal64 __builtin_nand64 (const char *str)
20596     Similar to `__builtin_nan', except the return type is `_Decimal64'.
20597
20598 -- Built-in Function: _Decimal128 __builtin_nand128 (const char *str)
20599     Similar to `__builtin_nan', except the return type is
20600     `_Decimal128'.
20601
20602 -- Built-in Function: float __builtin_nanf (const char *str)
20603     Similar to `__builtin_nan', except the return type is `float'.
20604
20605 -- Built-in Function: long double __builtin_nanl (const char *str)
20606     Similar to `__builtin_nan', except the return type is `long
20607     double'.
20608
20609 -- Built-in Function: double __builtin_nans (const char *str)
20610     Similar to `__builtin_nan', except the significand is forced to be
20611     a signaling NaN.  The `nans' function is proposed by WG14 N965.
20612
20613 -- Built-in Function: float __builtin_nansf (const char *str)
20614     Similar to `__builtin_nans', except the return type is `float'.
20615
20616 -- Built-in Function: long double __builtin_nansl (const char *str)
20617     Similar to `__builtin_nans', except the return type is `long
20618     double'.
20619
20620 -- Built-in Function: int __builtin_ffs (unsigned int x)
20621     Returns one plus the index of the least significant 1-bit of X, or
20622     if X is zero, returns zero.
20623
20624 -- Built-in Function: int __builtin_clz (unsigned int x)
20625     Returns the number of leading 0-bits in X, starting at the most
20626     significant bit position.  If X is 0, the result is undefined.
20627
20628 -- Built-in Function: int __builtin_ctz (unsigned int x)
20629     Returns the number of trailing 0-bits in X, starting at the least
20630     significant bit position.  If X is 0, the result is undefined.
20631
20632 -- Built-in Function: int __builtin_popcount (unsigned int x)
20633     Returns the number of 1-bits in X.
20634
20635 -- Built-in Function: int __builtin_parity (unsigned int x)
20636     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
20637
20638 -- Built-in Function: int __builtin_ffsl (unsigned long)
20639     Similar to `__builtin_ffs', except the argument type is `unsigned
20640     long'.
20641
20642 -- Built-in Function: int __builtin_clzl (unsigned long)
20643     Similar to `__builtin_clz', except the argument type is `unsigned
20644     long'.
20645
20646 -- Built-in Function: int __builtin_ctzl (unsigned long)
20647     Similar to `__builtin_ctz', except the argument type is `unsigned
20648     long'.
20649
20650 -- Built-in Function: int __builtin_popcountl (unsigned long)
20651     Similar to `__builtin_popcount', except the argument type is
20652     `unsigned long'.
20653
20654 -- Built-in Function: int __builtin_parityl (unsigned long)
20655     Similar to `__builtin_parity', except the argument type is
20656     `unsigned long'.
20657
20658 -- Built-in Function: int __builtin_ffsll (unsigned long long)
20659     Similar to `__builtin_ffs', except the argument type is `unsigned
20660     long long'.
20661
20662 -- Built-in Function: int __builtin_clzll (unsigned long long)
20663     Similar to `__builtin_clz', except the argument type is `unsigned
20664     long long'.
20665
20666 -- Built-in Function: int __builtin_ctzll (unsigned long long)
20667     Similar to `__builtin_ctz', except the argument type is `unsigned
20668     long long'.
20669
20670 -- Built-in Function: int __builtin_popcountll (unsigned long long)
20671     Similar to `__builtin_popcount', except the argument type is
20672     `unsigned long long'.
20673
20674 -- Built-in Function: int __builtin_parityll (unsigned long long)
20675     Similar to `__builtin_parity', except the argument type is
20676     `unsigned long long'.
20677
20678 -- Built-in Function: double __builtin_powi (double, int)
20679     Returns the first argument raised to the power of the second.
20680     Unlike the `pow' function no guarantees about precision and
20681     rounding are made.
20682
20683 -- Built-in Function: float __builtin_powif (float, int)
20684     Similar to `__builtin_powi', except the argument and return types
20685     are `float'.
20686
20687 -- Built-in Function: long double __builtin_powil (long double, int)
20688     Similar to `__builtin_powi', except the argument and return types
20689     are `long double'.
20690
20691
20692File: gcc.info,  Node: Target Builtins,  Next: Target Format Checks,  Prev: Other Builtins,  Up: C Extensions
20693
206945.48 Built-in Functions Specific to Particular Target Machines
20695==============================================================
20696
20697On some target machines, GCC supports many built-in functions specific
20698to those machines.  Generally these generate calls to specific machine
20699instructions, but allow the compiler to schedule those calls.
20700
20701* Menu:
20702
20703* Alpha Built-in Functions::
20704* ARM Built-in Functions::
20705* Blackfin Built-in Functions::
20706* FR-V Built-in Functions::
20707* X86 Built-in Functions::
20708* MIPS DSP Built-in Functions::
20709* MIPS Paired-Single Support::
20710* PowerPC AltiVec Built-in Functions::
20711* SPARC VIS Built-in Functions::
20712
20713
20714File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM Built-in Functions,  Up: Target Builtins
20715
207165.48.1 Alpha Built-in Functions
20717-------------------------------
20718
20719These built-in functions are available for the Alpha family of
20720processors, depending on the command-line switches used.
20721
20722 The following built-in functions are always available.  They all
20723generate the machine instruction that is part of the name.
20724
20725     long __builtin_alpha_implver (void)
20726     long __builtin_alpha_rpcc (void)
20727     long __builtin_alpha_amask (long)
20728     long __builtin_alpha_cmpbge (long, long)
20729     long __builtin_alpha_extbl (long, long)
20730     long __builtin_alpha_extwl (long, long)
20731     long __builtin_alpha_extll (long, long)
20732     long __builtin_alpha_extql (long, long)
20733     long __builtin_alpha_extwh (long, long)
20734     long __builtin_alpha_extlh (long, long)
20735     long __builtin_alpha_extqh (long, long)
20736     long __builtin_alpha_insbl (long, long)
20737     long __builtin_alpha_inswl (long, long)
20738     long __builtin_alpha_insll (long, long)
20739     long __builtin_alpha_insql (long, long)
20740     long __builtin_alpha_inswh (long, long)
20741     long __builtin_alpha_inslh (long, long)
20742     long __builtin_alpha_insqh (long, long)
20743     long __builtin_alpha_mskbl (long, long)
20744     long __builtin_alpha_mskwl (long, long)
20745     long __builtin_alpha_mskll (long, long)
20746     long __builtin_alpha_mskql (long, long)
20747     long __builtin_alpha_mskwh (long, long)
20748     long __builtin_alpha_msklh (long, long)
20749     long __builtin_alpha_mskqh (long, long)
20750     long __builtin_alpha_umulh (long, long)
20751     long __builtin_alpha_zap (long, long)
20752     long __builtin_alpha_zapnot (long, long)
20753
20754 The following built-in functions are always with `-mmax' or
20755`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
20756machine instruction that is part of the name.
20757
20758     long __builtin_alpha_pklb (long)
20759     long __builtin_alpha_pkwb (long)
20760     long __builtin_alpha_unpkbl (long)
20761     long __builtin_alpha_unpkbw (long)
20762     long __builtin_alpha_minub8 (long, long)
20763     long __builtin_alpha_minsb8 (long, long)
20764     long __builtin_alpha_minuw4 (long, long)
20765     long __builtin_alpha_minsw4 (long, long)
20766     long __builtin_alpha_maxub8 (long, long)
20767     long __builtin_alpha_maxsb8 (long, long)
20768     long __builtin_alpha_maxuw4 (long, long)
20769     long __builtin_alpha_maxsw4 (long, long)
20770     long __builtin_alpha_perr (long, long)
20771
20772 The following built-in functions are always with `-mcix' or
20773`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
20774machine instruction that is part of the name.
20775
20776     long __builtin_alpha_cttz (long)
20777     long __builtin_alpha_ctlz (long)
20778     long __builtin_alpha_ctpop (long)
20779
20780 The following builtins are available on systems that use the OSF/1
20781PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
20782when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
20783
20784     void *__builtin_thread_pointer (void)
20785     void __builtin_set_thread_pointer (void *)
20786
20787
20788File: gcc.info,  Node: ARM Built-in Functions,  Next: Blackfin Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
20789
207905.48.2 ARM Built-in Functions
20791-----------------------------
20792
20793These built-in functions are available for the ARM family of
20794processors, when the `-mcpu=iwmmxt' switch is used:
20795
20796     typedef int v2si __attribute__ ((vector_size (8)));
20797     typedef short v4hi __attribute__ ((vector_size (8)));
20798     typedef char v8qi __attribute__ ((vector_size (8)));
20799
20800     int __builtin_arm_getwcx (int)
20801     void __builtin_arm_setwcx (int, int)
20802     int __builtin_arm_textrmsb (v8qi, int)
20803     int __builtin_arm_textrmsh (v4hi, int)
20804     int __builtin_arm_textrmsw (v2si, int)
20805     int __builtin_arm_textrmub (v8qi, int)
20806     int __builtin_arm_textrmuh (v4hi, int)
20807     int __builtin_arm_textrmuw (v2si, int)
20808     v8qi __builtin_arm_tinsrb (v8qi, int)
20809     v4hi __builtin_arm_tinsrh (v4hi, int)
20810     v2si __builtin_arm_tinsrw (v2si, int)
20811     long long __builtin_arm_tmia (long long, int, int)
20812     long long __builtin_arm_tmiabb (long long, int, int)
20813     long long __builtin_arm_tmiabt (long long, int, int)
20814     long long __builtin_arm_tmiaph (long long, int, int)
20815     long long __builtin_arm_tmiatb (long long, int, int)
20816     long long __builtin_arm_tmiatt (long long, int, int)
20817     int __builtin_arm_tmovmskb (v8qi)
20818     int __builtin_arm_tmovmskh (v4hi)
20819     int __builtin_arm_tmovmskw (v2si)
20820     long long __builtin_arm_waccb (v8qi)
20821     long long __builtin_arm_wacch (v4hi)
20822     long long __builtin_arm_waccw (v2si)
20823     v8qi __builtin_arm_waddb (v8qi, v8qi)
20824     v8qi __builtin_arm_waddbss (v8qi, v8qi)
20825     v8qi __builtin_arm_waddbus (v8qi, v8qi)
20826     v4hi __builtin_arm_waddh (v4hi, v4hi)
20827     v4hi __builtin_arm_waddhss (v4hi, v4hi)
20828     v4hi __builtin_arm_waddhus (v4hi, v4hi)
20829     v2si __builtin_arm_waddw (v2si, v2si)
20830     v2si __builtin_arm_waddwss (v2si, v2si)
20831     v2si __builtin_arm_waddwus (v2si, v2si)
20832     v8qi __builtin_arm_walign (v8qi, v8qi, int)
20833     long long __builtin_arm_wand(long long, long long)
20834     long long __builtin_arm_wandn (long long, long long)
20835     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
20836     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
20837     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
20838     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
20839     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
20840     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
20841     v2si __builtin_arm_wcmpeqw (v2si, v2si)
20842     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
20843     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
20844     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
20845     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
20846     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
20847     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
20848     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
20849     long long __builtin_arm_wmacsz (v4hi, v4hi)
20850     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
20851     long long __builtin_arm_wmacuz (v4hi, v4hi)
20852     v4hi __builtin_arm_wmadds (v4hi, v4hi)
20853     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
20854     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
20855     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
20856     v2si __builtin_arm_wmaxsw (v2si, v2si)
20857     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
20858     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
20859     v2si __builtin_arm_wmaxuw (v2si, v2si)
20860     v8qi __builtin_arm_wminsb (v8qi, v8qi)
20861     v4hi __builtin_arm_wminsh (v4hi, v4hi)
20862     v2si __builtin_arm_wminsw (v2si, v2si)
20863     v8qi __builtin_arm_wminub (v8qi, v8qi)
20864     v4hi __builtin_arm_wminuh (v4hi, v4hi)
20865     v2si __builtin_arm_wminuw (v2si, v2si)
20866     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
20867     v4hi __builtin_arm_wmulul (v4hi, v4hi)
20868     v4hi __builtin_arm_wmulum (v4hi, v4hi)
20869     long long __builtin_arm_wor (long long, long long)
20870     v2si __builtin_arm_wpackdss (long long, long long)
20871     v2si __builtin_arm_wpackdus (long long, long long)
20872     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
20873     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
20874     v4hi __builtin_arm_wpackwss (v2si, v2si)
20875     v4hi __builtin_arm_wpackwus (v2si, v2si)
20876     long long __builtin_arm_wrord (long long, long long)
20877     long long __builtin_arm_wrordi (long long, int)
20878     v4hi __builtin_arm_wrorh (v4hi, long long)
20879     v4hi __builtin_arm_wrorhi (v4hi, int)
20880     v2si __builtin_arm_wrorw (v2si, long long)
20881     v2si __builtin_arm_wrorwi (v2si, int)
20882     v2si __builtin_arm_wsadb (v8qi, v8qi)
20883     v2si __builtin_arm_wsadbz (v8qi, v8qi)
20884     v2si __builtin_arm_wsadh (v4hi, v4hi)
20885     v2si __builtin_arm_wsadhz (v4hi, v4hi)
20886     v4hi __builtin_arm_wshufh (v4hi, int)
20887     long long __builtin_arm_wslld (long long, long long)
20888     long long __builtin_arm_wslldi (long long, int)
20889     v4hi __builtin_arm_wsllh (v4hi, long long)
20890     v4hi __builtin_arm_wsllhi (v4hi, int)
20891     v2si __builtin_arm_wsllw (v2si, long long)
20892     v2si __builtin_arm_wsllwi (v2si, int)
20893     long long __builtin_arm_wsrad (long long, long long)
20894     long long __builtin_arm_wsradi (long long, int)
20895     v4hi __builtin_arm_wsrah (v4hi, long long)
20896     v4hi __builtin_arm_wsrahi (v4hi, int)
20897     v2si __builtin_arm_wsraw (v2si, long long)
20898     v2si __builtin_arm_wsrawi (v2si, int)
20899     long long __builtin_arm_wsrld (long long, long long)
20900     long long __builtin_arm_wsrldi (long long, int)
20901     v4hi __builtin_arm_wsrlh (v4hi, long long)
20902     v4hi __builtin_arm_wsrlhi (v4hi, int)
20903     v2si __builtin_arm_wsrlw (v2si, long long)
20904     v2si __builtin_arm_wsrlwi (v2si, int)
20905     v8qi __builtin_arm_wsubb (v8qi, v8qi)
20906     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
20907     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
20908     v4hi __builtin_arm_wsubh (v4hi, v4hi)
20909     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
20910     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
20911     v2si __builtin_arm_wsubw (v2si, v2si)
20912     v2si __builtin_arm_wsubwss (v2si, v2si)
20913     v2si __builtin_arm_wsubwus (v2si, v2si)
20914     v4hi __builtin_arm_wunpckehsb (v8qi)
20915     v2si __builtin_arm_wunpckehsh (v4hi)
20916     long long __builtin_arm_wunpckehsw (v2si)
20917     v4hi __builtin_arm_wunpckehub (v8qi)
20918     v2si __builtin_arm_wunpckehuh (v4hi)
20919     long long __builtin_arm_wunpckehuw (v2si)
20920     v4hi __builtin_arm_wunpckelsb (v8qi)
20921     v2si __builtin_arm_wunpckelsh (v4hi)
20922     long long __builtin_arm_wunpckelsw (v2si)
20923     v4hi __builtin_arm_wunpckelub (v8qi)
20924     v2si __builtin_arm_wunpckeluh (v4hi)
20925     long long __builtin_arm_wunpckeluw (v2si)
20926     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
20927     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
20928     v2si __builtin_arm_wunpckihw (v2si, v2si)
20929     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
20930     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
20931     v2si __builtin_arm_wunpckilw (v2si, v2si)
20932     long long __builtin_arm_wxor (long long, long long)
20933     long long __builtin_arm_wzero ()
20934
20935
20936File: gcc.info,  Node: Blackfin Built-in Functions,  Next: FR-V Built-in Functions,  Prev: ARM Built-in Functions,  Up: Target Builtins
20937
209385.48.3 Blackfin Built-in Functions
20939----------------------------------
20940
20941Currently, there are two Blackfin-specific built-in functions.  These
20942are used for generating `CSYNC' and `SSYNC' machine insns without using
20943inline assembly; by using these built-in functions the compiler can
20944automatically add workarounds for hardware errata involving these
20945instructions.  These functions are named as follows:
20946
20947     void __builtin_bfin_csync (void)
20948     void __builtin_bfin_ssync (void)
20949
20950
20951File: gcc.info,  Node: FR-V Built-in Functions,  Next: X86 Built-in Functions,  Prev: Blackfin Built-in Functions,  Up: Target Builtins
20952
209535.48.4 FR-V Built-in Functions
20954------------------------------
20955
20956GCC provides many FR-V-specific built-in functions.  In general, these
20957functions are intended to be compatible with those described by `FR-V
20958Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
20959The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
20960which pass 128-bit values by pointer rather than by value.
20961
20962 Most of the functions are named after specific FR-V instructions.
20963Such functions are said to be "directly mapped" and are summarized here
20964in tabular form.
20965
20966* Menu:
20967
20968* Argument Types::
20969* Directly-mapped Integer Functions::
20970* Directly-mapped Media Functions::
20971* Raw read/write Functions::
20972* Other Built-in Functions::
20973
20974
20975File: gcc.info,  Node: Argument Types,  Next: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
20976
209775.48.4.1 Argument Types
20978.......................
20979
20980The arguments to the built-in functions can be divided into three
20981groups: register numbers, compile-time constants and run-time values.
20982In order to make this classification clear at a glance, the arguments
20983and return values are given the following pseudo types:
20984
20985Pseudo type    Real C type            Constant?   Description
20986`uh'           `unsigned short'       No          an unsigned halfword
20987`uw1'          `unsigned int'         No          an unsigned word
20988`sw1'          `int'                  No          a signed word
20989`uw2'          `unsigned long long'   No          an unsigned doubleword
20990`sw2'          `long long'            No          a signed doubleword
20991`const'        `int'                  Yes         an integer constant
20992`acc'          `int'                  Yes         an ACC register number
20993`iacc'         `int'                  Yes         an IACC register number
20994
20995 These pseudo types are not defined by GCC, they are simply a notational
20996convenience used in this manual.
20997
20998 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
20999run time.  They correspond to register operands in the underlying FR-V
21000instructions.
21001
21002 `const' arguments represent immediate operands in the underlying FR-V
21003instructions.  They must be compile-time constants.
21004
21005 `acc' arguments are evaluated at compile time and specify the number
21006of an accumulator register.  For example, an `acc' argument of 2 will
21007select the ACC2 register.
21008
21009 `iacc' arguments are similar to `acc' arguments but specify the number
21010of an IACC register.  See *note Other Built-in Functions:: for more
21011details.
21012
21013
21014File: gcc.info,  Node: Directly-mapped Integer Functions,  Next: Directly-mapped Media Functions,  Prev: Argument Types,  Up: FR-V Built-in Functions
21015
210165.48.4.2 Directly-mapped Integer Functions
21017..........................................
21018
21019The functions listed below map directly to FR-V I-type instructions.
21020
21021Function prototype               Example usage           Assembly output
21022`sw1 __ADDSS (sw1, sw1)'         `C = __ADDSS (A, B)'    `ADDSS A,B,C'
21023`sw1 __SCAN (sw1, sw1)'          `C = __SCAN (A, B)'     `SCAN A,B,C'
21024`sw1 __SCUTSS (sw1)'             `B = __SCUTSS (A)'      `SCUTSS A,B'
21025`sw1 __SLASS (sw1, sw1)'         `C = __SLASS (A, B)'    `SLASS A,B,C'
21026`void __SMASS (sw1, sw1)'        `__SMASS (A, B)'        `SMASS A,B'
21027`void __SMSSS (sw1, sw1)'        `__SMSSS (A, B)'        `SMSSS A,B'
21028`void __SMU (sw1, sw1)'          `__SMU (A, B)'          `SMU A,B'
21029`sw2 __SMUL (sw1, sw1)'          `C = __SMUL (A, B)'     `SMUL A,B,C'
21030`sw1 __SUBSS (sw1, sw1)'         `C = __SUBSS (A, B)'    `SUBSS A,B,C'
21031`uw2 __UMUL (uw1, uw1)'          `C = __UMUL (A, B)'     `UMUL A,B,C'
21032
21033
21034File: gcc.info,  Node: Directly-mapped Media Functions,  Next: Raw read/write Functions,  Prev: Directly-mapped Integer Functions,  Up: FR-V Built-in Functions
21035
210365.48.4.3 Directly-mapped Media Functions
21037........................................
21038
21039The functions listed below map directly to FR-V M-type instructions.
21040
21041Function prototype               Example usage           Assembly output
21042`uw1 __MABSHS (sw1)'             `B = __MABSHS (A)'      `MABSHS A,B'
21043`void __MADDACCS (acc, acc)'     `__MADDACCS (B, A)'     `MADDACCS A,B'
21044`sw1 __MADDHSS (sw1, sw1)'       `C = __MADDHSS (A, B)'  `MADDHSS A,B,C'
21045`uw1 __MADDHUS (uw1, uw1)'       `C = __MADDHUS (A, B)'  `MADDHUS A,B,C'
21046`uw1 __MAND (uw1, uw1)'          `C = __MAND (A, B)'     `MAND A,B,C'
21047`void __MASACCS (acc, acc)'      `__MASACCS (B, A)'      `MASACCS A,B'
21048`uw1 __MAVEH (uw1, uw1)'         `C = __MAVEH (A, B)'    `MAVEH A,B,C'
21049`uw2 __MBTOH (uw1)'              `B = __MBTOH (A)'       `MBTOH A,B'
21050`void __MBTOHE (uw1 *, uw1)'     `__MBTOHE (&B, A)'      `MBTOHE A,B'
21051`void __MCLRACC (acc)'           `__MCLRACC (A)'         `MCLRACC A'
21052`void __MCLRACCA (void)'         `__MCLRACCA ()'         `MCLRACCA'
21053`uw1 __Mcop1 (uw1, uw1)'         `C = __Mcop1 (A, B)'    `Mcop1 A,B,C'
21054`uw1 __Mcop2 (uw1, uw1)'         `C = __Mcop2 (A, B)'    `Mcop2 A,B,C'
21055`uw1 __MCPLHI (uw2, const)'      `C = __MCPLHI (A, B)'   `MCPLHI A,#B,C'
21056`uw1 __MCPLI (uw2, const)'       `C = __MCPLI (A, B)'    `MCPLI A,#B,C'
21057`void __MCPXIS (acc, sw1, sw1)'  `__MCPXIS (C, A, B)'    `MCPXIS A,B,C'
21058`void __MCPXIU (acc, uw1, uw1)'  `__MCPXIU (C, A, B)'    `MCPXIU A,B,C'
21059`void __MCPXRS (acc, sw1, sw1)'  `__MCPXRS (C, A, B)'    `MCPXRS A,B,C'
21060`void __MCPXRU (acc, uw1, uw1)'  `__MCPXRU (C, A, B)'    `MCPXRU A,B,C'
21061`uw1 __MCUT (acc, uw1)'          `C = __MCUT (A, B)'     `MCUT A,B,C'
21062`uw1 __MCUTSS (acc, sw1)'        `C = __MCUTSS (A, B)'   `MCUTSS A,B,C'
21063`void __MDADDACCS (acc, acc)'    `__MDADDACCS (B, A)'    `MDADDACCS A,B'
21064`void __MDASACCS (acc, acc)'     `__MDASACCS (B, A)'     `MDASACCS A,B'
21065`uw2 __MDCUTSSI (acc, const)'    `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
21066`uw2 __MDPACKH (uw2, uw2)'       `C = __MDPACKH (A, B)'  `MDPACKH A,B,C'
21067`uw2 __MDROTLI (uw2, const)'     `C = __MDROTLI (A, B)'  `MDROTLI A,#B,C'
21068`void __MDSUBACCS (acc, acc)'    `__MDSUBACCS (B, A)'    `MDSUBACCS A,B'
21069`void __MDUNPACKH (uw1 *, uw2)'  `__MDUNPACKH (&B, A)'   `MDUNPACKH A,B'
21070`uw2 __MEXPDHD (uw1, const)'     `C = __MEXPDHD (A, B)'  `MEXPDHD A,#B,C'
21071`uw1 __MEXPDHW (uw1, const)'     `C = __MEXPDHW (A, B)'  `MEXPDHW A,#B,C'
21072`uw1 __MHDSETH (uw1, const)'     `C = __MHDSETH (A, B)'  `MHDSETH A,#B,C'
21073`sw1 __MHDSETS (const)'          `B = __MHDSETS (A)'     `MHDSETS #A,B'
21074`uw1 __MHSETHIH (uw1, const)'    `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
21075`sw1 __MHSETHIS (sw1, const)'    `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
21076`uw1 __MHSETLOH (uw1, const)'    `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
21077`sw1 __MHSETLOS (sw1, const)'    `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
21078`uw1 __MHTOB (uw2)'              `B = __MHTOB (A)'       `MHTOB A,B'
21079`void __MMACHS (acc, sw1, sw1)'  `__MMACHS (C, A, B)'    `MMACHS A,B,C'
21080`void __MMACHU (acc, uw1, uw1)'  `__MMACHU (C, A, B)'    `MMACHU A,B,C'
21081`void __MMRDHS (acc, sw1, sw1)'  `__MMRDHS (C, A, B)'    `MMRDHS A,B,C'
21082`void __MMRDHU (acc, uw1, uw1)'  `__MMRDHU (C, A, B)'    `MMRDHU A,B,C'
21083`void __MMULHS (acc, sw1, sw1)'  `__MMULHS (C, A, B)'    `MMULHS A,B,C'
21084`void __MMULHU (acc, uw1, uw1)'  `__MMULHU (C, A, B)'    `MMULHU A,B,C'
21085`void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)'   `MMULXHS A,B,C'
21086`void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)'   `MMULXHU A,B,C'
21087`uw1 __MNOT (uw1)'               `B = __MNOT (A)'        `MNOT A,B'
21088`uw1 __MOR (uw1, uw1)'           `C = __MOR (A, B)'      `MOR A,B,C'
21089`uw1 __MPACKH (uh, uh)'          `C = __MPACKH (A, B)'   `MPACKH A,B,C'
21090`sw2 __MQADDHSS (sw2, sw2)'      `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
21091`uw2 __MQADDHUS (uw2, uw2)'      `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
21092`void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)'   `MQCPXIS A,B,C'
21093`void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)'   `MQCPXIU A,B,C'
21094`void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)'   `MQCPXRS A,B,C'
21095`void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)'   `MQCPXRU A,B,C'
21096`sw2 __MQLCLRHS (sw2, sw2)'      `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
21097`sw2 __MQLMTHS (sw2, sw2)'       `C = __MQLMTHS (A, B)'  `MQLMTHS A,B,C'
21098`void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)'   `MQMACHS A,B,C'
21099`void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)'   `MQMACHU A,B,C'
21100`void __MQMACXHS (acc, sw2,      `__MQMACXHS (C, A, B)'  `MQMACXHS A,B,C'
21101sw2)'
21102`void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)'   `MQMULHS A,B,C'
21103`void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)'   `MQMULHU A,B,C'
21104`void __MQMULXHS (acc, sw2,      `__MQMULXHS (C, A, B)'  `MQMULXHS A,B,C'
21105sw2)'
21106`void __MQMULXHU (acc, uw2,      `__MQMULXHU (C, A, B)'  `MQMULXHU A,B,C'
21107uw2)'
21108`sw2 __MQSATHS (sw2, sw2)'       `C = __MQSATHS (A, B)'  `MQSATHS A,B,C'
21109`uw2 __MQSLLHI (uw2, int)'       `C = __MQSLLHI (A, B)'  `MQSLLHI A,B,C'
21110`sw2 __MQSRAHI (sw2, int)'       `C = __MQSRAHI (A, B)'  `MQSRAHI A,B,C'
21111`sw2 __MQSUBHSS (sw2, sw2)'      `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
21112`uw2 __MQSUBHUS (uw2, uw2)'      `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
21113`void __MQXMACHS (acc, sw2,      `__MQXMACHS (C, A, B)'  `MQXMACHS A,B,C'
21114sw2)'
21115`void __MQXMACXHS (acc, sw2,     `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
21116sw2)'
21117`uw1 __MRDACC (acc)'             `B = __MRDACC (A)'      `MRDACC A,B'
21118`uw1 __MRDACCG (acc)'            `B = __MRDACCG (A)'     `MRDACCG A,B'
21119`uw1 __MROTLI (uw1, const)'      `C = __MROTLI (A, B)'   `MROTLI A,#B,C'
21120`uw1 __MROTRI (uw1, const)'      `C = __MROTRI (A, B)'   `MROTRI A,#B,C'
21121`sw1 __MSATHS (sw1, sw1)'        `C = __MSATHS (A, B)'   `MSATHS A,B,C'
21122`uw1 __MSATHU (uw1, uw1)'        `C = __MSATHU (A, B)'   `MSATHU A,B,C'
21123`uw1 __MSLLHI (uw1, const)'      `C = __MSLLHI (A, B)'   `MSLLHI A,#B,C'
21124`sw1 __MSRAHI (sw1, const)'      `C = __MSRAHI (A, B)'   `MSRAHI A,#B,C'
21125`uw1 __MSRLHI (uw1, const)'      `C = __MSRLHI (A, B)'   `MSRLHI A,#B,C'
21126`void __MSUBACCS (acc, acc)'     `__MSUBACCS (B, A)'     `MSUBACCS A,B'
21127`sw1 __MSUBHSS (sw1, sw1)'       `C = __MSUBHSS (A, B)'  `MSUBHSS A,B,C'
21128`uw1 __MSUBHUS (uw1, uw1)'       `C = __MSUBHUS (A, B)'  `MSUBHUS A,B,C'
21129`void __MTRAP (void)'            `__MTRAP ()'            `MTRAP'
21130`uw2 __MUNPACKH (uw1)'           `B = __MUNPACKH (A)'    `MUNPACKH A,B'
21131`uw1 __MWCUT (uw2, uw1)'         `C = __MWCUT (A, B)'    `MWCUT A,B,C'
21132`void __MWTACC (acc, uw1)'       `__MWTACC (B, A)'       `MWTACC A,B'
21133`void __MWTACCG (acc, uw1)'      `__MWTACCG (B, A)'      `MWTACCG A,B'
21134`uw1 __MXOR (uw1, uw1)'          `C = __MXOR (A, B)'     `MXOR A,B,C'
21135
21136
21137File: gcc.info,  Node: Raw read/write Functions,  Next: Other Built-in Functions,  Prev: Directly-mapped Media Functions,  Up: FR-V Built-in Functions
21138
211395.48.4.4 Raw read/write Functions
21140.................................
21141
21142This sections describes built-in functions related to read and write
21143instructions to access memory.  These functions generate `membar'
21144instructions to flush the I/O load and stores where appropriate, as
21145described in Fujitsu's manual described above.
21146
21147`unsigned char __builtin_read8 (void *DATA)'
21148
21149`unsigned short __builtin_read16 (void *DATA)'
21150
21151`unsigned long __builtin_read32 (void *DATA)'
21152
21153`unsigned long long __builtin_read64 (void *DATA)'
21154
21155`void __builtin_write8 (void *DATA, unsigned char DATUM)'
21156
21157`void __builtin_write16 (void *DATA, unsigned short DATUM)'
21158
21159`void __builtin_write32 (void *DATA, unsigned long DATUM)'
21160
21161`void __builtin_write64 (void *DATA, unsigned long long DATUM)'
21162
21163
21164File: gcc.info,  Node: Other Built-in Functions,  Prev: Raw read/write Functions,  Up: FR-V Built-in Functions
21165
211665.48.4.5 Other Built-in Functions
21167.................................
21168
21169This section describes built-in functions that are not named after a
21170specific FR-V instruction.
21171
21172`sw2 __IACCreadll (iacc REG)'
21173     Return the full 64-bit value of IACC0.  The REG argument is
21174     reserved for future expansion and must be 0.
21175
21176`sw1 __IACCreadl (iacc REG)'
21177     Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
21178     Other values of REG are rejected as invalid.
21179
21180`void __IACCsetll (iacc REG, sw2 X)'
21181     Set the full 64-bit value of IACC0 to X.  The REG argument is
21182     reserved for future expansion and must be 0.
21183
21184`void __IACCsetl (iacc REG, sw1 X)'
21185     Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1.  Other
21186     values of REG are rejected as invalid.
21187
21188`void __data_prefetch0 (const void *X)'
21189     Use the `dcpl' instruction to load the contents of address X into
21190     the data cache.
21191
21192`void __data_prefetch (const void *X)'
21193     Use the `nldub' instruction to load the contents of address X into
21194     the data cache.  The instruction will be issued in slot I1.
21195
21196
21197File: gcc.info,  Node: X86 Built-in Functions,  Next: MIPS DSP Built-in Functions,  Prev: FR-V Built-in Functions,  Up: Target Builtins
21198
211995.48.5 X86 Built-in Functions
21200-----------------------------
21201
21202These built-in functions are available for the i386 and x86-64 family
21203of computers, depending on the command-line switches used.
21204
21205 Note that, if you specify command-line switches such as `-msse', the
21206compiler could use the extended instruction sets even if the built-ins
21207are not used explicitly in the program.  For this reason, applications
21208which perform runtime CPU detection must compile separate files for each
21209supported architecture, using the appropriate flags.  In particular,
21210the file containing the CPU detection code should be compiled without
21211these options.
21212
21213 The following machine modes are available for use with MMX built-in
21214functions (*note Vector Extensions::): `V2SI' for a vector of two
2121532-bit integers, `V4HI' for a vector of four 16-bit integers, and
21216`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
21217functions operate on MMX registers as a whole 64-bit entity, these use
21218`DI' as their mode.
21219
21220 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
21221of two 32-bit floating point values.
21222
21223 If SSE extensions are enabled, `V4SF' is used for a vector of four
2122432-bit floating point values.  Some instructions use a vector of four
2122532-bit integers, these use `V4SI'.  Finally, some instructions operate
21226on an entire vector register, interpreting it as a 128-bit integer,
21227these use mode `TI'.
21228
21229 The following built-in functions are made available by `-mmmx'.  All
21230of them generate the machine instruction that is part of the name.
21231
21232     v8qi __builtin_ia32_paddb (v8qi, v8qi)
21233     v4hi __builtin_ia32_paddw (v4hi, v4hi)
21234     v2si __builtin_ia32_paddd (v2si, v2si)
21235     v8qi __builtin_ia32_psubb (v8qi, v8qi)
21236     v4hi __builtin_ia32_psubw (v4hi, v4hi)
21237     v2si __builtin_ia32_psubd (v2si, v2si)
21238     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
21239     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
21240     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
21241     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
21242     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
21243     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
21244     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
21245     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
21246     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
21247     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
21248     di __builtin_ia32_pand (di, di)
21249     di __builtin_ia32_pandn (di,di)
21250     di __builtin_ia32_por (di, di)
21251     di __builtin_ia32_pxor (di, di)
21252     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
21253     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
21254     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
21255     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
21256     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
21257     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
21258     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
21259     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
21260     v2si __builtin_ia32_punpckhdq (v2si, v2si)
21261     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
21262     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
21263     v2si __builtin_ia32_punpckldq (v2si, v2si)
21264     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
21265     v4hi __builtin_ia32_packssdw (v2si, v2si)
21266     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
21267
21268 The following built-in functions are made available either with
21269`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
21270of them generate the machine instruction that is part of the name.
21271
21272     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
21273     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
21274     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
21275     v4hi __builtin_ia32_psadbw (v8qi, v8qi)
21276     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
21277     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
21278     v8qi __builtin_ia32_pminub (v8qi, v8qi)
21279     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
21280     int __builtin_ia32_pextrw (v4hi, int)
21281     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
21282     int __builtin_ia32_pmovmskb (v8qi)
21283     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
21284     void __builtin_ia32_movntq (di *, di)
21285     void __builtin_ia32_sfence (void)
21286
21287 The following built-in functions are available when `-msse' is used.
21288All of them generate the machine instruction that is part of the name.
21289
21290     int __builtin_ia32_comieq (v4sf, v4sf)
21291     int __builtin_ia32_comineq (v4sf, v4sf)
21292     int __builtin_ia32_comilt (v4sf, v4sf)
21293     int __builtin_ia32_comile (v4sf, v4sf)
21294     int __builtin_ia32_comigt (v4sf, v4sf)
21295     int __builtin_ia32_comige (v4sf, v4sf)
21296     int __builtin_ia32_ucomieq (v4sf, v4sf)
21297     int __builtin_ia32_ucomineq (v4sf, v4sf)
21298     int __builtin_ia32_ucomilt (v4sf, v4sf)
21299     int __builtin_ia32_ucomile (v4sf, v4sf)
21300     int __builtin_ia32_ucomigt (v4sf, v4sf)
21301     int __builtin_ia32_ucomige (v4sf, v4sf)
21302     v4sf __builtin_ia32_addps (v4sf, v4sf)
21303     v4sf __builtin_ia32_subps (v4sf, v4sf)
21304     v4sf __builtin_ia32_mulps (v4sf, v4sf)
21305     v4sf __builtin_ia32_divps (v4sf, v4sf)
21306     v4sf __builtin_ia32_addss (v4sf, v4sf)
21307     v4sf __builtin_ia32_subss (v4sf, v4sf)
21308     v4sf __builtin_ia32_mulss (v4sf, v4sf)
21309     v4sf __builtin_ia32_divss (v4sf, v4sf)
21310     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
21311     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
21312     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
21313     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
21314     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
21315     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
21316     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
21317     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
21318     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
21319     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
21320     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
21321     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
21322     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
21323     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
21324     v4si __builtin_ia32_cmpless (v4sf, v4sf)
21325     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
21326     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
21327     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
21328     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
21329     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
21330     v4sf __builtin_ia32_maxps (v4sf, v4sf)
21331     v4sf __builtin_ia32_maxss (v4sf, v4sf)
21332     v4sf __builtin_ia32_minps (v4sf, v4sf)
21333     v4sf __builtin_ia32_minss (v4sf, v4sf)
21334     v4sf __builtin_ia32_andps (v4sf, v4sf)
21335     v4sf __builtin_ia32_andnps (v4sf, v4sf)
21336     v4sf __builtin_ia32_orps (v4sf, v4sf)
21337     v4sf __builtin_ia32_xorps (v4sf, v4sf)
21338     v4sf __builtin_ia32_movss (v4sf, v4sf)
21339     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
21340     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
21341     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
21342     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
21343     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
21344     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
21345     v2si __builtin_ia32_cvtps2pi (v4sf)
21346     int __builtin_ia32_cvtss2si (v4sf)
21347     v2si __builtin_ia32_cvttps2pi (v4sf)
21348     int __builtin_ia32_cvttss2si (v4sf)
21349     v4sf __builtin_ia32_rcpps (v4sf)
21350     v4sf __builtin_ia32_rsqrtps (v4sf)
21351     v4sf __builtin_ia32_sqrtps (v4sf)
21352     v4sf __builtin_ia32_rcpss (v4sf)
21353     v4sf __builtin_ia32_rsqrtss (v4sf)
21354     v4sf __builtin_ia32_sqrtss (v4sf)
21355     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
21356     void __builtin_ia32_movntps (float *, v4sf)
21357     int __builtin_ia32_movmskps (v4sf)
21358
21359 The following built-in functions are available when `-msse' is used.
21360
21361`v4sf __builtin_ia32_loadaps (float *)'
21362     Generates the `movaps' machine instruction as a load from memory.
21363
21364`void __builtin_ia32_storeaps (float *, v4sf)'
21365     Generates the `movaps' machine instruction as a store to memory.
21366
21367`v4sf __builtin_ia32_loadups (float *)'
21368     Generates the `movups' machine instruction as a load from memory.
21369
21370`void __builtin_ia32_storeups (float *, v4sf)'
21371     Generates the `movups' machine instruction as a store to memory.
21372
21373`v4sf __builtin_ia32_loadsss (float *)'
21374     Generates the `movss' machine instruction as a load from memory.
21375
21376`void __builtin_ia32_storess (float *, v4sf)'
21377     Generates the `movss' machine instruction as a store to memory.
21378
21379`v4sf __builtin_ia32_loadhps (v4sf, v2si *)'
21380     Generates the `movhps' machine instruction as a load from memory.
21381
21382`v4sf __builtin_ia32_loadlps (v4sf, v2si *)'
21383     Generates the `movlps' machine instruction as a load from memory
21384
21385`void __builtin_ia32_storehps (v4sf, v2si *)'
21386     Generates the `movhps' machine instruction as a store to memory.
21387
21388`void __builtin_ia32_storelps (v4sf, v2si *)'
21389     Generates the `movlps' machine instruction as a store to memory.
21390
21391 The following built-in functions are available when `-msse2' is used.
21392All of them generate the machine instruction that is part of the name.
21393
21394     int __builtin_ia32_comisdeq (v2df, v2df)
21395     int __builtin_ia32_comisdlt (v2df, v2df)
21396     int __builtin_ia32_comisdle (v2df, v2df)
21397     int __builtin_ia32_comisdgt (v2df, v2df)
21398     int __builtin_ia32_comisdge (v2df, v2df)
21399     int __builtin_ia32_comisdneq (v2df, v2df)
21400     int __builtin_ia32_ucomisdeq (v2df, v2df)
21401     int __builtin_ia32_ucomisdlt (v2df, v2df)
21402     int __builtin_ia32_ucomisdle (v2df, v2df)
21403     int __builtin_ia32_ucomisdgt (v2df, v2df)
21404     int __builtin_ia32_ucomisdge (v2df, v2df)
21405     int __builtin_ia32_ucomisdneq (v2df, v2df)
21406     v2df __builtin_ia32_cmpeqpd (v2df, v2df)
21407     v2df __builtin_ia32_cmpltpd (v2df, v2df)
21408     v2df __builtin_ia32_cmplepd (v2df, v2df)
21409     v2df __builtin_ia32_cmpgtpd (v2df, v2df)
21410     v2df __builtin_ia32_cmpgepd (v2df, v2df)
21411     v2df __builtin_ia32_cmpunordpd (v2df, v2df)
21412     v2df __builtin_ia32_cmpneqpd (v2df, v2df)
21413     v2df __builtin_ia32_cmpnltpd (v2df, v2df)
21414     v2df __builtin_ia32_cmpnlepd (v2df, v2df)
21415     v2df __builtin_ia32_cmpngtpd (v2df, v2df)
21416     v2df __builtin_ia32_cmpngepd (v2df, v2df)
21417     v2df __builtin_ia32_cmpordpd (v2df, v2df)
21418     v2df __builtin_ia32_cmpeqsd (v2df, v2df)
21419     v2df __builtin_ia32_cmpltsd (v2df, v2df)
21420     v2df __builtin_ia32_cmplesd (v2df, v2df)
21421     v2df __builtin_ia32_cmpunordsd (v2df, v2df)
21422     v2df __builtin_ia32_cmpneqsd (v2df, v2df)
21423     v2df __builtin_ia32_cmpnltsd (v2df, v2df)
21424     v2df __builtin_ia32_cmpnlesd (v2df, v2df)
21425     v2df __builtin_ia32_cmpordsd (v2df, v2df)
21426     v2di __builtin_ia32_paddq (v2di, v2di)
21427     v2di __builtin_ia32_psubq (v2di, v2di)
21428     v2df __builtin_ia32_addpd (v2df, v2df)
21429     v2df __builtin_ia32_subpd (v2df, v2df)
21430     v2df __builtin_ia32_mulpd (v2df, v2df)
21431     v2df __builtin_ia32_divpd (v2df, v2df)
21432     v2df __builtin_ia32_addsd (v2df, v2df)
21433     v2df __builtin_ia32_subsd (v2df, v2df)
21434     v2df __builtin_ia32_mulsd (v2df, v2df)
21435     v2df __builtin_ia32_divsd (v2df, v2df)
21436     v2df __builtin_ia32_minpd (v2df, v2df)
21437     v2df __builtin_ia32_maxpd (v2df, v2df)
21438     v2df __builtin_ia32_minsd (v2df, v2df)
21439     v2df __builtin_ia32_maxsd (v2df, v2df)
21440     v2df __builtin_ia32_andpd (v2df, v2df)
21441     v2df __builtin_ia32_andnpd (v2df, v2df)
21442     v2df __builtin_ia32_orpd (v2df, v2df)
21443     v2df __builtin_ia32_xorpd (v2df, v2df)
21444     v2df __builtin_ia32_movsd (v2df, v2df)
21445     v2df __builtin_ia32_unpckhpd (v2df, v2df)
21446     v2df __builtin_ia32_unpcklpd (v2df, v2df)
21447     v16qi __builtin_ia32_paddb128 (v16qi, v16qi)
21448     v8hi __builtin_ia32_paddw128 (v8hi, v8hi)
21449     v4si __builtin_ia32_paddd128 (v4si, v4si)
21450     v2di __builtin_ia32_paddq128 (v2di, v2di)
21451     v16qi __builtin_ia32_psubb128 (v16qi, v16qi)
21452     v8hi __builtin_ia32_psubw128 (v8hi, v8hi)
21453     v4si __builtin_ia32_psubd128 (v4si, v4si)
21454     v2di __builtin_ia32_psubq128 (v2di, v2di)
21455     v8hi __builtin_ia32_pmullw128 (v8hi, v8hi)
21456     v8hi __builtin_ia32_pmulhw128 (v8hi, v8hi)
21457     v2di __builtin_ia32_pand128 (v2di, v2di)
21458     v2di __builtin_ia32_pandn128 (v2di, v2di)
21459     v2di __builtin_ia32_por128 (v2di, v2di)
21460     v2di __builtin_ia32_pxor128 (v2di, v2di)
21461     v16qi __builtin_ia32_pavgb128 (v16qi, v16qi)
21462     v8hi __builtin_ia32_pavgw128 (v8hi, v8hi)
21463     v16qi __builtin_ia32_pcmpeqb128 (v16qi, v16qi)
21464     v8hi __builtin_ia32_pcmpeqw128 (v8hi, v8hi)
21465     v4si __builtin_ia32_pcmpeqd128 (v4si, v4si)
21466     v16qi __builtin_ia32_pcmpgtb128 (v16qi, v16qi)
21467     v8hi __builtin_ia32_pcmpgtw128 (v8hi, v8hi)
21468     v4si __builtin_ia32_pcmpgtd128 (v4si, v4si)
21469     v16qi __builtin_ia32_pmaxub128 (v16qi, v16qi)
21470     v8hi __builtin_ia32_pmaxsw128 (v8hi, v8hi)
21471     v16qi __builtin_ia32_pminub128 (v16qi, v16qi)
21472     v8hi __builtin_ia32_pminsw128 (v8hi, v8hi)
21473     v16qi __builtin_ia32_punpckhbw128 (v16qi, v16qi)
21474     v8hi __builtin_ia32_punpckhwd128 (v8hi, v8hi)
21475     v4si __builtin_ia32_punpckhdq128 (v4si, v4si)
21476     v2di __builtin_ia32_punpckhqdq128 (v2di, v2di)
21477     v16qi __builtin_ia32_punpcklbw128 (v16qi, v16qi)
21478     v8hi __builtin_ia32_punpcklwd128 (v8hi, v8hi)
21479     v4si __builtin_ia32_punpckldq128 (v4si, v4si)
21480     v2di __builtin_ia32_punpcklqdq128 (v2di, v2di)
21481     v16qi __builtin_ia32_packsswb128 (v16qi, v16qi)
21482     v8hi __builtin_ia32_packssdw128 (v8hi, v8hi)
21483     v16qi __builtin_ia32_packuswb128 (v16qi, v16qi)
21484     v8hi __builtin_ia32_pmulhuw128 (v8hi, v8hi)
21485     void __builtin_ia32_maskmovdqu (v16qi, v16qi)
21486     v2df __builtin_ia32_loadupd (double *)
21487     void __builtin_ia32_storeupd (double *, v2df)
21488     v2df __builtin_ia32_loadhpd (v2df, double *)
21489     v2df __builtin_ia32_loadlpd (v2df, double *)
21490     int __builtin_ia32_movmskpd (v2df)
21491     int __builtin_ia32_pmovmskb128 (v16qi)
21492     void __builtin_ia32_movnti (int *, int)
21493     void __builtin_ia32_movntpd (double *, v2df)
21494     void __builtin_ia32_movntdq (v2df *, v2df)
21495     v4si __builtin_ia32_pshufd (v4si, int)
21496     v8hi __builtin_ia32_pshuflw (v8hi, int)
21497     v8hi __builtin_ia32_pshufhw (v8hi, int)
21498     v2di __builtin_ia32_psadbw128 (v16qi, v16qi)
21499     v2df __builtin_ia32_sqrtpd (v2df)
21500     v2df __builtin_ia32_sqrtsd (v2df)
21501     v2df __builtin_ia32_shufpd (v2df, v2df, int)
21502     v2df __builtin_ia32_cvtdq2pd (v4si)
21503     v4sf __builtin_ia32_cvtdq2ps (v4si)
21504     v4si __builtin_ia32_cvtpd2dq (v2df)
21505     v2si __builtin_ia32_cvtpd2pi (v2df)
21506     v4sf __builtin_ia32_cvtpd2ps (v2df)
21507     v4si __builtin_ia32_cvttpd2dq (v2df)
21508     v2si __builtin_ia32_cvttpd2pi (v2df)
21509     v2df __builtin_ia32_cvtpi2pd (v2si)
21510     int __builtin_ia32_cvtsd2si (v2df)
21511     int __builtin_ia32_cvttsd2si (v2df)
21512     long long __builtin_ia32_cvtsd2si64 (v2df)
21513     long long __builtin_ia32_cvttsd2si64 (v2df)
21514     v4si __builtin_ia32_cvtps2dq (v4sf)
21515     v2df __builtin_ia32_cvtps2pd (v4sf)
21516     v4si __builtin_ia32_cvttps2dq (v4sf)
21517     v2df __builtin_ia32_cvtsi2sd (v2df, int)
21518     v2df __builtin_ia32_cvtsi642sd (v2df, long long)
21519     v4sf __builtin_ia32_cvtsd2ss (v4sf, v2df)
21520     v2df __builtin_ia32_cvtss2sd (v2df, v4sf)
21521     void __builtin_ia32_clflush (const void *)
21522     void __builtin_ia32_lfence (void)
21523     void __builtin_ia32_mfence (void)
21524     v16qi __builtin_ia32_loaddqu (const char *)
21525     void __builtin_ia32_storedqu (char *, v16qi)
21526     unsigned long long __builtin_ia32_pmuludq (v2si, v2si)
21527     v2di __builtin_ia32_pmuludq128 (v4si, v4si)
21528     v8hi __builtin_ia32_psllw128 (v8hi, v2di)
21529     v4si __builtin_ia32_pslld128 (v4si, v2di)
21530     v2di __builtin_ia32_psllq128 (v4si, v2di)
21531     v8hi __builtin_ia32_psrlw128 (v8hi, v2di)
21532     v4si __builtin_ia32_psrld128 (v4si, v2di)
21533     v2di __builtin_ia32_psrlq128 (v2di, v2di)
21534     v8hi __builtin_ia32_psraw128 (v8hi, v2di)
21535     v4si __builtin_ia32_psrad128 (v4si, v2di)
21536     v2di __builtin_ia32_pslldqi128 (v2di, int)
21537     v8hi __builtin_ia32_psllwi128 (v8hi, int)
21538     v4si __builtin_ia32_pslldi128 (v4si, int)
21539     v2di __builtin_ia32_psllqi128 (v2di, int)
21540     v2di __builtin_ia32_psrldqi128 (v2di, int)
21541     v8hi __builtin_ia32_psrlwi128 (v8hi, int)
21542     v4si __builtin_ia32_psrldi128 (v4si, int)
21543     v2di __builtin_ia32_psrlqi128 (v2di, int)
21544     v8hi __builtin_ia32_psrawi128 (v8hi, int)
21545     v4si __builtin_ia32_psradi128 (v4si, int)
21546     v4si __builtin_ia32_pmaddwd128 (v8hi, v8hi)
21547
21548 The following built-in functions are available when `-msse3' is used.
21549All of them generate the machine instruction that is part of the name.
21550
21551     v2df __builtin_ia32_addsubpd (v2df, v2df)
21552     v4sf __builtin_ia32_addsubps (v4sf, v4sf)
21553     v2df __builtin_ia32_haddpd (v2df, v2df)
21554     v4sf __builtin_ia32_haddps (v4sf, v4sf)
21555     v2df __builtin_ia32_hsubpd (v2df, v2df)
21556     v4sf __builtin_ia32_hsubps (v4sf, v4sf)
21557     v16qi __builtin_ia32_lddqu (char const *)
21558     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
21559     v2df __builtin_ia32_movddup (v2df)
21560     v4sf __builtin_ia32_movshdup (v4sf)
21561     v4sf __builtin_ia32_movsldup (v4sf)
21562     void __builtin_ia32_mwait (unsigned int, unsigned int)
21563
21564 The following built-in functions are available when `-msse3' is used.
21565
21566`v2df __builtin_ia32_loadddup (double const *)'
21567     Generates the `movddup' machine instruction as a load from memory.
21568
21569 The following built-in functions are available when `-m3dnow' is used.
21570All of them generate the machine instruction that is part of the name.
21571
21572     void __builtin_ia32_femms (void)
21573     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
21574     v2si __builtin_ia32_pf2id (v2sf)
21575     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
21576     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
21577     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
21578     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
21579     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
21580     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
21581     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
21582     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
21583     v2sf __builtin_ia32_pfrcp (v2sf)
21584     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
21585     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
21586     v2sf __builtin_ia32_pfrsqrt (v2sf)
21587     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
21588     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
21589     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
21590     v2sf __builtin_ia32_pi2fd (v2si)
21591     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
21592
21593 The following built-in functions are available when both `-m3dnow' and
21594`-march=athlon' are used.  All of them generate the machine instruction
21595that is part of the name.
21596
21597     v2si __builtin_ia32_pf2iw (v2sf)
21598     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
21599     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
21600     v2sf __builtin_ia32_pi2fw (v2si)
21601     v2sf __builtin_ia32_pswapdsf (v2sf)
21602     v2si __builtin_ia32_pswapdsi (v2si)
21603
21604
21605File: gcc.info,  Node: MIPS DSP Built-in Functions,  Next: MIPS Paired-Single Support,  Prev: X86 Built-in Functions,  Up: Target Builtins
21606
216075.48.6 MIPS DSP Built-in Functions
21608----------------------------------
21609
21610The MIPS DSP Application-Specific Extension (ASE) includes new
21611instructions that are designed to improve the performance of DSP and
21612media applications.  It provides instructions that operate on packed
216138-bit integer data, Q15 fractional data and Q31 fractional data.
21614
21615 GCC supports MIPS DSP operations using both the generic vector
21616extensions (*note Vector Extensions::) and a collection of
21617MIPS-specific built-in functions.  Both kinds of support are enabled by
21618the `-mdsp' command-line option.
21619
21620 At present, GCC only provides support for operations on 32-bit
21621vectors.  The vector type associated with 8-bit integer data is usually
21622called `v4i8' and the vector type associated with Q15 is usually called
21623`v2q15'.  They can be defined in C as follows:
21624
21625     typedef char v4i8 __attribute__ ((vector_size(4)));
21626     typedef short v2q15 __attribute__ ((vector_size(4)));
21627
21628 `v4i8' and `v2q15' values are initialized in the same way as
21629aggregates.  For example:
21630
21631     v4i8 a = {1, 2, 3, 4};
21632     v4i8 b;
21633     b = (v4i8) {5, 6, 7, 8};
21634
21635     v2q15 c = {0x0fcb, 0x3a75};
21636     v2q15 d;
21637     d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
21638
21639 _Note:_ The CPU's endianness determines the order in which values are
21640packed.  On little-endian targets, the first value is the least
21641significant and the last value is the most significant.  The opposite
21642order applies to big-endian targets.  For example, the code above will
21643set the lowest byte of `a' to `1' on little-endian targets and `4' on
21644big-endian targets.
21645
21646 _Note:_ Q15 and Q31 values must be initialized with their integer
21647representation.  As shown in this example, the integer representation
21648of a Q15 value can be obtained by multiplying the fractional value by
21649`0x1.0p15'.  The equivalent for Q31 values is to multiply by `0x1.0p31'.
21650
21651 The table below lists the `v4i8' and `v2q15' operations for which
21652hardware support exists.  `a' and `b' are `v4i8' values, and `c' and
21653`d' are `v2q15' values.
21654
21655C code                               MIPS instruction
21656`a + b'                              `addu.qb'
21657`c + d'                              `addq.ph'
21658`a - b'                              `subu.qb'
21659`c - d'                              `subq.ph'
21660
21661 It is easier to describe the DSP built-in functions if we first define
21662the following types:
21663
21664     typedef int q31;
21665     typedef int i32;
21666     typedef long long a64;
21667
21668 `q31' and `i32' are actually the same as `int', but we use `q31' to
21669indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
21670value.  Similarly, `a64' is the same as `long long', but we use `a64'
21671to indicate values that will be placed in one of the four DSP
21672accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
21673
21674 Also, some built-in functions prefer or require immediate numbers as
21675parameters, because the corresponding DSP instructions accept both
21676immediate numbers and register operands, or accept immediate numbers
21677only.  The immediate parameters are listed as follows.
21678
21679     imm0_7: 0 to 7.
21680     imm0_15: 0 to 15.
21681     imm0_31: 0 to 31.
21682     imm0_63: 0 to 63.
21683     imm0_255: 0 to 255.
21684     imm_n32_31: -32 to 31.
21685     imm_n512_511: -512 to 511.
21686
21687 The following built-in functions map directly to a particular MIPS DSP
21688instruction.  Please refer to the architecture specification for
21689details on what each instruction does.
21690
21691     v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
21692     v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
21693     q31 __builtin_mips_addq_s_w (q31, q31)
21694     v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
21695     v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
21696     v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
21697     v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
21698     q31 __builtin_mips_subq_s_w (q31, q31)
21699     v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
21700     v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
21701     i32 __builtin_mips_addsc (i32, i32)
21702     i32 __builtin_mips_addwc (i32, i32)
21703     i32 __builtin_mips_modsub (i32, i32)
21704     i32 __builtin_mips_raddu_w_qb (v4i8)
21705     v2q15 __builtin_mips_absq_s_ph (v2q15)
21706     q31 __builtin_mips_absq_s_w (q31)
21707     v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
21708     v2q15 __builtin_mips_precrq_ph_w (q31, q31)
21709     v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
21710     v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
21711     q31 __builtin_mips_preceq_w_phl (v2q15)
21712     q31 __builtin_mips_preceq_w_phr (v2q15)
21713     v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
21714     v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
21715     v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
21716     v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
21717     v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
21718     v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
21719     v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
21720     v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
21721     v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
21722     v4i8 __builtin_mips_shll_qb (v4i8, i32)
21723     v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
21724     v2q15 __builtin_mips_shll_ph (v2q15, i32)
21725     v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
21726     v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
21727     q31 __builtin_mips_shll_s_w (q31, imm0_31)
21728     q31 __builtin_mips_shll_s_w (q31, i32)
21729     v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
21730     v4i8 __builtin_mips_shrl_qb (v4i8, i32)
21731     v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
21732     v2q15 __builtin_mips_shra_ph (v2q15, i32)
21733     v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
21734     v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
21735     q31 __builtin_mips_shra_r_w (q31, imm0_31)
21736     q31 __builtin_mips_shra_r_w (q31, i32)
21737     v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
21738     v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
21739     v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
21740     q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
21741     q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
21742     a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
21743     a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
21744     a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
21745     a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
21746     a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
21747     a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
21748     a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
21749     a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
21750     a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
21751     a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
21752     a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
21753     a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
21754     a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
21755     i32 __builtin_mips_bitrev (i32)
21756     i32 __builtin_mips_insv (i32, i32)
21757     v4i8 __builtin_mips_repl_qb (imm0_255)
21758     v4i8 __builtin_mips_repl_qb (i32)
21759     v2q15 __builtin_mips_repl_ph (imm_n512_511)
21760     v2q15 __builtin_mips_repl_ph (i32)
21761     void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
21762     void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
21763     void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
21764     i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
21765     i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
21766     i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
21767     void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
21768     void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
21769     void __builtin_mips_cmp_le_ph (v2q15, v2q15)
21770     v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
21771     v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
21772     v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
21773     i32 __builtin_mips_extr_w (a64, imm0_31)
21774     i32 __builtin_mips_extr_w (a64, i32)
21775     i32 __builtin_mips_extr_r_w (a64, imm0_31)
21776     i32 __builtin_mips_extr_s_h (a64, i32)
21777     i32 __builtin_mips_extr_rs_w (a64, imm0_31)
21778     i32 __builtin_mips_extr_rs_w (a64, i32)
21779     i32 __builtin_mips_extr_s_h (a64, imm0_31)
21780     i32 __builtin_mips_extr_r_w (a64, i32)
21781     i32 __builtin_mips_extp (a64, imm0_31)
21782     i32 __builtin_mips_extp (a64, i32)
21783     i32 __builtin_mips_extpdp (a64, imm0_31)
21784     i32 __builtin_mips_extpdp (a64, i32)
21785     a64 __builtin_mips_shilo (a64, imm_n32_31)
21786     a64 __builtin_mips_shilo (a64, i32)
21787     a64 __builtin_mips_mthlip (a64, i32)
21788     void __builtin_mips_wrdsp (i32, imm0_63)
21789     i32 __builtin_mips_rddsp (imm0_63)
21790     i32 __builtin_mips_lbux (void *, i32)
21791     i32 __builtin_mips_lhx (void *, i32)
21792     i32 __builtin_mips_lwx (void *, i32)
21793     i32 __builtin_mips_bposge32 (void)
21794
21795
21796File: gcc.info,  Node: MIPS Paired-Single Support,  Next: PowerPC AltiVec Built-in Functions,  Prev: MIPS DSP Built-in Functions,  Up: Target Builtins
21797
217985.48.7 MIPS Paired-Single Support
21799---------------------------------
21800
21801The MIPS64 architecture includes a number of instructions that operate
21802on pairs of single-precision floating-point values.  Each pair is
21803packed into a 64-bit floating-point register, with one element being
21804designated the "upper half" and the other being designated the "lower
21805half".
21806
21807 GCC supports paired-single operations using both the generic vector
21808extensions (*note Vector Extensions::) and a collection of
21809MIPS-specific built-in functions.  Both kinds of support are enabled by
21810the `-mpaired-single' command-line option.
21811
21812 The vector type associated with paired-single values is usually called
21813`v2sf'.  It can be defined in C as follows:
21814
21815     typedef float v2sf __attribute__ ((vector_size (8)));
21816
21817 `v2sf' values are initialized in the same way as aggregates.  For
21818example:
21819
21820     v2sf a = {1.5, 9.1};
21821     v2sf b;
21822     float e, f;
21823     b = (v2sf) {e, f};
21824
21825 _Note:_ The CPU's endianness determines which value is stored in the
21826upper half of a register and which value is stored in the lower half.
21827On little-endian targets, the first value is the lower one and the
21828second value is the upper one.  The opposite order applies to
21829big-endian targets.  For example, the code above will set the lower
21830half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
21831targets.
21832
21833* Menu:
21834
21835* Paired-Single Arithmetic::
21836* Paired-Single Built-in Functions::
21837* MIPS-3D Built-in Functions::
21838
21839
21840File: gcc.info,  Node: Paired-Single Arithmetic,  Next: Paired-Single Built-in Functions,  Up: MIPS Paired-Single Support
21841
218425.48.7.1 Paired-Single Arithmetic
21843.................................
21844
21845The table below lists the `v2sf' operations for which hardware support
21846exists.  `a', `b' and `c' are `v2sf' values and `x' is an integral
21847value.
21848
21849C code                               MIPS instruction
21850`a + b'                              `add.ps'
21851`a - b'                              `sub.ps'
21852`-a'                                 `neg.ps'
21853`a * b'                              `mul.ps'
21854`a * b + c'                          `madd.ps'
21855`a * b - c'                          `msub.ps'
21856`-(a * b + c)'                       `nmadd.ps'
21857`-(a * b - c)'                       `nmsub.ps'
21858`x ? a : b'                          `movn.ps'/`movz.ps'
21859
21860 Note that the multiply-accumulate instructions can be disabled using
21861the command-line option `-mno-fused-madd'.
21862
21863
21864File: gcc.info,  Node: Paired-Single Built-in Functions,  Next: MIPS-3D Built-in Functions,  Prev: Paired-Single Arithmetic,  Up: MIPS Paired-Single Support
21865
218665.48.7.2 Paired-Single Built-in Functions
21867.........................................
21868
21869The following paired-single functions map directly to a particular MIPS
21870instruction.  Please refer to the architecture specification for
21871details on what each instruction does.
21872
21873`v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
21874     Pair lower lower (`pll.ps').
21875
21876`v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
21877     Pair upper lower (`pul.ps').
21878
21879`v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
21880     Pair lower upper (`plu.ps').
21881
21882`v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
21883     Pair upper upper (`puu.ps').
21884
21885`v2sf __builtin_mips_cvt_ps_s (float, float)'
21886     Convert pair to paired single (`cvt.ps.s').
21887
21888`float __builtin_mips_cvt_s_pl (v2sf)'
21889     Convert pair lower to single (`cvt.s.pl').
21890
21891`float __builtin_mips_cvt_s_pu (v2sf)'
21892     Convert pair upper to single (`cvt.s.pu').
21893
21894`v2sf __builtin_mips_abs_ps (v2sf)'
21895     Absolute value (`abs.ps').
21896
21897`v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
21898     Align variable (`alnv.ps').
21899
21900     _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
21901     otherwise the result will be unpredictable.  Please read the
21902     instruction description for details.
21903
21904 The following multi-instruction functions are also available.  In each
21905case, COND can be any of the 16 floating-point conditions: `f', `un',
21906`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
21907`lt', `nge', `le' or `ngt'.
21908
21909`v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
21910`v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
21911     Conditional move based on floating point comparison (`c.COND.ps',
21912     `movt.ps'/`movf.ps').
21913
21914     The `movt' functions return the value X computed by:
21915
21916          c.COND.ps CC,A,B
21917          mov.ps X,C
21918          movt.ps X,D,CC
21919
21920     The `movf' functions are similar but use `movf.ps' instead of
21921     `movt.ps'.
21922
21923`int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
21924`int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
21925     Comparison of two paired-single values (`c.COND.ps',
21926     `bc1t'/`bc1f').
21927
21928     These functions compare A and B using `c.COND.ps' and return
21929     either the upper or lower half of the result.  For example:
21930
21931          v2sf a, b;
21932          if (__builtin_mips_upper_c_eq_ps (a, b))
21933            upper_halves_are_equal ();
21934          else
21935            upper_halves_are_unequal ();
21936
21937          if (__builtin_mips_lower_c_eq_ps (a, b))
21938            lower_halves_are_equal ();
21939          else
21940            lower_halves_are_unequal ();
21941
21942
21943File: gcc.info,  Node: MIPS-3D Built-in Functions,  Prev: Paired-Single Built-in Functions,  Up: MIPS Paired-Single Support
21944
219455.48.7.3 MIPS-3D Built-in Functions
21946...................................
21947
21948The MIPS-3D Application-Specific Extension (ASE) includes additional
21949paired-single instructions that are designed to improve the performance
21950of 3D graphics operations.  Support for these instructions is controlled
21951by the `-mips3d' command-line option.
21952
21953 The functions listed below map directly to a particular MIPS-3D
21954instruction.  Please refer to the architecture specification for more
21955details on what each instruction does.
21956
21957`v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
21958     Reduction add (`addr.ps').
21959
21960`v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
21961     Reduction multiply (`mulr.ps').
21962
21963`v2sf __builtin_mips_cvt_pw_ps (v2sf)'
21964     Convert paired single to paired word (`cvt.pw.ps').
21965
21966`v2sf __builtin_mips_cvt_ps_pw (v2sf)'
21967     Convert paired word to paired single (`cvt.ps.pw').
21968
21969`float __builtin_mips_recip1_s (float)'
21970`double __builtin_mips_recip1_d (double)'
21971`v2sf __builtin_mips_recip1_ps (v2sf)'
21972     Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
21973
21974`float __builtin_mips_recip2_s (float, float)'
21975`double __builtin_mips_recip2_d (double, double)'
21976`v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
21977     Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
21978
21979`float __builtin_mips_rsqrt1_s (float)'
21980`double __builtin_mips_rsqrt1_d (double)'
21981`v2sf __builtin_mips_rsqrt1_ps (v2sf)'
21982     Reduced precision reciprocal square root (sequence step 1)
21983     (`rsqrt1.FMT').
21984
21985`float __builtin_mips_rsqrt2_s (float, float)'
21986`double __builtin_mips_rsqrt2_d (double, double)'
21987`v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
21988     Reduced precision reciprocal square root (sequence step 2)
21989     (`rsqrt2.FMT').
21990
21991 The following multi-instruction functions are also available.  In each
21992case, COND can be any of the 16 floating-point conditions: `f', `un',
21993`eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
21994`lt', `nge', `le' or `ngt'.
21995
21996`int __builtin_mips_cabs_COND_s (float A, float B)'
21997`int __builtin_mips_cabs_COND_d (double A, double B)'
21998     Absolute comparison of two scalar values (`cabs.COND.FMT',
21999     `bc1t'/`bc1f').
22000
22001     These functions compare A and B using `cabs.COND.s' or
22002     `cabs.COND.d' and return the result as a boolean value.  For
22003     example:
22004
22005          float a, b;
22006          if (__builtin_mips_cabs_eq_s (a, b))
22007            true ();
22008          else
22009            false ();
22010
22011`int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
22012`int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
22013     Absolute comparison of two paired-single values (`cabs.COND.ps',
22014     `bc1t'/`bc1f').
22015
22016     These functions compare A and B using `cabs.COND.ps' and return
22017     either the upper or lower half of the result.  For example:
22018
22019          v2sf a, b;
22020          if (__builtin_mips_upper_cabs_eq_ps (a, b))
22021            upper_halves_are_equal ();
22022          else
22023            upper_halves_are_unequal ();
22024
22025          if (__builtin_mips_lower_cabs_eq_ps (a, b))
22026            lower_halves_are_equal ();
22027          else
22028            lower_halves_are_unequal ();
22029
22030`v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
22031`v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
22032     Conditional move based on absolute comparison (`cabs.COND.ps',
22033     `movt.ps'/`movf.ps').
22034
22035     The `movt' functions return the value X computed by:
22036
22037          cabs.COND.ps CC,A,B
22038          mov.ps X,C
22039          movt.ps X,D,CC
22040
22041     The `movf' functions are similar but use `movf.ps' instead of
22042     `movt.ps'.
22043
22044`int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
22045`int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
22046`int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
22047`int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
22048     Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
22049     `bc1any2t'/`bc1any2f').
22050
22051     These functions compare A and B using `c.COND.ps' or
22052     `cabs.COND.ps'.  The `any' forms return true if either result is
22053     true and the `all' forms return true if both results are true.
22054     For example:
22055
22056          v2sf a, b;
22057          if (__builtin_mips_any_c_eq_ps (a, b))
22058            one_is_true ();
22059          else
22060            both_are_false ();
22061
22062          if (__builtin_mips_all_c_eq_ps (a, b))
22063            both_are_true ();
22064          else
22065            one_is_false ();
22066
22067`int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22068`int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22069`int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22070`int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
22071     Comparison of four paired-single values
22072     (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
22073
22074     These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
22075     with B and to compare C with D.  The `any' forms return true if
22076     any of the four results are true and the `all' forms return true
22077     if all four results are true.  For example:
22078
22079          v2sf a, b, c, d;
22080          if (__builtin_mips_any_c_eq_4s (a, b, c, d))
22081            some_are_true ();
22082          else
22083            all_are_false ();
22084
22085          if (__builtin_mips_all_c_eq_4s (a, b, c, d))
22086            all_are_true ();
22087          else
22088            some_are_false ();
22089
22090
22091File: gcc.info,  Node: PowerPC AltiVec Built-in Functions,  Next: SPARC VIS Built-in Functions,  Prev: MIPS Paired-Single Support,  Up: Target Builtins
22092
220935.48.8 PowerPC AltiVec Built-in Functions
22094-----------------------------------------
22095
22096GCC provides an interface for the PowerPC family of processors to access
22097the AltiVec operations described in Motorola's AltiVec Programming
22098Interface Manual.  The interface is made available by including
22099`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
22100supports the following vector types.
22101
22102     vector unsigned char
22103     vector signed char
22104     vector bool char
22105
22106     vector unsigned short
22107     vector signed short
22108     vector bool short
22109     vector pixel
22110
22111     vector unsigned int
22112     vector signed int
22113     vector bool int
22114     vector float
22115
22116 GCC's implementation of the high-level language interface available
22117from C and C++ code differs from Motorola's documentation in several
22118ways.
22119
22120   * A vector constant is a list of constant expressions within curly
22121     braces.
22122
22123   * A vector initializer requires no cast if the vector constant is of
22124     the same type as the variable it is initializing.
22125
22126   * If `signed' or `unsigned' is omitted, the signedness of the vector
22127     type is the default signedness of the base type.  The default
22128     varies depending on the operating system, so a portable program
22129     should always specify the signedness.
22130
22131   * Compiling with `-maltivec' adds keywords `__vector', `__pixel',
22132     and `__bool'.  Macros `vector', `pixel', and `bool' are defined in
22133     `<altivec.h>' and can be undefined.
22134
22135   * GCC allows using a `typedef' name as the type specifier for a
22136     vector type.
22137
22138   * For C, overloaded functions are implemented with macros so the
22139     following does not work:
22140
22141            vec_add ((vector signed int){1, 2, 3, 4}, foo);
22142
22143     Since `vec_add' is a macro, the vector constant in the example is
22144     treated as four separate arguments.  Wrap the entire argument in
22145     parentheses for this to work.
22146
22147 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
22148GCC uses built-in functions to achieve the functionality in the
22149aforementioned header file, but they are not supported and are subject
22150to change without notice.
22151
22152 The following interfaces are supported for the generic and specific
22153AltiVec operations and the AltiVec predicates.  In cases where there is
22154a direct mapping between generic and specific operations, only the
22155generic names are shown here, although the specific operations can also
22156be used.
22157
22158 Arguments that are documented as `const int' require literal integral
22159values within the range required for that operation.
22160
22161     vector signed char vec_abs (vector signed char);
22162     vector signed short vec_abs (vector signed short);
22163     vector signed int vec_abs (vector signed int);
22164     vector float vec_abs (vector float);
22165
22166     vector signed char vec_abss (vector signed char);
22167     vector signed short vec_abss (vector signed short);
22168     vector signed int vec_abss (vector signed int);
22169
22170     vector signed char vec_add (vector bool char, vector signed char);
22171     vector signed char vec_add (vector signed char, vector bool char);
22172     vector signed char vec_add (vector signed char, vector signed char);
22173     vector unsigned char vec_add (vector bool char, vector unsigned char);
22174     vector unsigned char vec_add (vector unsigned char, vector bool char);
22175     vector unsigned char vec_add (vector unsigned char,
22176                                   vector unsigned char);
22177     vector signed short vec_add (vector bool short, vector signed short);
22178     vector signed short vec_add (vector signed short, vector bool short);
22179     vector signed short vec_add (vector signed short, vector signed short);
22180     vector unsigned short vec_add (vector bool short,
22181                                    vector unsigned short);
22182     vector unsigned short vec_add (vector unsigned short,
22183                                    vector bool short);
22184     vector unsigned short vec_add (vector unsigned short,
22185                                    vector unsigned short);
22186     vector signed int vec_add (vector bool int, vector signed int);
22187     vector signed int vec_add (vector signed int, vector bool int);
22188     vector signed int vec_add (vector signed int, vector signed int);
22189     vector unsigned int vec_add (vector bool int, vector unsigned int);
22190     vector unsigned int vec_add (vector unsigned int, vector bool int);
22191     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
22192     vector float vec_add (vector float, vector float);
22193
22194     vector float vec_vaddfp (vector float, vector float);
22195
22196     vector signed int vec_vadduwm (vector bool int, vector signed int);
22197     vector signed int vec_vadduwm (vector signed int, vector bool int);
22198     vector signed int vec_vadduwm (vector signed int, vector signed int);
22199     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
22200     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
22201     vector unsigned int vec_vadduwm (vector unsigned int,
22202                                      vector unsigned int);
22203
22204     vector signed short vec_vadduhm (vector bool short,
22205                                      vector signed short);
22206     vector signed short vec_vadduhm (vector signed short,
22207                                      vector bool short);
22208     vector signed short vec_vadduhm (vector signed short,
22209                                      vector signed short);
22210     vector unsigned short vec_vadduhm (vector bool short,
22211                                        vector unsigned short);
22212     vector unsigned short vec_vadduhm (vector unsigned short,
22213                                        vector bool short);
22214     vector unsigned short vec_vadduhm (vector unsigned short,
22215                                        vector unsigned short);
22216
22217     vector signed char vec_vaddubm (vector bool char, vector signed char);
22218     vector signed char vec_vaddubm (vector signed char, vector bool char);
22219     vector signed char vec_vaddubm (vector signed char, vector signed char);
22220     vector unsigned char vec_vaddubm (vector bool char,
22221                                       vector unsigned char);
22222     vector unsigned char vec_vaddubm (vector unsigned char,
22223                                       vector bool char);
22224     vector unsigned char vec_vaddubm (vector unsigned char,
22225                                       vector unsigned char);
22226
22227     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
22228
22229     vector unsigned char vec_adds (vector bool char, vector unsigned char);
22230     vector unsigned char vec_adds (vector unsigned char, vector bool char);
22231     vector unsigned char vec_adds (vector unsigned char,
22232                                    vector unsigned char);
22233     vector signed char vec_adds (vector bool char, vector signed char);
22234     vector signed char vec_adds (vector signed char, vector bool char);
22235     vector signed char vec_adds (vector signed char, vector signed char);
22236     vector unsigned short vec_adds (vector bool short,
22237                                     vector unsigned short);
22238     vector unsigned short vec_adds (vector unsigned short,
22239                                     vector bool short);
22240     vector unsigned short vec_adds (vector unsigned short,
22241                                     vector unsigned short);
22242     vector signed short vec_adds (vector bool short, vector signed short);
22243     vector signed short vec_adds (vector signed short, vector bool short);
22244     vector signed short vec_adds (vector signed short, vector signed short);
22245     vector unsigned int vec_adds (vector bool int, vector unsigned int);
22246     vector unsigned int vec_adds (vector unsigned int, vector bool int);
22247     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
22248     vector signed int vec_adds (vector bool int, vector signed int);
22249     vector signed int vec_adds (vector signed int, vector bool int);
22250     vector signed int vec_adds (vector signed int, vector signed int);
22251
22252     vector signed int vec_vaddsws (vector bool int, vector signed int);
22253     vector signed int vec_vaddsws (vector signed int, vector bool int);
22254     vector signed int vec_vaddsws (vector signed int, vector signed int);
22255
22256     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
22257     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
22258     vector unsigned int vec_vadduws (vector unsigned int,
22259                                      vector unsigned int);
22260
22261     vector signed short vec_vaddshs (vector bool short,
22262                                      vector signed short);
22263     vector signed short vec_vaddshs (vector signed short,
22264                                      vector bool short);
22265     vector signed short vec_vaddshs (vector signed short,
22266                                      vector signed short);
22267
22268     vector unsigned short vec_vadduhs (vector bool short,
22269                                        vector unsigned short);
22270     vector unsigned short vec_vadduhs (vector unsigned short,
22271                                        vector bool short);
22272     vector unsigned short vec_vadduhs (vector unsigned short,
22273                                        vector unsigned short);
22274
22275     vector signed char vec_vaddsbs (vector bool char, vector signed char);
22276     vector signed char vec_vaddsbs (vector signed char, vector bool char);
22277     vector signed char vec_vaddsbs (vector signed char, vector signed char);
22278
22279     vector unsigned char vec_vaddubs (vector bool char,
22280                                       vector unsigned char);
22281     vector unsigned char vec_vaddubs (vector unsigned char,
22282                                       vector bool char);
22283     vector unsigned char vec_vaddubs (vector unsigned char,
22284                                       vector unsigned char);
22285
22286     vector float vec_and (vector float, vector float);
22287     vector float vec_and (vector float, vector bool int);
22288     vector float vec_and (vector bool int, vector float);
22289     vector bool int vec_and (vector bool int, vector bool int);
22290     vector signed int vec_and (vector bool int, vector signed int);
22291     vector signed int vec_and (vector signed int, vector bool int);
22292     vector signed int vec_and (vector signed int, vector signed int);
22293     vector unsigned int vec_and (vector bool int, vector unsigned int);
22294     vector unsigned int vec_and (vector unsigned int, vector bool int);
22295     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
22296     vector bool short vec_and (vector bool short, vector bool short);
22297     vector signed short vec_and (vector bool short, vector signed short);
22298     vector signed short vec_and (vector signed short, vector bool short);
22299     vector signed short vec_and (vector signed short, vector signed short);
22300     vector unsigned short vec_and (vector bool short,
22301                                    vector unsigned short);
22302     vector unsigned short vec_and (vector unsigned short,
22303                                    vector bool short);
22304     vector unsigned short vec_and (vector unsigned short,
22305                                    vector unsigned short);
22306     vector signed char vec_and (vector bool char, vector signed char);
22307     vector bool char vec_and (vector bool char, vector bool char);
22308     vector signed char vec_and (vector signed char, vector bool char);
22309     vector signed char vec_and (vector signed char, vector signed char);
22310     vector unsigned char vec_and (vector bool char, vector unsigned char);
22311     vector unsigned char vec_and (vector unsigned char, vector bool char);
22312     vector unsigned char vec_and (vector unsigned char,
22313                                   vector unsigned char);
22314
22315     vector float vec_andc (vector float, vector float);
22316     vector float vec_andc (vector float, vector bool int);
22317     vector float vec_andc (vector bool int, vector float);
22318     vector bool int vec_andc (vector bool int, vector bool int);
22319     vector signed int vec_andc (vector bool int, vector signed int);
22320     vector signed int vec_andc (vector signed int, vector bool int);
22321     vector signed int vec_andc (vector signed int, vector signed int);
22322     vector unsigned int vec_andc (vector bool int, vector unsigned int);
22323     vector unsigned int vec_andc (vector unsigned int, vector bool int);
22324     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
22325     vector bool short vec_andc (vector bool short, vector bool short);
22326     vector signed short vec_andc (vector bool short, vector signed short);
22327     vector signed short vec_andc (vector signed short, vector bool short);
22328     vector signed short vec_andc (vector signed short, vector signed short);
22329     vector unsigned short vec_andc (vector bool short,
22330                                     vector unsigned short);
22331     vector unsigned short vec_andc (vector unsigned short,
22332                                     vector bool short);
22333     vector unsigned short vec_andc (vector unsigned short,
22334                                     vector unsigned short);
22335     vector signed char vec_andc (vector bool char, vector signed char);
22336     vector bool char vec_andc (vector bool char, vector bool char);
22337     vector signed char vec_andc (vector signed char, vector bool char);
22338     vector signed char vec_andc (vector signed char, vector signed char);
22339     vector unsigned char vec_andc (vector bool char, vector unsigned char);
22340     vector unsigned char vec_andc (vector unsigned char, vector bool char);
22341     vector unsigned char vec_andc (vector unsigned char,
22342                                    vector unsigned char);
22343
22344     vector unsigned char vec_avg (vector unsigned char,
22345                                   vector unsigned char);
22346     vector signed char vec_avg (vector signed char, vector signed char);
22347     vector unsigned short vec_avg (vector unsigned short,
22348                                    vector unsigned short);
22349     vector signed short vec_avg (vector signed short, vector signed short);
22350     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
22351     vector signed int vec_avg (vector signed int, vector signed int);
22352
22353     vector signed int vec_vavgsw (vector signed int, vector signed int);
22354
22355     vector unsigned int vec_vavguw (vector unsigned int,
22356                                     vector unsigned int);
22357
22358     vector signed short vec_vavgsh (vector signed short,
22359                                     vector signed short);
22360
22361     vector unsigned short vec_vavguh (vector unsigned short,
22362                                       vector unsigned short);
22363
22364     vector signed char vec_vavgsb (vector signed char, vector signed char);
22365
22366     vector unsigned char vec_vavgub (vector unsigned char,
22367                                      vector unsigned char);
22368
22369     vector float vec_ceil (vector float);
22370
22371     vector signed int vec_cmpb (vector float, vector float);
22372
22373     vector bool char vec_cmpeq (vector signed char, vector signed char);
22374     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
22375     vector bool short vec_cmpeq (vector signed short, vector signed short);
22376     vector bool short vec_cmpeq (vector unsigned short,
22377                                  vector unsigned short);
22378     vector bool int vec_cmpeq (vector signed int, vector signed int);
22379     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
22380     vector bool int vec_cmpeq (vector float, vector float);
22381
22382     vector bool int vec_vcmpeqfp (vector float, vector float);
22383
22384     vector bool int vec_vcmpequw (vector signed int, vector signed int);
22385     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
22386
22387     vector bool short vec_vcmpequh (vector signed short,
22388                                     vector signed short);
22389     vector bool short vec_vcmpequh (vector unsigned short,
22390                                     vector unsigned short);
22391
22392     vector bool char vec_vcmpequb (vector signed char, vector signed char);
22393     vector bool char vec_vcmpequb (vector unsigned char,
22394                                    vector unsigned char);
22395
22396     vector bool int vec_cmpge (vector float, vector float);
22397
22398     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
22399     vector bool char vec_cmpgt (vector signed char, vector signed char);
22400     vector bool short vec_cmpgt (vector unsigned short,
22401                                  vector unsigned short);
22402     vector bool short vec_cmpgt (vector signed short, vector signed short);
22403     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
22404     vector bool int vec_cmpgt (vector signed int, vector signed int);
22405     vector bool int vec_cmpgt (vector float, vector float);
22406
22407     vector bool int vec_vcmpgtfp (vector float, vector float);
22408
22409     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
22410
22411     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
22412
22413     vector bool short vec_vcmpgtsh (vector signed short,
22414                                     vector signed short);
22415
22416     vector bool short vec_vcmpgtuh (vector unsigned short,
22417                                     vector unsigned short);
22418
22419     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
22420
22421     vector bool char vec_vcmpgtub (vector unsigned char,
22422                                    vector unsigned char);
22423
22424     vector bool int vec_cmple (vector float, vector float);
22425
22426     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
22427     vector bool char vec_cmplt (vector signed char, vector signed char);
22428     vector bool short vec_cmplt (vector unsigned short,
22429                                  vector unsigned short);
22430     vector bool short vec_cmplt (vector signed short, vector signed short);
22431     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
22432     vector bool int vec_cmplt (vector signed int, vector signed int);
22433     vector bool int vec_cmplt (vector float, vector float);
22434
22435     vector float vec_ctf (vector unsigned int, const int);
22436     vector float vec_ctf (vector signed int, const int);
22437
22438     vector float vec_vcfsx (vector signed int, const int);
22439
22440     vector float vec_vcfux (vector unsigned int, const int);
22441
22442     vector signed int vec_cts (vector float, const int);
22443
22444     vector unsigned int vec_ctu (vector float, const int);
22445
22446     void vec_dss (const int);
22447
22448     void vec_dssall (void);
22449
22450     void vec_dst (const vector unsigned char *, int, const int);
22451     void vec_dst (const vector signed char *, int, const int);
22452     void vec_dst (const vector bool char *, int, const int);
22453     void vec_dst (const vector unsigned short *, int, const int);
22454     void vec_dst (const vector signed short *, int, const int);
22455     void vec_dst (const vector bool short *, int, const int);
22456     void vec_dst (const vector pixel *, int, const int);
22457     void vec_dst (const vector unsigned int *, int, const int);
22458     void vec_dst (const vector signed int *, int, const int);
22459     void vec_dst (const vector bool int *, int, const int);
22460     void vec_dst (const vector float *, int, const int);
22461     void vec_dst (const unsigned char *, int, const int);
22462     void vec_dst (const signed char *, int, const int);
22463     void vec_dst (const unsigned short *, int, const int);
22464     void vec_dst (const short *, int, const int);
22465     void vec_dst (const unsigned int *, int, const int);
22466     void vec_dst (const int *, int, const int);
22467     void vec_dst (const unsigned long *, int, const int);
22468     void vec_dst (const long *, int, const int);
22469     void vec_dst (const float *, int, const int);
22470
22471     void vec_dstst (const vector unsigned char *, int, const int);
22472     void vec_dstst (const vector signed char *, int, const int);
22473     void vec_dstst (const vector bool char *, int, const int);
22474     void vec_dstst (const vector unsigned short *, int, const int);
22475     void vec_dstst (const vector signed short *, int, const int);
22476     void vec_dstst (const vector bool short *, int, const int);
22477     void vec_dstst (const vector pixel *, int, const int);
22478     void vec_dstst (const vector unsigned int *, int, const int);
22479     void vec_dstst (const vector signed int *, int, const int);
22480     void vec_dstst (const vector bool int *, int, const int);
22481     void vec_dstst (const vector float *, int, const int);
22482     void vec_dstst (const unsigned char *, int, const int);
22483     void vec_dstst (const signed char *, int, const int);
22484     void vec_dstst (const unsigned short *, int, const int);
22485     void vec_dstst (const short *, int, const int);
22486     void vec_dstst (const unsigned int *, int, const int);
22487     void vec_dstst (const int *, int, const int);
22488     void vec_dstst (const unsigned long *, int, const int);
22489     void vec_dstst (const long *, int, const int);
22490     void vec_dstst (const float *, int, const int);
22491
22492     void vec_dststt (const vector unsigned char *, int, const int);
22493     void vec_dststt (const vector signed char *, int, const int);
22494     void vec_dststt (const vector bool char *, int, const int);
22495     void vec_dststt (const vector unsigned short *, int, const int);
22496     void vec_dststt (const vector signed short *, int, const int);
22497     void vec_dststt (const vector bool short *, int, const int);
22498     void vec_dststt (const vector pixel *, int, const int);
22499     void vec_dststt (const vector unsigned int *, int, const int);
22500     void vec_dststt (const vector signed int *, int, const int);
22501     void vec_dststt (const vector bool int *, int, const int);
22502     void vec_dststt (const vector float *, int, const int);
22503     void vec_dststt (const unsigned char *, int, const int);
22504     void vec_dststt (const signed char *, int, const int);
22505     void vec_dststt (const unsigned short *, int, const int);
22506     void vec_dststt (const short *, int, const int);
22507     void vec_dststt (const unsigned int *, int, const int);
22508     void vec_dststt (const int *, int, const int);
22509     void vec_dststt (const unsigned long *, int, const int);
22510     void vec_dststt (const long *, int, const int);
22511     void vec_dststt (const float *, int, const int);
22512
22513     void vec_dstt (const vector unsigned char *, int, const int);
22514     void vec_dstt (const vector signed char *, int, const int);
22515     void vec_dstt (const vector bool char *, int, const int);
22516     void vec_dstt (const vector unsigned short *, int, const int);
22517     void vec_dstt (const vector signed short *, int, const int);
22518     void vec_dstt (const vector bool short *, int, const int);
22519     void vec_dstt (const vector pixel *, int, const int);
22520     void vec_dstt (const vector unsigned int *, int, const int);
22521     void vec_dstt (const vector signed int *, int, const int);
22522     void vec_dstt (const vector bool int *, int, const int);
22523     void vec_dstt (const vector float *, int, const int);
22524     void vec_dstt (const unsigned char *, int, const int);
22525     void vec_dstt (const signed char *, int, const int);
22526     void vec_dstt (const unsigned short *, int, const int);
22527     void vec_dstt (const short *, int, const int);
22528     void vec_dstt (const unsigned int *, int, const int);
22529     void vec_dstt (const int *, int, const int);
22530     void vec_dstt (const unsigned long *, int, const int);
22531     void vec_dstt (const long *, int, const int);
22532     void vec_dstt (const float *, int, const int);
22533
22534     vector float vec_expte (vector float);
22535
22536     vector float vec_floor (vector float);
22537
22538     vector float vec_ld (int, const vector float *);
22539     vector float vec_ld (int, const float *);
22540     vector bool int vec_ld (int, const vector bool int *);
22541     vector signed int vec_ld (int, const vector signed int *);
22542     vector signed int vec_ld (int, const int *);
22543     vector signed int vec_ld (int, const long *);
22544     vector unsigned int vec_ld (int, const vector unsigned int *);
22545     vector unsigned int vec_ld (int, const unsigned int *);
22546     vector unsigned int vec_ld (int, const unsigned long *);
22547     vector bool short vec_ld (int, const vector bool short *);
22548     vector pixel vec_ld (int, const vector pixel *);
22549     vector signed short vec_ld (int, const vector signed short *);
22550     vector signed short vec_ld (int, const short *);
22551     vector unsigned short vec_ld (int, const vector unsigned short *);
22552     vector unsigned short vec_ld (int, const unsigned short *);
22553     vector bool char vec_ld (int, const vector bool char *);
22554     vector signed char vec_ld (int, const vector signed char *);
22555     vector signed char vec_ld (int, const signed char *);
22556     vector unsigned char vec_ld (int, const vector unsigned char *);
22557     vector unsigned char vec_ld (int, const unsigned char *);
22558
22559     vector signed char vec_lde (int, const signed char *);
22560     vector unsigned char vec_lde (int, const unsigned char *);
22561     vector signed short vec_lde (int, const short *);
22562     vector unsigned short vec_lde (int, const unsigned short *);
22563     vector float vec_lde (int, const float *);
22564     vector signed int vec_lde (int, const int *);
22565     vector unsigned int vec_lde (int, const unsigned int *);
22566     vector signed int vec_lde (int, const long *);
22567     vector unsigned int vec_lde (int, const unsigned long *);
22568
22569     vector float vec_lvewx (int, float *);
22570     vector signed int vec_lvewx (int, int *);
22571     vector unsigned int vec_lvewx (int, unsigned int *);
22572     vector signed int vec_lvewx (int, long *);
22573     vector unsigned int vec_lvewx (int, unsigned long *);
22574
22575     vector signed short vec_lvehx (int, short *);
22576     vector unsigned short vec_lvehx (int, unsigned short *);
22577
22578     vector signed char vec_lvebx (int, char *);
22579     vector unsigned char vec_lvebx (int, unsigned char *);
22580
22581     vector float vec_ldl (int, const vector float *);
22582     vector float vec_ldl (int, const float *);
22583     vector bool int vec_ldl (int, const vector bool int *);
22584     vector signed int vec_ldl (int, const vector signed int *);
22585     vector signed int vec_ldl (int, const int *);
22586     vector signed int vec_ldl (int, const long *);
22587     vector unsigned int vec_ldl (int, const vector unsigned int *);
22588     vector unsigned int vec_ldl (int, const unsigned int *);
22589     vector unsigned int vec_ldl (int, const unsigned long *);
22590     vector bool short vec_ldl (int, const vector bool short *);
22591     vector pixel vec_ldl (int, const vector pixel *);
22592     vector signed short vec_ldl (int, const vector signed short *);
22593     vector signed short vec_ldl (int, const short *);
22594     vector unsigned short vec_ldl (int, const vector unsigned short *);
22595     vector unsigned short vec_ldl (int, const unsigned short *);
22596     vector bool char vec_ldl (int, const vector bool char *);
22597     vector signed char vec_ldl (int, const vector signed char *);
22598     vector signed char vec_ldl (int, const signed char *);
22599     vector unsigned char vec_ldl (int, const vector unsigned char *);
22600     vector unsigned char vec_ldl (int, const unsigned char *);
22601
22602     vector float vec_loge (vector float);
22603
22604     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
22605     vector unsigned char vec_lvsl (int, const volatile signed char *);
22606     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
22607     vector unsigned char vec_lvsl (int, const volatile short *);
22608     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
22609     vector unsigned char vec_lvsl (int, const volatile int *);
22610     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
22611     vector unsigned char vec_lvsl (int, const volatile long *);
22612     vector unsigned char vec_lvsl (int, const volatile float *);
22613
22614     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
22615     vector unsigned char vec_lvsr (int, const volatile signed char *);
22616     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
22617     vector unsigned char vec_lvsr (int, const volatile short *);
22618     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
22619     vector unsigned char vec_lvsr (int, const volatile int *);
22620     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
22621     vector unsigned char vec_lvsr (int, const volatile long *);
22622     vector unsigned char vec_lvsr (int, const volatile float *);
22623
22624     vector float vec_madd (vector float, vector float, vector float);
22625
22626     vector signed short vec_madds (vector signed short,
22627                                    vector signed short,
22628                                    vector signed short);
22629
22630     vector unsigned char vec_max (vector bool char, vector unsigned char);
22631     vector unsigned char vec_max (vector unsigned char, vector bool char);
22632     vector unsigned char vec_max (vector unsigned char,
22633                                   vector unsigned char);
22634     vector signed char vec_max (vector bool char, vector signed char);
22635     vector signed char vec_max (vector signed char, vector bool char);
22636     vector signed char vec_max (vector signed char, vector signed char);
22637     vector unsigned short vec_max (vector bool short,
22638                                    vector unsigned short);
22639     vector unsigned short vec_max (vector unsigned short,
22640                                    vector bool short);
22641     vector unsigned short vec_max (vector unsigned short,
22642                                    vector unsigned short);
22643     vector signed short vec_max (vector bool short, vector signed short);
22644     vector signed short vec_max (vector signed short, vector bool short);
22645     vector signed short vec_max (vector signed short, vector signed short);
22646     vector unsigned int vec_max (vector bool int, vector unsigned int);
22647     vector unsigned int vec_max (vector unsigned int, vector bool int);
22648     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
22649     vector signed int vec_max (vector bool int, vector signed int);
22650     vector signed int vec_max (vector signed int, vector bool int);
22651     vector signed int vec_max (vector signed int, vector signed int);
22652     vector float vec_max (vector float, vector float);
22653
22654     vector float vec_vmaxfp (vector float, vector float);
22655
22656     vector signed int vec_vmaxsw (vector bool int, vector signed int);
22657     vector signed int vec_vmaxsw (vector signed int, vector bool int);
22658     vector signed int vec_vmaxsw (vector signed int, vector signed int);
22659
22660     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
22661     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
22662     vector unsigned int vec_vmaxuw (vector unsigned int,
22663                                     vector unsigned int);
22664
22665     vector signed short vec_vmaxsh (vector bool short, vector signed short);
22666     vector signed short vec_vmaxsh (vector signed short, vector bool short);
22667     vector signed short vec_vmaxsh (vector signed short,
22668                                     vector signed short);
22669
22670     vector unsigned short vec_vmaxuh (vector bool short,
22671                                       vector unsigned short);
22672     vector unsigned short vec_vmaxuh (vector unsigned short,
22673                                       vector bool short);
22674     vector unsigned short vec_vmaxuh (vector unsigned short,
22675                                       vector unsigned short);
22676
22677     vector signed char vec_vmaxsb (vector bool char, vector signed char);
22678     vector signed char vec_vmaxsb (vector signed char, vector bool char);
22679     vector signed char vec_vmaxsb (vector signed char, vector signed char);
22680
22681     vector unsigned char vec_vmaxub (vector bool char,
22682                                      vector unsigned char);
22683     vector unsigned char vec_vmaxub (vector unsigned char,
22684                                      vector bool char);
22685     vector unsigned char vec_vmaxub (vector unsigned char,
22686                                      vector unsigned char);
22687
22688     vector bool char vec_mergeh (vector bool char, vector bool char);
22689     vector signed char vec_mergeh (vector signed char, vector signed char);
22690     vector unsigned char vec_mergeh (vector unsigned char,
22691                                      vector unsigned char);
22692     vector bool short vec_mergeh (vector bool short, vector bool short);
22693     vector pixel vec_mergeh (vector pixel, vector pixel);
22694     vector signed short vec_mergeh (vector signed short,
22695                                     vector signed short);
22696     vector unsigned short vec_mergeh (vector unsigned short,
22697                                       vector unsigned short);
22698     vector float vec_mergeh (vector float, vector float);
22699     vector bool int vec_mergeh (vector bool int, vector bool int);
22700     vector signed int vec_mergeh (vector signed int, vector signed int);
22701     vector unsigned int vec_mergeh (vector unsigned int,
22702                                     vector unsigned int);
22703
22704     vector float vec_vmrghw (vector float, vector float);
22705     vector bool int vec_vmrghw (vector bool int, vector bool int);
22706     vector signed int vec_vmrghw (vector signed int, vector signed int);
22707     vector unsigned int vec_vmrghw (vector unsigned int,
22708                                     vector unsigned int);
22709
22710     vector bool short vec_vmrghh (vector bool short, vector bool short);
22711     vector signed short vec_vmrghh (vector signed short,
22712                                     vector signed short);
22713     vector unsigned short vec_vmrghh (vector unsigned short,
22714                                       vector unsigned short);
22715     vector pixel vec_vmrghh (vector pixel, vector pixel);
22716
22717     vector bool char vec_vmrghb (vector bool char, vector bool char);
22718     vector signed char vec_vmrghb (vector signed char, vector signed char);
22719     vector unsigned char vec_vmrghb (vector unsigned char,
22720                                      vector unsigned char);
22721
22722     vector bool char vec_mergel (vector bool char, vector bool char);
22723     vector signed char vec_mergel (vector signed char, vector signed char);
22724     vector unsigned char vec_mergel (vector unsigned char,
22725                                      vector unsigned char);
22726     vector bool short vec_mergel (vector bool short, vector bool short);
22727     vector pixel vec_mergel (vector pixel, vector pixel);
22728     vector signed short vec_mergel (vector signed short,
22729                                     vector signed short);
22730     vector unsigned short vec_mergel (vector unsigned short,
22731                                       vector unsigned short);
22732     vector float vec_mergel (vector float, vector float);
22733     vector bool int vec_mergel (vector bool int, vector bool int);
22734     vector signed int vec_mergel (vector signed int, vector signed int);
22735     vector unsigned int vec_mergel (vector unsigned int,
22736                                     vector unsigned int);
22737
22738     vector float vec_vmrglw (vector float, vector float);
22739     vector signed int vec_vmrglw (vector signed int, vector signed int);
22740     vector unsigned int vec_vmrglw (vector unsigned int,
22741                                     vector unsigned int);
22742     vector bool int vec_vmrglw (vector bool int, vector bool int);
22743
22744     vector bool short vec_vmrglh (vector bool short, vector bool short);
22745     vector signed short vec_vmrglh (vector signed short,
22746                                     vector signed short);
22747     vector unsigned short vec_vmrglh (vector unsigned short,
22748                                       vector unsigned short);
22749     vector pixel vec_vmrglh (vector pixel, vector pixel);
22750
22751     vector bool char vec_vmrglb (vector bool char, vector bool char);
22752     vector signed char vec_vmrglb (vector signed char, vector signed char);
22753     vector unsigned char vec_vmrglb (vector unsigned char,
22754                                      vector unsigned char);
22755
22756     vector unsigned short vec_mfvscr (void);
22757
22758     vector unsigned char vec_min (vector bool char, vector unsigned char);
22759     vector unsigned char vec_min (vector unsigned char, vector bool char);
22760     vector unsigned char vec_min (vector unsigned char,
22761                                   vector unsigned char);
22762     vector signed char vec_min (vector bool char, vector signed char);
22763     vector signed char vec_min (vector signed char, vector bool char);
22764     vector signed char vec_min (vector signed char, vector signed char);
22765     vector unsigned short vec_min (vector bool short,
22766                                    vector unsigned short);
22767     vector unsigned short vec_min (vector unsigned short,
22768                                    vector bool short);
22769     vector unsigned short vec_min (vector unsigned short,
22770                                    vector unsigned short);
22771     vector signed short vec_min (vector bool short, vector signed short);
22772     vector signed short vec_min (vector signed short, vector bool short);
22773     vector signed short vec_min (vector signed short, vector signed short);
22774     vector unsigned int vec_min (vector bool int, vector unsigned int);
22775     vector unsigned int vec_min (vector unsigned int, vector bool int);
22776     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
22777     vector signed int vec_min (vector bool int, vector signed int);
22778     vector signed int vec_min (vector signed int, vector bool int);
22779     vector signed int vec_min (vector signed int, vector signed int);
22780     vector float vec_min (vector float, vector float);
22781
22782     vector float vec_vminfp (vector float, vector float);
22783
22784     vector signed int vec_vminsw (vector bool int, vector signed int);
22785     vector signed int vec_vminsw (vector signed int, vector bool int);
22786     vector signed int vec_vminsw (vector signed int, vector signed int);
22787
22788     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
22789     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
22790     vector unsigned int vec_vminuw (vector unsigned int,
22791                                     vector unsigned int);
22792
22793     vector signed short vec_vminsh (vector bool short, vector signed short);
22794     vector signed short vec_vminsh (vector signed short, vector bool short);
22795     vector signed short vec_vminsh (vector signed short,
22796                                     vector signed short);
22797
22798     vector unsigned short vec_vminuh (vector bool short,
22799                                       vector unsigned short);
22800     vector unsigned short vec_vminuh (vector unsigned short,
22801                                       vector bool short);
22802     vector unsigned short vec_vminuh (vector unsigned short,
22803                                       vector unsigned short);
22804
22805     vector signed char vec_vminsb (vector bool char, vector signed char);
22806     vector signed char vec_vminsb (vector signed char, vector bool char);
22807     vector signed char vec_vminsb (vector signed char, vector signed char);
22808
22809     vector unsigned char vec_vminub (vector bool char,
22810                                      vector unsigned char);
22811     vector unsigned char vec_vminub (vector unsigned char,
22812                                      vector bool char);
22813     vector unsigned char vec_vminub (vector unsigned char,
22814                                      vector unsigned char);
22815
22816     vector signed short vec_mladd (vector signed short,
22817                                    vector signed short,
22818                                    vector signed short);
22819     vector signed short vec_mladd (vector signed short,
22820                                    vector unsigned short,
22821                                    vector unsigned short);
22822     vector signed short vec_mladd (vector unsigned short,
22823                                    vector signed short,
22824                                    vector signed short);
22825     vector unsigned short vec_mladd (vector unsigned short,
22826                                      vector unsigned short,
22827                                      vector unsigned short);
22828
22829     vector signed short vec_mradds (vector signed short,
22830                                     vector signed short,
22831                                     vector signed short);
22832
22833     vector unsigned int vec_msum (vector unsigned char,
22834                                   vector unsigned char,
22835                                   vector unsigned int);
22836     vector signed int vec_msum (vector signed char,
22837                                 vector unsigned char,
22838                                 vector signed int);
22839     vector unsigned int vec_msum (vector unsigned short,
22840                                   vector unsigned short,
22841                                   vector unsigned int);
22842     vector signed int vec_msum (vector signed short,
22843                                 vector signed short,
22844                                 vector signed int);
22845
22846     vector signed int vec_vmsumshm (vector signed short,
22847                                     vector signed short,
22848                                     vector signed int);
22849
22850     vector unsigned int vec_vmsumuhm (vector unsigned short,
22851                                       vector unsigned short,
22852                                       vector unsigned int);
22853
22854     vector signed int vec_vmsummbm (vector signed char,
22855                                     vector unsigned char,
22856                                     vector signed int);
22857
22858     vector unsigned int vec_vmsumubm (vector unsigned char,
22859                                       vector unsigned char,
22860                                       vector unsigned int);
22861
22862     vector unsigned int vec_msums (vector unsigned short,
22863                                    vector unsigned short,
22864                                    vector unsigned int);
22865     vector signed int vec_msums (vector signed short,
22866                                  vector signed short,
22867                                  vector signed int);
22868
22869     vector signed int vec_vmsumshs (vector signed short,
22870                                     vector signed short,
22871                                     vector signed int);
22872
22873     vector unsigned int vec_vmsumuhs (vector unsigned short,
22874                                       vector unsigned short,
22875                                       vector unsigned int);
22876
22877     void vec_mtvscr (vector signed int);
22878     void vec_mtvscr (vector unsigned int);
22879     void vec_mtvscr (vector bool int);
22880     void vec_mtvscr (vector signed short);
22881     void vec_mtvscr (vector unsigned short);
22882     void vec_mtvscr (vector bool short);
22883     void vec_mtvscr (vector pixel);
22884     void vec_mtvscr (vector signed char);
22885     void vec_mtvscr (vector unsigned char);
22886     void vec_mtvscr (vector bool char);
22887
22888     vector unsigned short vec_mule (vector unsigned char,
22889                                     vector unsigned char);
22890     vector signed short vec_mule (vector signed char,
22891                                   vector signed char);
22892     vector unsigned int vec_mule (vector unsigned short,
22893                                   vector unsigned short);
22894     vector signed int vec_mule (vector signed short, vector signed short);
22895
22896     vector signed int vec_vmulesh (vector signed short,
22897                                    vector signed short);
22898
22899     vector unsigned int vec_vmuleuh (vector unsigned short,
22900                                      vector unsigned short);
22901
22902     vector signed short vec_vmulesb (vector signed char,
22903                                      vector signed char);
22904
22905     vector unsigned short vec_vmuleub (vector unsigned char,
22906                                       vector unsigned char);
22907
22908     vector unsigned short vec_mulo (vector unsigned char,
22909                                     vector unsigned char);
22910     vector signed short vec_mulo (vector signed char, vector signed char);
22911     vector unsigned int vec_mulo (vector unsigned short,
22912                                   vector unsigned short);
22913     vector signed int vec_mulo (vector signed short, vector signed short);
22914
22915     vector signed int vec_vmulosh (vector signed short,
22916                                    vector signed short);
22917
22918     vector unsigned int vec_vmulouh (vector unsigned short,
22919                                      vector unsigned short);
22920
22921     vector signed short vec_vmulosb (vector signed char,
22922                                      vector signed char);
22923
22924     vector unsigned short vec_vmuloub (vector unsigned char,
22925                                        vector unsigned char);
22926
22927     vector float vec_nmsub (vector float, vector float, vector float);
22928
22929     vector float vec_nor (vector float, vector float);
22930     vector signed int vec_nor (vector signed int, vector signed int);
22931     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
22932     vector bool int vec_nor (vector bool int, vector bool int);
22933     vector signed short vec_nor (vector signed short, vector signed short);
22934     vector unsigned short vec_nor (vector unsigned short,
22935                                    vector unsigned short);
22936     vector bool short vec_nor (vector bool short, vector bool short);
22937     vector signed char vec_nor (vector signed char, vector signed char);
22938     vector unsigned char vec_nor (vector unsigned char,
22939                                   vector unsigned char);
22940     vector bool char vec_nor (vector bool char, vector bool char);
22941
22942     vector float vec_or (vector float, vector float);
22943     vector float vec_or (vector float, vector bool int);
22944     vector float vec_or (vector bool int, vector float);
22945     vector bool int vec_or (vector bool int, vector bool int);
22946     vector signed int vec_or (vector bool int, vector signed int);
22947     vector signed int vec_or (vector signed int, vector bool int);
22948     vector signed int vec_or (vector signed int, vector signed int);
22949     vector unsigned int vec_or (vector bool int, vector unsigned int);
22950     vector unsigned int vec_or (vector unsigned int, vector bool int);
22951     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
22952     vector bool short vec_or (vector bool short, vector bool short);
22953     vector signed short vec_or (vector bool short, vector signed short);
22954     vector signed short vec_or (vector signed short, vector bool short);
22955     vector signed short vec_or (vector signed short, vector signed short);
22956     vector unsigned short vec_or (vector bool short, vector unsigned short);
22957     vector unsigned short vec_or (vector unsigned short, vector bool short);
22958     vector unsigned short vec_or (vector unsigned short,
22959                                   vector unsigned short);
22960     vector signed char vec_or (vector bool char, vector signed char);
22961     vector bool char vec_or (vector bool char, vector bool char);
22962     vector signed char vec_or (vector signed char, vector bool char);
22963     vector signed char vec_or (vector signed char, vector signed char);
22964     vector unsigned char vec_or (vector bool char, vector unsigned char);
22965     vector unsigned char vec_or (vector unsigned char, vector bool char);
22966     vector unsigned char vec_or (vector unsigned char,
22967                                  vector unsigned char);
22968
22969     vector signed char vec_pack (vector signed short, vector signed short);
22970     vector unsigned char vec_pack (vector unsigned short,
22971                                    vector unsigned short);
22972     vector bool char vec_pack (vector bool short, vector bool short);
22973     vector signed short vec_pack (vector signed int, vector signed int);
22974     vector unsigned short vec_pack (vector unsigned int,
22975                                     vector unsigned int);
22976     vector bool short vec_pack (vector bool int, vector bool int);
22977
22978     vector bool short vec_vpkuwum (vector bool int, vector bool int);
22979     vector signed short vec_vpkuwum (vector signed int, vector signed int);
22980     vector unsigned short vec_vpkuwum (vector unsigned int,
22981                                        vector unsigned int);
22982
22983     vector bool char vec_vpkuhum (vector bool short, vector bool short);
22984     vector signed char vec_vpkuhum (vector signed short,
22985                                     vector signed short);
22986     vector unsigned char vec_vpkuhum (vector unsigned short,
22987                                       vector unsigned short);
22988
22989     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
22990
22991     vector unsigned char vec_packs (vector unsigned short,
22992                                     vector unsigned short);
22993     vector signed char vec_packs (vector signed short, vector signed short);
22994     vector unsigned short vec_packs (vector unsigned int,
22995                                      vector unsigned int);
22996     vector signed short vec_packs (vector signed int, vector signed int);
22997
22998     vector signed short vec_vpkswss (vector signed int, vector signed int);
22999
23000     vector unsigned short vec_vpkuwus (vector unsigned int,
23001                                        vector unsigned int);
23002
23003     vector signed char vec_vpkshss (vector signed short,
23004                                     vector signed short);
23005
23006     vector unsigned char vec_vpkuhus (vector unsigned short,
23007                                       vector unsigned short);
23008
23009     vector unsigned char vec_packsu (vector unsigned short,
23010                                      vector unsigned short);
23011     vector unsigned char vec_packsu (vector signed short,
23012                                      vector signed short);
23013     vector unsigned short vec_packsu (vector unsigned int,
23014                                       vector unsigned int);
23015     vector unsigned short vec_packsu (vector signed int, vector signed int);
23016
23017     vector unsigned short vec_vpkswus (vector signed int,
23018                                        vector signed int);
23019
23020     vector unsigned char vec_vpkshus (vector signed short,
23021                                       vector signed short);
23022
23023     vector float vec_perm (vector float,
23024                            vector float,
23025                            vector unsigned char);
23026     vector signed int vec_perm (vector signed int,
23027                                 vector signed int,
23028                                 vector unsigned char);
23029     vector unsigned int vec_perm (vector unsigned int,
23030                                   vector unsigned int,
23031                                   vector unsigned char);
23032     vector bool int vec_perm (vector bool int,
23033                               vector bool int,
23034                               vector unsigned char);
23035     vector signed short vec_perm (vector signed short,
23036                                   vector signed short,
23037                                   vector unsigned char);
23038     vector unsigned short vec_perm (vector unsigned short,
23039                                     vector unsigned short,
23040                                     vector unsigned char);
23041     vector bool short vec_perm (vector bool short,
23042                                 vector bool short,
23043                                 vector unsigned char);
23044     vector pixel vec_perm (vector pixel,
23045                            vector pixel,
23046                            vector unsigned char);
23047     vector signed char vec_perm (vector signed char,
23048                                  vector signed char,
23049                                  vector unsigned char);
23050     vector unsigned char vec_perm (vector unsigned char,
23051                                    vector unsigned char,
23052                                    vector unsigned char);
23053     vector bool char vec_perm (vector bool char,
23054                                vector bool char,
23055                                vector unsigned char);
23056
23057     vector float vec_re (vector float);
23058
23059     vector signed char vec_rl (vector signed char,
23060                                vector unsigned char);
23061     vector unsigned char vec_rl (vector unsigned char,
23062                                  vector unsigned char);
23063     vector signed short vec_rl (vector signed short, vector unsigned short);
23064     vector unsigned short vec_rl (vector unsigned short,
23065                                   vector unsigned short);
23066     vector signed int vec_rl (vector signed int, vector unsigned int);
23067     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
23068
23069     vector signed int vec_vrlw (vector signed int, vector unsigned int);
23070     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
23071
23072     vector signed short vec_vrlh (vector signed short,
23073                                   vector unsigned short);
23074     vector unsigned short vec_vrlh (vector unsigned short,
23075                                     vector unsigned short);
23076
23077     vector signed char vec_vrlb (vector signed char, vector unsigned char);
23078     vector unsigned char vec_vrlb (vector unsigned char,
23079                                    vector unsigned char);
23080
23081     vector float vec_round (vector float);
23082
23083     vector float vec_rsqrte (vector float);
23084
23085     vector float vec_sel (vector float, vector float, vector bool int);
23086     vector float vec_sel (vector float, vector float, vector unsigned int);
23087     vector signed int vec_sel (vector signed int,
23088                                vector signed int,
23089                                vector bool int);
23090     vector signed int vec_sel (vector signed int,
23091                                vector signed int,
23092                                vector unsigned int);
23093     vector unsigned int vec_sel (vector unsigned int,
23094                                  vector unsigned int,
23095                                  vector bool int);
23096     vector unsigned int vec_sel (vector unsigned int,
23097                                  vector unsigned int,
23098                                  vector unsigned int);
23099     vector bool int vec_sel (vector bool int,
23100                              vector bool int,
23101                              vector bool int);
23102     vector bool int vec_sel (vector bool int,
23103                              vector bool int,
23104                              vector unsigned int);
23105     vector signed short vec_sel (vector signed short,
23106                                  vector signed short,
23107                                  vector bool short);
23108     vector signed short vec_sel (vector signed short,
23109                                  vector signed short,
23110                                  vector unsigned short);
23111     vector unsigned short vec_sel (vector unsigned short,
23112                                    vector unsigned short,
23113                                    vector bool short);
23114     vector unsigned short vec_sel (vector unsigned short,
23115                                    vector unsigned short,
23116                                    vector unsigned short);
23117     vector bool short vec_sel (vector bool short,
23118                                vector bool short,
23119                                vector bool short);
23120     vector bool short vec_sel (vector bool short,
23121                                vector bool short,
23122                                vector unsigned short);
23123     vector signed char vec_sel (vector signed char,
23124                                 vector signed char,
23125                                 vector bool char);
23126     vector signed char vec_sel (vector signed char,
23127                                 vector signed char,
23128                                 vector unsigned char);
23129     vector unsigned char vec_sel (vector unsigned char,
23130                                   vector unsigned char,
23131                                   vector bool char);
23132     vector unsigned char vec_sel (vector unsigned char,
23133                                   vector unsigned char,
23134                                   vector unsigned char);
23135     vector bool char vec_sel (vector bool char,
23136                               vector bool char,
23137                               vector bool char);
23138     vector bool char vec_sel (vector bool char,
23139                               vector bool char,
23140                               vector unsigned char);
23141
23142     vector signed char vec_sl (vector signed char,
23143                                vector unsigned char);
23144     vector unsigned char vec_sl (vector unsigned char,
23145                                  vector unsigned char);
23146     vector signed short vec_sl (vector signed short, vector unsigned short);
23147     vector unsigned short vec_sl (vector unsigned short,
23148                                   vector unsigned short);
23149     vector signed int vec_sl (vector signed int, vector unsigned int);
23150     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
23151
23152     vector signed int vec_vslw (vector signed int, vector unsigned int);
23153     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
23154
23155     vector signed short vec_vslh (vector signed short,
23156                                   vector unsigned short);
23157     vector unsigned short vec_vslh (vector unsigned short,
23158                                     vector unsigned short);
23159
23160     vector signed char vec_vslb (vector signed char, vector unsigned char);
23161     vector unsigned char vec_vslb (vector unsigned char,
23162                                    vector unsigned char);
23163
23164     vector float vec_sld (vector float, vector float, const int);
23165     vector signed int vec_sld (vector signed int,
23166                                vector signed int,
23167                                const int);
23168     vector unsigned int vec_sld (vector unsigned int,
23169                                  vector unsigned int,
23170                                  const int);
23171     vector bool int vec_sld (vector bool int,
23172                              vector bool int,
23173                              const int);
23174     vector signed short vec_sld (vector signed short,
23175                                  vector signed short,
23176                                  const int);
23177     vector unsigned short vec_sld (vector unsigned short,
23178                                    vector unsigned short,
23179                                    const int);
23180     vector bool short vec_sld (vector bool short,
23181                                vector bool short,
23182                                const int);
23183     vector pixel vec_sld (vector pixel,
23184                           vector pixel,
23185                           const int);
23186     vector signed char vec_sld (vector signed char,
23187                                 vector signed char,
23188                                 const int);
23189     vector unsigned char vec_sld (vector unsigned char,
23190                                   vector unsigned char,
23191                                   const int);
23192     vector bool char vec_sld (vector bool char,
23193                               vector bool char,
23194                               const int);
23195
23196     vector signed int vec_sll (vector signed int,
23197                                vector unsigned int);
23198     vector signed int vec_sll (vector signed int,
23199                                vector unsigned short);
23200     vector signed int vec_sll (vector signed int,
23201                                vector unsigned char);
23202     vector unsigned int vec_sll (vector unsigned int,
23203                                  vector unsigned int);
23204     vector unsigned int vec_sll (vector unsigned int,
23205                                  vector unsigned short);
23206     vector unsigned int vec_sll (vector unsigned int,
23207                                  vector unsigned char);
23208     vector bool int vec_sll (vector bool int,
23209                              vector unsigned int);
23210     vector bool int vec_sll (vector bool int,
23211                              vector unsigned short);
23212     vector bool int vec_sll (vector bool int,
23213                              vector unsigned char);
23214     vector signed short vec_sll (vector signed short,
23215                                  vector unsigned int);
23216     vector signed short vec_sll (vector signed short,
23217                                  vector unsigned short);
23218     vector signed short vec_sll (vector signed short,
23219                                  vector unsigned char);
23220     vector unsigned short vec_sll (vector unsigned short,
23221                                    vector unsigned int);
23222     vector unsigned short vec_sll (vector unsigned short,
23223                                    vector unsigned short);
23224     vector unsigned short vec_sll (vector unsigned short,
23225                                    vector unsigned char);
23226     vector bool short vec_sll (vector bool short, vector unsigned int);
23227     vector bool short vec_sll (vector bool short, vector unsigned short);
23228     vector bool short vec_sll (vector bool short, vector unsigned char);
23229     vector pixel vec_sll (vector pixel, vector unsigned int);
23230     vector pixel vec_sll (vector pixel, vector unsigned short);
23231     vector pixel vec_sll (vector pixel, vector unsigned char);
23232     vector signed char vec_sll (vector signed char, vector unsigned int);
23233     vector signed char vec_sll (vector signed char, vector unsigned short);
23234     vector signed char vec_sll (vector signed char, vector unsigned char);
23235     vector unsigned char vec_sll (vector unsigned char,
23236                                   vector unsigned int);
23237     vector unsigned char vec_sll (vector unsigned char,
23238                                   vector unsigned short);
23239     vector unsigned char vec_sll (vector unsigned char,
23240                                   vector unsigned char);
23241     vector bool char vec_sll (vector bool char, vector unsigned int);
23242     vector bool char vec_sll (vector bool char, vector unsigned short);
23243     vector bool char vec_sll (vector bool char, vector unsigned char);
23244
23245     vector float vec_slo (vector float, vector signed char);
23246     vector float vec_slo (vector float, vector unsigned char);
23247     vector signed int vec_slo (vector signed int, vector signed char);
23248     vector signed int vec_slo (vector signed int, vector unsigned char);
23249     vector unsigned int vec_slo (vector unsigned int, vector signed char);
23250     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
23251     vector signed short vec_slo (vector signed short, vector signed char);
23252     vector signed short vec_slo (vector signed short, vector unsigned char);
23253     vector unsigned short vec_slo (vector unsigned short,
23254                                    vector signed char);
23255     vector unsigned short vec_slo (vector unsigned short,
23256                                    vector unsigned char);
23257     vector pixel vec_slo (vector pixel, vector signed char);
23258     vector pixel vec_slo (vector pixel, vector unsigned char);
23259     vector signed char vec_slo (vector signed char, vector signed char);
23260     vector signed char vec_slo (vector signed char, vector unsigned char);
23261     vector unsigned char vec_slo (vector unsigned char, vector signed char);
23262     vector unsigned char vec_slo (vector unsigned char,
23263                                   vector unsigned char);
23264
23265     vector signed char vec_splat (vector signed char, const int);
23266     vector unsigned char vec_splat (vector unsigned char, const int);
23267     vector bool char vec_splat (vector bool char, const int);
23268     vector signed short vec_splat (vector signed short, const int);
23269     vector unsigned short vec_splat (vector unsigned short, const int);
23270     vector bool short vec_splat (vector bool short, const int);
23271     vector pixel vec_splat (vector pixel, const int);
23272     vector float vec_splat (vector float, const int);
23273     vector signed int vec_splat (vector signed int, const int);
23274     vector unsigned int vec_splat (vector unsigned int, const int);
23275     vector bool int vec_splat (vector bool int, const int);
23276
23277     vector float vec_vspltw (vector float, const int);
23278     vector signed int vec_vspltw (vector signed int, const int);
23279     vector unsigned int vec_vspltw (vector unsigned int, const int);
23280     vector bool int vec_vspltw (vector bool int, const int);
23281
23282     vector bool short vec_vsplth (vector bool short, const int);
23283     vector signed short vec_vsplth (vector signed short, const int);
23284     vector unsigned short vec_vsplth (vector unsigned short, const int);
23285     vector pixel vec_vsplth (vector pixel, const int);
23286
23287     vector signed char vec_vspltb (vector signed char, const int);
23288     vector unsigned char vec_vspltb (vector unsigned char, const int);
23289     vector bool char vec_vspltb (vector bool char, const int);
23290
23291     vector signed char vec_splat_s8 (const int);
23292
23293     vector signed short vec_splat_s16 (const int);
23294
23295     vector signed int vec_splat_s32 (const int);
23296
23297     vector unsigned char vec_splat_u8 (const int);
23298
23299     vector unsigned short vec_splat_u16 (const int);
23300
23301     vector unsigned int vec_splat_u32 (const int);
23302
23303     vector signed char vec_sr (vector signed char, vector unsigned char);
23304     vector unsigned char vec_sr (vector unsigned char,
23305                                  vector unsigned char);
23306     vector signed short vec_sr (vector signed short,
23307                                 vector unsigned short);
23308     vector unsigned short vec_sr (vector unsigned short,
23309                                   vector unsigned short);
23310     vector signed int vec_sr (vector signed int, vector unsigned int);
23311     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
23312
23313     vector signed int vec_vsrw (vector signed int, vector unsigned int);
23314     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
23315
23316     vector signed short vec_vsrh (vector signed short,
23317                                   vector unsigned short);
23318     vector unsigned short vec_vsrh (vector unsigned short,
23319                                     vector unsigned short);
23320
23321     vector signed char vec_vsrb (vector signed char, vector unsigned char);
23322     vector unsigned char vec_vsrb (vector unsigned char,
23323                                    vector unsigned char);
23324
23325     vector signed char vec_sra (vector signed char, vector unsigned char);
23326     vector unsigned char vec_sra (vector unsigned char,
23327                                   vector unsigned char);
23328     vector signed short vec_sra (vector signed short,
23329                                  vector unsigned short);
23330     vector unsigned short vec_sra (vector unsigned short,
23331                                    vector unsigned short);
23332     vector signed int vec_sra (vector signed int, vector unsigned int);
23333     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
23334
23335     vector signed int vec_vsraw (vector signed int, vector unsigned int);
23336     vector unsigned int vec_vsraw (vector unsigned int,
23337                                    vector unsigned int);
23338
23339     vector signed short vec_vsrah (vector signed short,
23340                                    vector unsigned short);
23341     vector unsigned short vec_vsrah (vector unsigned short,
23342                                      vector unsigned short);
23343
23344     vector signed char vec_vsrab (vector signed char, vector unsigned char);
23345     vector unsigned char vec_vsrab (vector unsigned char,
23346                                     vector unsigned char);
23347
23348     vector signed int vec_srl (vector signed int, vector unsigned int);
23349     vector signed int vec_srl (vector signed int, vector unsigned short);
23350     vector signed int vec_srl (vector signed int, vector unsigned char);
23351     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
23352     vector unsigned int vec_srl (vector unsigned int,
23353                                  vector unsigned short);
23354     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
23355     vector bool int vec_srl (vector bool int, vector unsigned int);
23356     vector bool int vec_srl (vector bool int, vector unsigned short);
23357     vector bool int vec_srl (vector bool int, vector unsigned char);
23358     vector signed short vec_srl (vector signed short, vector unsigned int);
23359     vector signed short vec_srl (vector signed short,
23360                                  vector unsigned short);
23361     vector signed short vec_srl (vector signed short, vector unsigned char);
23362     vector unsigned short vec_srl (vector unsigned short,
23363                                    vector unsigned int);
23364     vector unsigned short vec_srl (vector unsigned short,
23365                                    vector unsigned short);
23366     vector unsigned short vec_srl (vector unsigned short,
23367                                    vector unsigned char);
23368     vector bool short vec_srl (vector bool short, vector unsigned int);
23369     vector bool short vec_srl (vector bool short, vector unsigned short);
23370     vector bool short vec_srl (vector bool short, vector unsigned char);
23371     vector pixel vec_srl (vector pixel, vector unsigned int);
23372     vector pixel vec_srl (vector pixel, vector unsigned short);
23373     vector pixel vec_srl (vector pixel, vector unsigned char);
23374     vector signed char vec_srl (vector signed char, vector unsigned int);
23375     vector signed char vec_srl (vector signed char, vector unsigned short);
23376     vector signed char vec_srl (vector signed char, vector unsigned char);
23377     vector unsigned char vec_srl (vector unsigned char,
23378                                   vector unsigned int);
23379     vector unsigned char vec_srl (vector unsigned char,
23380                                   vector unsigned short);
23381     vector unsigned char vec_srl (vector unsigned char,
23382                                   vector unsigned char);
23383     vector bool char vec_srl (vector bool char, vector unsigned int);
23384     vector bool char vec_srl (vector bool char, vector unsigned short);
23385     vector bool char vec_srl (vector bool char, vector unsigned char);
23386
23387     vector float vec_sro (vector float, vector signed char);
23388     vector float vec_sro (vector float, vector unsigned char);
23389     vector signed int vec_sro (vector signed int, vector signed char);
23390     vector signed int vec_sro (vector signed int, vector unsigned char);
23391     vector unsigned int vec_sro (vector unsigned int, vector signed char);
23392     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
23393     vector signed short vec_sro (vector signed short, vector signed char);
23394     vector signed short vec_sro (vector signed short, vector unsigned char);
23395     vector unsigned short vec_sro (vector unsigned short,
23396                                    vector signed char);
23397     vector unsigned short vec_sro (vector unsigned short,
23398                                    vector unsigned char);
23399     vector pixel vec_sro (vector pixel, vector signed char);
23400     vector pixel vec_sro (vector pixel, vector unsigned char);
23401     vector signed char vec_sro (vector signed char, vector signed char);
23402     vector signed char vec_sro (vector signed char, vector unsigned char);
23403     vector unsigned char vec_sro (vector unsigned char, vector signed char);
23404     vector unsigned char vec_sro (vector unsigned char,
23405                                   vector unsigned char);
23406
23407     void vec_st (vector float, int, vector float *);
23408     void vec_st (vector float, int, float *);
23409     void vec_st (vector signed int, int, vector signed int *);
23410     void vec_st (vector signed int, int, int *);
23411     void vec_st (vector unsigned int, int, vector unsigned int *);
23412     void vec_st (vector unsigned int, int, unsigned int *);
23413     void vec_st (vector bool int, int, vector bool int *);
23414     void vec_st (vector bool int, int, unsigned int *);
23415     void vec_st (vector bool int, int, int *);
23416     void vec_st (vector signed short, int, vector signed short *);
23417     void vec_st (vector signed short, int, short *);
23418     void vec_st (vector unsigned short, int, vector unsigned short *);
23419     void vec_st (vector unsigned short, int, unsigned short *);
23420     void vec_st (vector bool short, int, vector bool short *);
23421     void vec_st (vector bool short, int, unsigned short *);
23422     void vec_st (vector pixel, int, vector pixel *);
23423     void vec_st (vector pixel, int, unsigned short *);
23424     void vec_st (vector pixel, int, short *);
23425     void vec_st (vector bool short, int, short *);
23426     void vec_st (vector signed char, int, vector signed char *);
23427     void vec_st (vector signed char, int, signed char *);
23428     void vec_st (vector unsigned char, int, vector unsigned char *);
23429     void vec_st (vector unsigned char, int, unsigned char *);
23430     void vec_st (vector bool char, int, vector bool char *);
23431     void vec_st (vector bool char, int, unsigned char *);
23432     void vec_st (vector bool char, int, signed char *);
23433
23434     void vec_ste (vector signed char, int, signed char *);
23435     void vec_ste (vector unsigned char, int, unsigned char *);
23436     void vec_ste (vector bool char, int, signed char *);
23437     void vec_ste (vector bool char, int, unsigned char *);
23438     void vec_ste (vector signed short, int, short *);
23439     void vec_ste (vector unsigned short, int, unsigned short *);
23440     void vec_ste (vector bool short, int, short *);
23441     void vec_ste (vector bool short, int, unsigned short *);
23442     void vec_ste (vector pixel, int, short *);
23443     void vec_ste (vector pixel, int, unsigned short *);
23444     void vec_ste (vector float, int, float *);
23445     void vec_ste (vector signed int, int, int *);
23446     void vec_ste (vector unsigned int, int, unsigned int *);
23447     void vec_ste (vector bool int, int, int *);
23448     void vec_ste (vector bool int, int, unsigned int *);
23449
23450     void vec_stvewx (vector float, int, float *);
23451     void vec_stvewx (vector signed int, int, int *);
23452     void vec_stvewx (vector unsigned int, int, unsigned int *);
23453     void vec_stvewx (vector bool int, int, int *);
23454     void vec_stvewx (vector bool int, int, unsigned int *);
23455
23456     void vec_stvehx (vector signed short, int, short *);
23457     void vec_stvehx (vector unsigned short, int, unsigned short *);
23458     void vec_stvehx (vector bool short, int, short *);
23459     void vec_stvehx (vector bool short, int, unsigned short *);
23460     void vec_stvehx (vector pixel, int, short *);
23461     void vec_stvehx (vector pixel, int, unsigned short *);
23462
23463     void vec_stvebx (vector signed char, int, signed char *);
23464     void vec_stvebx (vector unsigned char, int, unsigned char *);
23465     void vec_stvebx (vector bool char, int, signed char *);
23466     void vec_stvebx (vector bool char, int, unsigned char *);
23467
23468     void vec_stl (vector float, int, vector float *);
23469     void vec_stl (vector float, int, float *);
23470     void vec_stl (vector signed int, int, vector signed int *);
23471     void vec_stl (vector signed int, int, int *);
23472     void vec_stl (vector unsigned int, int, vector unsigned int *);
23473     void vec_stl (vector unsigned int, int, unsigned int *);
23474     void vec_stl (vector bool int, int, vector bool int *);
23475     void vec_stl (vector bool int, int, unsigned int *);
23476     void vec_stl (vector bool int, int, int *);
23477     void vec_stl (vector signed short, int, vector signed short *);
23478     void vec_stl (vector signed short, int, short *);
23479     void vec_stl (vector unsigned short, int, vector unsigned short *);
23480     void vec_stl (vector unsigned short, int, unsigned short *);
23481     void vec_stl (vector bool short, int, vector bool short *);
23482     void vec_stl (vector bool short, int, unsigned short *);
23483     void vec_stl (vector bool short, int, short *);
23484     void vec_stl (vector pixel, int, vector pixel *);
23485     void vec_stl (vector pixel, int, unsigned short *);
23486     void vec_stl (vector pixel, int, short *);
23487     void vec_stl (vector signed char, int, vector signed char *);
23488     void vec_stl (vector signed char, int, signed char *);
23489     void vec_stl (vector unsigned char, int, vector unsigned char *);
23490     void vec_stl (vector unsigned char, int, unsigned char *);
23491     void vec_stl (vector bool char, int, vector bool char *);
23492     void vec_stl (vector bool char, int, unsigned char *);
23493     void vec_stl (vector bool char, int, signed char *);
23494
23495     vector signed char vec_sub (vector bool char, vector signed char);
23496     vector signed char vec_sub (vector signed char, vector bool char);
23497     vector signed char vec_sub (vector signed char, vector signed char);
23498     vector unsigned char vec_sub (vector bool char, vector unsigned char);
23499     vector unsigned char vec_sub (vector unsigned char, vector bool char);
23500     vector unsigned char vec_sub (vector unsigned char,
23501                                   vector unsigned char);
23502     vector signed short vec_sub (vector bool short, vector signed short);
23503     vector signed short vec_sub (vector signed short, vector bool short);
23504     vector signed short vec_sub (vector signed short, vector signed short);
23505     vector unsigned short vec_sub (vector bool short,
23506                                    vector unsigned short);
23507     vector unsigned short vec_sub (vector unsigned short,
23508                                    vector bool short);
23509     vector unsigned short vec_sub (vector unsigned short,
23510                                    vector unsigned short);
23511     vector signed int vec_sub (vector bool int, vector signed int);
23512     vector signed int vec_sub (vector signed int, vector bool int);
23513     vector signed int vec_sub (vector signed int, vector signed int);
23514     vector unsigned int vec_sub (vector bool int, vector unsigned int);
23515     vector unsigned int vec_sub (vector unsigned int, vector bool int);
23516     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
23517     vector float vec_sub (vector float, vector float);
23518
23519     vector float vec_vsubfp (vector float, vector float);
23520
23521     vector signed int vec_vsubuwm (vector bool int, vector signed int);
23522     vector signed int vec_vsubuwm (vector signed int, vector bool int);
23523     vector signed int vec_vsubuwm (vector signed int, vector signed int);
23524     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
23525     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
23526     vector unsigned int vec_vsubuwm (vector unsigned int,
23527                                      vector unsigned int);
23528
23529     vector signed short vec_vsubuhm (vector bool short,
23530                                      vector signed short);
23531     vector signed short vec_vsubuhm (vector signed short,
23532                                      vector bool short);
23533     vector signed short vec_vsubuhm (vector signed short,
23534                                      vector signed short);
23535     vector unsigned short vec_vsubuhm (vector bool short,
23536                                        vector unsigned short);
23537     vector unsigned short vec_vsubuhm (vector unsigned short,
23538                                        vector bool short);
23539     vector unsigned short vec_vsubuhm (vector unsigned short,
23540                                        vector unsigned short);
23541
23542     vector signed char vec_vsububm (vector bool char, vector signed char);
23543     vector signed char vec_vsububm (vector signed char, vector bool char);
23544     vector signed char vec_vsububm (vector signed char, vector signed char);
23545     vector unsigned char vec_vsububm (vector bool char,
23546                                       vector unsigned char);
23547     vector unsigned char vec_vsububm (vector unsigned char,
23548                                       vector bool char);
23549     vector unsigned char vec_vsububm (vector unsigned char,
23550                                       vector unsigned char);
23551
23552     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
23553
23554     vector unsigned char vec_subs (vector bool char, vector unsigned char);
23555     vector unsigned char vec_subs (vector unsigned char, vector bool char);
23556     vector unsigned char vec_subs (vector unsigned char,
23557                                    vector unsigned char);
23558     vector signed char vec_subs (vector bool char, vector signed char);
23559     vector signed char vec_subs (vector signed char, vector bool char);
23560     vector signed char vec_subs (vector signed char, vector signed char);
23561     vector unsigned short vec_subs (vector bool short,
23562                                     vector unsigned short);
23563     vector unsigned short vec_subs (vector unsigned short,
23564                                     vector bool short);
23565     vector unsigned short vec_subs (vector unsigned short,
23566                                     vector unsigned short);
23567     vector signed short vec_subs (vector bool short, vector signed short);
23568     vector signed short vec_subs (vector signed short, vector bool short);
23569     vector signed short vec_subs (vector signed short, vector signed short);
23570     vector unsigned int vec_subs (vector bool int, vector unsigned int);
23571     vector unsigned int vec_subs (vector unsigned int, vector bool int);
23572     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
23573     vector signed int vec_subs (vector bool int, vector signed int);
23574     vector signed int vec_subs (vector signed int, vector bool int);
23575     vector signed int vec_subs (vector signed int, vector signed int);
23576
23577     vector signed int vec_vsubsws (vector bool int, vector signed int);
23578     vector signed int vec_vsubsws (vector signed int, vector bool int);
23579     vector signed int vec_vsubsws (vector signed int, vector signed int);
23580
23581     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
23582     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
23583     vector unsigned int vec_vsubuws (vector unsigned int,
23584                                      vector unsigned int);
23585
23586     vector signed short vec_vsubshs (vector bool short,
23587                                      vector signed short);
23588     vector signed short vec_vsubshs (vector signed short,
23589                                      vector bool short);
23590     vector signed short vec_vsubshs (vector signed short,
23591                                      vector signed short);
23592
23593     vector unsigned short vec_vsubuhs (vector bool short,
23594                                        vector unsigned short);
23595     vector unsigned short vec_vsubuhs (vector unsigned short,
23596                                        vector bool short);
23597     vector unsigned short vec_vsubuhs (vector unsigned short,
23598                                        vector unsigned short);
23599
23600     vector signed char vec_vsubsbs (vector bool char, vector signed char);
23601     vector signed char vec_vsubsbs (vector signed char, vector bool char);
23602     vector signed char vec_vsubsbs (vector signed char, vector signed char);
23603
23604     vector unsigned char vec_vsububs (vector bool char,
23605                                       vector unsigned char);
23606     vector unsigned char vec_vsububs (vector unsigned char,
23607                                       vector bool char);
23608     vector unsigned char vec_vsububs (vector unsigned char,
23609                                       vector unsigned char);
23610
23611     vector unsigned int vec_sum4s (vector unsigned char,
23612                                    vector unsigned int);
23613     vector signed int vec_sum4s (vector signed char, vector signed int);
23614     vector signed int vec_sum4s (vector signed short, vector signed int);
23615
23616     vector signed int vec_vsum4shs (vector signed short, vector signed int);
23617
23618     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
23619
23620     vector unsigned int vec_vsum4ubs (vector unsigned char,
23621                                       vector unsigned int);
23622
23623     vector signed int vec_sum2s (vector signed int, vector signed int);
23624
23625     vector signed int vec_sums (vector signed int, vector signed int);
23626
23627     vector float vec_trunc (vector float);
23628
23629     vector signed short vec_unpackh (vector signed char);
23630     vector bool short vec_unpackh (vector bool char);
23631     vector signed int vec_unpackh (vector signed short);
23632     vector bool int vec_unpackh (vector bool short);
23633     vector unsigned int vec_unpackh (vector pixel);
23634
23635     vector bool int vec_vupkhsh (vector bool short);
23636     vector signed int vec_vupkhsh (vector signed short);
23637
23638     vector unsigned int vec_vupkhpx (vector pixel);
23639
23640     vector bool short vec_vupkhsb (vector bool char);
23641     vector signed short vec_vupkhsb (vector signed char);
23642
23643     vector signed short vec_unpackl (vector signed char);
23644     vector bool short vec_unpackl (vector bool char);
23645     vector unsigned int vec_unpackl (vector pixel);
23646     vector signed int vec_unpackl (vector signed short);
23647     vector bool int vec_unpackl (vector bool short);
23648
23649     vector unsigned int vec_vupklpx (vector pixel);
23650
23651     vector bool int vec_vupklsh (vector bool short);
23652     vector signed int vec_vupklsh (vector signed short);
23653
23654     vector bool short vec_vupklsb (vector bool char);
23655     vector signed short vec_vupklsb (vector signed char);
23656
23657     vector float vec_xor (vector float, vector float);
23658     vector float vec_xor (vector float, vector bool int);
23659     vector float vec_xor (vector bool int, vector float);
23660     vector bool int vec_xor (vector bool int, vector bool int);
23661     vector signed int vec_xor (vector bool int, vector signed int);
23662     vector signed int vec_xor (vector signed int, vector bool int);
23663     vector signed int vec_xor (vector signed int, vector signed int);
23664     vector unsigned int vec_xor (vector bool int, vector unsigned int);
23665     vector unsigned int vec_xor (vector unsigned int, vector bool int);
23666     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
23667     vector bool short vec_xor (vector bool short, vector bool short);
23668     vector signed short vec_xor (vector bool short, vector signed short);
23669     vector signed short vec_xor (vector signed short, vector bool short);
23670     vector signed short vec_xor (vector signed short, vector signed short);
23671     vector unsigned short vec_xor (vector bool short,
23672                                    vector unsigned short);
23673     vector unsigned short vec_xor (vector unsigned short,
23674                                    vector bool short);
23675     vector unsigned short vec_xor (vector unsigned short,
23676                                    vector unsigned short);
23677     vector signed char vec_xor (vector bool char, vector signed char);
23678     vector bool char vec_xor (vector bool char, vector bool char);
23679     vector signed char vec_xor (vector signed char, vector bool char);
23680     vector signed char vec_xor (vector signed char, vector signed char);
23681     vector unsigned char vec_xor (vector bool char, vector unsigned char);
23682     vector unsigned char vec_xor (vector unsigned char, vector bool char);
23683     vector unsigned char vec_xor (vector unsigned char,
23684                                   vector unsigned char);
23685
23686     int vec_all_eq (vector signed char, vector bool char);
23687     int vec_all_eq (vector signed char, vector signed char);
23688     int vec_all_eq (vector unsigned char, vector bool char);
23689     int vec_all_eq (vector unsigned char, vector unsigned char);
23690     int vec_all_eq (vector bool char, vector bool char);
23691     int vec_all_eq (vector bool char, vector unsigned char);
23692     int vec_all_eq (vector bool char, vector signed char);
23693     int vec_all_eq (vector signed short, vector bool short);
23694     int vec_all_eq (vector signed short, vector signed short);
23695     int vec_all_eq (vector unsigned short, vector bool short);
23696     int vec_all_eq (vector unsigned short, vector unsigned short);
23697     int vec_all_eq (vector bool short, vector bool short);
23698     int vec_all_eq (vector bool short, vector unsigned short);
23699     int vec_all_eq (vector bool short, vector signed short);
23700     int vec_all_eq (vector pixel, vector pixel);
23701     int vec_all_eq (vector signed int, vector bool int);
23702     int vec_all_eq (vector signed int, vector signed int);
23703     int vec_all_eq (vector unsigned int, vector bool int);
23704     int vec_all_eq (vector unsigned int, vector unsigned int);
23705     int vec_all_eq (vector bool int, vector bool int);
23706     int vec_all_eq (vector bool int, vector unsigned int);
23707     int vec_all_eq (vector bool int, vector signed int);
23708     int vec_all_eq (vector float, vector float);
23709
23710     int vec_all_ge (vector bool char, vector unsigned char);
23711     int vec_all_ge (vector unsigned char, vector bool char);
23712     int vec_all_ge (vector unsigned char, vector unsigned char);
23713     int vec_all_ge (vector bool char, vector signed char);
23714     int vec_all_ge (vector signed char, vector bool char);
23715     int vec_all_ge (vector signed char, vector signed char);
23716     int vec_all_ge (vector bool short, vector unsigned short);
23717     int vec_all_ge (vector unsigned short, vector bool short);
23718     int vec_all_ge (vector unsigned short, vector unsigned short);
23719     int vec_all_ge (vector signed short, vector signed short);
23720     int vec_all_ge (vector bool short, vector signed short);
23721     int vec_all_ge (vector signed short, vector bool short);
23722     int vec_all_ge (vector bool int, vector unsigned int);
23723     int vec_all_ge (vector unsigned int, vector bool int);
23724     int vec_all_ge (vector unsigned int, vector unsigned int);
23725     int vec_all_ge (vector bool int, vector signed int);
23726     int vec_all_ge (vector signed int, vector bool int);
23727     int vec_all_ge (vector signed int, vector signed int);
23728     int vec_all_ge (vector float, vector float);
23729
23730     int vec_all_gt (vector bool char, vector unsigned char);
23731     int vec_all_gt (vector unsigned char, vector bool char);
23732     int vec_all_gt (vector unsigned char, vector unsigned char);
23733     int vec_all_gt (vector bool char, vector signed char);
23734     int vec_all_gt (vector signed char, vector bool char);
23735     int vec_all_gt (vector signed char, vector signed char);
23736     int vec_all_gt (vector bool short, vector unsigned short);
23737     int vec_all_gt (vector unsigned short, vector bool short);
23738     int vec_all_gt (vector unsigned short, vector unsigned short);
23739     int vec_all_gt (vector bool short, vector signed short);
23740     int vec_all_gt (vector signed short, vector bool short);
23741     int vec_all_gt (vector signed short, vector signed short);
23742     int vec_all_gt (vector bool int, vector unsigned int);
23743     int vec_all_gt (vector unsigned int, vector bool int);
23744     int vec_all_gt (vector unsigned int, vector unsigned int);
23745     int vec_all_gt (vector bool int, vector signed int);
23746     int vec_all_gt (vector signed int, vector bool int);
23747     int vec_all_gt (vector signed int, vector signed int);
23748     int vec_all_gt (vector float, vector float);
23749
23750     int vec_all_in (vector float, vector float);
23751
23752     int vec_all_le (vector bool char, vector unsigned char);
23753     int vec_all_le (vector unsigned char, vector bool char);
23754     int vec_all_le (vector unsigned char, vector unsigned char);
23755     int vec_all_le (vector bool char, vector signed char);
23756     int vec_all_le (vector signed char, vector bool char);
23757     int vec_all_le (vector signed char, vector signed char);
23758     int vec_all_le (vector bool short, vector unsigned short);
23759     int vec_all_le (vector unsigned short, vector bool short);
23760     int vec_all_le (vector unsigned short, vector unsigned short);
23761     int vec_all_le (vector bool short, vector signed short);
23762     int vec_all_le (vector signed short, vector bool short);
23763     int vec_all_le (vector signed short, vector signed short);
23764     int vec_all_le (vector bool int, vector unsigned int);
23765     int vec_all_le (vector unsigned int, vector bool int);
23766     int vec_all_le (vector unsigned int, vector unsigned int);
23767     int vec_all_le (vector bool int, vector signed int);
23768     int vec_all_le (vector signed int, vector bool int);
23769     int vec_all_le (vector signed int, vector signed int);
23770     int vec_all_le (vector float, vector float);
23771
23772     int vec_all_lt (vector bool char, vector unsigned char);
23773     int vec_all_lt (vector unsigned char, vector bool char);
23774     int vec_all_lt (vector unsigned char, vector unsigned char);
23775     int vec_all_lt (vector bool char, vector signed char);
23776     int vec_all_lt (vector signed char, vector bool char);
23777     int vec_all_lt (vector signed char, vector signed char);
23778     int vec_all_lt (vector bool short, vector unsigned short);
23779     int vec_all_lt (vector unsigned short, vector bool short);
23780     int vec_all_lt (vector unsigned short, vector unsigned short);
23781     int vec_all_lt (vector bool short, vector signed short);
23782     int vec_all_lt (vector signed short, vector bool short);
23783     int vec_all_lt (vector signed short, vector signed short);
23784     int vec_all_lt (vector bool int, vector unsigned int);
23785     int vec_all_lt (vector unsigned int, vector bool int);
23786     int vec_all_lt (vector unsigned int, vector unsigned int);
23787     int vec_all_lt (vector bool int, vector signed int);
23788     int vec_all_lt (vector signed int, vector bool int);
23789     int vec_all_lt (vector signed int, vector signed int);
23790     int vec_all_lt (vector float, vector float);
23791
23792     int vec_all_nan (vector float);
23793
23794     int vec_all_ne (vector signed char, vector bool char);
23795     int vec_all_ne (vector signed char, vector signed char);
23796     int vec_all_ne (vector unsigned char, vector bool char);
23797     int vec_all_ne (vector unsigned char, vector unsigned char);
23798     int vec_all_ne (vector bool char, vector bool char);
23799     int vec_all_ne (vector bool char, vector unsigned char);
23800     int vec_all_ne (vector bool char, vector signed char);
23801     int vec_all_ne (vector signed short, vector bool short);
23802     int vec_all_ne (vector signed short, vector signed short);
23803     int vec_all_ne (vector unsigned short, vector bool short);
23804     int vec_all_ne (vector unsigned short, vector unsigned short);
23805     int vec_all_ne (vector bool short, vector bool short);
23806     int vec_all_ne (vector bool short, vector unsigned short);
23807     int vec_all_ne (vector bool short, vector signed short);
23808     int vec_all_ne (vector pixel, vector pixel);
23809     int vec_all_ne (vector signed int, vector bool int);
23810     int vec_all_ne (vector signed int, vector signed int);
23811     int vec_all_ne (vector unsigned int, vector bool int);
23812     int vec_all_ne (vector unsigned int, vector unsigned int);
23813     int vec_all_ne (vector bool int, vector bool int);
23814     int vec_all_ne (vector bool int, vector unsigned int);
23815     int vec_all_ne (vector bool int, vector signed int);
23816     int vec_all_ne (vector float, vector float);
23817
23818     int vec_all_nge (vector float, vector float);
23819
23820     int vec_all_ngt (vector float, vector float);
23821
23822     int vec_all_nle (vector float, vector float);
23823
23824     int vec_all_nlt (vector float, vector float);
23825
23826     int vec_all_numeric (vector float);
23827
23828     int vec_any_eq (vector signed char, vector bool char);
23829     int vec_any_eq (vector signed char, vector signed char);
23830     int vec_any_eq (vector unsigned char, vector bool char);
23831     int vec_any_eq (vector unsigned char, vector unsigned char);
23832     int vec_any_eq (vector bool char, vector bool char);
23833     int vec_any_eq (vector bool char, vector unsigned char);
23834     int vec_any_eq (vector bool char, vector signed char);
23835     int vec_any_eq (vector signed short, vector bool short);
23836     int vec_any_eq (vector signed short, vector signed short);
23837     int vec_any_eq (vector unsigned short, vector bool short);
23838     int vec_any_eq (vector unsigned short, vector unsigned short);
23839     int vec_any_eq (vector bool short, vector bool short);
23840     int vec_any_eq (vector bool short, vector unsigned short);
23841     int vec_any_eq (vector bool short, vector signed short);
23842     int vec_any_eq (vector pixel, vector pixel);
23843     int vec_any_eq (vector signed int, vector bool int);
23844     int vec_any_eq (vector signed int, vector signed int);
23845     int vec_any_eq (vector unsigned int, vector bool int);
23846     int vec_any_eq (vector unsigned int, vector unsigned int);
23847     int vec_any_eq (vector bool int, vector bool int);
23848     int vec_any_eq (vector bool int, vector unsigned int);
23849     int vec_any_eq (vector bool int, vector signed int);
23850     int vec_any_eq (vector float, vector float);
23851
23852     int vec_any_ge (vector signed char, vector bool char);
23853     int vec_any_ge (vector unsigned char, vector bool char);
23854     int vec_any_ge (vector unsigned char, vector unsigned char);
23855     int vec_any_ge (vector signed char, vector signed char);
23856     int vec_any_ge (vector bool char, vector unsigned char);
23857     int vec_any_ge (vector bool char, vector signed char);
23858     int vec_any_ge (vector unsigned short, vector bool short);
23859     int vec_any_ge (vector unsigned short, vector unsigned short);
23860     int vec_any_ge (vector signed short, vector signed short);
23861     int vec_any_ge (vector signed short, vector bool short);
23862     int vec_any_ge (vector bool short, vector unsigned short);
23863     int vec_any_ge (vector bool short, vector signed short);
23864     int vec_any_ge (vector signed int, vector bool int);
23865     int vec_any_ge (vector unsigned int, vector bool int);
23866     int vec_any_ge (vector unsigned int, vector unsigned int);
23867     int vec_any_ge (vector signed int, vector signed int);
23868     int vec_any_ge (vector bool int, vector unsigned int);
23869     int vec_any_ge (vector bool int, vector signed int);
23870     int vec_any_ge (vector float, vector float);
23871
23872     int vec_any_gt (vector bool char, vector unsigned char);
23873     int vec_any_gt (vector unsigned char, vector bool char);
23874     int vec_any_gt (vector unsigned char, vector unsigned char);
23875     int vec_any_gt (vector bool char, vector signed char);
23876     int vec_any_gt (vector signed char, vector bool char);
23877     int vec_any_gt (vector signed char, vector signed char);
23878     int vec_any_gt (vector bool short, vector unsigned short);
23879     int vec_any_gt (vector unsigned short, vector bool short);
23880     int vec_any_gt (vector unsigned short, vector unsigned short);
23881     int vec_any_gt (vector bool short, vector signed short);
23882     int vec_any_gt (vector signed short, vector bool short);
23883     int vec_any_gt (vector signed short, vector signed short);
23884     int vec_any_gt (vector bool int, vector unsigned int);
23885     int vec_any_gt (vector unsigned int, vector bool int);
23886     int vec_any_gt (vector unsigned int, vector unsigned int);
23887     int vec_any_gt (vector bool int, vector signed int);
23888     int vec_any_gt (vector signed int, vector bool int);
23889     int vec_any_gt (vector signed int, vector signed int);
23890     int vec_any_gt (vector float, vector float);
23891
23892     int vec_any_le (vector bool char, vector unsigned char);
23893     int vec_any_le (vector unsigned char, vector bool char);
23894     int vec_any_le (vector unsigned char, vector unsigned char);
23895     int vec_any_le (vector bool char, vector signed char);
23896     int vec_any_le (vector signed char, vector bool char);
23897     int vec_any_le (vector signed char, vector signed char);
23898     int vec_any_le (vector bool short, vector unsigned short);
23899     int vec_any_le (vector unsigned short, vector bool short);
23900     int vec_any_le (vector unsigned short, vector unsigned short);
23901     int vec_any_le (vector bool short, vector signed short);
23902     int vec_any_le (vector signed short, vector bool short);
23903     int vec_any_le (vector signed short, vector signed short);
23904     int vec_any_le (vector bool int, vector unsigned int);
23905     int vec_any_le (vector unsigned int, vector bool int);
23906     int vec_any_le (vector unsigned int, vector unsigned int);
23907     int vec_any_le (vector bool int, vector signed int);
23908     int vec_any_le (vector signed int, vector bool int);
23909     int vec_any_le (vector signed int, vector signed int);
23910     int vec_any_le (vector float, vector float);
23911
23912     int vec_any_lt (vector bool char, vector unsigned char);
23913     int vec_any_lt (vector unsigned char, vector bool char);
23914     int vec_any_lt (vector unsigned char, vector unsigned char);
23915     int vec_any_lt (vector bool char, vector signed char);
23916     int vec_any_lt (vector signed char, vector bool char);
23917     int vec_any_lt (vector signed char, vector signed char);
23918     int vec_any_lt (vector bool short, vector unsigned short);
23919     int vec_any_lt (vector unsigned short, vector bool short);
23920     int vec_any_lt (vector unsigned short, vector unsigned short);
23921     int vec_any_lt (vector bool short, vector signed short);
23922     int vec_any_lt (vector signed short, vector bool short);
23923     int vec_any_lt (vector signed short, vector signed short);
23924     int vec_any_lt (vector bool int, vector unsigned int);
23925     int vec_any_lt (vector unsigned int, vector bool int);
23926     int vec_any_lt (vector unsigned int, vector unsigned int);
23927     int vec_any_lt (vector bool int, vector signed int);
23928     int vec_any_lt (vector signed int, vector bool int);
23929     int vec_any_lt (vector signed int, vector signed int);
23930     int vec_any_lt (vector float, vector float);
23931
23932     int vec_any_nan (vector float);
23933
23934     int vec_any_ne (vector signed char, vector bool char);
23935     int vec_any_ne (vector signed char, vector signed char);
23936     int vec_any_ne (vector unsigned char, vector bool char);
23937     int vec_any_ne (vector unsigned char, vector unsigned char);
23938     int vec_any_ne (vector bool char, vector bool char);
23939     int vec_any_ne (vector bool char, vector unsigned char);
23940     int vec_any_ne (vector bool char, vector signed char);
23941     int vec_any_ne (vector signed short, vector bool short);
23942     int vec_any_ne (vector signed short, vector signed short);
23943     int vec_any_ne (vector unsigned short, vector bool short);
23944     int vec_any_ne (vector unsigned short, vector unsigned short);
23945     int vec_any_ne (vector bool short, vector bool short);
23946     int vec_any_ne (vector bool short, vector unsigned short);
23947     int vec_any_ne (vector bool short, vector signed short);
23948     int vec_any_ne (vector pixel, vector pixel);
23949     int vec_any_ne (vector signed int, vector bool int);
23950     int vec_any_ne (vector signed int, vector signed int);
23951     int vec_any_ne (vector unsigned int, vector bool int);
23952     int vec_any_ne (vector unsigned int, vector unsigned int);
23953     int vec_any_ne (vector bool int, vector bool int);
23954     int vec_any_ne (vector bool int, vector unsigned int);
23955     int vec_any_ne (vector bool int, vector signed int);
23956     int vec_any_ne (vector float, vector float);
23957
23958     int vec_any_nge (vector float, vector float);
23959
23960     int vec_any_ngt (vector float, vector float);
23961
23962     int vec_any_nle (vector float, vector float);
23963
23964     int vec_any_nlt (vector float, vector float);
23965
23966     int vec_any_numeric (vector float);
23967
23968     int vec_any_out (vector float, vector float);
23969
23970
23971File: gcc.info,  Node: SPARC VIS Built-in Functions,  Prev: PowerPC AltiVec Built-in Functions,  Up: Target Builtins
23972
239735.48.9 SPARC VIS Built-in Functions
23974-----------------------------------
23975
23976GCC supports SIMD operations on the SPARC using both the generic vector
23977extensions (*note Vector Extensions::) as well as built-in functions for
23978the SPARC Visual Instruction Set (VIS).  When you use the `-mvis'
23979switch, the VIS extension is exposed as the following built-in
23980functions:
23981
23982     typedef int v2si __attribute__ ((vector_size (8)));
23983     typedef short v4hi __attribute__ ((vector_size (8)));
23984     typedef short v2hi __attribute__ ((vector_size (4)));
23985     typedef char v8qi __attribute__ ((vector_size (8)));
23986     typedef char v4qi __attribute__ ((vector_size (4)));
23987
23988     void * __builtin_vis_alignaddr (void *, long);
23989     int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
23990     v2si __builtin_vis_faligndatav2si (v2si, v2si);
23991     v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
23992     v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
23993
23994     v4hi __builtin_vis_fexpand (v4qi);
23995
23996     v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
23997     v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
23998     v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
23999     v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
24000     v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
24001     v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
24002     v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
24003
24004     v4qi __builtin_vis_fpack16 (v4hi);
24005     v8qi __builtin_vis_fpack32 (v2si, v2si);
24006     v2hi __builtin_vis_fpackfix (v2si);
24007     v8qi __builtin_vis_fpmerge (v4qi, v4qi);
24008
24009     int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
24010
24011
24012File: gcc.info,  Node: Target Format Checks,  Next: Pragmas,  Prev: Target Builtins,  Up: C Extensions
24013
240145.49 Format Checks Specific to Particular Target Machines
24015=========================================================
24016
24017For some target machines, GCC supports additional options to the format
24018attribute (*note Declaring Attributes of Functions: Function
24019Attributes.).
24020
24021* Menu:
24022
24023* Solaris Format Checks::
24024
24025
24026File: gcc.info,  Node: Solaris Format Checks,  Up: Target Format Checks
24027
240285.49.1 Solaris Format Checks
24029----------------------------
24030
24031Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
24032`cmn_err' accepts a subset of the standard `printf' conversions, and
24033the two-argument `%b' conversion for displaying bit-fields.  See the
24034Solaris man page for `cmn_err' for more information.
24035
24036
24037File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Format Checks,  Up: C Extensions
24038
240395.50 Pragmas Accepted by GCC
24040============================
24041
24042GCC supports several types of pragmas, primarily in order to compile
24043code originally written for other compilers.  Note that in general we
24044do not recommend the use of pragmas; *Note Function Attributes::, for
24045further explanation.
24046
24047* Menu:
24048
24049* ARM Pragmas::
24050* M32C Pragmas::
24051* RS/6000 and PowerPC Pragmas::
24052* Darwin Pragmas::
24053* Solaris Pragmas::
24054* Symbol-Renaming Pragmas::
24055* Structure-Packing Pragmas::
24056* Weak Pragmas::
24057* Diagnostic Pragmas::
24058* Visibility Pragmas::
24059
24060
24061File: gcc.info,  Node: ARM Pragmas,  Next: M32C Pragmas,  Up: Pragmas
24062
240635.50.1 ARM Pragmas
24064------------------
24065
24066The ARM target defines pragmas for controlling the default addition of
24067`long_call' and `short_call' attributes to functions.  *Note Function
24068Attributes::, for information about the effects of these attributes.
24069
24070`long_calls'
24071     Set all subsequent functions to have the `long_call' attribute.
24072
24073`no_long_calls'
24074     Set all subsequent functions to have the `short_call' attribute.
24075
24076`long_calls_off'
24077     Do not affect the `long_call' or `short_call' attributes of
24078     subsequent functions.
24079
24080
24081File: gcc.info,  Node: M32C Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
24082
240835.50.2 M32C Pragmas
24084-------------------
24085
24086`memregs NUMBER'
24087     Overrides the command line option `-memregs=' for the current
24088     file.  Use with care!  This pragma must be before any function in
24089     the file, and mixing different memregs values in different objects
24090     may make them incompatible.  This pragma is useful when a
24091     performance-critical function uses a memreg for temporary values,
24092     as it may allow you to reduce the number of memregs used.
24093
24094
24095
24096File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: M32C Pragmas,  Up: Pragmas
24097
240985.50.3 RS/6000 and PowerPC Pragmas
24099----------------------------------
24100
24101The RS/6000 and PowerPC targets define one pragma for controlling
24102whether or not the `longcall' attribute is added to function
24103declarations by default.  This pragma overrides the `-mlongcall'
24104option, but not the `longcall' and `shortcall' attributes.  *Note
24105RS/6000 and PowerPC Options::, for more information about when long
24106calls are and are not necessary.
24107
24108`longcall (1)'
24109     Apply the `longcall' attribute to all subsequent function
24110     declarations.
24111
24112`longcall (0)'
24113     Do not apply the `longcall' attribute to subsequent function
24114     declarations.
24115
24116
24117File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
24118
241195.50.4 Darwin Pragmas
24120---------------------
24121
24122The following pragmas are available for all architectures running the
24123Darwin operating system.  These are useful for compatibility with other
24124Mac OS compilers.
24125
24126`mark TOKENS...'
24127     This pragma is accepted, but has no effect.
24128
24129`options align=ALIGNMENT'
24130     This pragma sets the alignment of fields in structures.  The
24131     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
24132     `power', to emulate PowerPC alignment.  Uses of this pragma nest
24133     properly; to restore the previous setting, use `reset' for the
24134     ALIGNMENT.
24135
24136`segment TOKENS...'
24137     This pragma is accepted, but has no effect.
24138
24139`unused (VAR [, VAR]...)'
24140     This pragma declares variables to be possibly unused.  GCC will not
24141     produce warnings for the listed variables.  The effect is similar
24142     to that of the `unused' attribute, except that this pragma may
24143     appear anywhere within the variables' scopes.
24144
24145
24146File: gcc.info,  Node: Solaris Pragmas,  Next: Symbol-Renaming Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
24147
241485.50.5 Solaris Pragmas
24149----------------------
24150
24151The Solaris target supports `#pragma redefine_extname' (*note
24152Symbol-Renaming Pragmas::).  It also supports additional `#pragma'
24153directives for compatibility with the system compiler.
24154
24155`align ALIGNMENT (VARIABLE [, VARIABLE]...)'
24156     Increase the minimum alignment of each VARIABLE to ALIGNMENT.
24157     This is the same as GCC's `aligned' attribute *note Variable
24158     Attributes::).  Macro expansion occurs on the arguments to this
24159     pragma when compiling C and Objective-C.  It does not currently
24160     occur when compiling C++, but this is a bug which may be fixed in
24161     a future release.
24162
24163`fini (FUNCTION [, FUNCTION]...)'
24164     This pragma causes each listed FUNCTION to be called after main,
24165     or during shared module unloading, by adding a call to the `.fini'
24166     section.
24167
24168`init (FUNCTION [, FUNCTION]...)'
24169     This pragma causes each listed FUNCTION to be called during
24170     initialization (before `main') or during shared module loading, by
24171     adding a call to the `.init' section.
24172
24173
24174
24175File: gcc.info,  Node: Symbol-Renaming Pragmas,  Next: Structure-Packing Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
24176
241775.50.6 Symbol-Renaming Pragmas
24178------------------------------
24179
24180For compatibility with the Solaris and Tru64 UNIX system headers, GCC
24181supports two `#pragma' directives which change the name used in
24182assembly for a given declaration.  These pragmas are only available on
24183platforms whose system headers need them.  To get this effect on all
24184platforms supported by GCC, use the asm labels extension (*note Asm
24185Labels::).
24186
24187`redefine_extname OLDNAME NEWNAME'
24188     This pragma gives the C function OLDNAME the assembly symbol
24189     NEWNAME.  The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
24190     be defined if this pragma is available (currently only on Solaris).
24191
24192`extern_prefix STRING'
24193     This pragma causes all subsequent external function and variable
24194     declarations to have STRING prepended to their assembly symbols.
24195     This effect may be terminated with another `extern_prefix' pragma
24196     whose argument is an empty string.  The preprocessor macro
24197     `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
24198     available (currently only on Tru64 UNIX).
24199
24200 These pragmas and the asm labels extension interact in a complicated
24201manner.  Here are some corner cases you may want to be aware of.
24202
24203  1. Both pragmas silently apply only to declarations with external
24204     linkage.  Asm labels do not have this restriction.
24205
24206  2. In C++, both pragmas silently apply only to declarations with "C"
24207     linkage.  Again, asm labels do not have this restriction.
24208
24209  3. If any of the three ways of changing the assembly name of a
24210     declaration is applied to a declaration whose assembly name has
24211     already been determined (either by a previous use of one of these
24212     features, or because the compiler needed the assembly name in
24213     order to generate code), and the new name is different, a warning
24214     issues and the name does not change.
24215
24216  4. The OLDNAME used by `#pragma redefine_extname' is always the
24217     C-language name.
24218
24219  5. If `#pragma extern_prefix' is in effect, and a declaration occurs
24220     with an asm label attached, the prefix is silently ignored for
24221     that declaration.
24222
24223  6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
24224     the same declaration, whichever triggered first wins, and a
24225     warning issues if they contradict each other.  (We would like to
24226     have `#pragma redefine_extname' always win, for consistency with
24227     asm labels, but if `#pragma extern_prefix' triggers first we have
24228     no way of knowing that that happened.)
24229
24230
24231File: gcc.info,  Node: Structure-Packing Pragmas,  Next: Weak Pragmas,  Prev: Symbol-Renaming Pragmas,  Up: Pragmas
24232
242335.50.7 Structure-Packing Pragmas
24234--------------------------------
24235
24236For compatibility with Win32, GCC supports a set of `#pragma'
24237directives which change the maximum alignment of members of structures
24238(other than zero-width bitfields), unions, and classes subsequently
24239defined.  The N value below always is required to be a small power of
24240two and specifies the new alignment in bytes.
24241
24242  1. `#pragma pack(N)' simply sets the new alignment.
24243
24244  2. `#pragma pack()' sets the alignment to the one that was in effect
24245     when compilation started (see also command line option
24246     `-fpack-struct[=<n>]' *note Code Gen Options::).
24247
24248  3. `#pragma pack(push[,N])' pushes the current alignment setting on
24249     an internal stack and then optionally sets the new alignment.
24250
24251  4. `#pragma pack(pop)' restores the alignment setting to the one
24252     saved at the top of the internal stack (and removes that stack
24253     entry).  Note that `#pragma pack([N])' does not influence this
24254     internal stack; thus it is possible to have `#pragma pack(push)'
24255     followed by multiple `#pragma pack(N)' instances and finalized by
24256     a single `#pragma pack(pop)'.
24257
24258 Some targets, e.g. i386 and powerpc, support the `ms_struct' `#pragma'
24259which lays out a structure as the documented `__attribute__
24260((ms_struct))'.
24261  1. `#pragma ms_struct on' turns on the layout for structures declared.
24262
24263  2. `#pragma ms_struct off' turns off the layout for structures
24264     declared.
24265
24266  3. `#pragma ms_struct reset' goes back to the default layout.
24267
24268
24269File: gcc.info,  Node: Weak Pragmas,  Next: Diagnostic Pragmas,  Prev: Structure-Packing Pragmas,  Up: Pragmas
24270
242715.50.8 Weak Pragmas
24272-------------------
24273
24274For compatibility with SVR4, GCC supports a set of `#pragma' directives
24275for declaring symbols to be weak, and defining weak aliases.
24276
24277`#pragma weak SYMBOL'
24278     This pragma declares SYMBOL to be weak, as if the declaration had
24279     the attribute of the same name.  The pragma may appear before or
24280     after the declaration of SYMBOL, but must appear before either its
24281     first use or its definition.  It is not an error for SYMBOL to
24282     never be defined at all.
24283
24284`#pragma weak SYMBOL1 = SYMBOL2'
24285     This pragma declares SYMBOL1 to be a weak alias of SYMBOL2.  It is
24286     an error if SYMBOL2 is not defined in the current translation unit.
24287
24288
24289File: gcc.info,  Node: Diagnostic Pragmas,  Next: Visibility Pragmas,  Prev: Weak Pragmas,  Up: Pragmas
24290
242915.50.9 Diagnostic Pragmas
24292-------------------------
24293
24294GCC allows the user to selectively enable or disable certain types of
24295diagnostics, and change the kind of the diagnostic.  For example, a
24296project's policy might require that all sources compile with `-Werror'
24297but certain files might have exceptions allowing specific types of
24298warnings.  Or, a project might selectively enable diagnostics and treat
24299them as errors depending on which preprocessor macros are defined.
24300
24301`#pragma GCC diagnostic KIND OPTION'
24302     Modifies the disposition of a diagnostic.  Note that not all
24303     diagnostics are modifiable; at the moment only warnings (normally
24304     controlled by `-W...') can be controlled, and not all of them.
24305     Use `-fdiagnostics-show-option' to determine which diagnostics are
24306     controllable and which option controls them.
24307
24308     KIND is `error' to treat this diagnostic as an error, `warning' to
24309     treat it like a warning (even if `-Werror' is in effect), or
24310     `ignored' if the diagnostic is to be ignored.  OPTION is a double
24311     quoted string which matches the command line option.
24312
24313          #pragma GCC diagnostic warning "-Wformat"
24314          #pragma GCC diagnostic error "-Wformat"
24315          #pragma GCC diagnostic ignored "-Wformat"
24316
24317     Note that these pragmas override any command line options.  Also,
24318     while it is syntactically valid to put these pragmas anywhere in
24319     your sources, the only supported location for them is before any
24320     data or functions are defined.  Doing otherwise may result in
24321     unpredictable results depending on how the optimizer manages your
24322     sources.  If the same option is listed multiple times, the last
24323     one specified is the one that is in effect.  This pragma is not
24324     intended to be a general purpose replacement for command line
24325     options, but for implementing strict control over project policies.
24326
24327
24328
24329File: gcc.info,  Node: Visibility Pragmas,  Prev: Diagnostic Pragmas,  Up: Pragmas
24330
243315.50.10 Visibility Pragmas
24332--------------------------
24333
24334`#pragma GCC visibility push(VISIBILITY)'
24335`#pragma GCC visibility pop'
24336     This pragma allows the user to set the visibility for multiple
24337     declarations without having to give each a visibility attribute
24338     *Note Function Attributes::, for more information about visibility
24339     and the attribute syntax.
24340
24341     In C++, `#pragma GCC visibility' affects only namespace-scope
24342     declarations.  Class members and template specializations are not
24343     affected; if you want to override the visibility for a particular
24344     member or instantiation, you must use an attribute.
24345
24346
24347
24348File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
24349
243505.51 Unnamed struct/union fields within structs/unions
24351======================================================
24352
24353For compatibility with other compilers, GCC allows you to define a
24354structure or union that contains, as fields, structures and unions
24355without names.  For example:
24356
24357     struct {
24358       int a;
24359       union {
24360         int b;
24361         float c;
24362       };
24363       int d;
24364     } foo;
24365
24366 In this example, the user would be able to access members of the
24367unnamed union with code like `foo.b'.  Note that only unnamed structs
24368and unions are allowed, you may not have, for example, an unnamed `int'.
24369
24370 You must never create such structures that cause ambiguous field
24371definitions.  For example, this structure:
24372
24373     struct {
24374       int a;
24375       struct {
24376         int a;
24377       };
24378     } foo;
24379
24380 It is ambiguous which `a' is being referred to with `foo.a'.  Such
24381constructs are not supported and must be avoided.  In the future, such
24382constructs may be detected and treated as compilation errors.
24383
24384 Unless `-fms-extensions' is used, the unnamed field must be a
24385structure or union definition without a tag (for example, `struct { int
24386a; };').  If `-fms-extensions' is used, the field may also be a
24387definition with a tag such as `struct foo { int a; };', a reference to
24388a previously defined structure or union such as `struct foo;', or a
24389reference to a `typedef' name for a previously defined structure or
24390union type.
24391
24392
24393File: gcc.info,  Node: Thread-Local,  Prev: Unnamed Fields,  Up: C Extensions
24394
243955.52 Thread-Local Storage
24396=========================
24397
24398Thread-local storage (TLS) is a mechanism by which variables are
24399allocated such that there is one instance of the variable per extant
24400thread.  The run-time model GCC uses to implement this originates in
24401the IA-64 processor-specific ABI, but has since been migrated to other
24402processors as well.  It requires significant support from the linker
24403(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
24404`libpthread.so'), so it is not available everywhere.
24405
24406 At the user level, the extension is visible with a new storage class
24407keyword: `__thread'.  For example:
24408
24409     __thread int i;
24410     extern __thread struct state s;
24411     static __thread char *p;
24412
24413 The `__thread' specifier may be used alone, with the `extern' or
24414`static' specifiers, but with no other storage class specifier.  When
24415used with `extern' or `static', `__thread' must appear immediately
24416after the other storage class specifier.
24417
24418 The `__thread' specifier may be applied to any global, file-scoped
24419static, function-scoped static, or static data member of a class.  It
24420may not be applied to block-scoped automatic or non-static data member.
24421
24422 When the address-of operator is applied to a thread-local variable, it
24423is evaluated at run-time and returns the address of the current thread's
24424instance of that variable.  An address so obtained may be used by any
24425thread.  When a thread terminates, any pointers to thread-local
24426variables in that thread become invalid.
24427
24428 No static initialization may refer to the address of a thread-local
24429variable.
24430
24431 In C++, if an initializer is present for a thread-local variable, it
24432must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
24433standard.
24434
24435 See ELF Handling For Thread-Local Storage
24436(http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
24437the four thread-local storage addressing models, and how the run-time
24438is expected to function.
24439
24440* Menu:
24441
24442* C99 Thread-Local Edits::
24443* C++98 Thread-Local Edits::
24444
24445
24446File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
24447
244485.52.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
24449-------------------------------------------------------
24450
24451The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
24452document the exact semantics of the language extension.
24453
24454   * `5.1.2  Execution environments'
24455
24456     Add new text after paragraph 1
24457
24458          Within either execution environment, a "thread" is a flow of
24459          control within a program.  It is implementation defined
24460          whether or not there may be more than one thread associated
24461          with a program.  It is implementation defined how threads
24462          beyond the first are created, the name and type of the
24463          function called at thread startup, and how threads may be
24464          terminated.  However, objects with thread storage duration
24465          shall be initialized before thread startup.
24466
24467   * `6.2.4  Storage durations of objects'
24468
24469     Add new text before paragraph 3
24470
24471          An object whose identifier is declared with the storage-class
24472          specifier `__thread' has "thread storage duration".  Its
24473          lifetime is the entire execution of the thread, and its
24474          stored value is initialized only once, prior to thread
24475          startup.
24476
24477   * `6.4.1  Keywords'
24478
24479     Add `__thread'.
24480
24481   * `6.7.1  Storage-class specifiers'
24482
24483     Add `__thread' to the list of storage class specifiers in
24484     paragraph 1.
24485
24486     Change paragraph 2 to
24487
24488          With the exception of `__thread', at most one storage-class
24489          specifier may be given [...].  The `__thread' specifier may
24490          be used alone, or immediately following `extern' or `static'.
24491
24492     Add new text after paragraph 6
24493
24494          The declaration of an identifier for a variable that has
24495          block scope that specifies `__thread' shall also specify
24496          either `extern' or `static'.
24497
24498          The `__thread' specifier shall be used only with variables.
24499
24500
24501File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
24502
245035.52.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
24504--------------------------------------------------------
24505
24506The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
24507that document the exact semantics of the language extension.
24508
24509   * [intro.execution]
24510
24511     New text after paragraph 4
24512
24513          A "thread" is a flow of control within the abstract machine.
24514          It is implementation defined whether or not there may be more
24515          than one thread.
24516
24517     New text after paragraph 7
24518
24519          It is unspecified whether additional action must be taken to
24520          ensure when and whether side effects are visible to other
24521          threads.
24522
24523   * [lex.key]
24524
24525     Add `__thread'.
24526
24527   * [basic.start.main]
24528
24529     Add after paragraph 5
24530
24531          The thread that begins execution at the `main' function is
24532          called the "main thread".  It is implementation defined how
24533          functions beginning threads other than the main thread are
24534          designated or typed.  A function so designated, as well as
24535          the `main' function, is called a "thread startup function".
24536          It is implementation defined what happens if a thread startup
24537          function returns.  It is implementation defined what happens
24538          to other threads when any thread calls `exit'.
24539
24540   * [basic.start.init]
24541
24542     Add after paragraph 4
24543
24544          The storage for an object of thread storage duration shall be
24545          statically initialized before the first statement of the
24546          thread startup function.  An object of thread storage
24547          duration shall not require dynamic initialization.
24548
24549   * [basic.start.term]
24550
24551     Add after paragraph 3
24552
24553          The type of an object with thread storage duration shall not
24554          have a non-trivial destructor, nor shall it be an array type
24555          whose elements (directly or indirectly) have non-trivial
24556          destructors.
24557
24558   * [basic.stc]
24559
24560     Add "thread storage duration" to the list in paragraph 1.
24561
24562     Change paragraph 2
24563
24564          Thread, static, and automatic storage durations are
24565          associated with objects introduced by declarations [...].
24566
24567     Add `__thread' to the list of specifiers in paragraph 3.
24568
24569   * [basic.stc.thread]
24570
24571     New section before [basic.stc.static]
24572
24573          The keyword `__thread' applied to a non-local object gives the
24574          object thread storage duration.
24575
24576          A local variable or class data member declared both `static'
24577          and `__thread' gives the variable or member thread storage
24578          duration.
24579
24580   * [basic.stc.static]
24581
24582     Change paragraph 1
24583
24584          All objects which have neither thread storage duration,
24585          dynamic storage duration nor are local [...].
24586
24587   * [dcl.stc]
24588
24589     Add `__thread' to the list in paragraph 1.
24590
24591     Change paragraph 1
24592
24593          With the exception of `__thread', at most one
24594          STORAGE-CLASS-SPECIFIER shall appear in a given
24595          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
24596          alone, or immediately following the `extern' or `static'
24597          specifiers.  [...]
24598
24599     Add after paragraph 5
24600
24601          The `__thread' specifier can be applied only to the names of
24602          objects and to anonymous unions.
24603
24604   * [class.mem]
24605
24606     Add after paragraph 6
24607
24608          Non-`static' members shall not be `__thread'.
24609
24610
24611File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
24612
246136 Extensions to the C++ Language
24614********************************
24615
24616The GNU compiler provides these extensions to the C++ language (and you
24617can also use most of the C language extensions in your C++ programs).
24618If you want to write code that checks whether these features are
24619available, you can test for the GNU compiler the same way as for C
24620programs: check for a predefined macro `__GNUC__'.  You can also use
24621`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
24622(cpp)Common Predefined Macros.).
24623
24624* Menu:
24625
24626* Volatiles::		What constitutes an access to a volatile object.
24627* Restricted Pointers:: C99 restricted pointers and references.
24628* Vague Linkage::       Where G++ puts inlines, vtables and such.
24629* C++ Interface::       You can use a single C++ header file for both
24630                        declarations and definitions.
24631* Template Instantiation:: Methods for ensuring that exactly one copy of
24632                        each needed template instantiation is emitted.
24633* Bound member functions:: You can extract a function pointer to the
24634                        method denoted by a `->*' or `.*' expression.
24635* C++ Attributes::      Variable, function, and type attributes for C++ only.
24636* Namespace Association:: Strong using-directives for namespace association.
24637* Java Exceptions::     Tweaking exception handling to work with Java.
24638* Deprecated Features:: Things will disappear from g++.
24639* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
24640
24641
24642File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Up: C++ Extensions
24643
246446.1 When is a Volatile Object Accessed?
24645=======================================
24646
24647Both the C and C++ standard have the concept of volatile objects.  These
24648are normally accessed by pointers and used for accessing hardware.  The
24649standards encourage compilers to refrain from optimizations concerning
24650accesses to volatile objects.  The C standard leaves it implementation
24651defined  as to what constitutes a volatile access.  The C++ standard
24652omits to specify this, except to say that C++ should behave in a
24653similar manner to C with respect to volatiles, where possible.  The
24654minimum either standard specifies is that at a sequence point all
24655previous accesses to volatile objects have stabilized and no subsequent
24656accesses have occurred.  Thus an implementation is free to reorder and
24657combine volatile accesses which occur between sequence points, but
24658cannot do so for accesses across a sequence point.  The use of
24659volatiles does not allow you to violate the restriction on updating
24660objects multiple times within a sequence point.
24661
24662 *Note Volatile qualifier and the C compiler: Qualifiers implementation.
24663
24664 The behavior differs slightly between C and C++ in the non-obvious
24665cases:
24666
24667     volatile int *src = SOMEVALUE;
24668     *src;
24669
24670 With C, such expressions are rvalues, and GCC interprets this either
24671as a read of the volatile object being pointed to or only as request to
24672evaluate the side-effects.  The C++ standard specifies that such
24673expressions do not undergo lvalue to rvalue conversion, and that the
24674type of the dereferenced object may be incomplete.  The C++ standard
24675does not specify explicitly that it is this lvalue to rvalue conversion
24676which may be responsible for causing an access.  However, there is
24677reason to believe that it is, because otherwise certain simple
24678expressions become undefined.  However, because it would surprise most
24679programmers, G++ treats dereferencing a pointer to volatile object of
24680complete type when the value is unused as GCC would do for an
24681equivalent type in C.  When the object has incomplete type, G++ issues
24682a warning; if you wish to force an error, you must force a conversion
24683to rvalue with, for instance, a static cast.
24684
24685 When using a reference to volatile, G++ does not treat equivalent
24686expressions as accesses to volatiles, but instead issues a warning that
24687no volatile is accessed.  The rationale for this is that otherwise it
24688becomes difficult to determine where volatile access occur, and not
24689possible to ignore the return value from functions returning volatile
24690references.  Again, if you wish to force a read, cast the reference to
24691an rvalue.
24692
24693
24694File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
24695
246966.2 Restricting Pointer Aliasing
24697================================
24698
24699As with the C front end, G++ understands the C99 feature of restricted
24700pointers, specified with the `__restrict__', or `__restrict' type
24701qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
24702language flag, `restrict' is not a keyword in C++.
24703
24704 In addition to allowing restricted pointers, you can specify restricted
24705references, which indicate that the reference is not aliased in the
24706local context.
24707
24708     void fn (int *__restrict__ rptr, int &__restrict__ rref)
24709     {
24710       /* ... */
24711     }
24712
24713In the body of `fn', RPTR points to an unaliased integer and RREF
24714refers to a (different) unaliased integer.
24715
24716 You may also specify whether a member function's THIS pointer is
24717unaliased by using `__restrict__' as a member function qualifier.
24718
24719     void T::fn () __restrict__
24720     {
24721       /* ... */
24722     }
24723
24724Within the body of `T::fn', THIS will have the effective definition `T
24725*__restrict__ const this'.  Notice that the interpretation of a
24726`__restrict__' member function qualifier is different to that of
24727`const' or `volatile' qualifier, in that it is applied to the pointer
24728rather than the object.  This is consistent with other compilers which
24729implement restricted pointers.
24730
24731 As with all outermost parameter qualifiers, `__restrict__' is ignored
24732in function definition matching.  This means you only need to specify
24733`__restrict__' in a function definition, rather than in a function
24734prototype as well.
24735
24736
24737File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
24738
247396.3 Vague Linkage
24740=================
24741
24742There are several constructs in C++ which require space in the object
24743file but are not clearly tied to a single translation unit.  We say that
24744these constructs have "vague linkage".  Typically such constructs are
24745emitted wherever they are needed, though sometimes we can be more
24746clever.
24747
24748Inline Functions
24749     Inline functions are typically defined in a header file which can
24750     be included in many different compilations.  Hopefully they can
24751     usually be inlined, but sometimes an out-of-line copy is
24752     necessary, if the address of the function is taken or if inlining
24753     fails.  In general, we emit an out-of-line copy in all translation
24754     units where one is needed.  As an exception, we only emit inline
24755     virtual functions with the vtable, since it will always require a
24756     copy.
24757
24758     Local static variables and string constants used in an inline
24759     function are also considered to have vague linkage, since they
24760     must be shared between all inlined and out-of-line instances of
24761     the function.
24762
24763VTables
24764     C++ virtual functions are implemented in most compilers using a
24765     lookup table, known as a vtable.  The vtable contains pointers to
24766     the virtual functions provided by a class, and each object of the
24767     class contains a pointer to its vtable (or vtables, in some
24768     multiple-inheritance situations).  If the class declares any
24769     non-inline, non-pure virtual functions, the first one is chosen as
24770     the "key method" for the class, and the vtable is only emitted in
24771     the translation unit where the key method is defined.
24772
24773     _Note:_ If the chosen key method is later defined as inline, the
24774     vtable will still be emitted in every translation unit which
24775     defines it.  Make sure that any inline virtuals are declared
24776     inline in the class body, even if they are not defined there.
24777
24778type_info objects
24779     C++ requires information about types to be written out in order to
24780     implement `dynamic_cast', `typeid' and exception handling.  For
24781     polymorphic classes (classes with virtual functions), the type_info
24782     object is written out along with the vtable so that `dynamic_cast'
24783     can determine the dynamic type of a class object at runtime.  For
24784     all other types, we write out the type_info object when it is
24785     used: when applying `typeid' to an expression, throwing an object,
24786     or referring to a type in a catch clause or exception
24787     specification.
24788
24789Template Instantiations
24790     Most everything in this section also applies to template
24791     instantiations, but there are other options as well.  *Note
24792     Where's the Template?: Template Instantiation.
24793
24794
24795 When used with GNU ld version 2.8 or later on an ELF system such as
24796GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
24797these constructs will be discarded at link time.  This is known as
24798COMDAT support.
24799
24800 On targets that don't support COMDAT, but do support weak symbols, GCC
24801will use them.  This way one copy will override all the others, but the
24802unused copies will still take up space in the executable.
24803
24804 For targets which do not support either COMDAT or weak symbols, most
24805entities with vague linkage will be emitted as local symbols to avoid
24806duplicate definition errors from the linker.  This will not happen for
24807local statics in inlines, however, as having multiple copies will
24808almost certainly break things.
24809
24810 *Note Declarations and Definitions in One Header: C++ Interface, for
24811another way to control placement of these constructs.
24812
24813
24814File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
24815
248166.4 #pragma interface and implementation
24817========================================
24818
24819`#pragma interface' and `#pragma implementation' provide the user with
24820a way of explicitly directing the compiler to emit entities with vague
24821linkage (and debugging information) in a particular translation unit.
24822
24823 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
24824cases, because of COMDAT support and the "key method" heuristic
24825mentioned in *Note Vague Linkage::.  Using them can actually cause your
24826program to grow due to unnecessary out-of-line copies of inline
24827functions.  Currently (3.4) the only benefit of these `#pragma's is
24828reduced duplication of debugging information, and that should be
24829addressed soon on DWARF 2 targets with the use of COMDAT groups.
24830
24831`#pragma interface'
24832`#pragma interface "SUBDIR/OBJECTS.h"'
24833     Use this directive in _header files_ that define object classes,
24834     to save space in most of the object files that use those classes.
24835     Normally, local copies of certain information (backup copies of
24836     inline member functions, debugging information, and the internal
24837     tables that implement virtual functions) must be kept in each
24838     object file that includes class definitions.  You can use this
24839     pragma to avoid such duplication.  When a header file containing
24840     `#pragma interface' is included in a compilation, this auxiliary
24841     information will not be generated (unless the main input source
24842     file itself uses `#pragma implementation').  Instead, the object
24843     files will contain references to be resolved at link time.
24844
24845     The second form of this directive is useful for the case where you
24846     have multiple headers with the same name in different directories.
24847     If you use this form, you must specify the same string to `#pragma
24848     implementation'.
24849
24850`#pragma implementation'
24851`#pragma implementation "OBJECTS.h"'
24852     Use this pragma in a _main input file_, when you want full output
24853     from included header files to be generated (and made globally
24854     visible).  The included header file, in turn, should use `#pragma
24855     interface'.  Backup copies of inline member functions, debugging
24856     information, and the internal tables used to implement virtual
24857     functions are all generated in implementation files.
24858
24859     If you use `#pragma implementation' with no argument, it applies to
24860     an include file with the same basename(1) as your source file.
24861     For example, in `allclass.cc', giving just `#pragma implementation'
24862     by itself is equivalent to `#pragma implementation "allclass.h"'.
24863
24864     In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
24865     an implementation file whenever you would include it from
24866     `allclass.cc' even if you never specified `#pragma
24867     implementation'.  This was deemed to be more trouble than it was
24868     worth, however, and disabled.
24869
24870     Use the string argument if you want a single implementation file to
24871     include code from multiple header files.  (You must also use
24872     `#include' to include the header file; `#pragma implementation'
24873     only specifies how to use the file--it doesn't actually include
24874     it.)
24875
24876     There is no way to split up the contents of a single header file
24877     into multiple implementation files.
24878
24879 `#pragma implementation' and `#pragma interface' also have an effect
24880on function inlining.
24881
24882 If you define a class in a header file marked with `#pragma
24883interface', the effect on an inline function defined in that class is
24884similar to an explicit `extern' declaration--the compiler emits no code
24885at all to define an independent version of the function.  Its
24886definition is used only for inlining with its callers.
24887
24888 Conversely, when you include the same header file in a main source file
24889that declares it as `#pragma implementation', the compiler emits code
24890for the function itself; this defines a version of the function that
24891can be found via pointers (or by callers compiled without inlining).
24892If all calls to the function can be inlined, you can avoid emitting the
24893function by compiling with `-fno-implement-inlines'.  If any calls were
24894not inlined, you will get linker errors.
24895
24896 ---------- Footnotes ----------
24897
24898 (1) A file's "basename" was the name stripped of all leading path
24899information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
24900
24901
24902File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
24903
249046.5 Where's the Template?
24905=========================
24906
24907C++ templates are the first language feature to require more
24908intelligence from the environment than one usually finds on a UNIX
24909system.  Somehow the compiler and linker have to make sure that each
24910template instance occurs exactly once in the executable if it is needed,
24911and not at all otherwise.  There are two basic approaches to this
24912problem, which are referred to as the Borland model and the Cfront
24913model.
24914
24915Borland model
24916     Borland C++ solved the template instantiation problem by adding
24917     the code equivalent of common blocks to their linker; the compiler
24918     emits template instances in each translation unit that uses them,
24919     and the linker collapses them together.  The advantage of this
24920     model is that the linker only has to consider the object files
24921     themselves; there is no external complexity to worry about.  This
24922     disadvantage is that compilation time is increased because the
24923     template code is being compiled repeatedly.  Code written for this
24924     model tends to include definitions of all templates in the header
24925     file, since they must be seen to be instantiated.
24926
24927Cfront model
24928     The AT&T C++ translator, Cfront, solved the template instantiation
24929     problem by creating the notion of a template repository, an
24930     automatically maintained place where template instances are
24931     stored.  A more modern version of the repository works as follows:
24932     As individual object files are built, the compiler places any
24933     template definitions and instantiations encountered in the
24934     repository.  At link time, the link wrapper adds in the objects in
24935     the repository and compiles any needed instances that were not
24936     previously emitted.  The advantages of this model are more optimal
24937     compilation speed and the ability to use the system linker; to
24938     implement the Borland model a compiler vendor also needs to
24939     replace the linker.  The disadvantages are vastly increased
24940     complexity, and thus potential for error; for some code this can be
24941     just as transparent, but in practice it can been very difficult to
24942     build multiple programs in one directory and one program in
24943     multiple directories.  Code written for this model tends to
24944     separate definitions of non-inline member templates into a
24945     separate file, which should be compiled separately.
24946
24947 When used with GNU ld version 2.8 or later on an ELF system such as
24948GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
24949Borland model.  On other systems, G++ implements neither automatic
24950model.
24951
24952 A future version of G++ will support a hybrid model whereby the
24953compiler will emit any instantiations for which the template definition
24954is included in the compile, and store template definitions and
24955instantiation context information into the object file for the rest.
24956The link wrapper will extract that information as necessary and invoke
24957the compiler to produce the remaining instantiations.  The linker will
24958then combine duplicate instantiations.
24959
24960 In the mean time, you have the following options for dealing with
24961template instantiations:
24962
24963  1. Compile your template-using code with `-frepo'.  The compiler will
24964     generate files with the extension `.rpo' listing all of the
24965     template instantiations used in the corresponding object files
24966     which could be instantiated there; the link wrapper, `collect2',
24967     will then update the `.rpo' files to tell the compiler where to
24968     place those instantiations and rebuild any affected object files.
24969     The link-time overhead is negligible after the first pass, as the
24970     compiler will continue to place the instantiations in the same
24971     files.
24972
24973     This is your best option for application code written for the
24974     Borland model, as it will just work.  Code written for the Cfront
24975     model will need to be modified so that the template definitions
24976     are available at one or more points of instantiation; usually this
24977     is as simple as adding `#include <tmethods.cc>' to the end of each
24978     template header.
24979
24980     For library code, if you want the library to provide all of the
24981     template instantiations it needs, just try to link all of its
24982     object files together; the link will fail, but cause the
24983     instantiations to be generated as a side effect.  Be warned,
24984     however, that this may cause conflicts if multiple libraries try
24985     to provide the same instantiations.  For greater control, use
24986     explicit instantiation as described in the next option.
24987
24988  2. Compile your code with `-fno-implicit-templates' to disable the
24989     implicit generation of template instances, and explicitly
24990     instantiate all the ones you use.  This approach requires more
24991     knowledge of exactly which instances you need than do the others,
24992     but it's less mysterious and allows greater control.  You can
24993     scatter the explicit instantiations throughout your program,
24994     perhaps putting them in the translation units where the instances
24995     are used or the translation units that define the templates
24996     themselves; you can put all of the explicit instantiations you
24997     need into one big file; or you can create small files like
24998
24999          #include "Foo.h"
25000          #include "Foo.cc"
25001
25002          template class Foo<int>;
25003          template ostream& operator <<
25004                          (ostream&, const Foo<int>&);
25005
25006     for each of the instances you need, and create a template
25007     instantiation library from those.
25008
25009     If you are using Cfront-model code, you can probably get away with
25010     not using `-fno-implicit-templates' when compiling files that don't
25011     `#include' the member template definitions.
25012
25013     If you use one big file to do the instantiations, you may want to
25014     compile it without `-fno-implicit-templates' so you get all of the
25015     instances required by your explicit instantiations (but not by any
25016     other files) without having to specify them as well.
25017
25018     G++ has extended the template instantiation syntax given in the ISO
25019     standard to allow forward declaration of explicit instantiations
25020     (with `extern'), instantiation of the compiler support data for a
25021     template class (i.e. the vtable) without instantiating any of its
25022     members (with `inline'), and instantiation of only the static data
25023     members of a template class, without the support data or member
25024     functions (with (`static'):
25025
25026          extern template int max (int, int);
25027          inline template class Foo<int>;
25028          static template class Foo<int>;
25029
25030  3. Do nothing.  Pretend G++ does implement automatic instantiation
25031     management.  Code written for the Borland model will work fine, but
25032     each translation unit will contain instances of each of the
25033     templates it uses.  In a large program, this can lead to an
25034     unacceptable amount of code duplication.
25035
25036
25037File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
25038
250396.6 Extracting the function pointer from a bound pointer to member function
25040===========================================================================
25041
25042In C++, pointer to member functions (PMFs) are implemented using a wide
25043pointer of sorts to handle all the possible call mechanisms; the PMF
25044needs to store information about how to adjust the `this' pointer, and
25045if the function pointed to is virtual, where to find the vtable, and
25046where in the vtable to look for the member function.  If you are using
25047PMFs in an inner loop, you should really reconsider that decision.  If
25048that is not an option, you can extract the pointer to the function that
25049would be called for a given object/PMF pair and call it directly inside
25050the inner loop, to save a bit of time.
25051
25052 Note that you will still be paying the penalty for the call through a
25053function pointer; on most modern architectures, such a call defeats the
25054branch prediction features of the CPU.  This is also true of normal
25055virtual function calls.
25056
25057 The syntax for this extension is
25058
25059     extern A a;
25060     extern int (A::*fp)();
25061     typedef int (*fptr)(A *);
25062
25063     fptr p = (fptr)(a.*fp);
25064
25065 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
25066object is needed to obtain the address of the function.  They can be
25067converted to function pointers directly:
25068
25069     fptr p1 = (fptr)(&A::foo);
25070
25071 You must specify `-Wno-pmf-conversions' to use this extension.
25072
25073
25074File: gcc.info,  Node: C++ Attributes,  Next: Namespace Association,  Prev: Bound member functions,  Up: C++ Extensions
25075
250766.7 C++-Specific Variable, Function, and Type Attributes
25077========================================================
25078
25079Some attributes only make sense for C++ programs.
25080
25081`init_priority (PRIORITY)'
25082     In Standard C++, objects defined at namespace scope are guaranteed
25083     to be initialized in an order in strict accordance with that of
25084     their definitions _in a given translation unit_.  No guarantee is
25085     made for initializations across translation units.  However, GNU
25086     C++ allows users to control the order of initialization of objects
25087     defined at namespace scope with the `init_priority' attribute by
25088     specifying a relative PRIORITY, a constant integral expression
25089     currently bounded between 101 and 65535 inclusive.  Lower numbers
25090     indicate a higher priority.
25091
25092     In the following example, `A' would normally be created before
25093     `B', but the `init_priority' attribute has reversed that order:
25094
25095          Some_Class  A  __attribute__ ((init_priority (2000)));
25096          Some_Class  B  __attribute__ ((init_priority (543)));
25097
25098     Note that the particular values of PRIORITY do not matter; only
25099     their relative ordering.
25100
25101`java_interface'
25102     This type attribute informs C++ that the class is a Java
25103     interface.  It may only be applied to classes declared within an
25104     `extern "Java"' block.  Calls to methods declared in this
25105     interface will be dispatched using GCJ's interface table
25106     mechanism, instead of regular virtual table dispatch.
25107
25108
25109 See also *Note Namespace Association::.
25110
25111
25112File: gcc.info,  Node: Namespace Association,  Next: Java Exceptions,  Prev: C++ Attributes,  Up: C++ Extensions
25113
251146.8 Namespace Association
25115=========================
25116
25117*Caution:* The semantics of this extension are not fully defined.
25118Users should refrain from using this extension as its semantics may
25119change subtly over time.  It is possible that this extension will be
25120removed in future versions of G++.
25121
25122 A using-directive with `__attribute ((strong))' is stronger than a
25123normal using-directive in two ways:
25124
25125   * Templates from the used namespace can be specialized and explicitly
25126     instantiated as though they were members of the using namespace.
25127
25128   * The using namespace is considered an associated namespace of all
25129     templates in the used namespace for purposes of argument-dependent
25130     name lookup.
25131
25132 The used namespace must be nested within the using namespace so that
25133normal unqualified lookup works properly.
25134
25135 This is useful for composing a namespace transparently from
25136implementation namespaces.  For example:
25137
25138     namespace std {
25139       namespace debug {
25140         template <class T> struct A { };
25141       }
25142       using namespace debug __attribute ((__strong__));
25143       template <> struct A<int> { };   // ok to specialize
25144
25145       template <class T> void f (A<T>);
25146     }
25147
25148     int main()
25149     {
25150       f (std::A<float>());             // lookup finds std::f
25151       f (std::A<int>());
25152     }
25153
25154
25155File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Namespace Association,  Up: C++ Extensions
25156
251576.9 Java Exceptions
25158===================
25159
25160The Java language uses a slightly different exception handling model
25161from C++.  Normally, GNU C++ will automatically detect when you are
25162writing C++ code that uses Java exceptions, and handle them
25163appropriately.  However, if C++ code only needs to execute destructors
25164when Java exceptions are thrown through it, GCC will guess incorrectly.
25165Sample problematic code is:
25166
25167       struct S { ~S(); };
25168       extern void bar();    // is written in Java, and may throw exceptions
25169       void foo()
25170       {
25171         S s;
25172         bar();
25173       }
25174
25175The usual effect of an incorrect guess is a link failure, complaining of
25176a missing routine called `__gxx_personality_v0'.
25177
25178 You can inform the compiler that Java exceptions are to be used in a
25179translation unit, irrespective of what it might think, by writing
25180`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
25181must appear before any functions that throw or catch exceptions, or run
25182destructors when exceptions are thrown through them.
25183
25184 You cannot mix Java and C++ exceptions in the same translation unit.
25185It is believed to be safe to throw a C++ exception from one file through
25186another file compiled for the Java exception model, or vice versa, but
25187there may be bugs in this area.
25188
25189
25190File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
25191
251926.10 Deprecated Features
25193========================
25194
25195In the past, the GNU C++ compiler was extended to experiment with new
25196features, at a time when the C++ language was still evolving.  Now that
25197the C++ standard is complete, some of those features are superseded by
25198superior alternatives.  Using the old features might cause a warning in
25199some cases that the feature will be dropped in the future.  In other
25200cases, the feature might be gone already.
25201
25202 While the list below is not exhaustive, it documents some of the
25203options that are now deprecated:
25204
25205`-fexternal-templates'
25206`-falt-external-templates'
25207     These are two of the many ways for G++ to implement template
25208     instantiation.  *Note Template Instantiation::.  The C++ standard
25209     clearly defines how template definitions have to be organized
25210     across implementation units.  G++ has an implicit instantiation
25211     mechanism that should work just fine for standard-conforming code.
25212
25213`-fstrict-prototype'
25214`-fno-strict-prototype'
25215     Previously it was possible to use an empty prototype parameter
25216     list to indicate an unspecified number of parameters (like C),
25217     rather than no parameters, as C++ demands.  This feature has been
25218     removed, except where it is required for backwards compatibility
25219     *Note Backwards Compatibility::.
25220
25221 G++ allows a virtual function returning `void *' to be overridden by
25222one returning a different pointer type.  This extension to the
25223covariant return type rules is now deprecated and will be removed from a
25224future version.
25225
25226 The G++ minimum and maximum operators (`<?' and `>?') and their
25227compound forms (`<?=') and `>?=') have been deprecated and will be
25228removed in a future version.  Code using these operators should be
25229modified to use `std::min' and `std::max' instead.
25230
25231 The named return value extension has been deprecated, and is now
25232removed from G++.
25233
25234 The use of initializer lists with new expressions has been deprecated,
25235and is now removed from G++.
25236
25237 Floating and complex non-type template parameters have been deprecated,
25238and are now removed from G++.
25239
25240 The implicit typename extension has been deprecated and is now removed
25241from G++.
25242
25243 The use of default arguments in function pointers, function typedefs
25244and other places where they are not permitted by the standard is
25245deprecated and will be removed from a future version of G++.
25246
25247 G++ allows floating-point literals to appear in integral constant
25248expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
25249deprecated and will be removed from a future version.
25250
25251 G++ allows static data members of const floating-point type to be
25252declared with an initializer in a class definition. The standard only
25253allows initializers for static members of const integral types and const
25254enumeration types so this extension has been deprecated and will be
25255removed from a future version.
25256
25257
25258File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
25259
252606.11 Backwards Compatibility
25261============================
25262
25263Now that there is a definitive ISO standard C++, G++ has a specification
25264to adhere to.  The C++ language evolved over time, and features that
25265used to be acceptable in previous drafts of the standard, such as the
25266ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
25267to allow compilation of C++ written to such drafts, G++ contains some
25268backwards compatibilities.  _All such backwards compatibility features
25269are liable to disappear in future versions of G++._ They should be
25270considered deprecated *Note Deprecated Features::.
25271
25272`For scope'
25273     If a variable is declared at for scope, it used to remain in scope
25274     until the end of the scope which contained the for statement
25275     (rather than just within the for scope).  G++ retains this, but
25276     issues a warning, if such a variable is accessed outside the for
25277     scope.
25278
25279`Implicit C language'
25280     Old C system header files did not contain an `extern "C" {...}'
25281     scope to set the language.  On such systems, all header files are
25282     implicitly scoped inside a C language scope.  Also, an empty
25283     prototype `()' will be treated as an unspecified number of
25284     arguments, rather than no arguments, as C++ demands.
25285
25286
25287File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
25288
252897 GNU Objective-C runtime features
25290**********************************
25291
25292This document is meant to describe some of the GNU Objective-C runtime
25293features.  It is not intended to teach you Objective-C, there are
25294several resources on the Internet that present the language.  Questions
25295and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
25296
25297* Menu:
25298
25299* Executing code before main::
25300* Type encoding::
25301* Garbage Collection::
25302* Constant string objects::
25303* compatibility_alias::
25304
25305
25306File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
25307
253087.1 `+load': Executing code before main
25309=======================================
25310
25311The GNU Objective-C runtime provides a way that allows you to execute
25312code before the execution of the program enters the `main' function.
25313The code is executed on a per-class and a per-category basis, through a
25314special class method `+load'.
25315
25316 This facility is very useful if you want to initialize global variables
25317which can be accessed by the program directly, without sending a message
25318to the class first.  The usual way to initialize global variables, in
25319the `+initialize' method, might not be useful because `+initialize' is
25320only called when the first message is sent to a class object, which in
25321some cases could be too late.
25322
25323 Suppose for example you have a `FileStream' class that declares
25324`Stdin', `Stdout' and `Stderr' as global variables, like below:
25325
25326
25327     FileStream *Stdin = nil;
25328     FileStream *Stdout = nil;
25329     FileStream *Stderr = nil;
25330
25331     @implementation FileStream
25332
25333     + (void)initialize
25334     {
25335         Stdin = [[FileStream new] initWithFd:0];
25336         Stdout = [[FileStream new] initWithFd:1];
25337         Stderr = [[FileStream new] initWithFd:2];
25338     }
25339
25340     /* Other methods here */
25341     @end
25342
25343 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
25344in `+initialize' occurs too late.  The programmer can send a message to
25345one of these objects before the variables are actually initialized,
25346thus sending messages to the `nil' object.  The `+initialize' method
25347which actually initializes the global variables is not invoked until
25348the first message is sent to the class object.  The solution would
25349require these variables to be initialized just before entering `main'.
25350
25351 The correct solution of the above problem is to use the `+load' method
25352instead of `+initialize':
25353
25354
25355     @implementation FileStream
25356
25357     + (void)load
25358     {
25359         Stdin = [[FileStream new] initWithFd:0];
25360         Stdout = [[FileStream new] initWithFd:1];
25361         Stderr = [[FileStream new] initWithFd:2];
25362     }
25363
25364     /* Other methods here */
25365     @end
25366
25367 The `+load' is a method that is not overridden by categories.  If a
25368class and a category of it both implement `+load', both methods are
25369invoked.  This allows some additional initializations to be performed in
25370a category.
25371
25372 This mechanism is not intended to be a replacement for `+initialize'.
25373You should be aware of its limitations when you decide to use it
25374instead of `+initialize'.
25375
25376* Menu:
25377
25378* What you can and what you cannot do in +load::
25379
25380
25381File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
25382
253837.1.1 What you can and what you cannot do in `+load'
25384----------------------------------------------------
25385
25386The `+load' implementation in the GNU runtime guarantees you the
25387following things:
25388
25389   * you can write whatever C code you like;
25390
25391   * you can send messages to Objective-C constant strings (`@"this is a
25392     constant string"');
25393
25394   * you can allocate and send messages to objects whose class is
25395     implemented in the same file;
25396
25397   * the `+load' implementation of all super classes of a class are
25398     executed before the `+load' of that class is executed;
25399
25400   * the `+load' implementation of a class is executed before the
25401     `+load' implementation of any category.
25402
25403
25404 In particular, the following things, even if they can work in a
25405particular case, are not guaranteed:
25406
25407   * allocation of or sending messages to arbitrary objects;
25408
25409   * allocation of or sending messages to objects whose classes have a
25410     category implemented in the same file;
25411
25412
25413 You should make no assumptions about receiving `+load' in sibling
25414classes when you write `+load' of a class.  The order in which sibling
25415classes receive `+load' is not guaranteed.
25416
25417 The order in which `+load' and `+initialize' are called could be
25418problematic if this matters.  If you don't allocate objects inside
25419`+load', it is guaranteed that `+load' is called before `+initialize'.
25420If you create an object inside `+load' the `+initialize' method of
25421object's class is invoked even if `+load' was not invoked.  Note if you
25422explicitly call `+load' on a class, `+initialize' will be called first.
25423To avoid possible problems try to implement only one of these methods.
25424
25425 The `+load' method is also invoked when a bundle is dynamically loaded
25426into your running program.  This happens automatically without any
25427intervening operation from you.  When you write bundles and you need to
25428write `+load' you can safely create and send messages to objects whose
25429classes already exist in the running program.  The same restrictions as
25430above apply to classes defined in bundle.
25431
25432
25433File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
25434
254357.2 Type encoding
25436=================
25437
25438The Objective-C compiler generates type encodings for all the types.
25439These type encodings are used at runtime to find out information about
25440selectors and methods and about objects and classes.
25441
25442 The types are encoded in the following way:
25443
25444`_Bool'            `B'
25445`char'             `c'
25446`unsigned char'    `C'
25447`short'            `s'
25448`unsigned short'   `S'
25449`int'              `i'
25450`unsigned int'     `I'
25451`long'             `l'
25452`unsigned long'    `L'
25453`long long'        `q'
25454`unsigned long     `Q'
25455long'
25456`float'            `f'
25457`double'           `d'
25458`void'             `v'
25459`id'               `@'
25460`Class'            `#'
25461`SEL'              `:'
25462`char*'            `*'
25463unknown type       `?'
25464Complex types      `j' followed by the inner type.  For example
25465                   `_Complex double' is encoded as "jd".
25466bit-fields         `b' followed by the starting position of the
25467                   bit-field, the type of the bit-field and the size of
25468                   the bit-field (the bit-fields encoding was changed
25469                   from the NeXT's compiler encoding, see below)
25470
25471 The encoding of bit-fields has changed to allow bit-fields to be
25472properly handled by the runtime functions that compute sizes and
25473alignments of types that contain bit-fields.  The previous encoding
25474contained only the size of the bit-field.  Using only this information
25475it is not possible to reliably compute the size occupied by the
25476bit-field.  This is very important in the presence of the Boehm's
25477garbage collector because the objects are allocated using the typed
25478memory facility available in this collector.  The typed memory
25479allocation requires information about where the pointers are located
25480inside the object.
25481
25482 The position in the bit-field is the position, counting in bits, of the
25483bit closest to the beginning of the structure.
25484
25485 The non-atomic types are encoded as follows:
25486
25487pointers       `^' followed by the pointed type.
25488arrays         `[' followed by the number of elements in the array
25489               followed by the type of the elements followed by `]'
25490structures     `{' followed by the name of the structure (or `?' if the
25491               structure is unnamed), the `=' sign, the type of the
25492               members and by `}'
25493unions         `(' followed by the name of the structure (or `?' if the
25494               union is unnamed), the `=' sign, the type of the members
25495               followed by `)'
25496
25497 Here are some types and their encodings, as they are generated by the
25498compiler on an i386 machine:
25499
25500
25501Objective-C type   Compiler encoding
25502     int a[10];    `[10i]'
25503     struct {      `{?=i[3f]b128i3b131i2c}'
25504       int i;
25505       float f[3];
25506       int a:3;
25507       int b:2;
25508       char c;
25509     }
25510
25511
25512 In addition to the types the compiler also encodes the type
25513specifiers.  The table below describes the encoding of the current
25514Objective-C type specifiers:
25515
25516
25517Specifier          Encoding
25518`const'            `r'
25519`in'               `n'
25520`inout'            `N'
25521`out'              `o'
25522`bycopy'           `O'
25523`oneway'           `V'
25524
25525
25526 The type specifiers are encoded just before the type.  Unlike types
25527however, the type specifiers are only encoded when they appear in method
25528argument types.
25529
25530
25531File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
25532
255337.3 Garbage Collection
25534======================
25535
25536Support for a new memory management policy has been added by using a
25537powerful conservative garbage collector, known as the
25538Boehm-Demers-Weiser conservative garbage collector.  It is available
25539from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
25540
25541 To enable the support for it you have to configure the compiler using
25542an additional argument, `--enable-objc-gc'.  You need to have garbage
25543collector installed before building the compiler.  This will build an
25544additional runtime library which has several enhancements to support
25545the garbage collector.  The new library has a new name, `libobjc_gc.a'
25546to not conflict with the non-garbage-collected library.
25547
25548 When the garbage collector is used, the objects are allocated using the
25549so-called typed memory allocation mechanism available in the
25550Boehm-Demers-Weiser collector.  This mode requires precise information
25551on where pointers are located inside objects.  This information is
25552computed once per class, immediately after the class has been
25553initialized.
25554
25555 There is a new runtime function `class_ivar_set_gcinvisible()' which
25556can be used to declare a so-called "weak pointer" reference.  Such a
25557pointer is basically hidden for the garbage collector; this can be
25558useful in certain situations, especially when you want to keep track of
25559the allocated objects, yet allow them to be collected.  This kind of
25560pointers can only be members of objects, you cannot declare a global
25561pointer as a weak reference.  Every type which is a pointer type can be
25562declared a weak pointer, including `id', `Class' and `SEL'.
25563
25564 Here is an example of how to use this feature.  Suppose you want to
25565implement a class whose instances hold a weak pointer reference; the
25566following class does this:
25567
25568
25569     @interface WeakPointer : Object
25570     {
25571         const void* weakPointer;
25572     }
25573
25574     - initWithPointer:(const void*)p;
25575     - (const void*)weakPointer;
25576     @end
25577
25578
25579     @implementation WeakPointer
25580
25581     + (void)initialize
25582     {
25583       class_ivar_set_gcinvisible (self, "weakPointer", YES);
25584     }
25585
25586     - initWithPointer:(const void*)p
25587     {
25588       weakPointer = p;
25589       return self;
25590     }
25591
25592     - (const void*)weakPointer
25593     {
25594       return weakPointer;
25595     }
25596
25597     @end
25598
25599 Weak pointers are supported through a new type character specifier
25600represented by the `!' character.  The `class_ivar_set_gcinvisible()'
25601function adds or removes this specifier to the string type description
25602of the instance variable named as argument.
25603
25604
25605File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
25606
256077.4 Constant string objects
25608===========================
25609
25610GNU Objective-C provides constant string objects that are generated
25611directly by the compiler.  You declare a constant string object by
25612prefixing a C constant string with the character `@':
25613
25614       id myString = @"this is a constant string object";
25615
25616 The constant string objects are by default instances of the
25617`NXConstantString' class which is provided by the GNU Objective-C
25618runtime.  To get the definition of this class you must include the
25619`objc/NXConstStr.h' header file.
25620
25621 User defined libraries may want to implement their own constant string
25622class.  To be able to support them, the GNU Objective-C compiler
25623provides a new command line options
25624`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
25625to a strict structure, the same as `NXConstantString''s structure:
25626
25627
25628     @interface MyConstantStringClass
25629     {
25630       Class isa;
25631       char *c_string;
25632       unsigned int len;
25633     }
25634     @end
25635
25636 `NXConstantString' inherits from `Object'; user class libraries may
25637choose to inherit the customized constant string class from a different
25638class than `Object'.  There is no requirement in the methods the
25639constant string class has to implement, but the final ivar layout of
25640the class must be the compatible with the given structure.
25641
25642 When the compiler creates the statically allocated constant string
25643object, the `c_string' field will be filled by the compiler with the
25644string; the `length' field will be filled by the compiler with the
25645string length; the `isa' pointer will be filled with `NULL' by the
25646compiler, and it will later be fixed up automatically at runtime by the
25647GNU Objective-C runtime library to point to the class which was set by
25648the `-fconstant-string-class' option when the object file is loaded (if
25649you wonder how it works behind the scenes, the name of the class to
25650use, and the list of static objects to fixup, are stored by the
25651compiler in the object file in a place where the GNU runtime library
25652will find them at runtime).
25653
25654 As a result, when a file is compiled with the
25655`-fconstant-string-class' option, all the constant string objects will
25656be instances of the class specified as argument to this option.  It is
25657possible to have multiple compilation units referring to different
25658constant string classes, neither the compiler nor the linker impose any
25659restrictions in doing this.
25660
25661
25662File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
25663
256647.5 compatibility_alias
25665=======================
25666
25667This is a feature of the Objective-C compiler rather than of the
25668runtime, anyway since it is documented nowhere and its existence was
25669forgotten, we are documenting it here.
25670
25671 The keyword `@compatibility_alias' allows you to define a class name
25672as equivalent to another class name.  For example:
25673
25674     @compatibility_alias WOApplication GSWApplication;
25675
25676 tells the compiler that each time it encounters `WOApplication' as a
25677class name, it should replace it with `GSWApplication' (that is,
25678`WOApplication' is just an alias for `GSWApplication').
25679
25680 There are some constraints on how this can be used--
25681
25682   * `WOApplication' (the alias) must not be an existing class;
25683
25684   * `GSWApplication' (the real class) must be an existing class.
25685
25686
25687
25688File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
25689
256908 Binary Compatibility
25691**********************
25692
25693Binary compatibility encompasses several related concepts:
25694
25695"application binary interface (ABI)"
25696     The set of runtime conventions followed by all of the tools that
25697     deal with binary representations of a program, including
25698     compilers, assemblers, linkers, and language runtime support.
25699     Some ABIs are formal with a written specification, possibly
25700     designed by multiple interested parties.  Others are simply the
25701     way things are actually done by a particular set of tools.
25702
25703"ABI conformance"
25704     A compiler conforms to an ABI if it generates code that follows
25705     all of the specifications enumerated by that ABI.  A library
25706     conforms to an ABI if it is implemented according to that ABI.  An
25707     application conforms to an ABI if it is built using tools that
25708     conform to that ABI and does not contain source code that
25709     specifically changes behavior specified by the ABI.
25710
25711"calling conventions"
25712     Calling conventions are a subset of an ABI that specify of how
25713     arguments are passed and function results are returned.
25714
25715"interoperability"
25716     Different sets of tools are interoperable if they generate files
25717     that can be used in the same program.  The set of tools includes
25718     compilers, assemblers, linkers, libraries, header files, startup
25719     files, and debuggers.  Binaries produced by different sets of
25720     tools are not interoperable unless they implement the same ABI.
25721     This applies to different versions of the same tools as well as
25722     tools from different vendors.
25723
25724"intercallability"
25725     Whether a function in a binary built by one set of tools can call a
25726     function in a binary built by a different set of tools is a subset
25727     of interoperability.
25728
25729"implementation-defined features"
25730     Language standards include lists of implementation-defined
25731     features whose behavior can vary from one implementation to
25732     another.  Some of these features are normally covered by a
25733     platform's ABI and others are not.  The features that are not
25734     covered by an ABI generally affect how a program behaves, but not
25735     intercallability.
25736
25737"compatibility"
25738     Conformance to the same ABI and the same behavior of
25739     implementation-defined features are both relevant for
25740     compatibility.
25741
25742 The application binary interface implemented by a C or C++ compiler
25743affects code generation and runtime support for:
25744
25745   * size and alignment of data types
25746
25747   * layout of structured types
25748
25749   * calling conventions
25750
25751   * register usage conventions
25752
25753   * interfaces for runtime arithmetic support
25754
25755   * object file formats
25756
25757 In addition, the application binary interface implemented by a C++
25758compiler affects code generation and runtime support for:
25759   * name mangling
25760
25761   * exception handling
25762
25763   * invoking constructors and destructors
25764
25765   * layout, alignment, and padding of classes
25766
25767   * layout and alignment of virtual tables
25768
25769 Some GCC compilation options cause the compiler to generate code that
25770does not conform to the platform's default ABI.  Other options cause
25771different program behavior for implementation-defined features that are
25772not covered by an ABI.  These options are provided for consistency with
25773other compilers that do not follow the platform's default ABI or the
25774usual behavior of implementation-defined features for the platform.  Be
25775very careful about using such options.
25776
25777 Most platforms have a well-defined ABI that covers C code, but ABIs
25778that cover C++ functionality are not yet common.
25779
25780 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
25781written, vendor-neutral C++ ABI that was designed to be specific to
2578264-bit Itanium but also includes generic specifications that apply to
25783any platform.  This C++ ABI is also implemented by other compiler
25784vendors on some platforms, notably GNU/Linux and BSD systems.  We have
25785tried hard to provide a stable ABI that will be compatible with future
25786GCC releases, but it is possible that we will encounter problems that
25787make this difficult.  Such problems could include different
25788interpretations of the C++ ABI by different vendors, bugs in the ABI, or
25789bugs in the implementation of the ABI in different compilers.  GCC's
25790`-Wabi' switch warns when G++ generates code that is probably not
25791compatible with the C++ ABI.
25792
25793 The C++ library used with a C++ compiler includes the Standard C++
25794Library, with functionality defined in the C++ Standard, plus language
25795runtime support.  The runtime support is included in a C++ ABI, but
25796there is no formal ABI for the Standard C++ Library.  Two
25797implementations of that library are interoperable if one follows the
25798de-facto ABI of the other and if they are both built with the same
25799compiler, or with compilers that conform to the same ABI for C++
25800compiler and runtime support.
25801
25802 When G++ and another C++ compiler conform to the same C++ ABI, but the
25803implementations of the Standard C++ Library that they normally use do
25804not follow the same ABI for the Standard C++ Library, object files
25805built with those compilers can be used in the same program only if they
25806use the same C++ library.  This requires specifying the location of the
25807C++ library header files when invoking the compiler whose usual library
25808is not being used.  The location of GCC's C++ header files depends on
25809how the GCC build was configured, but can be seen by using the G++ `-v'
25810option.  With default configuration options for G++ 3.3 the compile
25811line for a different C++ compiler needs to include
25812
25813         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
25814
25815 Similarly, compiling code with G++ that must use a C++ library other
25816than the GNU C++ library requires specifying the location of the header
25817files for that other library.
25818
25819 The most straightforward way to link a program to use a particular C++
25820library is to use a C++ driver that specifies that C++ library by
25821default.  The `g++' driver, for example, tells the linker where to find
25822GCC's C++ library (`libstdc++') plus the other libraries and startup
25823files it needs, in the proper order.
25824
25825 If a program must use a different C++ library and it's not possible to
25826do the final link using a C++ driver that uses that library by default,
25827it is necessary to tell `g++' the location and name of that library.
25828It might also be necessary to specify different startup files and other
25829runtime support libraries, and to suppress the use of GCC's support
25830libraries with one or more of the options `-nostdlib', `-nostartfiles',
25831and `-nodefaultlibs'.
25832
25833
25834File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
25835
258369 `gcov'--a Test Coverage Program
25837*********************************
25838
25839`gcov' is a tool you can use in conjunction with GCC to test code
25840coverage in your programs.
25841
25842* Menu:
25843
25844* Gcov Intro::         	        Introduction to gcov.
25845* Invoking Gcov::       	How to use gcov.
25846* Gcov and Optimization::       Using gcov with GCC optimization.
25847* Gcov Data Files::             The files used by gcov.
25848* Cross-profiling::             Data file relocation.
25849
25850
25851File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
25852
258539.1 Introduction to `gcov'
25854==========================
25855
25856`gcov' is a test coverage program.  Use it in concert with GCC to
25857analyze your programs to help create more efficient, faster running
25858code and to discover untested parts of your program.  You can use
25859`gcov' as a profiling tool to help discover where your optimization
25860efforts will best affect your code.  You can also use `gcov' along with
25861the other profiling tool, `gprof', to assess which parts of your code
25862use the greatest amount of computing time.
25863
25864 Profiling tools help you analyze your code's performance.  Using a
25865profiler such as `gcov' or `gprof', you can find out some basic
25866performance statistics, such as:
25867
25868   * how often each line of code executes
25869
25870   * what lines of code are actually executed
25871
25872   * how much computing time each section of code uses
25873
25874 Once you know these things about how your code works when compiled, you
25875can look at each module to see which modules should be optimized.
25876`gcov' helps you determine where to work on optimization.
25877
25878 Software developers also use coverage testing in concert with
25879testsuites, to make sure software is actually good enough for a release.
25880Testsuites can verify that a program works as expected; a coverage
25881program tests to see how much of the program is exercised by the
25882testsuite.  Developers can then determine what kinds of test cases need
25883to be added to the testsuites to create both better testing and a better
25884final product.
25885
25886 You should compile your code without optimization if you plan to use
25887`gcov' because the optimization, by combining some lines of code into
25888one function, may not give you as much information as you need to look
25889for `hot spots' where the code is using a great deal of computer time.
25890Likewise, because `gcov' accumulates statistics by line (at the lowest
25891resolution), it works best with a programming style that places only
25892one statement on each line.  If you use complicated macros that expand
25893to loops or to other control structures, the statistics are less
25894helpful--they only report on the line where the macro call appears.  If
25895your complex macros behave like functions, you can replace them with
25896inline functions to solve this problem.
25897
25898 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
25899many times each line of a source file `SOURCEFILE.c' has executed.  You
25900can use these logfiles along with `gprof' to aid in fine-tuning the
25901performance of your programs.  `gprof' gives timing information you can
25902use along with the information you get from `gcov'.
25903
25904 `gcov' works only on code compiled with GCC.  It is not compatible
25905with any other profiling or test coverage mechanism.
25906
25907
25908File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
25909
259109.2 Invoking `gcov'
25911===================
25912
25913     gcov [OPTIONS] SOURCEFILE
25914
25915 `gcov' accepts the following options:
25916
25917`-h'
25918`--help'
25919     Display help about using `gcov' (on the standard output), and exit
25920     without doing any further processing.
25921
25922`-v'
25923`--version'
25924     Display the `gcov' version number (on the standard output), and
25925     exit without doing any further processing.
25926
25927`-a'
25928`--all-blocks'
25929     Write individual execution counts for every basic block.  Normally
25930     gcov outputs execution counts only for the main blocks of a line.
25931     With this option you can determine if blocks within a single line
25932     are not being executed.
25933
25934`-b'
25935`--branch-probabilities'
25936     Write branch frequencies to the output file, and write branch
25937     summary info to the standard output.  This option allows you to
25938     see how often each branch in your program was taken.
25939     Unconditional branches will not be shown, unless the `-u' option
25940     is given.
25941
25942`-c'
25943`--branch-counts'
25944     Write branch frequencies as the number of branches taken, rather
25945     than the percentage of branches taken.
25946
25947`-n'
25948`--no-output'
25949     Do not create the `gcov' output file.
25950
25951`-l'
25952`--long-file-names'
25953     Create long file names for included source files.  For example, if
25954     the header file `x.h' contains code, and was included in the file
25955     `a.c', then running `gcov' on the file `a.c' will produce an
25956     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
25957     can be useful if `x.h' is included in multiple source files.  If
25958     you use the `-p' option, both the including and included file
25959     names will be complete path names.
25960
25961`-p'
25962`--preserve-paths'
25963     Preserve complete path information in the names of generated
25964     `.gcov' files.  Without this option, just the filename component is
25965     used.  With this option, all directories are used, with `/'
25966     characters translated to `#' characters, `.' directory components
25967     removed and `..' components renamed to `^'.  This is useful if
25968     sourcefiles are in several different directories.  It also affects
25969     the `-l' option.
25970
25971`-f'
25972`--function-summaries'
25973     Output summaries for each function in addition to the file level
25974     summary.
25975
25976`-o DIRECTORY|FILE'
25977`--object-directory DIRECTORY'
25978`--object-file FILE'
25979     Specify either the directory containing the gcov data files, or the
25980     object path name.  The `.gcno', and `.gcda' data files are
25981     searched for using this option.  If a directory is specified, the
25982     data files are in that directory and named after the source file
25983     name, without its extension.  If a file is specified here, the
25984     data files are named after that file, without its extension.  If
25985     this option is not supplied, it defaults to the current directory.
25986
25987`-u'
25988`--unconditional-branches'
25989     When branch probabilities are given, include those of
25990     unconditional branches.  Unconditional branches are normally not
25991     interesting.
25992
25993
25994 `gcov' should be run with the current directory the same as that when
25995you invoked the compiler.  Otherwise it will not be able to locate the
25996source files.  `gcov' produces files called `MANGLEDNAME.gcov' in the
25997current directory.  These contain the coverage information of the
25998source file they correspond to.  One `.gcov' file is produced for each
25999source file containing code, which was compiled to produce the data
26000files.  The MANGLEDNAME part of the output file name is usually simply
26001the source file name, but can be something more complicated if the `-l'
26002or `-p' options are given.  Refer to those options for details.
26003
26004 The `.gcov' files contain the `:' separated fields along with program
26005source code.  The format is
26006
26007     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
26008
26009 Additional block information may succeed each line, when requested by
26010command line option.  The EXECUTION_COUNT is `-' for lines containing
26011no code and `#####' for lines which were never executed.  Some lines of
26012information at the start have LINE_NUMBER of zero.
26013
26014 The preamble lines are of the form
26015
26016     -:0:TAG:VALUE
26017
26018 The ordering and number of these preamble lines will be augmented as
26019`gcov' development progresses -- do not rely on them remaining
26020unchanged.  Use TAG to locate a particular preamble line.
26021
26022 The additional block information is of the form
26023
26024     TAG INFORMATION
26025
26026 The INFORMATION is human readable, but designed to be simple enough
26027for machine parsing too.
26028
26029 When printing percentages, 0% and 100% are only printed when the values
26030are _exactly_ 0% and 100% respectively.  Other values which would
26031conventionally be rounded to 0% or 100% are instead printed as the
26032nearest non-boundary value.
26033
26034 When using `gcov', you must first compile your program with two
26035special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
26036compiler to generate additional information needed by gcov (basically a
26037flow graph of the program) and also includes additional code in the
26038object files for generating the extra profiling information needed by
26039gcov.  These additional files are placed in the directory where the
26040object file is located.
26041
26042 Running the program will cause profile output to be generated.  For
26043each source file compiled with `-fprofile-arcs', an accompanying
26044`.gcda' file will be placed in the object file directory.
26045
26046 Running `gcov' with your program's source file names as arguments will
26047now produce a listing of the code along with frequency of execution for
26048each line.  For example, if your program is called `tmp.c', this is
26049what you see when you use the basic `gcov' facility:
26050
26051     $ gcc -fprofile-arcs -ftest-coverage tmp.c
26052     $ a.out
26053     $ gcov tmp.c
26054     90.00% of 10 source lines executed in file tmp.c
26055     Creating tmp.c.gcov.
26056
26057 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
26058
26059             -:    0:Source:tmp.c
26060             -:    0:Graph:tmp.gcno
26061             -:    0:Data:tmp.gcda
26062             -:    0:Runs:1
26063             -:    0:Programs:1
26064             -:    1:#include <stdio.h>
26065             -:    2:
26066             -:    3:int main (void)
26067             1:    4:{
26068             1:    5:  int i, total;
26069             -:    6:
26070             1:    7:  total = 0;
26071             -:    8:
26072            11:    9:  for (i = 0; i < 10; i++)
26073            10:   10:    total += i;
26074             -:   11:
26075             1:   12:  if (total != 45)
26076         #####:   13:    printf ("Failure\n");
26077             -:   14:  else
26078             1:   15:    printf ("Success\n");
26079             1:   16:  return 0;
26080             -:   17:}
26081
26082 When you use the `-a' option, you will get individual block counts,
26083and the output looks like this:
26084
26085             -:    0:Source:tmp.c
26086             -:    0:Graph:tmp.gcno
26087             -:    0:Data:tmp.gcda
26088             -:    0:Runs:1
26089             -:    0:Programs:1
26090             -:    1:#include <stdio.h>
26091             -:    2:
26092             -:    3:int main (void)
26093             1:    4:{
26094             1:    4-block  0
26095             1:    5:  int i, total;
26096             -:    6:
26097             1:    7:  total = 0;
26098             -:    8:
26099            11:    9:  for (i = 0; i < 10; i++)
26100            11:    9-block  0
26101            10:   10:    total += i;
26102            10:   10-block  0
26103             -:   11:
26104             1:   12:  if (total != 45)
26105             1:   12-block  0
26106         #####:   13:    printf ("Failure\n");
26107         $$$$$:   13-block  0
26108             -:   14:  else
26109             1:   15:    printf ("Success\n");
26110             1:   15-block  0
26111             1:   16:  return 0;
26112             1:   16-block  0
26113             -:   17:}
26114
26115 In this mode, each basic block is only shown on one line - the last
26116line of the block.  A multi-line block will only contribute to the
26117execution count of that last line, and other lines will not be shown to
26118contain code, unless previous blocks end on those lines.  The total
26119execution count of a line is shown and subsequent lines show the
26120execution counts for individual blocks that end on that line.  After
26121each block, the branch and call counts of the block will be shown, if
26122the `-b' option is given.
26123
26124 Because of the way GCC instruments calls, a call count can be shown
26125after a line with no individual blocks.  As you can see, line 13
26126contains a basic block that was not executed.
26127
26128 When you use the `-b' option, your output looks like this:
26129
26130     $ gcov -b tmp.c
26131     90.00% of 10 source lines executed in file tmp.c
26132     80.00% of 5 branches executed in file tmp.c
26133     80.00% of 5 branches taken at least once in file tmp.c
26134     50.00% of 2 calls executed in file tmp.c
26135     Creating tmp.c.gcov.
26136
26137 Here is a sample of a resulting `tmp.c.gcov' file:
26138
26139             -:    0:Source:tmp.c
26140             -:    0:Graph:tmp.gcno
26141             -:    0:Data:tmp.gcda
26142             -:    0:Runs:1
26143             -:    0:Programs:1
26144             -:    1:#include <stdio.h>
26145             -:    2:
26146             -:    3:int main (void)
26147     function main called 1 returned 1 blocks executed 75%
26148             1:    4:{
26149             1:    5:  int i, total;
26150             -:    6:
26151             1:    7:  total = 0;
26152             -:    8:
26153            11:    9:  for (i = 0; i < 10; i++)
26154     branch  0 taken 91% (fallthrough)
26155     branch  1 taken 9%
26156            10:   10:    total += i;
26157             -:   11:
26158             1:   12:  if (total != 45)
26159     branch  0 taken 0% (fallthrough)
26160     branch  1 taken 100%
26161         #####:   13:    printf ("Failure\n");
26162     call    0 never executed
26163             -:   14:  else
26164             1:   15:    printf ("Success\n");
26165     call    0 called 1 returned 100%
26166             1:   16:  return 0;
26167             -:   17:}
26168
26169 For each function, a line is printed showing how many times the
26170function is called, how many times it returns and what percentage of the
26171function's blocks were executed.
26172
26173 For each basic block, a line is printed after the last line of the
26174basic block describing the branch or call that ends the basic block.
26175There can be multiple branches and calls listed for a single source
26176line if there are multiple basic blocks that end on that line.  In this
26177case, the branches and calls are each given a number.  There is no
26178simple way to map these branches and calls back to source constructs.
26179In general, though, the lowest numbered branch or call will correspond
26180to the leftmost construct on the source line.
26181
26182 For a branch, if it was executed at least once, then a percentage
26183indicating the number of times the branch was taken divided by the
26184number of times the branch was executed will be printed.  Otherwise, the
26185message "never executed" is printed.
26186
26187 For a call, if it was executed at least once, then a percentage
26188indicating the number of times the call returned divided by the number
26189of times the call was executed will be printed.  This will usually be
26190100%, but may be less for functions that call `exit' or `longjmp', and
26191thus may not return every time they are called.
26192
26193 The execution counts are cumulative.  If the example program were
26194executed again without removing the `.gcda' file, the count for the
26195number of times each line in the source was executed would be added to
26196the results of the previous run(s).  This is potentially useful in
26197several ways.  For example, it could be used to accumulate data over a
26198number of program runs as part of a test verification suite, or to
26199provide more accurate long-term information over a large number of
26200program runs.
26201
26202 The data in the `.gcda' files is saved immediately before the program
26203exits.  For each source file compiled with `-fprofile-arcs', the
26204profiling code first attempts to read in an existing `.gcda' file; if
26205the file doesn't match the executable (differing number of basic block
26206counts) it will ignore the contents of the file.  It then adds in the
26207new execution counts and finally writes the data to the file.
26208
26209
26210File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
26211
262129.3 Using `gcov' with GCC Optimization
26213======================================
26214
26215If you plan to use `gcov' to help optimize your code, you must first
26216compile your program with two special GCC options: `-fprofile-arcs
26217-ftest-coverage'.  Aside from that, you can use any other GCC options;
26218but if you want to prove that every single line in your program was
26219executed, you should not compile with optimization at the same time.
26220On some machines the optimizer can eliminate some simple code lines by
26221combining them with other lines.  For example, code like this:
26222
26223     if (a != b)
26224       c = 1;
26225     else
26226       c = 0;
26227
26228can be compiled into one instruction on some machines.  In this case,
26229there is no way for `gcov' to calculate separate execution counts for
26230each line because there isn't separate code for each line.  Hence the
26231`gcov' output looks like this if you compiled the program with
26232optimization:
26233
26234           100:   12:if (a != b)
26235           100:   13:  c = 1;
26236           100:   14:else
26237           100:   15:  c = 0;
26238
26239 The output shows that this block of code, combined by optimization,
26240executed 100 times.  In one sense this result is correct, because there
26241was only one instruction representing all four of these lines.  However,
26242the output does not indicate how many times the result was 0 and how
26243many times the result was 1.
26244
26245 Inlineable functions can create unexpected line counts.  Line counts
26246are shown for the source code of the inlineable function, but what is
26247shown depends on where the function is inlined, or if it is not inlined
26248at all.
26249
26250 If the function is not inlined, the compiler must emit an out of line
26251copy of the function, in any object file that needs it.  If `fileA.o'
26252and `fileB.o' both contain out of line bodies of a particular
26253inlineable function, they will also both contain coverage counts for
26254that function.  When `fileA.o' and `fileB.o' are linked together, the
26255linker will, on many systems, select one of those out of line bodies
26256for all calls to that function, and remove or ignore the other.
26257Unfortunately, it will not remove the coverage counters for the unused
26258function body.  Hence when instrumented, all but one use of that
26259function will show zero counts.
26260
26261 If the function is inlined in several places, the block structure in
26262each location might not be the same.  For instance, a condition might
26263now be calculable at compile time in some instances.  Because the
26264coverage of all the uses of the inline function will be shown for the
26265same source lines, the line counts themselves might seem inconsistent.
26266
26267
26268File: gcc.info,  Node: Gcov Data Files,  Next: Cross-profiling,  Prev: Gcov and Optimization,  Up: Gcov
26269
262709.4 Brief description of `gcov' data files
26271==========================================
26272
26273`gcov' uses two files for profiling.  The names of these files are
26274derived from the original _object_ file by substituting the file suffix
26275with either `.gcno', or `.gcda'.  All of these files are placed in the
26276same directory as the object file, and contain data stored in a
26277platform-independent format.
26278
26279 The `.gcno' file is generated when the source file is compiled with
26280the GCC `-ftest-coverage' option.  It contains information to
26281reconstruct the basic block graphs and assign source line numbers to
26282blocks.
26283
26284 The `.gcda' file is generated when a program containing object files
26285built with the GCC `-fprofile-arcs' option is executed.  A separate
26286`.gcda' file is created for each object file compiled with this option.
26287It contains arc transition counts, and some summary information.
26288
26289 The full details of the file format is specified in `gcov-io.h', and
26290functions provided in that header file should be used to access the
26291coverage files.
26292
26293
26294File: gcc.info,  Node: Cross-profiling,  Prev: Gcov Data Files,  Up: Gcov
26295
262969.5 Data file relocation to support cross-profiling
26297===================================================
26298
26299Running the program will cause profile output to be generated.  For each
26300source file compiled with `-fprofile-arcs', an accompanying `.gcda'
26301file will be placed in the object file directory. That implicitly
26302requires running the program on the same system as it was built or
26303having the same absolute directory structure on the target system. The
26304program will try to create the needed directory structure, if it is not
26305already present.
26306
26307 To support cross-profiling, a program compiled with `-fprofile-arcs'
26308can relocate the data files based on two environment variables:
26309
26310   * GCOV_PREFIX contains the prefix to add to the absolute paths in
26311     the object file. Prefix must be absolute as well, otherwise its
26312     value is ignored. The default is no prefix.
26313
26314   * GCOV_PREFIX_STRIP indicates the how many initial directory names
26315     to strip off the hardwired absolute paths. Default value is 0.
26316
26317     _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is
26318     undefined, empty or non-absolute.
26319
26320 For example, if the object file `/user/build/foo.o' was built with
26321`-fprofile-arcs', the final executable will try to create the data file
26322`/user/build/foo.gcda' when running on the target system.  This will
26323fail if the corresponding directory does not exist and it is unable to
26324create it.  This can be overcome by, for example, setting the
26325environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
26326Such a setting will name the data file `/target/run/build/foo.gcda'.
26327
26328 You must move the data files to the expected directory tree in order to
26329use them for profile directed optimizations (`--use-profile'), or to
26330use the `gcov' tool.
26331
26332
26333File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
26334
2633510 Known Causes of Trouble with GCC
26336***********************************
26337
26338This section describes known problems that affect users of GCC.  Most
26339of these are not GCC bugs per se--if they were, we would fix them.  But
26340the result for a user may be like the result of a bug.
26341
26342 Some of these problems are due to bugs in other software, some are
26343missing features that are too much work to add, and some are places
26344where people's opinions differ as to what is best.
26345
26346* Menu:
26347
26348* Actual Bugs::		      Bugs we will fix later.
26349* Cross-Compiler Problems::   Common problems of cross compiling with GCC.
26350* Interoperation::      Problems using GCC with other compilers,
26351			   and with certain linkers, assemblers and debuggers.
26352* Incompatibilities::   GCC is incompatible with traditional C.
26353* Fixed Headers::       GCC uses corrected versions of system header files.
26354                           This is necessary, but doesn't always work smoothly.
26355* Standard Libraries::  GCC uses the system C library, which might not be
26356                           compliant with the ISO C standard.
26357* Disappointments::     Regrettable things we can't change, but not quite bugs.
26358* C++ Misunderstandings::     Common misunderstandings with GNU C++.
26359* Protoize Caveats::    Things to watch out for when using `protoize'.
26360* Non-bugs::		Things we think are right, but some others disagree.
26361* Warnings and Errors:: Which problems in your code get warnings,
26362                         and which get errors.
26363
26364
26365File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
26366
2636710.1 Actual Bugs We Haven't Fixed Yet
26368=====================================
26369
26370   * The `fixincludes' script interacts badly with automounters; if the
26371     directory of system header files is automounted, it tends to be
26372     unmounted while `fixincludes' is running.  This would seem to be a
26373     bug in the automounter.  We don't know any good way to work around
26374     it.
26375
26376   * The `fixproto' script will sometimes add prototypes for the
26377     `sigsetjmp' and `siglongjmp' functions that reference the
26378     `jmp_buf' type before that type is defined.  To work around this,
26379     edit the offending file and place the typedef in front of the
26380     prototypes.
26381
26382
26383File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
26384
2638510.2 Cross-Compiler Problems
26386============================
26387
26388You may run into problems with cross compilation on certain machines,
26389for several reasons.
26390
26391   * At present, the program `mips-tfile' which adds debug support to
26392     object files on MIPS systems does not work in a cross compile
26393     environment.
26394
26395
26396File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
26397
2639810.3 Interoperation
26399===================
26400
26401This section lists various difficulties encountered in using GCC
26402together with other compilers or with the assemblers, linkers,
26403libraries and debuggers on certain systems.
26404
26405   * On many platforms, GCC supports a different ABI for C++ than do
26406     other compilers, so the object files compiled by GCC cannot be
26407     used with object files generated by another C++ compiler.
26408
26409     An area where the difference is most apparent is name mangling.
26410     The use of different name mangling is intentional, to protect you
26411     from more subtle problems.  Compilers differ as to many internal
26412     details of C++ implementation, including: how class instances are
26413     laid out, how multiple inheritance is implemented, and how virtual
26414     function calls are handled.  If the name encoding were made the
26415     same, your programs would link against libraries provided from
26416     other compilers--but the programs would then crash when run.
26417     Incompatible libraries are then detected at link time, rather than
26418     at run time.
26419
26420   * On some BSD systems, including some versions of Ultrix, use of
26421     profiling causes static variable destructors (currently used only
26422     in C++) not to be run.
26423
26424   * On some SGI systems, when you use `-lgl_s' as an option, it gets
26425     translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
26426     does not happen when you use GCC.  You must specify all three
26427     options explicitly.
26428
26429   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
26430     boundary, and it expects every `double' to be so aligned.  The Sun
26431     compiler usually gives `double' values 8-byte alignment, with one
26432     exception: function arguments of type `double' may not be aligned.
26433
26434     As a result, if a function compiled with Sun CC takes the address
26435     of an argument of type `double' and passes this pointer of type
26436     `double *' to a function compiled with GCC, dereferencing the
26437     pointer may cause a fatal signal.
26438
26439     One way to solve this problem is to compile your entire program
26440     with GCC.  Another solution is to modify the function that is
26441     compiled with Sun CC to copy the argument into a local variable;
26442     local variables are always properly aligned.  A third solution is
26443     to modify the function that uses the pointer to dereference it via
26444     the following function `access_double' instead of directly with
26445     `*':
26446
26447          inline double
26448          access_double (double *unaligned_ptr)
26449          {
26450            union d2i { double d; int i[2]; };
26451
26452            union d2i *p = (union d2i *) unaligned_ptr;
26453            union d2i u;
26454
26455            u.i[0] = p->i[0];
26456            u.i[1] = p->i[1];
26457
26458            return u.d;
26459          }
26460
26461     Storing into the pointer can be done likewise with the same union.
26462
26463   * On Solaris, the `malloc' function in the `libmalloc.a' library may
26464     allocate memory that is only 4 byte aligned.  Since GCC on the
26465     SPARC assumes that doubles are 8 byte aligned, this may result in a
26466     fatal signal if doubles are stored in memory allocated by the
26467     `libmalloc.a' library.
26468
26469     The solution is to not use the `libmalloc.a' library.  Use instead
26470     `malloc' and related functions from `libc.a'; they do not have
26471     this problem.
26472
26473   * On the HP PA machine, ADB sometimes fails to work on functions
26474     compiled with GCC.  Specifically, it fails to work on functions
26475     that use `alloca' or variable-size arrays.  This is because GCC
26476     doesn't generate HP-UX unwind descriptors for such functions.  It
26477     may even be impossible to generate them.
26478
26479   * Debugging (`-g') is not supported on the HP PA machine, unless you
26480     use the preliminary GNU tools.
26481
26482   * Taking the address of a label may generate errors from the HP-UX
26483     PA assembler.  GAS for the PA does not have this problem.
26484
26485   * Using floating point parameters for indirect calls to static
26486     functions will not work when using the HP assembler.  There simply
26487     is no way for GCC to specify what registers hold arguments for
26488     static functions when using the HP assembler.  GAS for the PA does
26489     not have this problem.
26490
26491   * In extremely rare cases involving some very large functions you may
26492     receive errors from the HP linker complaining about an out of
26493     bounds unconditional branch offset.  This used to occur more often
26494     in previous versions of GCC, but is now exceptionally rare.  If
26495     you should run into it, you can work around by making your
26496     function smaller.
26497
26498   * GCC compiled code sometimes emits warnings from the HP-UX
26499     assembler of the form:
26500
26501          (warning) Use of GR3 when
26502            frame >= 8192 may cause conflict.
26503
26504     These warnings are harmless and can be safely ignored.
26505
26506   * In extremely rare cases involving some very large functions you may
26507     receive errors from the AIX Assembler complaining about a
26508     displacement that is too large.  If you should run into it, you
26509     can work around by making your function smaller.
26510
26511   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
26512     semantics which merges global symbols between libraries and
26513     applications, especially necessary for C++ streams functionality.
26514     This is not the default behavior of AIX shared libraries and
26515     dynamic linking.  `libstdc++.a' is built on AIX with
26516     "runtime-linking" enabled so that symbol merging can occur.  To
26517     utilize this feature, the application linked with `libstdc++.a'
26518     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
26519     impose this because this option may interfere with the semantics
26520     of the user program and users may not always use `g++' to link his
26521     or her application.  Applications are not required to use the
26522     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
26523     library which is not dependent on the symbol merging semantics
26524     will continue to function correctly.
26525
26526   * An application can interpose its own definition of functions for
26527     functions invoked by `libstdc++.a' with "runtime-linking" enabled
26528     on AIX.  To accomplish this the application must be linked with
26529     "runtime-linking" option and the functions explicitly must be
26530     exported by the application (`-Wl,-brtl,-bE:exportfile').
26531
26532   * AIX on the RS/6000 provides support (NLS) for environments outside
26533     of the United States.  Compilers and assemblers use NLS to support
26534     locale-specific representations of various objects including
26535     floating-point numbers (`.' vs `,' for separating decimal
26536     fractions).  There have been problems reported where the library
26537     linked with GCC does not produce the same floating-point formats
26538     that the assembler accepts.  If you have this problem, set the
26539     `LANG' environment variable to `C' or `En_US'.
26540
26541   * Even if you specify `-fdollars-in-identifiers', you cannot
26542     successfully use `$' in identifiers on the RS/6000 due to a
26543     restriction in the IBM assembler.  GAS supports these identifiers.
26544
26545   * On Ultrix, the Fortran compiler expects registers 2 through 5 to
26546     be saved by function calls.  However, the C compiler uses
26547     conventions compatible with BSD Unix: registers 2 through 5 may be
26548     clobbered by function calls.
26549
26550     GCC uses the same convention as the Ultrix C compiler.  You can use
26551     these options to produce code compatible with the Fortran compiler:
26552
26553          -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
26554
26555
26556File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: Interoperation,  Up: Trouble
26557
2655810.4 Incompatibilities of GCC
26559=============================
26560
26561There are several noteworthy incompatibilities between GNU C and K&R
26562(non-ISO) versions of C.
26563
26564   * GCC normally makes string constants read-only.  If several
26565     identical-looking string constants are used, GCC stores only one
26566     copy of the string.
26567
26568     One consequence is that you cannot call `mktemp' with a string
26569     constant argument.  The function `mktemp' always alters the string
26570     its argument points to.
26571
26572     Another consequence is that `sscanf' does not work on some very
26573     old systems when passed a string constant as its format control
26574     string or input.  This is because `sscanf' incorrectly tries to
26575     write into the string constant.  Likewise `fscanf' and `scanf'.
26576
26577     The solution to these problems is to change the program to use
26578     `char'-array variables with initialization strings for these
26579     purposes instead of string constants.
26580
26581   * `-2147483648' is positive.
26582
26583     This is because 2147483648 cannot fit in the type `int', so
26584     (following the ISO C rules) its data type is `unsigned long int'.
26585     Negating this value yields 2147483648 again.
26586
26587   * GCC does not substitute macro arguments when they appear inside of
26588     string constants.  For example, the following macro in GCC
26589
26590          #define foo(a) "a"
26591
26592     will produce output `"a"' regardless of what the argument A is.
26593
26594   * When you use `setjmp' and `longjmp', the only automatic variables
26595     guaranteed to remain valid are those declared `volatile'.  This is
26596     a consequence of automatic register allocation.  Consider this
26597     function:
26598
26599          jmp_buf j;
26600
26601          foo ()
26602          {
26603            int a, b;
26604
26605            a = fun1 ();
26606            if (setjmp (j))
26607              return a;
26608
26609            a = fun2 ();
26610            /* `longjmp (j)' may occur in `fun3'. */
26611            return a + fun3 ();
26612          }
26613
26614     Here `a' may or may not be restored to its first value when the
26615     `longjmp' occurs.  If `a' is allocated in a register, then its
26616     first value is restored; otherwise, it keeps the last value stored
26617     in it.
26618
26619     If you use the `-W' option with the `-O' option, you will get a
26620     warning when GCC thinks such a problem might be possible.
26621
26622   * Programs that use preprocessing directives in the middle of macro
26623     arguments do not work with GCC.  For example, a program like this
26624     will not work:
26625
26626          foobar (
26627          #define luser
26628                  hack)
26629
26630     ISO C does not permit such a construct.
26631
26632   * K&R compilers allow comments to cross over an inclusion boundary
26633     (i.e. started in an include file and ended in the including file).
26634
26635   * Declarations of external variables and functions within a block
26636     apply only to the block containing the declaration.  In other
26637     words, they have the same scope as any other declaration in the
26638     same place.
26639
26640     In some other C compilers, a `extern' declaration affects all the
26641     rest of the file even if it happens within a block.
26642
26643   * In traditional C, you can combine `long', etc., with a typedef
26644     name, as shown here:
26645
26646          typedef int foo;
26647          typedef long foo bar;
26648
26649     In ISO C, this is not allowed: `long' and other type modifiers
26650     require an explicit `int'.
26651
26652   * PCC allows typedef names to be used as function parameters.
26653
26654   * Traditional C allows the following erroneous pair of declarations
26655     to appear together in a given scope:
26656
26657          typedef int foo;
26658          typedef foo foo;
26659
26660   * GCC treats all characters of identifiers as significant.
26661     According to K&R-1 (2.2), "No more than the first eight characters
26662     are significant, although more may be used.".  Also according to
26663     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
26664     the first character must be a letter.  The underscore _ counts as
26665     a letter.", but GCC also allows dollar signs in identifiers.
26666
26667   * PCC allows whitespace in the middle of compound assignment
26668     operators such as `+='.  GCC, following the ISO standard, does not
26669     allow this.
26670
26671   * GCC complains about unterminated character constants inside of
26672     preprocessing conditionals that fail.  Some programs have English
26673     comments enclosed in conditionals that are guaranteed to fail; if
26674     these comments contain apostrophes, GCC will probably report an
26675     error.  For example, this code would produce an error:
26676
26677          #if 0
26678          You can't expect this to work.
26679          #endif
26680
26681     The best solution to such a problem is to put the text into an
26682     actual C comment delimited by `/*...*/'.
26683
26684   * Many user programs contain the declaration `long time ();'.  In the
26685     past, the system header files on many systems did not actually
26686     declare `time', so it did not matter what type your program
26687     declared it to return.  But in systems with ISO C headers, `time'
26688     is declared to return `time_t', and if that is not the same as
26689     `long', then `long time ();' is erroneous.
26690
26691     The solution is to change your program to use appropriate system
26692     headers (`<time.h>' on systems with ISO C headers) and not to
26693     declare `time' if the system header files declare it, or failing
26694     that to use `time_t' as the return type of `time'.
26695
26696   * When compiling functions that return `float', PCC converts it to a
26697     double.  GCC actually returns a `float'.  If you are concerned
26698     with PCC compatibility, you should declare your functions to return
26699     `double'; you might as well say what you mean.
26700
26701   * When compiling functions that return structures or unions, GCC
26702     output code normally uses a method different from that used on most
26703     versions of Unix.  As a result, code compiled with GCC cannot call
26704     a structure-returning function compiled with PCC, and vice versa.
26705
26706     The method used by GCC is as follows: a structure or union which is
26707     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
26708     union with any other size is stored into an address supplied by
26709     the caller (usually in a special, fixed register, but on some
26710     machines it is passed on the stack).  The target hook
26711     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
26712
26713     By contrast, PCC on most target machines returns structures and
26714     unions of any size by copying the data into an area of static
26715     storage, and then returning the address of that storage as if it
26716     were a pointer value.  The caller must copy the data from that
26717     memory area to the place where the value is wanted.  GCC does not
26718     use this method because it is slower and nonreentrant.
26719
26720     On some newer machines, PCC uses a reentrant convention for all
26721     structure and union returning.  GCC on most of these machines uses
26722     a compatible convention when returning structures and unions in
26723     memory, but still returns small structures and unions in registers.
26724
26725     You can tell GCC to use a compatible convention for all structure
26726     and union returning with the option `-fpcc-struct-return'.
26727
26728   * GCC complains about program fragments such as `0x74ae-0x4000'
26729     which appear to be two hexadecimal constants separated by the minus
26730     operator.  Actually, this string is a single "preprocessing token".
26731     Each such token must correspond to one token in C.  Since this
26732     does not, GCC prints an error message.  Although it may appear
26733     obvious that what is meant is an operator and two values, the ISO
26734     C standard specifically requires that this be treated as erroneous.
26735
26736     A "preprocessing token" is a "preprocessing number" if it begins
26737     with a digit and is followed by letters, underscores, digits,
26738     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
26739     character sequences.  (In strict C89 mode, the sequences `p+',
26740     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
26741
26742     To make the above program fragment valid, place whitespace in
26743     front of the minus sign.  This whitespace will end the
26744     preprocessing number.
26745
26746
26747File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
26748
2674910.5 Fixed Header Files
26750=======================
26751
26752GCC needs to install corrected versions of some system header files.
26753This is because most target systems have some header files that won't
26754work with GCC unless they are changed.  Some have bugs, some are
26755incompatible with ISO C, and some depend on special features of other
26756compilers.
26757
26758 Installing GCC automatically creates and installs the fixed header
26759files, by running a program called `fixincludes'.  Normally, you don't
26760need to pay attention to this.  But there are cases where it doesn't do
26761the right thing automatically.
26762
26763   * If you update the system's header files, such as by installing a
26764     new system version, the fixed header files of GCC are not
26765     automatically updated.  They can be updated using the `mkheaders'
26766     script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
26767
26768   * On some systems, header file directories contain machine-specific
26769     symbolic links in certain places.  This makes it possible to share
26770     most of the header files among hosts running the same version of
26771     the system on different machine models.
26772
26773     The programs that fix the header files do not understand this
26774     special way of using symbolic links; therefore, the directory of
26775     fixed header files is good only for the machine model used to
26776     build it.
26777
26778     It is possible to make separate sets of fixed header files for the
26779     different machine models, and arrange a structure of symbolic
26780     links so as to use the proper set, but you'll have to do this by
26781     hand.
26782
26783
26784File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
26785
2678610.6 Standard Libraries
26787=======================
26788
26789GCC by itself attempts to be a conforming freestanding implementation.
26790*Note Language Standards Supported by GCC: Standards, for details of
26791what this means.  Beyond the library facilities required of such an
26792implementation, the rest of the C library is supplied by the vendor of
26793the operating system.  If that C library doesn't conform to the C
26794standards, then your programs might get warnings (especially when using
26795`-Wall') that you don't expect.
26796
26797 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
26798while the C standard says that `sprintf' returns an `int'.  The
26799`fixincludes' program could make the prototype for this function match
26800the Standard, but that would be wrong, since the function will still
26801return `char *'.
26802
26803 If you need a Standard compliant library, then you need to find one, as
26804GCC does not provide one.  The GNU C library (called `glibc') provides
26805ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
26806HURD-based GNU systems; no recent version of it supports other systems,
26807though some very old versions did.  Version 2.2 of the GNU C library
26808includes nearly complete C99 support.  You could also ask your
26809operating system vendor if newer libraries are available.
26810
26811
26812File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
26813
2681410.7 Disappointments and Misunderstandings
26815==========================================
26816
26817These problems are perhaps regrettable, but we don't know any practical
26818way around them.
26819
26820   * Certain local variables aren't recognized by debuggers when you
26821     compile with optimization.
26822
26823     This occurs because sometimes GCC optimizes the variable out of
26824     existence.  There is no way to tell the debugger how to compute the
26825     value such a variable "would have had", and it is not clear that
26826     would be desirable anyway.  So GCC simply does not mention the
26827     eliminated variable when it writes debugging information.
26828
26829     You have to expect a certain amount of disagreement between the
26830     executable and your source code, when you use optimization.
26831
26832   * Users often think it is a bug when GCC reports an error for code
26833     like this:
26834
26835          int foo (struct mumble *);
26836
26837          struct mumble { ... };
26838
26839          int foo (struct mumble *x)
26840          { ... }
26841
26842     This code really is erroneous, because the scope of `struct
26843     mumble' in the prototype is limited to the argument list
26844     containing it.  It does not refer to the `struct mumble' defined
26845     with file scope immediately below--they are two unrelated types
26846     with similar names in different scopes.
26847
26848     But in the definition of `foo', the file-scope type is used
26849     because that is available to be inherited.  Thus, the definition
26850     and the prototype do not match, and you get an error.
26851
26852     This behavior may seem silly, but it's what the ISO standard
26853     specifies.  It is easy enough for you to make your code work by
26854     moving the definition of `struct mumble' above the prototype.
26855     It's not worth being incompatible with ISO C just to avoid an
26856     error for the example shown above.
26857
26858   * Accesses to bit-fields even in volatile objects works by accessing
26859     larger objects, such as a byte or a word.  You cannot rely on what
26860     size of object is accessed in order to read or write the
26861     bit-field; it may even vary for a given bit-field according to the
26862     precise usage.
26863
26864     If you care about controlling the amount of memory that is
26865     accessed, use volatile but do not use bit-fields.
26866
26867   * GCC comes with shell scripts to fix certain known problems in
26868     system header files.  They install corrected copies of various
26869     header files in a special directory where only GCC will normally
26870     look for them.  The scripts adapt to various systems by searching
26871     all the system header files for the problem cases that we know
26872     about.
26873
26874     If new system header files are installed, nothing automatically
26875     arranges to update the corrected header files.  They can be
26876     updated using the `mkheaders' script installed in
26877     `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
26878
26879   * On 68000 and x86 systems, for instance, you can get paradoxical
26880     results if you test the precise values of floating point numbers.
26881     For example, you can find that a floating point value which is not
26882     a NaN is not equal to itself.  This results from the fact that the
26883     floating point registers hold a few more bits of precision than
26884     fit in a `double' in memory.  Compiled code moves values between
26885     memory and floating point registers at its convenience, and moving
26886     them into memory truncates them.
26887
26888     You can partially avoid this problem by using the `-ffloat-store'
26889     option (*note Optimize Options::).
26890
26891   * On AIX and other platforms without weak symbol support, templates
26892     need to be instantiated explicitly and symbols for static members
26893     of templates will not be generated.
26894
26895   * On AIX, GCC scans object files and library archives for static
26896     constructors and destructors when linking an application before the
26897     linker prunes unreferenced symbols.  This is necessary to prevent
26898     the AIX linker from mistakenly assuming that static constructor or
26899     destructor are unused and removing them before the scanning can
26900     occur.  All static constructors and destructors found will be
26901     referenced even though the modules in which they occur may not be
26902     used by the program.  This may lead to both increased executable
26903     size and unexpected symbol references.
26904
26905
26906File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
26907
2690810.8 Common Misunderstandings with GNU C++
26909==========================================
26910
26911C++ is a complex language and an evolving one, and its standard
26912definition (the ISO C++ standard) was only recently completed.  As a
26913result, your C++ compiler may occasionally surprise you, even when its
26914behavior is correct.  This section discusses some areas that frequently
26915give rise to questions of this sort.
26916
26917* Menu:
26918
26919* Static Definitions::  Static member declarations are not definitions
26920* Name lookup::         Name lookup, templates, and accessing members of base classes
26921* Temporaries::         Temporaries may vanish before you expect
26922* Copy Assignment::     Copy Assignment operators copy virtual bases twice
26923
26924
26925File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
26926
2692710.8.1 Declare _and_ Define Static Members
26928------------------------------------------
26929
26930When a class has static data members, it is not enough to _declare_ the
26931static member; you must also _define_ it.  For example:
26932
26933     class Foo
26934     {
26935       ...
26936       void method();
26937       static int bar;
26938     };
26939
26940 This declaration only establishes that the class `Foo' has an `int'
26941named `Foo::bar', and a member function named `Foo::method'.  But you
26942still need to define _both_ `method' and `bar' elsewhere.  According to
26943the ISO standard, you must supply an initializer in one (and only one)
26944source file, such as:
26945
26946     int Foo::bar = 0;
26947
26948 Other C++ compilers may not correctly implement the standard behavior.
26949As a result, when you switch to `g++' from one of these compilers, you
26950may discover that a program that appeared to work correctly in fact
26951does not conform to the standard: `g++' reports as undefined symbols
26952any static data members that lack definitions.
26953
26954
26955File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
26956
2695710.8.2 Name lookup, templates, and accessing members of base classes
26958--------------------------------------------------------------------
26959
26960The C++ standard prescribes that all names that are not dependent on
26961template parameters are bound to their present definitions when parsing
26962a template function or class.(1)  Only names that are dependent are
26963looked up at the point of instantiation.  For example, consider
26964
26965       void foo(double);
26966
26967       struct A {
26968         template <typename T>
26969         void f () {
26970           foo (1);        // 1
26971           int i = N;      // 2
26972           T t;
26973           t.bar();        // 3
26974           foo (t);        // 4
26975         }
26976
26977         static const int N;
26978       };
26979
26980 Here, the names `foo' and `N' appear in a context that does not depend
26981on the type of `T'.  The compiler will thus require that they are
26982defined in the context of use in the template, not only before the
26983point of instantiation, and will here use `::foo(double)' and `A::N',
26984respectively.  In particular, it will convert the integer value to a
26985`double' when passing it to `::foo(double)'.
26986
26987 Conversely, `bar' and the call to `foo' in the fourth marked line are
26988used in contexts that do depend on the type of `T', so they are only
26989looked up at the point of instantiation, and you can provide
26990declarations for them after declaring the template, but before
26991instantiating it.  In particular, if you instantiate `A::f<int>', the
26992last line will call an overloaded `::foo(int)' if one was provided,
26993even if after the declaration of `struct A'.
26994
26995 This distinction between lookup of dependent and non-dependent names is
26996called two-stage (or dependent) name lookup.  G++ implements it since
26997version 3.4.
26998
26999 Two-stage name lookup sometimes leads to situations with behavior
27000different from non-template codes.  The most common is probably this:
27001
27002       template <typename T> struct Base {
27003         int i;
27004       };
27005
27006       template <typename T> struct Derived : public Base<T> {
27007         int get_i() { return i; }
27008       };
27009
27010 In `get_i()', `i' is not used in a dependent context, so the compiler
27011will look for a name declared at the enclosing namespace scope (which
27012is the global scope here).  It will not look into the base class, since
27013that is dependent and you may declare specializations of `Base' even
27014after declaring `Derived', so the compiler can't really know what `i'
27015would refer to.  If there is no global variable `i', then you will get
27016an error message.
27017
27018 In order to make it clear that you want the member of the base class,
27019you need to defer lookup until instantiation time, at which the base
27020class is known.  For this, you need to access `i' in a dependent
27021context, by either using `this->i' (remember that `this' is of type
27022`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
27023Alternatively, `Base<T>::i' might be brought into scope by a
27024`using'-declaration.
27025
27026 Another, similar example involves calling member functions of a base
27027class:
27028
27029       template <typename T> struct Base {
27030           int f();
27031       };
27032
27033       template <typename T> struct Derived : Base<T> {
27034           int g() { return f(); };
27035       };
27036
27037 Again, the call to `f()' is not dependent on template arguments (there
27038are no arguments that depend on the type `T', and it is also not
27039otherwise specified that the call should be in a dependent context).
27040Thus a global declaration of such a function must be available, since
27041the one in the base class is not visible until instantiation time.  The
27042compiler will consequently produce the following error message:
27043
27044       x.cc: In member function `int Derived<T>::g()':
27045       x.cc:6: error: there are no arguments to `f' that depend on a template
27046          parameter, so a declaration of `f' must be available
27047       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
27048          allowing the use of an undeclared name is deprecated)
27049
27050 To make the code valid either use `this->f()', or `Base<T>::f()'.
27051Using the `-fpermissive' flag will also let the compiler accept the
27052code, by marking all function calls for which no declaration is visible
27053at the time of definition of the template for later lookup at
27054instantiation time, as if it were a dependent call.  We do not
27055recommend using `-fpermissive' to work around invalid code, and it will
27056also only catch cases where functions in base classes are called, not
27057where variables in base classes are used (as in the example above).
27058
27059 Note that some compilers (including G++ versions prior to 3.4) get
27060these examples wrong and accept above code without an error.  Those
27061compilers do not implement two-stage name lookup correctly.
27062
27063 ---------- Footnotes ----------
27064
27065 (1) The C++ standard just uses the term "dependent" for names that
27066depend on the type or value of template parameters.  This shorter term
27067will also be used in the rest of this section.
27068
27069
27070File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
27071
2707210.8.3 Temporaries May Vanish Before You Expect
27073-----------------------------------------------
27074
27075It is dangerous to use pointers or references to _portions_ of a
27076temporary object.  The compiler may very well delete the object before
27077you expect it to, leaving a pointer to garbage.  The most common place
27078where this problem crops up is in classes like string classes,
27079especially ones that define a conversion function to type `char *' or
27080`const char *'--which is one reason why the standard `string' class
27081requires you to call the `c_str' member function.  However, any class
27082that returns a pointer to some internal structure is potentially
27083subject to this problem.
27084
27085 For example, a program may use a function `strfunc' that returns
27086`string' objects, and another function `charfunc' that operates on
27087pointers to `char':
27088
27089     string strfunc ();
27090     void charfunc (const char *);
27091
27092     void
27093     f ()
27094     {
27095       const char *p = strfunc().c_str();
27096       ...
27097       charfunc (p);
27098       ...
27099       charfunc (p);
27100     }
27101
27102In this situation, it may seem reasonable to save a pointer to the C
27103string returned by the `c_str' member function and use that rather than
27104call `c_str' repeatedly.  However, the temporary string created by the
27105call to `strfunc' is destroyed after `p' is initialized, at which point
27106`p' is left pointing to freed memory.
27107
27108 Code like this may run successfully under some other compilers,
27109particularly obsolete cfront-based compilers that delete temporaries
27110along with normal local variables.  However, the GNU C++ behavior is
27111standard-conforming, so if your program depends on late destruction of
27112temporaries it is not portable.
27113
27114 The safe way to write such code is to give the temporary a name, which
27115forces it to remain until the end of the scope of the name.  For
27116example:
27117
27118     const string& tmp = strfunc ();
27119     charfunc (tmp.c_str ());
27120
27121
27122File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
27123
2712410.8.4 Implicit Copy-Assignment for Virtual Bases
27125-------------------------------------------------
27126
27127When a base class is virtual, only one subobject of the base class
27128belongs to each full object.  Also, the constructors and destructors are
27129invoked only once, and called from the most-derived class.  However,
27130such objects behave unspecified when being assigned.  For example:
27131
27132     struct Base{
27133       char *name;
27134       Base(char *n) : name(strdup(n)){}
27135       Base& operator= (const Base& other){
27136        free (name);
27137        name = strdup (other.name);
27138       }
27139     };
27140
27141     struct A:virtual Base{
27142       int val;
27143       A():Base("A"){}
27144     };
27145
27146     struct B:virtual Base{
27147       int bval;
27148       B():Base("B"){}
27149     };
27150
27151     struct Derived:public A, public B{
27152       Derived():Base("Derived"){}
27153     };
27154
27155     void func(Derived &d1, Derived &d2)
27156     {
27157       d1 = d2;
27158     }
27159
27160 The C++ standard specifies that `Base::Base' is only called once when
27161constructing or copy-constructing a Derived object.  It is unspecified
27162whether `Base::operator=' is called more than once when the implicit
27163copy-assignment for Derived objects is invoked (as it is inside `func'
27164in the example).
27165
27166 G++ implements the "intuitive" algorithm for copy-assignment: assign
27167all direct bases, then assign all members.  In that algorithm, the
27168virtual base subobject can be encountered more than once.  In the
27169example, copying proceeds in the following order: `val', `name' (via
27170`strdup'), `bval', and `name' again.
27171
27172 If application code relies on copy-assignment, a user-defined
27173copy-assignment operator removes any uncertainties.  With such an
27174operator, the application can define whether and how the virtual base
27175subobject is assigned.
27176
27177
27178File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
27179
2718010.9 Caveats of using `protoize'
27181================================
27182
27183The conversion programs `protoize' and `unprotoize' can sometimes
27184change a source file in a way that won't work unless you rearrange it.
27185
27186   * `protoize' can insert references to a type name or type tag before
27187     the definition, or in a file where they are not defined.
27188
27189     If this happens, compiler error messages should show you where the
27190     new references are, so fixing the file by hand is straightforward.
27191
27192   * There are some C constructs which `protoize' cannot figure out.
27193     For example, it can't determine argument types for declaring a
27194     pointer-to-function variable; this you must do by hand.  `protoize'
27195     inserts a comment containing `???' each time it finds such a
27196     variable; so you can find all such variables by searching for this
27197     string.  ISO C does not require declaring the argument types of
27198     pointer-to-function types.
27199
27200   * Using `unprotoize' can easily introduce bugs.  If the program
27201     relied on prototypes to bring about conversion of arguments, these
27202     conversions will not take place in the program without prototypes.
27203     One case in which you can be sure `unprotoize' is safe is when you
27204     are removing prototypes that were made with `protoize'; if the
27205     program worked before without any prototypes, it will work again
27206     without them.
27207
27208     You can find all the places where this problem might occur by
27209     compiling the program with the `-Wconversion' option.  It prints a
27210     warning whenever an argument is converted.
27211
27212   * Both conversion programs can be confused if there are macro calls
27213     in and around the text to be converted.  In other words, the
27214     standard syntax for a declaration or definition must not result
27215     from expanding a macro.  This problem is inherent in the design of
27216     C and cannot be fixed.  If only a few functions have confusing
27217     macro calls, you can easily convert them manually.
27218
27219   * `protoize' cannot get the argument types for a function whose
27220     definition was not actually compiled due to preprocessing
27221     conditionals.  When this happens, `protoize' changes nothing in
27222     regard to such a function.  `protoize' tries to detect such
27223     instances and warn about them.
27224
27225     You can generally work around this problem by using `protoize' step
27226     by step, each time specifying a different set of `-D' options for
27227     compilation, until all of the functions have been converted.
27228     There is no automatic way to verify that you have got them all,
27229     however.
27230
27231   * Confusion may result if there is an occasion to convert a function
27232     declaration or definition in a region of source code where there
27233     is more than one formal parameter list present.  Thus, attempts to
27234     convert code containing multiple (conditionally compiled) versions
27235     of a single function header (in the same vicinity) may not produce
27236     the desired (or expected) results.
27237
27238     If you plan on converting source files which contain such code, it
27239     is recommended that you first make sure that each conditionally
27240     compiled region of source code which contains an alternative
27241     function header also contains at least one additional follower
27242     token (past the final right parenthesis of the function header).
27243     This should circumvent the problem.
27244
27245   * `unprotoize' can become confused when trying to convert a function
27246     definition or declaration which contains a declaration for a
27247     pointer-to-function formal argument which has the same name as the
27248     function being defined or declared.  We recommend you avoid such
27249     choices of formal parameter names.
27250
27251   * You might also want to correct some of the indentation by hand and
27252     break long lines.  (The conversion programs don't write lines
27253     longer than eighty characters in any case.)
27254
27255
27256File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
27257
2725810.10 Certain Changes We Don't Want to Make
27259===========================================
27260
27261This section lists changes that people frequently request, but which we
27262do not make because we think GCC is better without them.
27263
27264   * Checking the number and type of arguments to a function which has
27265     an old-fashioned definition and no prototype.
27266
27267     Such a feature would work only occasionally--only for calls that
27268     appear in the same file as the called function, following the
27269     definition.  The only way to check all calls reliably is to add a
27270     prototype for the function.  But adding a prototype eliminates the
27271     motivation for this feature.  So the feature is not worthwhile.
27272
27273   * Warning about using an expression whose type is signed as a shift
27274     count.
27275
27276     Shift count operands are probably signed more often than unsigned.
27277     Warning about this would cause far more annoyance than good.
27278
27279   * Warning about assigning a signed value to an unsigned variable.
27280
27281     Such assignments must be very common; warning about them would
27282     cause more annoyance than good.
27283
27284   * Warning when a non-void function value is ignored.
27285
27286     C contains many standard functions that return a value that most
27287     programs choose to ignore.  One obvious example is `printf'.
27288     Warning about this practice only leads the defensive programmer to
27289     clutter programs with dozens of casts to `void'.  Such casts are
27290     required so frequently that they become visual noise.  Writing
27291     those casts becomes so automatic that they no longer convey useful
27292     information about the intentions of the programmer.  For functions
27293     where the return value should never be ignored, use the
27294     `warn_unused_result' function attribute (*note Function
27295     Attributes::).
27296
27297   * Making `-fshort-enums' the default.
27298
27299     This would cause storage layout to be incompatible with most other
27300     C compilers.  And it doesn't seem very important, given that you
27301     can get the same result in other ways.  The case where it matters
27302     most is when the enumeration-valued object is inside a structure,
27303     and in that case you can specify a field width explicitly.
27304
27305   * Making bit-fields unsigned by default on particular machines where
27306     "the ABI standard" says to do so.
27307
27308     The ISO C standard leaves it up to the implementation whether a
27309     bit-field declared plain `int' is signed or not.  This in effect
27310     creates two alternative dialects of C.
27311
27312     The GNU C compiler supports both dialects; you can specify the
27313     signed dialect with `-fsigned-bitfields' and the unsigned dialect
27314     with `-funsigned-bitfields'.  However, this leaves open the
27315     question of which dialect to use by default.
27316
27317     Currently, the preferred dialect makes plain bit-fields signed,
27318     because this is simplest.  Since `int' is the same as `signed int'
27319     in every other context, it is cleanest for them to be the same in
27320     bit-fields as well.
27321
27322     Some computer manufacturers have published Application Binary
27323     Interface standards which specify that plain bit-fields should be
27324     unsigned.  It is a mistake, however, to say anything about this
27325     issue in an ABI.  This is because the handling of plain bit-fields
27326     distinguishes two dialects of C.  Both dialects are meaningful on
27327     every type of machine.  Whether a particular object file was
27328     compiled using signed bit-fields or unsigned is of no concern to
27329     other object files, even if they access the same bit-fields in the
27330     same data structures.
27331
27332     A given program is written in one or the other of these two
27333     dialects.  The program stands a chance to work on most any machine
27334     if it is compiled with the proper dialect.  It is unlikely to work
27335     at all if compiled with the wrong dialect.
27336
27337     Many users appreciate the GNU C compiler because it provides an
27338     environment that is uniform across machines.  These users would be
27339     inconvenienced if the compiler treated plain bit-fields
27340     differently on certain machines.
27341
27342     Occasionally users write programs intended only for a particular
27343     machine type.  On these occasions, the users would benefit if the
27344     GNU C compiler were to support by default the same dialect as the
27345     other compilers on that machine.  But such applications are rare.
27346     And users writing a program to run on more than one type of
27347     machine cannot possibly benefit from this kind of compatibility.
27348
27349     This is why GCC does and will treat plain bit-fields in the same
27350     fashion on all types of machines (by default).
27351
27352     There are some arguments for making bit-fields unsigned by default
27353     on all machines.  If, for example, this becomes a universal de
27354     facto standard, it would make sense for GCC to go along with it.
27355     This is something to be considered in the future.
27356
27357     (Of course, users strongly concerned about portability should
27358     indicate explicitly in each bit-field whether it is signed or not.
27359     In this way, they write programs which have the same meaning in
27360     both C dialects.)
27361
27362   * Undefining `__STDC__' when `-ansi' is not used.
27363
27364     Currently, GCC defines `__STDC__' unconditionally.  This provides
27365     good results in practice.
27366
27367     Programmers normally use conditionals on `__STDC__' to ask whether
27368     it is safe to use certain features of ISO C, such as function
27369     prototypes or ISO token concatenation.  Since plain `gcc' supports
27370     all the features of ISO C, the correct answer to these questions is
27371     "yes".
27372
27373     Some users try to use `__STDC__' to check for the availability of
27374     certain library facilities.  This is actually incorrect usage in
27375     an ISO C program, because the ISO C standard says that a conforming
27376     freestanding implementation should define `__STDC__' even though it
27377     does not have the library facilities.  `gcc -ansi -pedantic' is a
27378     conforming freestanding implementation, and it is therefore
27379     required to define `__STDC__', even though it does not come with
27380     an ISO C library.
27381
27382     Sometimes people say that defining `__STDC__' in a compiler that
27383     does not completely conform to the ISO C standard somehow violates
27384     the standard.  This is illogical.  The standard is a standard for
27385     compilers that claim to support ISO C, such as `gcc -ansi'--not
27386     for other compilers such as plain `gcc'.  Whatever the ISO C
27387     standard says is relevant to the design of plain `gcc' without
27388     `-ansi' only for pragmatic reasons, not as a requirement.
27389
27390     GCC normally defines `__STDC__' to be 1, and in addition defines
27391     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
27392     option for strict conformance to some version of ISO C.  On some
27393     hosts, system include files use a different convention, where
27394     `__STDC__' is normally 0, but is 1 if the user specifies strict
27395     conformance to the C Standard.  GCC follows the host convention
27396     when processing system include files, but when processing user
27397     files it follows the usual GNU C convention.
27398
27399   * Undefining `__STDC__' in C++.
27400
27401     Programs written to compile with C++-to-C translators get the
27402     value of `__STDC__' that goes with the C compiler that is
27403     subsequently used.  These programs must test `__STDC__' to
27404     determine what kind of C preprocessor that compiler uses: whether
27405     they should concatenate tokens in the ISO C fashion or in the
27406     traditional fashion.
27407
27408     These programs work properly with GNU C++ if `__STDC__' is defined.
27409     They would not work otherwise.
27410
27411     In addition, many header files are written to provide prototypes
27412     in ISO C but not in traditional C.  Many of these header files can
27413     work without change in C++ provided `__STDC__' is defined.  If
27414     `__STDC__' is not defined, they will all fail, and will all need
27415     to be changed to test explicitly for C++ as well.
27416
27417   * Deleting "empty" loops.
27418
27419     Historically, GCC has not deleted "empty" loops under the
27420     assumption that the most likely reason you would put one in a
27421     program is to have a delay, so deleting them will not make real
27422     programs run any faster.
27423
27424     However, the rationale here is that optimization of a nonempty loop
27425     cannot produce an empty one. This held for carefully written C
27426     compiled with less powerful optimizers but is not always the case
27427     for carefully written C++ or with more powerful optimizers.  Thus
27428     GCC will remove operations from loops whenever it can determine
27429     those operations are not externally visible (apart from the time
27430     taken to execute them, of course).  In case the loop can be proved
27431     to be finite, GCC will also remove the loop itself.
27432
27433     Be aware of this when performing timing tests, for instance the
27434     following loop can be completely removed, provided
27435     `some_expression' can provably not change any global state.
27436
27437          {
27438             int sum = 0;
27439             int ix;
27440
27441             for (ix = 0; ix != 10000; ix++)
27442                sum += some_expression;
27443          }
27444
27445     Even though `sum' is accumulated in the loop, no use is made of
27446     that summation, so the accumulation can be removed.
27447
27448   * Making side effects happen in the same order as in some other
27449     compiler.
27450
27451     It is never safe to depend on the order of evaluation of side
27452     effects.  For example, a function call like this may very well
27453     behave differently from one compiler to another:
27454
27455          void func (int, int);
27456
27457          int i = 2;
27458          func (i++, i++);
27459
27460     There is no guarantee (in either the C or the C++ standard language
27461     definitions) that the increments will be evaluated in any
27462     particular order.  Either increment might happen first.  `func'
27463     might get the arguments `2, 3', or it might get `3, 2', or even
27464     `2, 2'.
27465
27466   * Making certain warnings into errors by default.
27467
27468     Some ISO C testsuites report failure when the compiler does not
27469     produce an error message for a certain program.
27470
27471     ISO C requires a "diagnostic" message for certain kinds of invalid
27472     programs, but a warning is defined by GCC to count as a
27473     diagnostic.  If GCC produces a warning but not an error, that is
27474     correct ISO C support.  If testsuites call this "failure", they
27475     should be run with the GCC option `-pedantic-errors', which will
27476     turn these warnings into errors.
27477
27478
27479
27480File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
27481
2748210.11 Warning Messages and Error Messages
27483=========================================
27484
27485The GNU compiler can produce two kinds of diagnostics: errors and
27486warnings.  Each kind has a different purpose:
27487
27488     "Errors" report problems that make it impossible to compile your
27489     program.  GCC reports errors with the source file name and line
27490     number where the problem is apparent.
27491
27492     "Warnings" report other unusual conditions in your code that _may_
27493     indicate a problem, although compilation can (and does) proceed.
27494     Warning messages also report the source file name and line number,
27495     but include the text `warning:' to distinguish them from error
27496     messages.
27497
27498 Warnings may indicate danger points where you should check to make sure
27499that your program really does what you intend; or the use of obsolete
27500features; or the use of nonstandard features of GNU C or C++.  Many
27501warnings are issued only if you ask for them, with one of the `-W'
27502options (for instance, `-Wall' requests a variety of useful warnings).
27503
27504 GCC always tries to compile your program if possible; it never
27505gratuitously rejects a program whose meaning is clear merely because
27506(for instance) it fails to conform to a standard.  In some cases,
27507however, the C and C++ standards specify that certain extensions are
27508forbidden, and a diagnostic _must_ be issued by a conforming compiler.
27509The `-pedantic' option tells GCC to issue warnings in such cases;
27510`-pedantic-errors' says to make them errors instead.  This does not
27511mean that _all_ non-ISO constructs get warnings or errors.
27512
27513 *Note Options to Request or Suppress Warnings: Warning Options, for
27514more detail on these and related command-line options.
27515
27516
27517File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
27518
2751911 Reporting Bugs
27520*****************
27521
27522Your bug reports play an essential role in making GCC reliable.
27523
27524 When you encounter a problem, the first thing to do is to see if it is
27525already known.  *Note Trouble::.  If it isn't known, then you should
27526report the problem.
27527
27528* Menu:
27529
27530* Criteria:  Bug Criteria.   Have you really found a bug?
27531* Reporting: Bug Reporting.  How to report a bug effectively.
27532* Known: Trouble.            Known problems.
27533* Help: Service.             Where to ask for help.
27534
27535
27536File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
27537
2753811.1 Have You Found a Bug?
27539==========================
27540
27541If you are not sure whether you have found a bug, here are some
27542guidelines:
27543
27544   * If the compiler gets a fatal signal, for any input whatever, that
27545     is a compiler bug.  Reliable compilers never crash.
27546
27547   * If the compiler produces invalid assembly code, for any input
27548     whatever (except an `asm' statement), that is a compiler bug,
27549     unless the compiler reports errors (not just warnings) which would
27550     ordinarily prevent the assembler from being run.
27551
27552   * If the compiler produces valid assembly code that does not
27553     correctly execute the input source code, that is a compiler bug.
27554
27555     However, you must double-check to make sure, because you may have a
27556     program whose behavior is undefined, which happened by chance to
27557     give the desired results with another C or C++ compiler.
27558
27559     For example, in many nonoptimizing compilers, you can write `x;'
27560     at the end of a function instead of `return x;', with the same
27561     results.  But the value of the function is undefined if `return'
27562     is omitted; it is not a bug when GCC produces different results.
27563
27564     Problems often result from expressions with two increment
27565     operators, as in `f (*p++, *p++)'.  Your previous compiler might
27566     have interpreted that expression the way you intended; GCC might
27567     interpret it another way.  Neither compiler is wrong.  The bug is
27568     in your code.
27569
27570     After you have localized the error to a single source line, it
27571     should be easy to check for these things.  If your program is
27572     correct and well defined, you have found a compiler bug.
27573
27574   * If the compiler produces an error message for valid input, that is
27575     a compiler bug.
27576
27577   * If the compiler does not produce an error message for invalid
27578     input, that is a compiler bug.  However, you should note that your
27579     idea of "invalid input" might be someone else's idea of "an
27580     extension" or "support for traditional practice".
27581
27582   * If you are an experienced user of one of the languages GCC
27583     supports, your suggestions for improvement of GCC are welcome in
27584     any case.
27585
27586
27587File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
27588
2758911.2 How and where to Report Bugs
27590=================================
27591
27592Bugs should be reported to the GCC bug database.  Please refer to
27593`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
27594submit bug reports.  Copies of this file in HTML (`bugs.html') and
27595plain text (`BUGS') are also part of GCC releases.
27596
27597
27598File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
27599
2760012 How To Get Help with GCC
27601***************************
27602
27603If you need help installing, using or changing GCC, there are two ways
27604to find it:
27605
27606   * Send a message to a suitable network mailing list.  First try
27607     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
27608     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
27609     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
27610     GCC, please report it following the instructions at *note Bug
27611     Reporting::.
27612
27613   * Look in the service directory for someone who might help you for a
27614     fee.  The service directory is found at
27615     `http://www.gnu.org/prep/service.html'.
27616
27617 For further information, see `http://gcc.gnu.org/faq.html#support'.
27618
27619
27620File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
27621
2762213 Contributing to GCC Development
27623**********************************
27624
27625If you would like to help pretest GCC releases to assure they work well,
27626current development sources are available by SVN (see
27627`http://gcc.gnu.org/svn.html').  Source and binary snapshots are also
27628available for FTP; see `http://gcc.gnu.org/snapshots.html'.
27629
27630 If you would like to work on improvements to GCC, please read the
27631advice at these URLs:
27632
27633     `http://gcc.gnu.org/contribute.html'
27634     `http://gcc.gnu.org/contributewhy.html'
27635
27636for information on how to make useful contributions and avoid
27637duplication of effort.  Suggested projects are listed at
27638`http://gcc.gnu.org/projects/'.
27639
27640
27641File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
27642
27643Funding Free Software
27644*********************
27645
27646If you want to have more free software a few years from now, it makes
27647sense for you to help encourage people to contribute funds for its
27648development.  The most effective approach known is to encourage
27649commercial redistributors to donate.
27650
27651 Users of free software systems can boost the pace of development by
27652encouraging for-a-fee distributors to donate part of their selling price
27653to free software developers--the Free Software Foundation, and others.
27654
27655 The way to convince distributors to do this is to demand it and expect
27656it from them.  So when you compare distributors, judge them partly by
27657how much they give to free software development.  Show distributors
27658they must compete to be the one who gives the most.
27659
27660 To make this approach work, you must insist on numbers that you can
27661compare, such as, "We will donate ten dollars to the Frobnitz project
27662for each disk sold."  Don't be satisfied with a vague promise, such as
27663"A portion of the profits are donated," since it doesn't give a basis
27664for comparison.
27665
27666 Even a precise fraction "of the profits from this disk" is not very
27667meaningful, since creative accounting and unrelated business decisions
27668can greatly alter what fraction of the sales price counts as profit.
27669If the price you pay is $50, ten percent of the profit is probably less
27670than a dollar; it might be a few cents, or nothing at all.
27671
27672 Some redistributors do development work themselves.  This is useful
27673too; but to keep everyone honest, you need to inquire how much they do,
27674and what kind.  Some kinds of development make much more long-term
27675difference than others.  For example, maintaining a separate version of
27676a program contributes very little; maintaining the standard version of a
27677program for the whole community contributes much.  Easy new ports
27678contribute little, since someone else would surely do them; difficult
27679ports such as adding a new CPU to the GNU Compiler Collection
27680contribute more; major new features or packages contribute the most.
27681
27682 By establishing the idea that supporting further development is "the
27683proper thing to do" when distributing free software for a fee, we can
27684assure a steady flow of resources into making more free software.
27685
27686     Copyright (C) 1994 Free Software Foundation, Inc.
27687     Verbatim copying and redistribution of this section is permitted
27688     without royalty; alteration is not permitted.
27689
27690
27691File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
27692
27693The GNU Project and GNU/Linux
27694*****************************
27695
27696The GNU Project was launched in 1984 to develop a complete Unix-like
27697operating system which is free software: the GNU system.  (GNU is a
27698recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
27699Variants of the GNU operating system, which use the kernel Linux, are
27700now widely used; though these systems are often referred to as "Linux",
27701they are more accurately called GNU/Linux systems.
27702
27703 For more information, see:
27704     `http://www.gnu.org/'
27705     `http://www.gnu.org/gnu/linux-and-gnu.html'
27706
27707
27708File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
27709
27710GNU GENERAL PUBLIC LICENSE
27711**************************
27712
27713                         Version 2, June 1991
27714
27715     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
27716     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
27717
27718     Everyone is permitted to copy and distribute verbatim copies
27719     of this license document, but changing it is not allowed.
27720
27721Preamble
27722========
27723
27724The licenses for most software are designed to take away your freedom
27725to share and change it.  By contrast, the GNU General Public License is
27726intended to guarantee your freedom to share and change free
27727software--to make sure the software is free for all its users.  This
27728General Public License applies to most of the Free Software
27729Foundation's software and to any other program whose authors commit to
27730using it.  (Some other Free Software Foundation software is covered by
27731the GNU Library General Public License instead.)  You can apply it to
27732your programs, too.
27733
27734 When we speak of free software, we are referring to freedom, not
27735price.  Our General Public Licenses are designed to make sure that you
27736have the freedom to distribute copies of free software (and charge for
27737this service if you wish), that you receive source code or can get it
27738if you want it, that you can change the software or use pieces of it in
27739new free programs; and that you know you can do these things.
27740
27741 To protect your rights, we need to make restrictions that forbid
27742anyone to deny you these rights or to ask you to surrender the rights.
27743These restrictions translate to certain responsibilities for you if you
27744distribute copies of the software, or if you modify it.
27745
27746 For example, if you distribute copies of such a program, whether
27747gratis or for a fee, you must give the recipients all the rights that
27748you have.  You must make sure that they, too, receive or can get the
27749source code.  And you must show them these terms so they know their
27750rights.
27751
27752 We protect your rights with two steps: (1) copyright the software, and
27753(2) offer you this license which gives you legal permission to copy,
27754distribute and/or modify the software.
27755
27756 Also, for each author's protection and ours, we want to make certain
27757that everyone understands that there is no warranty for this free
27758software.  If the software is modified by someone else and passed on, we
27759want its recipients to know that what they have is not the original, so
27760that any problems introduced by others will not reflect on the original
27761authors' reputations.
27762
27763 Finally, any free program is threatened constantly by software
27764patents.  We wish to avoid the danger that redistributors of a free
27765program will individually obtain patent licenses, in effect making the
27766program proprietary.  To prevent this, we have made it clear that any
27767patent must be licensed for everyone's free use or not licensed at all.
27768
27769 The precise terms and conditions for copying, distribution and
27770modification follow.
27771
27772    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
27773  0. This License applies to any program or other work which contains a
27774     notice placed by the copyright holder saying it may be distributed
27775     under the terms of this General Public License.  The "Program",
27776     below, refers to any such program or work, and a "work based on
27777     the Program" means either the Program or any derivative work under
27778     copyright law: that is to say, a work containing the Program or a
27779     portion of it, either verbatim or with modifications and/or
27780     translated into another language.  (Hereinafter, translation is
27781     included without limitation in the term "modification".)  Each
27782     licensee is addressed as "you".
27783
27784     Activities other than copying, distribution and modification are
27785     not covered by this License; they are outside its scope.  The act
27786     of running the Program is not restricted, and the output from the
27787     Program is covered only if its contents constitute a work based on
27788     the Program (independent of having been made by running the
27789     Program).  Whether that is true depends on what the Program does.
27790
27791  1. You may copy and distribute verbatim copies of the Program's
27792     source code as you receive it, in any medium, provided that you
27793     conspicuously and appropriately publish on each copy an appropriate
27794     copyright notice and disclaimer of warranty; keep intact all the
27795     notices that refer to this License and to the absence of any
27796     warranty; and give any other recipients of the Program a copy of
27797     this License along with the Program.
27798
27799     You may charge a fee for the physical act of transferring a copy,
27800     and you may at your option offer warranty protection in exchange
27801     for a fee.
27802
27803  2. You may modify your copy or copies of the Program or any portion
27804     of it, thus forming a work based on the Program, and copy and
27805     distribute such modifications or work under the terms of Section 1
27806     above, provided that you also meet all of these conditions:
27807
27808       a. You must cause the modified files to carry prominent notices
27809          stating that you changed the files and the date of any change.
27810
27811       b. You must cause any work that you distribute or publish, that
27812          in whole or in part contains or is derived from the Program
27813          or any part thereof, to be licensed as a whole at no charge
27814          to all third parties under the terms of this License.
27815
27816       c. If the modified program normally reads commands interactively
27817          when run, you must cause it, when started running for such
27818          interactive use in the most ordinary way, to print or display
27819          an announcement including an appropriate copyright notice and
27820          a notice that there is no warranty (or else, saying that you
27821          provide a warranty) and that users may redistribute the
27822          program under these conditions, and telling the user how to
27823          view a copy of this License.  (Exception: if the Program
27824          itself is interactive but does not normally print such an
27825          announcement, your work based on the Program is not required
27826          to print an announcement.)
27827
27828     These requirements apply to the modified work as a whole.  If
27829     identifiable sections of that work are not derived from the
27830     Program, and can be reasonably considered independent and separate
27831     works in themselves, then this License, and its terms, do not
27832     apply to those sections when you distribute them as separate
27833     works.  But when you distribute the same sections as part of a
27834     whole which is a work based on the Program, the distribution of
27835     the whole must be on the terms of this License, whose permissions
27836     for other licensees extend to the entire whole, and thus to each
27837     and every part regardless of who wrote it.
27838
27839     Thus, it is not the intent of this section to claim rights or
27840     contest your rights to work written entirely by you; rather, the
27841     intent is to exercise the right to control the distribution of
27842     derivative or collective works based on the Program.
27843
27844     In addition, mere aggregation of another work not based on the
27845     Program with the Program (or with a work based on the Program) on
27846     a volume of a storage or distribution medium does not bring the
27847     other work under the scope of this License.
27848
27849  3. You may copy and distribute the Program (or a work based on it,
27850     under Section 2) in object code or executable form under the terms
27851     of Sections 1 and 2 above provided that you also do one of the
27852     following:
27853
27854       a. Accompany it with the complete corresponding machine-readable
27855          source code, which must be distributed under the terms of
27856          Sections 1 and 2 above on a medium customarily used for
27857          software interchange; or,
27858
27859       b. Accompany it with a written offer, valid for at least three
27860          years, to give any third party, for a charge no more than your
27861          cost of physically performing source distribution, a complete
27862          machine-readable copy of the corresponding source code, to be
27863          distributed under the terms of Sections 1 and 2 above on a
27864          medium customarily used for software interchange; or,
27865
27866       c. Accompany it with the information you received as to the offer
27867          to distribute corresponding source code.  (This alternative is
27868          allowed only for noncommercial distribution and only if you
27869          received the program in object code or executable form with
27870          such an offer, in accord with Subsection b above.)
27871
27872     The source code for a work means the preferred form of the work for
27873     making modifications to it.  For an executable work, complete
27874     source code means all the source code for all modules it contains,
27875     plus any associated interface definition files, plus the scripts
27876     used to control compilation and installation of the executable.
27877     However, as a special exception, the source code distributed need
27878     not include anything that is normally distributed (in either
27879     source or binary form) with the major components (compiler,
27880     kernel, and so on) of the operating system on which the executable
27881     runs, unless that component itself accompanies the executable.
27882
27883     If distribution of executable or object code is made by offering
27884     access to copy from a designated place, then offering equivalent
27885     access to copy the source code from the same place counts as
27886     distribution of the source code, even though third parties are not
27887     compelled to copy the source along with the object code.
27888
27889  4. You may not copy, modify, sublicense, or distribute the Program
27890     except as expressly provided under this License.  Any attempt
27891     otherwise to copy, modify, sublicense or distribute the Program is
27892     void, and will automatically terminate your rights under this
27893     License.  However, parties who have received copies, or rights,
27894     from you under this License will not have their licenses
27895     terminated so long as such parties remain in full compliance.
27896
27897  5. You are not required to accept this License, since you have not
27898     signed it.  However, nothing else grants you permission to modify
27899     or distribute the Program or its derivative works.  These actions
27900     are prohibited by law if you do not accept this License.
27901     Therefore, by modifying or distributing the Program (or any work
27902     based on the Program), you indicate your acceptance of this
27903     License to do so, and all its terms and conditions for copying,
27904     distributing or modifying the Program or works based on it.
27905
27906  6. Each time you redistribute the Program (or any work based on the
27907     Program), the recipient automatically receives a license from the
27908     original licensor to copy, distribute or modify the Program
27909     subject to these terms and conditions.  You may not impose any
27910     further restrictions on the recipients' exercise of the rights
27911     granted herein.  You are not responsible for enforcing compliance
27912     by third parties to this License.
27913
27914  7. If, as a consequence of a court judgment or allegation of patent
27915     infringement or for any other reason (not limited to patent
27916     issues), conditions are imposed on you (whether by court order,
27917     agreement or otherwise) that contradict the conditions of this
27918     License, they do not excuse you from the conditions of this
27919     License.  If you cannot distribute so as to satisfy simultaneously
27920     your obligations under this License and any other pertinent
27921     obligations, then as a consequence you may not distribute the
27922     Program at all.  For example, if a patent license would not permit
27923     royalty-free redistribution of the Program by all those who
27924     receive copies directly or indirectly through you, then the only
27925     way you could satisfy both it and this License would be to refrain
27926     entirely from distribution of the Program.
27927
27928     If any portion of this section is held invalid or unenforceable
27929     under any particular circumstance, the balance of the section is
27930     intended to apply and the section as a whole is intended to apply
27931     in other circumstances.
27932
27933     It is not the purpose of this section to induce you to infringe any
27934     patents or other property right claims or to contest validity of
27935     any such claims; this section has the sole purpose of protecting
27936     the integrity of the free software distribution system, which is
27937     implemented by public license practices.  Many people have made
27938     generous contributions to the wide range of software distributed
27939     through that system in reliance on consistent application of that
27940     system; it is up to the author/donor to decide if he or she is
27941     willing to distribute software through any other system and a
27942     licensee cannot impose that choice.
27943
27944     This section is intended to make thoroughly clear what is believed
27945     to be a consequence of the rest of this License.
27946
27947  8. If the distribution and/or use of the Program is restricted in
27948     certain countries either by patents or by copyrighted interfaces,
27949     the original copyright holder who places the Program under this
27950     License may add an explicit geographical distribution limitation
27951     excluding those countries, so that distribution is permitted only
27952     in or among countries not thus excluded.  In such case, this
27953     License incorporates the limitation as if written in the body of
27954     this License.
27955
27956  9. The Free Software Foundation may publish revised and/or new
27957     versions of the General Public License from time to time.  Such
27958     new versions will be similar in spirit to the present version, but
27959     may differ in detail to address new problems or concerns.
27960
27961     Each version is given a distinguishing version number.  If the
27962     Program specifies a version number of this License which applies
27963     to it and "any later version", you have the option of following
27964     the terms and conditions either of that version or of any later
27965     version published by the Free Software Foundation.  If the Program
27966     does not specify a version number of this License, you may choose
27967     any version ever published by the Free Software Foundation.
27968
27969 10. If you wish to incorporate parts of the Program into other free
27970     programs whose distribution conditions are different, write to the
27971     author to ask for permission.  For software which is copyrighted
27972     by the Free Software Foundation, write to the Free Software
27973     Foundation; we sometimes make exceptions for this.  Our decision
27974     will be guided by the two goals of preserving the free status of
27975     all derivatives of our free software and of promoting the sharing
27976     and reuse of software generally.
27977
27978                                NO WARRANTY
27979 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
27980     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
27981     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
27982     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
27983     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
27984     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
27985     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
27986     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
27987     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
27988     SERVICING, REPAIR OR CORRECTION.
27989
27990 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
27991     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
27992     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
27993     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
27994     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
27995     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
27996     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
27997     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
27998     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
27999     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
28000
28001                      END OF TERMS AND CONDITIONS
28002Appendix: How to Apply These Terms to Your New Programs
28003=======================================================
28004
28005If you develop a new program, and you want it to be of the greatest
28006possible use to the public, the best way to achieve this is to make it
28007free software which everyone can redistribute and change under these
28008terms.
28009
28010 To do so, attach the following notices to the program.  It is safest
28011to attach them to the start of each source file to most effectively
28012convey the exclusion of warranty; and each file should have at least
28013the "copyright" line and a pointer to where the full notice is found.
28014
28015     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
28016     Copyright (C) YEAR  NAME OF AUTHOR
28017
28018     This program is free software; you can redistribute it and/or modify
28019     it under the terms of the GNU General Public License as published by
28020     the Free Software Foundation; either version 2 of the License, or
28021     (at your option) any later version.
28022
28023     This program is distributed in the hope that it will be useful,
28024     but WITHOUT ANY WARRANTY; without even the implied warranty of
28025     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28026     GNU General Public License for more details.
28027
28028     You should have received a copy of the GNU General Public License
28029     along with this program; if not, write to the Free Software
28030     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
28031
28032 Also add information on how to contact you by electronic and paper
28033mail.
28034
28035 If the program is interactive, make it output a short notice like this
28036when it starts in an interactive mode:
28037
28038     Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
28039     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
28040     type `show w'.
28041     This is free software, and you are welcome to redistribute it
28042     under certain conditions; type `show c' for details.
28043
28044 The hypothetical commands `show w' and `show c' should show the
28045appropriate parts of the General Public License.  Of course, the
28046commands you use may be called something other than `show w' and `show
28047c'; they could even be mouse-clicks or menu items--whatever suits your
28048program.
28049
28050 You should also get your employer (if you work as a programmer) or your
28051school, if any, to sign a "copyright disclaimer" for the program, if
28052necessary.  Here is a sample; alter the names:
28053
28054     Yoyodyne, Inc., hereby disclaims all copyright interest in the program
28055     `Gnomovision' (which makes passes at compilers) written by James Hacker.
28056
28057     SIGNATURE OF TY COON, 1 April 1989
28058     Ty Coon, President of Vice
28059
28060 This General Public License does not permit incorporating your program
28061into proprietary programs.  If your program is a subroutine library,
28062you may consider it more useful to permit linking proprietary
28063applications with the library.  If this is what you want to do, use the
28064GNU Library General Public License instead of this License.
28065
28066
28067File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
28068
28069GNU Free Documentation License
28070******************************
28071
28072                      Version 1.2, November 2002
28073
28074     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
28075     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
28076
28077     Everyone is permitted to copy and distribute verbatim copies
28078     of this license document, but changing it is not allowed.
28079
28080  0. PREAMBLE
28081
28082     The purpose of this License is to make a manual, textbook, or other
28083     functional and useful document "free" in the sense of freedom: to
28084     assure everyone the effective freedom to copy and redistribute it,
28085     with or without modifying it, either commercially or
28086     noncommercially.  Secondarily, this License preserves for the
28087     author and publisher a way to get credit for their work, while not
28088     being considered responsible for modifications made by others.
28089
28090     This License is a kind of "copyleft", which means that derivative
28091     works of the document must themselves be free in the same sense.
28092     It complements the GNU General Public License, which is a copyleft
28093     license designed for free software.
28094
28095     We have designed this License in order to use it for manuals for
28096     free software, because free software needs free documentation: a
28097     free program should come with manuals providing the same freedoms
28098     that the software does.  But this License is not limited to
28099     software manuals; it can be used for any textual work, regardless
28100     of subject matter or whether it is published as a printed book.
28101     We recommend this License principally for works whose purpose is
28102     instruction or reference.
28103
28104  1. APPLICABILITY AND DEFINITIONS
28105
28106     This License applies to any manual or other work, in any medium,
28107     that contains a notice placed by the copyright holder saying it
28108     can be distributed under the terms of this License.  Such a notice
28109     grants a world-wide, royalty-free license, unlimited in duration,
28110     to use that work under the conditions stated herein.  The
28111     "Document", below, refers to any such manual or work.  Any member
28112     of the public is a licensee, and is addressed as "you".  You
28113     accept the license if you copy, modify or distribute the work in a
28114     way requiring permission under copyright law.
28115
28116     A "Modified Version" of the Document means any work containing the
28117     Document or a portion of it, either copied verbatim, or with
28118     modifications and/or translated into another language.
28119
28120     A "Secondary Section" is a named appendix or a front-matter section
28121     of the Document that deals exclusively with the relationship of the
28122     publishers or authors of the Document to the Document's overall
28123     subject (or to related matters) and contains nothing that could
28124     fall directly within that overall subject.  (Thus, if the Document
28125     is in part a textbook of mathematics, a Secondary Section may not
28126     explain any mathematics.)  The relationship could be a matter of
28127     historical connection with the subject or with related matters, or
28128     of legal, commercial, philosophical, ethical or political position
28129     regarding them.
28130
28131     The "Invariant Sections" are certain Secondary Sections whose
28132     titles are designated, as being those of Invariant Sections, in
28133     the notice that says that the Document is released under this
28134     License.  If a section does not fit the above definition of
28135     Secondary then it is not allowed to be designated as Invariant.
28136     The Document may contain zero Invariant Sections.  If the Document
28137     does not identify any Invariant Sections then there are none.
28138
28139     The "Cover Texts" are certain short passages of text that are
28140     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
28141     that says that the Document is released under this License.  A
28142     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
28143     be at most 25 words.
28144
28145     A "Transparent" copy of the Document means a machine-readable copy,
28146     represented in a format whose specification is available to the
28147     general public, that is suitable for revising the document
28148     straightforwardly with generic text editors or (for images
28149     composed of pixels) generic paint programs or (for drawings) some
28150     widely available drawing editor, and that is suitable for input to
28151     text formatters or for automatic translation to a variety of
28152     formats suitable for input to text formatters.  A copy made in an
28153     otherwise Transparent file format whose markup, or absence of
28154     markup, has been arranged to thwart or discourage subsequent
28155     modification by readers is not Transparent.  An image format is
28156     not Transparent if used for any substantial amount of text.  A
28157     copy that is not "Transparent" is called "Opaque".
28158
28159     Examples of suitable formats for Transparent copies include plain
28160     ASCII without markup, Texinfo input format, LaTeX input format,
28161     SGML or XML using a publicly available DTD, and
28162     standard-conforming simple HTML, PostScript or PDF designed for
28163     human modification.  Examples of transparent image formats include
28164     PNG, XCF and JPG.  Opaque formats include proprietary formats that
28165     can be read and edited only by proprietary word processors, SGML or
28166     XML for which the DTD and/or processing tools are not generally
28167     available, and the machine-generated HTML, PostScript or PDF
28168     produced by some word processors for output purposes only.
28169
28170     The "Title Page" means, for a printed book, the title page itself,
28171     plus such following pages as are needed to hold, legibly, the
28172     material this License requires to appear in the title page.  For
28173     works in formats which do not have any title page as such, "Title
28174     Page" means the text near the most prominent appearance of the
28175     work's title, preceding the beginning of the body of the text.
28176
28177     A section "Entitled XYZ" means a named subunit of the Document
28178     whose title either is precisely XYZ or contains XYZ in parentheses
28179     following text that translates XYZ in another language.  (Here XYZ
28180     stands for a specific section name mentioned below, such as
28181     "Acknowledgements", "Dedications", "Endorsements", or "History".)
28182     To "Preserve the Title" of such a section when you modify the
28183     Document means that it remains a section "Entitled XYZ" according
28184     to this definition.
28185
28186     The Document may include Warranty Disclaimers next to the notice
28187     which states that this License applies to the Document.  These
28188     Warranty Disclaimers are considered to be included by reference in
28189     this License, but only as regards disclaiming warranties: any other
28190     implication that these Warranty Disclaimers may have is void and
28191     has no effect on the meaning of this License.
28192
28193  2. VERBATIM COPYING
28194
28195     You may copy and distribute the Document in any medium, either
28196     commercially or noncommercially, provided that this License, the
28197     copyright notices, and the license notice saying this License
28198     applies to the Document are reproduced in all copies, and that you
28199     add no other conditions whatsoever to those of this License.  You
28200     may not use technical measures to obstruct or control the reading
28201     or further copying of the copies you make or distribute.  However,
28202     you may accept compensation in exchange for copies.  If you
28203     distribute a large enough number of copies you must also follow
28204     the conditions in section 3.
28205
28206     You may also lend copies, under the same conditions stated above,
28207     and you may publicly display copies.
28208
28209  3. COPYING IN QUANTITY
28210
28211     If you publish printed copies (or copies in media that commonly
28212     have printed covers) of the Document, numbering more than 100, and
28213     the Document's license notice requires Cover Texts, you must
28214     enclose the copies in covers that carry, clearly and legibly, all
28215     these Cover Texts: Front-Cover Texts on the front cover, and
28216     Back-Cover Texts on the back cover.  Both covers must also clearly
28217     and legibly identify you as the publisher of these copies.  The
28218     front cover must present the full title with all words of the
28219     title equally prominent and visible.  You may add other material
28220     on the covers in addition.  Copying with changes limited to the
28221     covers, as long as they preserve the title of the Document and
28222     satisfy these conditions, can be treated as verbatim copying in
28223     other respects.
28224
28225     If the required texts for either cover are too voluminous to fit
28226     legibly, you should put the first ones listed (as many as fit
28227     reasonably) on the actual cover, and continue the rest onto
28228     adjacent pages.
28229
28230     If you publish or distribute Opaque copies of the Document
28231     numbering more than 100, you must either include a
28232     machine-readable Transparent copy along with each Opaque copy, or
28233     state in or with each Opaque copy a computer-network location from
28234     which the general network-using public has access to download
28235     using public-standard network protocols a complete Transparent
28236     copy of the Document, free of added material.  If you use the
28237     latter option, you must take reasonably prudent steps, when you
28238     begin distribution of Opaque copies in quantity, to ensure that
28239     this Transparent copy will remain thus accessible at the stated
28240     location until at least one year after the last time you
28241     distribute an Opaque copy (directly or through your agents or
28242     retailers) of that edition to the public.
28243
28244     It is requested, but not required, that you contact the authors of
28245     the Document well before redistributing any large number of
28246     copies, to give them a chance to provide you with an updated
28247     version of the Document.
28248
28249  4. MODIFICATIONS
28250
28251     You may copy and distribute a Modified Version of the Document
28252     under the conditions of sections 2 and 3 above, provided that you
28253     release the Modified Version under precisely this License, with
28254     the Modified Version filling the role of the Document, thus
28255     licensing distribution and modification of the Modified Version to
28256     whoever possesses a copy of it.  In addition, you must do these
28257     things in the Modified Version:
28258
28259       A. Use in the Title Page (and on the covers, if any) a title
28260          distinct from that of the Document, and from those of
28261          previous versions (which should, if there were any, be listed
28262          in the History section of the Document).  You may use the
28263          same title as a previous version if the original publisher of
28264          that version gives permission.
28265
28266       B. List on the Title Page, as authors, one or more persons or
28267          entities responsible for authorship of the modifications in
28268          the Modified Version, together with at least five of the
28269          principal authors of the Document (all of its principal
28270          authors, if it has fewer than five), unless they release you
28271          from this requirement.
28272
28273       C. State on the Title page the name of the publisher of the
28274          Modified Version, as the publisher.
28275
28276       D. Preserve all the copyright notices of the Document.
28277
28278       E. Add an appropriate copyright notice for your modifications
28279          adjacent to the other copyright notices.
28280
28281       F. Include, immediately after the copyright notices, a license
28282          notice giving the public permission to use the Modified
28283          Version under the terms of this License, in the form shown in
28284          the Addendum below.
28285
28286       G. Preserve in that license notice the full lists of Invariant
28287          Sections and required Cover Texts given in the Document's
28288          license notice.
28289
28290       H. Include an unaltered copy of this License.
28291
28292       I. Preserve the section Entitled "History", Preserve its Title,
28293          and add to it an item stating at least the title, year, new
28294          authors, and publisher of the Modified Version as given on
28295          the Title Page.  If there is no section Entitled "History" in
28296          the Document, create one stating the title, year, authors,
28297          and publisher of the Document as given on its Title Page,
28298          then add an item describing the Modified Version as stated in
28299          the previous sentence.
28300
28301       J. Preserve the network location, if any, given in the Document
28302          for public access to a Transparent copy of the Document, and
28303          likewise the network locations given in the Document for
28304          previous versions it was based on.  These may be placed in
28305          the "History" section.  You may omit a network location for a
28306          work that was published at least four years before the
28307          Document itself, or if the original publisher of the version
28308          it refers to gives permission.
28309
28310       K. For any section Entitled "Acknowledgements" or "Dedications",
28311          Preserve the Title of the section, and preserve in the
28312          section all the substance and tone of each of the contributor
28313          acknowledgements and/or dedications given therein.
28314
28315       L. Preserve all the Invariant Sections of the Document,
28316          unaltered in their text and in their titles.  Section numbers
28317          or the equivalent are not considered part of the section
28318          titles.
28319
28320       M. Delete any section Entitled "Endorsements".  Such a section
28321          may not be included in the Modified Version.
28322
28323       N. Do not retitle any existing section to be Entitled
28324          "Endorsements" or to conflict in title with any Invariant
28325          Section.
28326
28327       O. Preserve any Warranty Disclaimers.
28328
28329     If the Modified Version includes new front-matter sections or
28330     appendices that qualify as Secondary Sections and contain no
28331     material copied from the Document, you may at your option
28332     designate some or all of these sections as invariant.  To do this,
28333     add their titles to the list of Invariant Sections in the Modified
28334     Version's license notice.  These titles must be distinct from any
28335     other section titles.
28336
28337     You may add a section Entitled "Endorsements", provided it contains
28338     nothing but endorsements of your Modified Version by various
28339     parties--for example, statements of peer review or that the text
28340     has been approved by an organization as the authoritative
28341     definition of a standard.
28342
28343     You may add a passage of up to five words as a Front-Cover Text,
28344     and a passage of up to 25 words as a Back-Cover Text, to the end
28345     of the list of Cover Texts in the Modified Version.  Only one
28346     passage of Front-Cover Text and one of Back-Cover Text may be
28347     added by (or through arrangements made by) any one entity.  If the
28348     Document already includes a cover text for the same cover,
28349     previously added by you or by arrangement made by the same entity
28350     you are acting on behalf of, you may not add another; but you may
28351     replace the old one, on explicit permission from the previous
28352     publisher that added the old one.
28353
28354     The author(s) and publisher(s) of the Document do not by this
28355     License give permission to use their names for publicity for or to
28356     assert or imply endorsement of any Modified Version.
28357
28358  5. COMBINING DOCUMENTS
28359
28360     You may combine the Document with other documents released under
28361     this License, under the terms defined in section 4 above for
28362     modified versions, provided that you include in the combination
28363     all of the Invariant Sections of all of the original documents,
28364     unmodified, and list them all as Invariant Sections of your
28365     combined work in its license notice, and that you preserve all
28366     their Warranty Disclaimers.
28367
28368     The combined work need only contain one copy of this License, and
28369     multiple identical Invariant Sections may be replaced with a single
28370     copy.  If there are multiple Invariant Sections with the same name
28371     but different contents, make the title of each such section unique
28372     by adding at the end of it, in parentheses, the name of the
28373     original author or publisher of that section if known, or else a
28374     unique number.  Make the same adjustment to the section titles in
28375     the list of Invariant Sections in the license notice of the
28376     combined work.
28377
28378     In the combination, you must combine any sections Entitled
28379     "History" in the various original documents, forming one section
28380     Entitled "History"; likewise combine any sections Entitled
28381     "Acknowledgements", and any sections Entitled "Dedications".  You
28382     must delete all sections Entitled "Endorsements."
28383
28384  6. COLLECTIONS OF DOCUMENTS
28385
28386     You may make a collection consisting of the Document and other
28387     documents released under this License, and replace the individual
28388     copies of this License in the various documents with a single copy
28389     that is included in the collection, provided that you follow the
28390     rules of this License for verbatim copying of each of the
28391     documents in all other respects.
28392
28393     You may extract a single document from such a collection, and
28394     distribute it individually under this License, provided you insert
28395     a copy of this License into the extracted document, and follow
28396     this License in all other respects regarding verbatim copying of
28397     that document.
28398
28399  7. AGGREGATION WITH INDEPENDENT WORKS
28400
28401     A compilation of the Document or its derivatives with other
28402     separate and independent documents or works, in or on a volume of
28403     a storage or distribution medium, is called an "aggregate" if the
28404     copyright resulting from the compilation is not used to limit the
28405     legal rights of the compilation's users beyond what the individual
28406     works permit.  When the Document is included in an aggregate, this
28407     License does not apply to the other works in the aggregate which
28408     are not themselves derivative works of the Document.
28409
28410     If the Cover Text requirement of section 3 is applicable to these
28411     copies of the Document, then if the Document is less than one half
28412     of the entire aggregate, the Document's Cover Texts may be placed
28413     on covers that bracket the Document within the aggregate, or the
28414     electronic equivalent of covers if the Document is in electronic
28415     form.  Otherwise they must appear on printed covers that bracket
28416     the whole aggregate.
28417
28418  8. TRANSLATION
28419
28420     Translation is considered a kind of modification, so you may
28421     distribute translations of the Document under the terms of section
28422     4.  Replacing Invariant Sections with translations requires special
28423     permission from their copyright holders, but you may include
28424     translations of some or all Invariant Sections in addition to the
28425     original versions of these Invariant Sections.  You may include a
28426     translation of this License, and all the license notices in the
28427     Document, and any Warranty Disclaimers, provided that you also
28428     include the original English version of this License and the
28429     original versions of those notices and disclaimers.  In case of a
28430     disagreement between the translation and the original version of
28431     this License or a notice or disclaimer, the original version will
28432     prevail.
28433
28434     If a section in the Document is Entitled "Acknowledgements",
28435     "Dedications", or "History", the requirement (section 4) to
28436     Preserve its Title (section 1) will typically require changing the
28437     actual title.
28438
28439  9. TERMINATION
28440
28441     You may not copy, modify, sublicense, or distribute the Document
28442     except as expressly provided for under this License.  Any other
28443     attempt to copy, modify, sublicense or distribute the Document is
28444     void, and will automatically terminate your rights under this
28445     License.  However, parties who have received copies, or rights,
28446     from you under this License will not have their licenses
28447     terminated so long as such parties remain in full compliance.
28448
28449 10. FUTURE REVISIONS OF THIS LICENSE
28450
28451     The Free Software Foundation may publish new, revised versions of
28452     the GNU Free Documentation License from time to time.  Such new
28453     versions will be similar in spirit to the present version, but may
28454     differ in detail to address new problems or concerns.  See
28455     `http://www.gnu.org/copyleft/'.
28456
28457     Each version of the License is given a distinguishing version
28458     number.  If the Document specifies that a particular numbered
28459     version of this License "or any later version" applies to it, you
28460     have the option of following the terms and conditions either of
28461     that specified version or of any later version that has been
28462     published (not as a draft) by the Free Software Foundation.  If
28463     the Document does not specify a version number of this License,
28464     you may choose any version ever published (not as a draft) by the
28465     Free Software Foundation.
28466
28467ADDENDUM: How to use this License for your documents
28468====================================================
28469
28470To use this License in a document you have written, include a copy of
28471the License in the document and put the following copyright and license
28472notices just after the title page:
28473
28474       Copyright (C)  YEAR  YOUR NAME.
28475       Permission is granted to copy, distribute and/or modify this document
28476       under the terms of the GNU Free Documentation License, Version 1.2
28477       or any later version published by the Free Software Foundation;
28478       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
28479       Texts.  A copy of the license is included in the section entitled ``GNU
28480       Free Documentation License''.
28481
28482 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
28483replace the "with...Texts." line with this:
28484
28485         with the Invariant Sections being LIST THEIR TITLES, with
28486         the Front-Cover Texts being LIST, and with the Back-Cover Texts
28487         being LIST.
28488
28489 If you have Invariant Sections without Cover Texts, or some other
28490combination of the three, merge those two alternatives to suit the
28491situation.
28492
28493 If your document contains nontrivial examples of program code, we
28494recommend releasing these examples in parallel under your choice of
28495free software license, such as the GNU General Public License, to
28496permit their use in free software.
28497
28498
28499File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
28500
28501Contributors to GCC
28502*******************
28503
28504The GCC project would like to thank its many contributors.  Without
28505them the project would not have been nearly as successful as it has
28506been.  Any omissions in this list are accidental.  Feel free to contact
28507<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
28508some of your contributions are not listed.  Please keep this list in
28509alphabetical order.
28510
28511   * Analog Devices helped implement the support for complex data types
28512     and iterators.
28513
28514   * John David Anglin for threading-related fixes and improvements to
28515     libstdc++-v3, and the HP-UX port.
28516
28517   * James van Artsdalen wrote the code that makes efficient use of the
28518     Intel 80387 register stack.
28519
28520   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
28521     Series port.
28522
28523   * Alasdair Baird for various bug fixes.
28524
28525   * Giovanni Bajo for analyzing lots of complicated C++ problem
28526     reports.
28527
28528   * Peter Barada for his work to improve code generation for new
28529     ColdFire cores.
28530
28531   * Gerald Baumgartner added the signature extension to the C++ front
28532     end.
28533
28534   * Godmar Back for his Java improvements and encouragement.
28535
28536   * Scott Bambrough for help porting the Java compiler.
28537
28538   * Wolfgang Bangerth for processing tons of bug reports.
28539
28540   * Jon Beniston for his Microsoft Windows port of Java.
28541
28542   * Daniel Berlin for better DWARF2 support, faster/better
28543     optimizations, improved alias analysis, plus migrating GCC to
28544     Bugzilla.
28545
28546   * Geoff Berry for his Java object serialization work and various
28547     patches.
28548
28549   * Uros Bizjak for the implementation of x87 math built-in functions
28550     and for various middle end and i386 back end improvements and
28551     bugfixes.
28552
28553   * Eric Blake for helping to make GCJ and libgcj conform to the
28554     specifications.
28555
28556   * Janne Blomqvist for contributions to GNU Fortran.
28557
28558   * Segher Boessenkool for various fixes.
28559
28560   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
28561     other Java work.
28562
28563   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
28564     miscellaneous clean-ups.
28565
28566   * Steven Bosscher for integrating the GNU Fortran front end into GCC
28567     and for contributing to the tree-ssa branch.
28568
28569   * Eric Botcazou for fixing middle- and backend bugs left and right.
28570
28571   * Per Bothner for his direction via the steering committee and
28572     various improvements to the infrastructure for supporting new
28573     languages.  Chill front end implementation.  Initial
28574     implementations of cpplib, fix-header, config.guess, libio, and
28575     past C++ library (libg++) maintainer.  Dreaming up, designing and
28576     implementing much of GCJ.
28577
28578   * Devon Bowen helped port GCC to the Tahoe.
28579
28580   * Don Bowman for mips-vxworks contributions.
28581
28582   * Dave Brolley for work on cpplib and Chill.
28583
28584   * Paul Brook for work on the ARM architecture and maintaining GNU
28585     Fortran.
28586
28587   * Robert Brown implemented the support for Encore 32000 systems.
28588
28589   * Christian Bruel for improvements to local store elimination.
28590
28591   * Herman A.J. ten Brugge for various fixes.
28592
28593   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
28594     FAQ.
28595
28596   * Joe Buck for his direction via the steering committee.
28597
28598   * Craig Burley for leadership of the G77 Fortran effort.
28599
28600   * Stephan Buys for contributing Doxygen notes for libstdc++.
28601
28602   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
28603     to the C++ strings, streambufs and formatted I/O, hard detective
28604     work on the frustrating localization issues, and keeping up with
28605     the problem reports.
28606
28607   * John Carr for his alias work, SPARC hacking, infrastructure
28608     improvements, previous contributions to the steering committee,
28609     loop optimizations, etc.
28610
28611   * Stephane Carrez for 68HC11 and 68HC12 ports.
28612
28613   * Steve Chamberlain for support for the Renesas SH and H8 processors
28614     and the PicoJava processor, and for GCJ config fixes.
28615
28616   * Glenn Chambers for help with the GCJ FAQ.
28617
28618   * John-Marc Chandonia for various libgcj patches.
28619
28620   * Scott Christley for his Objective-C contributions.
28621
28622   * Eric Christopher for his Java porting help and clean-ups.
28623
28624   * Branko Cibej for more warning contributions.
28625
28626   * The GNU Classpath project for all of their merged runtime code.
28627
28628   * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
28629     other random hacking.
28630
28631   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
28632
28633   * R. Kelley Cook for making GCC buildable from a read-only directory
28634     as well as other miscellaneous build process and documentation
28635     clean-ups.
28636
28637   * Ralf Corsepius for SH testing and minor bugfixing.
28638
28639   * Stan Cox for care and feeding of the x86 port and lots of behind
28640     the scenes hacking.
28641
28642   * Alex Crain provided changes for the 3b1.
28643
28644   * Ian Dall for major improvements to the NS32k port.
28645
28646   * Paul Dale for his work to add uClinux platform support to the m68k
28647     backend.
28648
28649   * Dario Dariol contributed the four varieties of sample programs
28650     that print a copy of their source.
28651
28652   * Russell Davidson for fstream and stringstream fixes in libstdc++.
28653
28654   * Bud Davis for work on the G77 and GNU Fortran compilers.
28655
28656   * Mo DeJong for GCJ and libgcj bug fixes.
28657
28658   * DJ Delorie for the DJGPP port, build and libiberty maintenance,
28659     various bug fixes, and the M32C port.
28660
28661   * Arnaud Desitter for helping to debug GNU Fortran.
28662
28663   * Gabriel Dos Reis for contributions to G++, contributions and
28664     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
28665     including `valarray<>', `complex<>', maintaining the numerics
28666     library (including that pesky `<limits>' :-) and keeping
28667     up-to-date anything to do with numbers.
28668
28669   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
28670     ISO C99 support, CFG dumping support, etc., plus support of the
28671     C++ runtime libraries including for all kinds of C interface
28672     issues, contributing and maintaining `complex<>', sanity checking
28673     and disbursement, configuration architecture, libio maintenance,
28674     and early math work.
28675
28676   * Zdenek Dvorak for a new loop unroller and various fixes.
28677
28678   * Richard Earnshaw for his ongoing work with the ARM.
28679
28680   * David Edelsohn for his direction via the steering committee,
28681     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
28682     loop changes, doing the entire AIX port of libstdc++ with his bare
28683     hands, and for ensuring GCC properly keeps working on AIX.
28684
28685   * Kevin Ediger for the floating point formatting of num_put::do_put
28686     in libstdc++.
28687
28688   * Phil Edwards for libstdc++ work including configuration hackery,
28689     documentation maintainer, chief breaker of the web pages, the
28690     occasional iostream bug fix, and work on shared library symbol
28691     versioning.
28692
28693   * Paul Eggert for random hacking all over GCC.
28694
28695   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
28696     configuration support for locales and fstream-related fixes.
28697
28698   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
28699     iostreams.
28700
28701   * Christian Ehrhardt for dealing with bug reports.
28702
28703   * Ben Elliston for his work to move the Objective-C runtime into its
28704     own subdirectory and for his work on autoconf.
28705
28706   * Marc Espie for OpenBSD support.
28707
28708   * Doug Evans for much of the global optimization framework, arc,
28709     m32r, and SPARC work.
28710
28711   * Christopher Faylor for his work on the Cygwin port and for caring
28712     and feeding the gcc.gnu.org box and saving its users tons of spam.
28713
28714   * Fred Fish for BeOS support and Ada fixes.
28715
28716   * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
28717
28718   * Peter Gerwinski for various bug fixes and the Pascal front end.
28719
28720   * Kaveh R. Ghazi for his direction via the steering committee,
28721     amazing work to make `-W -Wall -W* -Werror' useful, and
28722     continuously testing GCC on a plethora of platforms.  Kaveh
28723     extends his gratitude to the CAIP Center at Rutgers University for
28724     providing him with computing resources to work on Free Software
28725     since the late 1980s.
28726
28727   * John Gilmore for a donation to the FSF earmarked improving GNU
28728     Java.
28729
28730   * Judy Goldberg for c++ contributions.
28731
28732   * Torbjorn Granlund for various fixes and the c-torture testsuite,
28733     multiply- and divide-by-constant optimization, improved long long
28734     support, improved leaf function register allocation, and his
28735     direction via the steering committee.
28736
28737   * Anthony Green for his `-Os' contributions and Java front end work.
28738
28739   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
28740     Java code.
28741
28742   * Michael K. Gschwind contributed the port to the PDP-11.
28743
28744   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
28745     the support for Dwarf symbolic debugging information, and much of
28746     the support for System V Release 4.  He has also worked heavily on
28747     the Intel 386 and 860 support.
28748
28749   * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
28750     GCSE.
28751
28752   * Bruno Haible for improvements in the runtime overhead for EH, new
28753     warnings and assorted bug fixes.
28754
28755   * Andrew Haley for his amazing Java compiler and library efforts.
28756
28757   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
28758     series 300.
28759
28760   * Michael Hayes for various thankless work he's done trying to get
28761     the c30/c40 ports functional.  Lots of loop and unroll
28762     improvements and fixes.
28763
28764   * Dara Hazeghi for wading through myriads of target-specific bug
28765     reports.
28766
28767   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
28768
28769   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
28770     work, loop opts, and generally fixing lots of old problems we've
28771     ignored for years, flow rewrite and lots of further stuff,
28772     including reviewing tons of patches.
28773
28774   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
28775     various fixes.
28776
28777   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
28778     contributed the support for the Sony NEWS machine.
28779
28780   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
28781     various fixes.
28782
28783   * Katherine Holcomb for work on GNU Fortran.
28784
28785   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
28786     of testing and bug fixing, particularly of GCC configury code.
28787
28788   * Steve Holmgren for MachTen patches.
28789
28790   * Jan Hubicka for his x86 port improvements.
28791
28792   * Falk Hueffner for working on C and optimization bug reports.
28793
28794   * Bernardo Innocenti for his m68k work, including merging of
28795     ColdFire improvements and uClinux support.
28796
28797   * Christian Iseli for various bug fixes.
28798
28799   * Kamil Iskra for general m68k hacking.
28800
28801   * Lee Iverson for random fixes and MIPS testing.
28802
28803   * Andreas Jaeger for testing and benchmarking of GCC and various bug
28804     fixes.
28805
28806   * Jakub Jelinek for his SPARC work and sibling call optimizations as
28807     well as lots of bug fixes and test cases, and for improving the
28808     Java build system.
28809
28810   * Janis Johnson for ia64 testing and fixes, her quality improvement
28811     sidetracks, and web page maintenance.
28812
28813   * Kean Johnston for SCO OpenServer support and various fixes.
28814
28815   * Tim Josling for the sample language treelang based originally on
28816     Richard Kenner's "toy" language.
28817
28818   * Nicolai Josuttis for additional libstdc++ documentation.
28819
28820   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
28821     target.
28822
28823   * Steven G. Kargl for work on GNU Fortran.
28824
28825   * David Kashtan of SRI adapted GCC to VMS.
28826
28827   * Ryszard Kabatek for many, many libstdc++ bug fixes and
28828     optimizations of strings, especially member functions, and for
28829     auto_ptr fixes.
28830
28831   * Geoffrey Keating for his ongoing work to make the PPC work for
28832     GNU/Linux and his automatic regression tester.
28833
28834   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
28835     work in just about every part of libstdc++.
28836
28837   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
28838     MIL-STD-1750A.
28839
28840   * Richard Kenner of the New York University Ultracomputer Research
28841     Laboratory wrote the machine descriptions for the AMD 29000, the
28842     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
28843     support for instruction attributes.  He also made changes to
28844     better support RISC processors including changes to common
28845     subexpression elimination, strength reduction, function calling
28846     sequence handling, and condition code support, in addition to
28847     generalizing the code for frame pointer elimination and delay slot
28848     scheduling.  Richard Kenner was also the head maintainer of GCC
28849     for several years.
28850
28851   * Mumit Khan for various contributions to the Cygwin and Mingw32
28852     ports and maintaining binary releases for Microsoft Windows hosts,
28853     and for massive libstdc++ porting work to Cygwin/Mingw32.
28854
28855   * Robin Kirkham for cpu32 support.
28856
28857   * Mark Klein for PA improvements.
28858
28859   * Thomas Koenig for various bug fixes.
28860
28861   * Bruce Korb for the new and improved fixincludes code.
28862
28863   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
28864     effort.
28865
28866   * Charles LaBrec contributed the support for the Integrated Solutions
28867     68020 system.
28868
28869   * Asher Langton and Mike Kumbera for contributing Cray pointer
28870     support to GNU Fortran, and for other GNU Fortran improvements.
28871
28872   * Jeff Law for his direction via the steering committee,
28873     coordinating the entire egcs project and GCC 2.95, rolling out
28874     snapshots and releases, handling merges from GCC2, reviewing tons
28875     of patches that might have fallen through the cracks else, and
28876     random but extensive hacking.
28877
28878   * Marc Lehmann for his direction via the steering committee and
28879     helping with analysis and improvements of x86 performance.
28880
28881   * Victor Leikehman for work on GNU Fortran.
28882
28883   * Ted Lemon wrote parts of the RTL reader and printer.
28884
28885   * Kriang Lerdsuwanakij for C++ improvements including template as
28886     template parameter support, and many C++ fixes.
28887
28888   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
28889     and random work on the Java front end.
28890
28891   * Alain Lichnewsky ported GCC to the MIPS CPU.
28892
28893   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
28894     and patches.
28895
28896   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
28897
28898   * Weiwen Liu for testing and various bug fixes.
28899
28900   * Dave Love for his ongoing work with the Fortran front end and
28901     runtime libraries.
28902
28903   * Martin von Lo"wis for internal consistency checking infrastructure,
28904     various C++ improvements including namespace support, and tons of
28905     assistance with libstdc++/compiler merges.
28906
28907   * H.J. Lu for his previous contributions to the steering committee,
28908     many x86 bug reports, prototype patches, and keeping the GNU/Linux
28909     ports working.
28910
28911   * Greg McGary for random fixes and (someday) bounded pointers.
28912
28913   * Andrew MacLeod for his ongoing work in building a real EH system,
28914     various code generation improvements, work on the global
28915     optimizer, etc.
28916
28917   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
28918     hacking improvements to compile-time performance, overall
28919     knowledge and direction in the area of instruction scheduling, and
28920     design and implementation of the automaton based instruction
28921     scheduler.
28922
28923   * Bob Manson for his behind the scenes work on dejagnu.
28924
28925   * Philip Martin for lots of libstdc++ string and vector iterator
28926     fixes and improvements, and string clean up and testsuites.
28927
28928   * All of the Mauve project contributors, for Java test code.
28929
28930   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
28931
28932   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
28933
28934   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
28935     powerpc, haifa, ECOFF debug support, and other assorted hacking.
28936
28937   * Jason Merrill for his direction via the steering committee and
28938     leading the G++ effort.
28939
28940   * Martin Michlmayr for testing GCC on several architectures using the
28941     entire Debian archive.
28942
28943   * David Miller for his direction via the steering committee, lots of
28944     SPARC work, improvements in jump.c and interfacing with the Linux
28945     kernel developers.
28946
28947   * Gary Miller ported GCC to Charles River Data Systems machines.
28948
28949   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
28950     the entire libstdc++ testsuite namespace-compatible.
28951
28952   * Mark Mitchell for his direction via the steering committee,
28953     mountains of C++ work, load/store hoisting out of loops, alias
28954     analysis improvements, ISO C `restrict' support, and serving as
28955     release manager for GCC 3.x.
28956
28957   * Alan Modra for various GNU/Linux bits and testing.
28958
28959   * Toon Moene for his direction via the steering committee, Fortran
28960     maintenance, and his ongoing work to make us make Fortran run fast.
28961
28962   * Jason Molenda for major help in the care and feeding of all the
28963     services on the gcc.gnu.org (formerly egcs.cygnus.com)
28964     machine--mail, web services, ftp services, etc etc.  Doing all
28965     this work on scrap paper and the backs of envelopes would have
28966     been... difficult.
28967
28968   * Catherine Moore for fixing various ugly problems we have sent her
28969     way, including the haifa bug which was killing the Alpha & PowerPC
28970     Linux kernels.
28971
28972   * Mike Moreton for his various Java patches.
28973
28974   * David Mosberger-Tang for various Alpha improvements, and for the
28975     initial IA-64 port.
28976
28977   * Stephen Moshier contributed the floating point emulator that
28978     assists in cross-compilation and permits support for floating
28979     point numbers wider than 64 bits and for ISO C99 support.
28980
28981   * Bill Moyer for his behind the scenes work on various issues.
28982
28983   * Philippe De Muyter for his work on the m68k port.
28984
28985   * Joseph S. Myers for his work on the PDP-11 port, format checking
28986     and ISO C99 support, and continuous emphasis on (and contributions
28987     to) documentation.
28988
28989   * Nathan Myers for his work on libstdc++-v3: architecture and
28990     authorship through the first three snapshots, including
28991     implementation of locale infrastructure, string, shadow C headers,
28992     and the initial project documentation (DESIGN, CHECKLIST, and so
28993     forth).  Later, more work on MT-safe string and shadow headers.
28994
28995   * Felix Natter for documentation on porting libstdc++.
28996
28997   * Nathanael Nerode for cleaning up the configuration/build process.
28998
28999   * NeXT, Inc. donated the front end that supports the Objective-C
29000     language.
29001
29002   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
29003     the search engine setup, various documentation fixes and other
29004     small fixes.
29005
29006   * Geoff Noer for his work on getting cygwin native builds working.
29007
29008   * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance
29009     tracking web pages and assorted fixes.
29010
29011   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
29012     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
29013     related infrastructure improvements.
29014
29015   * Alexandre Oliva for various build infrastructure improvements,
29016     scripts and amazing testing work, including keeping libtool issues
29017     sane and happy.
29018
29019   * Stefan Olsson for work on mt_alloc.
29020
29021   * Melissa O'Neill for various NeXT fixes.
29022
29023   * Rainer Orth for random MIPS work, including improvements to GCC's
29024     o32 ABI support, improvements to dejagnu's MIPS support, Java
29025     configuration clean-ups and porting work, etc.
29026
29027   * Hartmut Penner for work on the s390 port.
29028
29029   * Paul Petersen wrote the machine description for the Alliant FX/8.
29030
29031   * Alexandre Petit-Bianco for implementing much of the Java compiler
29032     and continued Java maintainership.
29033
29034   * Matthias Pfaller for major improvements to the NS32k port.
29035
29036   * Gerald Pfeifer for his direction via the steering committee,
29037     pointing out lots of problems we need to solve, maintenance of the
29038     web pages, and taking care of documentation maintenance in general.
29039
29040   * Andrew Pinski for processing bug reports by the dozen.
29041
29042   * Ovidiu Predescu for his work on the Objective-C front end and
29043     runtime libraries.
29044
29045   * Jerry Quinn for major performance improvements in C++ formatted
29046     I/O.
29047
29048   * Ken Raeburn for various improvements to checker, MIPS ports and
29049     various cleanups in the compiler.
29050
29051   * Rolf W. Rasmussen for hacking on AWT.
29052
29053   * David Reese of Sun Microsystems contributed to the Solaris on
29054     PowerPC port.
29055
29056   * Volker Reichelt for keeping up with the problem reports.
29057
29058   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
29059     hacking.
29060
29061   * Loren J. Rittle for improvements to libstdc++-v3 including the
29062     FreeBSD port, threading fixes, thread-related configury changes,
29063     critical threading documentation, and solutions to really tricky
29064     I/O problems, as well as keeping GCC properly working on FreeBSD
29065     and continuous testing.
29066
29067   * Craig Rodrigues for processing tons of bug reports.
29068
29069   * Ola Ro"nnerup for work on mt_alloc.
29070
29071   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
29072
29073   * David Ronis inspired and encouraged Craig to rewrite the G77
29074     documentation in texinfo format by contributing a first pass at a
29075     translation of the old `g77-0.5.16/f/DOC' file.
29076
29077   * Ken Rose for fixes to GCC's delay slot filling code.
29078
29079   * Paul Rubin wrote most of the preprocessor.
29080
29081   * Pe'tur Runo'lfsson for major performance improvements in C++
29082     formatted I/O and large file support in C++ filebuf.
29083
29084   * Chip Salzenberg for libstdc++ patches and improvements to locales,
29085     traits, Makefiles, libio, libtool hackery, and "long long" support.
29086
29087   * Juha Sarlin for improvements to the H8 code generator.
29088
29089   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
29090     300.
29091
29092   * Roger Sayle for improvements to constant folding and GCC's RTL
29093     optimizers as well as for fixing numerous bugs.
29094
29095   * Bradley Schatz for his work on the GCJ FAQ.
29096
29097   * Peter Schauer wrote the code to allow debugging to work on the
29098     Alpha.
29099
29100   * William Schelter did most of the work on the Intel 80386 support.
29101
29102   * Tobias Schlu"ter for work on GNU Fortran.
29103
29104   * Bernd Schmidt for various code generation improvements and major
29105     work in the reload pass as well a serving as release manager for
29106     GCC 2.95.3.
29107
29108   * Peter Schmid for constant testing of libstdc++--especially
29109     application testing, going above and beyond what was requested for
29110     the release criteria--and libstdc++ header file tweaks.
29111
29112   * Jason Schroeder for jcf-dump patches.
29113
29114   * Andreas Schwab for his work on the m68k port.
29115
29116   * Lars Segerlund for work on GNU Fortran.
29117
29118   * Joel Sherrill for his direction via the steering committee, RTEMS
29119     contributions and RTEMS testing.
29120
29121   * Nathan Sidwell for many C++ fixes/improvements.
29122
29123   * Jeffrey Siegal for helping RMS with the original design of GCC,
29124     some code which handles the parse tree and RTL data structures,
29125     constant folding and help with the original VAX & m68k ports.
29126
29127   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
29128     from the LWG (thereby keeping GCC in line with updates from the
29129     ISO).
29130
29131   * Franz Sirl for his ongoing work with making the PPC port stable
29132     for GNU/Linux.
29133
29134   * Andrey Slepuhin for assorted AIX hacking.
29135
29136   * Christopher Smith did the port for Convex machines.
29137
29138   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
29139
29140   * Randy Smith finished the Sun FPA support.
29141
29142   * Scott Snyder for queue, iterator, istream, and string fixes and
29143     libstdc++ testsuite entries.  Also for providing the patch to G77
29144     to add rudimentary support for `INTEGER*1', `INTEGER*2', and
29145     `LOGICAL*1'.
29146
29147   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
29148
29149   * Richard Stallman, for writing the original GCC and launching the
29150     GNU project.
29151
29152   * Jan Stein of the Chalmers Computer Society provided support for
29153     Genix, as well as part of the 32000 machine description.
29154
29155   * Nigel Stephens for various mips16 related fixes/improvements.
29156
29157   * Jonathan Stone wrote the machine description for the Pyramid
29158     computer.
29159
29160   * Graham Stott for various infrastructure improvements.
29161
29162   * John Stracke for his Java HTTP protocol fixes.
29163
29164   * Mike Stump for his Elxsi port, G++ contributions over the years
29165     and more recently his vxworks contributions
29166
29167   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
29168
29169   * Shigeya Suzuki for this fixes for the bsdi platforms.
29170
29171   * Ian Lance Taylor for his mips16 work, general configury hacking,
29172     fixincludes, etc.
29173
29174   * Holger Teutsch provided the support for the Clipper CPU.
29175
29176   * Gary Thomas for his ongoing work to make the PPC work for
29177     GNU/Linux.
29178
29179   * Philipp Thomas for random bug fixes throughout the compiler
29180
29181   * Jason Thorpe for thread support in libstdc++ on NetBSD.
29182
29183   * Kresten Krab Thorup wrote the run time support for the Objective-C
29184     language and the fantastic Java bytecode interpreter.
29185
29186   * Michael Tiemann for random bug fixes, the first instruction
29187     scheduler, initial C++ support, function integration, NS32k, SPARC
29188     and M88k machine description work, delay slot scheduling.
29189
29190   * Andreas Tobler for his work porting libgcj to Darwin.
29191
29192   * Teemu Torma for thread safe exception handling support.
29193
29194   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
29195     definitions, and of the VAX machine description.
29196
29197   * Tom Tromey for internationalization support and for his many Java
29198     contributions and libgcj maintainership.
29199
29200   * Lassi Tuura for improvements to config.guess to determine HP
29201     processor types.
29202
29203   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
29204
29205   * Andy Vaught for the design and initial implementation of the GNU
29206     Fortran front end.
29207
29208   * Brent Verner for work with the libstdc++ cshadow files and their
29209     associated configure steps.
29210
29211   * Todd Vierling for contributions for NetBSD ports.
29212
29213   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
29214     guidance.
29215
29216   * Dean Wakerley for converting the install documentation from HTML
29217     to texinfo in time for GCC 3.0.
29218
29219   * Krister Walfridsson for random bug fixes.
29220
29221   * Feng Wang for contributions to GNU Fortran.
29222
29223   * Stephen M. Webb for time and effort on making libstdc++ shadow
29224     files work with the tricky Solaris 8+ headers, and for pushing the
29225     build-time header tree.
29226
29227   * John Wehle for various improvements for the x86 code generator,
29228     related infrastructure improvements to help x86 code generation,
29229     value range propagation and other work, WE32k port.
29230
29231   * Ulrich Weigand for work on the s390 port.
29232
29233   * Zack Weinberg for major work on cpplib and various other bug fixes.
29234
29235   * Matt Welsh for help with Linux Threads support in GCJ.
29236
29237   * Urban Widmark for help fixing java.io.
29238
29239   * Mark Wielaard for new Java library code and his work integrating
29240     with Classpath.
29241
29242   * Dale Wiles helped port GCC to the Tahoe.
29243
29244   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
29245
29246   * Jim Wilson for his direction via the steering committee, tackling
29247     hard problems in various places that nobody else wanted to work
29248     on, strength reduction and other loop optimizations.
29249
29250   * Paul Woegerer and Tal Agmon for the CRX port.
29251
29252   * Carlo Wood for various fixes.
29253
29254   * Tom Wood for work on the m88k port.
29255
29256   * Canqun Yang for work on GNU Fortran.
29257
29258   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
29259     description for the Tron architecture (specifically, the Gmicro).
29260
29261   * Kevin Zachmann helped port GCC to the Tahoe.
29262
29263   * Ayal Zaks for Swing Modulo Scheduling (SMS).
29264
29265   * Xiaoqiang Zhang for work on GNU Fortran.
29266
29267   * Gilles Zunino for help porting Java to Irix.
29268
29269
29270 The following people are recognized for their contributions to GNAT,
29271the Ada front end of GCC:
29272   * Bernard Banner
29273
29274   * Romain Berrendonner
29275
29276   * Geert Bosch
29277
29278   * Emmanuel Briot
29279
29280   * Joel Brobecker
29281
29282   * Ben Brosgol
29283
29284   * Vincent Celier
29285
29286   * Arnaud Charlet
29287
29288   * Chien Chieng
29289
29290   * Cyrille Comar
29291
29292   * Cyrille Crozes
29293
29294   * Robert Dewar
29295
29296   * Gary Dismukes
29297
29298   * Robert Duff
29299
29300   * Ed Falis
29301
29302   * Ramon Fernandez
29303
29304   * Sam Figueroa
29305
29306   * Vasiliy Fofanov
29307
29308   * Michael Friess
29309
29310   * Franco Gasperoni
29311
29312   * Ted Giering
29313
29314   * Matthew Gingell
29315
29316   * Laurent Guerby
29317
29318   * Jerome Guitton
29319
29320   * Olivier Hainque
29321
29322   * Jerome Hugues
29323
29324   * Hristian Kirtchev
29325
29326   * Jerome Lambourg
29327
29328   * Bruno Leclerc
29329
29330   * Albert Lee
29331
29332   * Sean McNeil
29333
29334   * Javier Miranda
29335
29336   * Laurent Nana
29337
29338   * Pascal Obry
29339
29340   * Dong-Ik Oh
29341
29342   * Laurent Pautet
29343
29344   * Brett Porter
29345
29346   * Thomas Quinot
29347
29348   * Nicolas Roche
29349
29350   * Pat Rogers
29351
29352   * Jose Ruiz
29353
29354   * Douglas Rupp
29355
29356   * Sergey Rybin
29357
29358   * Gail Schenker
29359
29360   * Ed Schonberg
29361
29362   * Nicolas Setton
29363
29364   * Samuel Tardieu
29365
29366
29367 The following people are recognized for their contributions of new
29368features, bug reports, testing and integration of classpath/libgcj for
29369GCC version 4.1:
29370   * Lillian Angel for `JTree' implementation and lots Free Swing
29371     additions and bugfixes.
29372
29373   * Wolfgang Baer for `GapContent' bugfixes.
29374
29375   * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
29376     event fixes, lots of Free Swing work including `JTable' editing.
29377
29378   * Stuart Ballard for RMI constant fixes.
29379
29380   * Goffredo Baroncelli for `HTTPURLConnection' fixes.
29381
29382   * Gary Benson for `MessageFormat' fixes.
29383
29384   * Daniel Bonniot for `Serialization' fixes.
29385
29386   * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
29387     and `DOM xml:id' support.
29388
29389   * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
29390
29391   * Archie Cobbs for build fixes, VM interface updates,
29392     `URLClassLoader' updates.
29393
29394   * Kelley Cook for build fixes.
29395
29396   * Martin Cordova for Suggestions for better `SocketTimeoutException'.
29397
29398   * David Daney for `BitSet' bugfixes, `HttpURLConnection' rewrite and
29399     improvements.
29400
29401   * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
29402     2D support. Lots of imageio framework additions, lots of AWT and
29403     Free Swing bugfixes.
29404
29405   * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
29406     fixes, better `Proxy' support, bugfixes and IKVM integration.
29407
29408   * Santiago Gala for `AccessControlContext' fixes.
29409
29410   * Nicolas Geoffray for `VMClassLoader' and `AccessController'
29411     improvements.
29412
29413   * David Gilbert for `basic' and `metal' icon and plaf support and
29414     lots of documenting, Lots of Free Swing and metal theme additions.
29415     `MetalIconFactory' implementation.
29416
29417   * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
29418
29419   * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
29420     build speedups.
29421
29422   * Kim Ho for `JFileChooser' implementation.
29423
29424   * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
29425     updates, `Serialization' fixes, `Properties' XML support and
29426     generic branch work, VMIntegration guide update.
29427
29428   * Bastiaan Huisman for `TimeZone' bugfixing.
29429
29430   * Andreas Jaeger for mprec updates.
29431
29432   * Paul Jenner for better `-Werror' support.
29433
29434   * Ito Kazumitsu for `NetworkInterface' implementation and updates.
29435
29436   * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
29437     bugfixes all over. Lots of Free Swing work including styled text.
29438
29439   * Simon Kitching for `String' cleanups and optimization suggestions.
29440
29441   * Michael Koch for configuration fixes, `Locale' updates, bug and
29442     build fixes.
29443
29444   * Guilhem Lavaux for configuration, thread and channel fixes and
29445     Kaffe integration. JCL native `Pointer' updates. Logger bugfixes.
29446
29447   * David Lichteblau for JCL support library global/local reference
29448     cleanups.
29449
29450   * Aaron Luchko for JDWP updates and documentation fixes.
29451
29452   * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
29453     features.
29454
29455   * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
29456     fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
29457     and implementing the Qt4 peers.
29458
29459   * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
29460     `SystemLogger' and `FileHandler' rotate implementations, NIO
29461     `FileChannel.map' support, security and policy updates.
29462
29463   * Bryce McKinlay for RMI work.
29464
29465   * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
29466     testing and documenting.
29467
29468   * Kalle Olavi Niemitalo for build fixes.
29469
29470   * Rainer Orth for build fixes.
29471
29472   * Andrew Overholt for `File' locking fixes.
29473
29474   * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
29475
29476   * Olga Rodimina for `MenuSelectionManager' implementation.
29477
29478   * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
29479
29480   * Julian Scheid for documentation updates and gjdoc support.
29481
29482   * Christian Schlichtherle for zip fixes and cleanups.
29483
29484   * Robert Schuster for documentation updates and beans fixes,
29485     `TreeNode' enumerations and `ActionCommand' and various fixes, XML
29486     and URL, AWT and Free Swing bugfixes.
29487
29488   * Keith Seitz for lots of JDWP work.
29489
29490   * Christian Thalinger for 64-bit cleanups, Configuration and VM
29491     interface fixes and `CACAO' integration, `fdlibm' updates.
29492
29493   * Gael Thomas for `VMClassLoader' boot packages support suggestions.
29494
29495   * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
29496     support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
29497
29498   * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
29499     integration. `Qt4' build infrastructure, `SHA1PRNG' and
29500     `GdkPixbugDecoder' updates.
29501
29502   * Tom Tromey for Eclipse integration, generics work, lots of bugfixes
29503     and gcj integration including coordinating The Big Merge.
29504
29505   * Mark Wielaard for bugfixes, packaging and release management,
29506     `Clipboard' implementation, system call interrupts and network
29507     timeouts and `GdkPixpufDecoder' fixes.
29508
29509
29510 In addition to the above, all of which also contributed time and
29511energy in testing GCC, we would like to thank the following for their
29512contributions to testing:
29513
29514   * Michael Abd-El-Malek
29515
29516   * Thomas Arend
29517
29518   * Bonzo Armstrong
29519
29520   * Steven Ashe
29521
29522   * Chris Baldwin
29523
29524   * David Billinghurst
29525
29526   * Jim Blandy
29527
29528   * Stephane Bortzmeyer
29529
29530   * Horst von Brand
29531
29532   * Frank Braun
29533
29534   * Rodney Brown
29535
29536   * Sidney Cadot
29537
29538   * Bradford Castalia
29539
29540   * Jonathan Corbet
29541
29542   * Ralph Doncaster
29543
29544   * Richard Emberson
29545
29546   * Levente Farkas
29547
29548   * Graham Fawcett
29549
29550   * Mark Fernyhough
29551
29552   * Robert A. French
29553
29554   * Jo"rgen Freyh
29555
29556   * Mark K. Gardner
29557
29558   * Charles-Antoine Gauthier
29559
29560   * Yung Shing Gene
29561
29562   * David Gilbert
29563
29564   * Simon Gornall
29565
29566   * Fred Gray
29567
29568   * John Griffin
29569
29570   * Patrik Hagglund
29571
29572   * Phil Hargett
29573
29574   * Amancio Hasty
29575
29576   * Takafumi Hayashi
29577
29578   * Bryan W. Headley
29579
29580   * Kevin B. Hendricks
29581
29582   * Joep Jansen
29583
29584   * Christian Joensson
29585
29586   * Michel Kern
29587
29588   * David Kidd
29589
29590   * Tobias Kuipers
29591
29592   * Anand Krishnaswamy
29593
29594   * A. O. V. Le Blanc
29595
29596   * llewelly
29597
29598   * Damon Love
29599
29600   * Brad Lucier
29601
29602   * Matthias Klose
29603
29604   * Martin Knoblauch
29605
29606   * Rick Lutowski
29607
29608   * Jesse Macnish
29609
29610   * Stefan Morrell
29611
29612   * Anon A. Mous
29613
29614   * Matthias Mueller
29615
29616   * Pekka Nikander
29617
29618   * Rick Niles
29619
29620   * Jon Olson
29621
29622   * Magnus Persson
29623
29624   * Chris Pollard
29625
29626   * Richard Polton
29627
29628   * Derk Reefman
29629
29630   * David Rees
29631
29632   * Paul Reilly
29633
29634   * Tom Reilly
29635
29636   * Torsten Rueger
29637
29638   * Danny Sadinoff
29639
29640   * Marc Schifer
29641
29642   * Erik Schnetter
29643
29644   * Wayne K. Schroll
29645
29646   * David Schuler
29647
29648   * Vin Shelton
29649
29650   * Tim Souder
29651
29652   * Adam Sulmicki
29653
29654   * Bill Thorson
29655
29656   * George Talbot
29657
29658   * Pedro A. M. Vazquez
29659
29660   * Gregory Warnes
29661
29662   * Ian Watson
29663
29664   * David E. Young
29665
29666   * And many others
29667
29668 And finally we'd like to thank everyone who uses the compiler, submits
29669bug reports and generally reminds us why we're doing this work in the
29670first place.
29671
29672
29673File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
29674
29675Option Index
29676************
29677
29678GCC's command line options are indexed here without any initial `-' or
29679`--'.  Where an option has both positive and negative forms (such as
29680`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
29681indexed under the most appropriate form; it may sometimes be useful to
29682look up both forms.
29683
29684�[index�]
29685* Menu:
29686
29687* ###:                                   Overall Options.    (line  192)
29688* A:                                     Preprocessor Options.
29689                                                             (line  510)
29690* all_load:                              Darwin Options.     (line  103)
29691* allowable_client:                      Darwin Options.     (line  190)
29692* ansi <1>:                              Non-bugs.           (line  107)
29693* ansi <2>:                              Other Builtins.     (line   22)
29694* ansi <3>:                              Preprocessor Options.
29695                                                             (line  324)
29696* ansi <4>:                              C Dialect Options.  (line   11)
29697* ansi:                                  Standards.          (line   13)
29698* arch_errors_fatal:                     Darwin Options.     (line  107)
29699* aux-info:                              C Dialect Options.  (line  119)
29700* b:                                     Target Options.     (line   13)
29701* B:                                     Directory Options.  (line   41)
29702* bcopy-builtin:                         PDP-11 Options.     (line   32)
29703* bind_at_load:                          Darwin Options.     (line  111)
29704* bundle:                                Darwin Options.     (line  116)
29705* bundle_loader:                         Darwin Options.     (line  120)
29706* c:                                     Link Options.       (line   20)
29707* C:                                     Preprocessor Options.
29708                                                             (line  557)
29709* c:                                     Overall Options.    (line  147)
29710* client_name:                           Darwin Options.     (line  190)
29711* combine:                               Overall Options.    (line  203)
29712* compatibility_version:                 Darwin Options.     (line  190)
29713* coverage:                              Debugging Options.  (line  169)
29714* crossjumping:                          Optimize Options.   (line  435)
29715* current_version:                       Darwin Options.     (line  190)
29716* D:                                     Preprocessor Options.
29717                                                             (line   33)
29718* d:                                     Debugging Options.  (line  221)
29719* da:                                    Debugging Options.  (line  387)
29720* dA:                                    Debugging Options.  (line  234)
29721* dB:                                    Debugging Options.  (line  239)
29722* dC:                                    Debugging Options.  (line  249)
29723* dc:                                    Debugging Options.  (line  243)
29724* dD <1>:                                Preprocessor Options.
29725                                                             (line  538)
29726* dD:                                    Debugging Options.  (line  263)
29727* dd:                                    Debugging Options.  (line  257)
29728* dE:                                    Debugging Options.  (line  268)
29729* dead_strip:                            Darwin Options.     (line  190)
29730* dependency-file:                       Darwin Options.     (line  190)
29731* df:                                    Debugging Options.  (line  273)
29732* dG:                                    Debugging Options.  (line  285)
29733* dg:                                    Debugging Options.  (line  280)
29734* dH:                                    Debugging Options.  (line  390)
29735* dh:                                    Debugging Options.  (line  292)
29736* dI:                                    Preprocessor Options.
29737                                                             (line  547)
29738* di:                                    Debugging Options.  (line  296)
29739* dj:                                    Debugging Options.  (line  300)
29740* dk:                                    Debugging Options.  (line  304)
29741* dL:                                    Debugging Options.  (line  313)
29742* dl:                                    Debugging Options.  (line  309)
29743* dM:                                    Preprocessor Options.
29744                                                             (line  526)
29745* dm:                                    Debugging Options.  (line  393)
29746* dM:                                    Debugging Options.  (line  324)
29747* dm:                                    Debugging Options.  (line  320)
29748* dN <1>:                                Preprocessor Options.
29749                                                             (line  544)
29750* dN:                                    Debugging Options.  (line  333)
29751* dn:                                    Debugging Options.  (line  329)
29752* do:                                    Debugging Options.  (line  337)
29753* dP:                                    Debugging Options.  (line  402)
29754* dp:                                    Debugging Options.  (line  397)
29755* dR:                                    Debugging Options.  (line  345)
29756* dr:                                    Debugging Options.  (line  341)
29757* dS:                                    Debugging Options.  (line  354)
29758* ds:                                    Debugging Options.  (line  349)
29759* dT:                                    Debugging Options.  (line  363)
29760* dt:                                    Debugging Options.  (line  358)
29761* dumpmachine:                           Debugging Options.  (line  770)
29762* dumpspecs:                             Debugging Options.  (line  778)
29763* dumpversion:                           Debugging Options.  (line  774)
29764* dv:                                    Debugging Options.  (line  406)
29765* dV:                                    Debugging Options.  (line  368)
29766* dw:                                    Debugging Options.  (line  375)
29767* dx:                                    Debugging Options.  (line  411)
29768* dy:                                    Debugging Options.  (line  415)
29769* dylib_file:                            Darwin Options.     (line  190)
29770* dylinker_install_name:                 Darwin Options.     (line  190)
29771* dynamic:                               Darwin Options.     (line  190)
29772* dynamiclib:                            Darwin Options.     (line  124)
29773* dZ:                                    Debugging Options.  (line  383)
29774* dz:                                    Debugging Options.  (line  379)
29775* E <1>:                                 Link Options.       (line   20)
29776* E:                                     Overall Options.    (line  168)
29777* EB <1>:                                MIPS Options.       (line    7)
29778* EB:                                    ARC Options.        (line   12)
29779* EL <1>:                                MIPS Options.       (line   10)
29780* EL:                                    ARC Options.        (line    9)
29781* exported_symbols_list:                 Darwin Options.     (line  190)
29782* F:                                     Darwin Options.     (line   32)
29783* fabi-version:                          C++ Dialect Options.
29784                                                             (line   20)
29785* falign-functions:                      Optimize Options.   (line  902)
29786* falign-jumps:                          Optimize Options.   (line  952)
29787* falign-labels:                         Optimize Options.   (line  920)
29788* falign-loops:                          Optimize Options.   (line  938)
29789* fargument-alias:                       Code Gen Options.   (line  336)
29790* fargument-noalias:                     Code Gen Options.   (line  336)
29791* fargument-noalias-anything:            Code Gen Options.   (line  336)
29792* fargument-noalias-global:              Code Gen Options.   (line  336)
29793* fasynchronous-unwind-tables:           Code Gen Options.   (line   64)
29794* fbounds-check <1>:                     Code Gen Options.   (line   15)
29795* fbounds-check:                         Optimize Options.   (line  326)
29796* fbranch-probabilities:                 Optimize Options.   (line 1200)
29797* fbranch-target-load-optimize:          Optimize Options.   (line 1308)
29798* fbranch-target-load-optimize2:         Optimize Options.   (line 1314)
29799* fbtr-bb-exclusive:                     Optimize Options.   (line 1318)
29800* fcall-saved <1>:                       Interoperation.     (line  150)
29801* fcall-saved:                           Code Gen Options.   (line  237)
29802* fcall-used:                            Code Gen Options.   (line  223)
29803* fcaller-saves:                         Optimize Options.   (line  579)
29804* fcheck-new:                            C++ Dialect Options.
29805                                                             (line   34)
29806* fcommon:                               Variable Attributes.
29807                                                             (line   92)
29808* fcond-mismatch:                        C Dialect Options.  (line  235)
29809* fconserve-space:                       C++ Dialect Options.
29810                                                             (line   44)
29811* fconstant-string-class:                Objective-C and Objective-C++ Dialect Options.
29812                                                             (line   30)
29813* fcse-follow-jumps:                     Optimize Options.   (line  363)
29814* fcse-skip-blocks:                      Optimize Options.   (line  372)
29815* fcx-limited-range:                     Optimize Options.   (line 1186)
29816* fdata-sections:                        Optimize Options.   (line 1289)
29817* fdelayed-branch:                       Optimize Options.   (line  488)
29818* fdelete-null-pointer-checks:           Optimize Options.   (line  457)
29819* fdiagnostics-show-location:            Language Independent Options.
29820                                                             (line   21)
29821* fdiagnostics-show-option:              Language Independent Options.
29822                                                             (line   36)
29823* fdollars-in-identifiers <1>:           Interoperation.     (line  146)
29824* fdollars-in-identifiers:               Preprocessor Options.
29825                                                             (line  440)
29826* fdump-class-hierarchy:                 Debugging Options.  (line  441)
29827* fdump-ipa:                             Debugging Options.  (line  448)
29828* fdump-noaddr:                          Debugging Options.  (line  418)
29829* fdump-rtl-all:                         Debugging Options.  (line  387)
29830* fdump-rtl-bbro:                        Debugging Options.  (line  239)
29831* fdump-rtl-btl:                         Debugging Options.  (line  257)
29832* fdump-rtl-bypass:                      Debugging Options.  (line  285)
29833* fdump-rtl-ce1:                         Debugging Options.  (line  249)
29834* fdump-rtl-ce2:                         Debugging Options.  (line  249)
29835* fdump-rtl-ce3:                         Debugging Options.  (line  268)
29836* fdump-rtl-cfg:                         Debugging Options.  (line  273)
29837* fdump-rtl-combine:                     Debugging Options.  (line  243)
29838* fdump-rtl-cse:                         Debugging Options.  (line  349)
29839* fdump-rtl-cse2:                        Debugging Options.  (line  358)
29840* fdump-rtl-dbr:                         Debugging Options.  (line  257)
29841* fdump-rtl-eh:                          Debugging Options.  (line  292)
29842* fdump-rtl-expand:                      Debugging Options.  (line  341)
29843* fdump-rtl-flow2:                       Debugging Options.  (line  375)
29844* fdump-rtl-gcse:                        Debugging Options.  (line  285)
29845* fdump-rtl-greg:                        Debugging Options.  (line  280)
29846* fdump-rtl-jump:                        Debugging Options.  (line  300)
29847* fdump-rtl-life:                        Debugging Options.  (line  273)
29848* fdump-rtl-loop2:                       Debugging Options.  (line  313)
29849* fdump-rtl-lreg:                        Debugging Options.  (line  309)
29850* fdump-rtl-mach:                        Debugging Options.  (line  324)
29851* fdump-rtl-peephole2:                   Debugging Options.  (line  379)
29852* fdump-rtl-postreload:                  Debugging Options.  (line  337)
29853* fdump-rtl-regmove:                     Debugging Options.  (line  333)
29854* fdump-rtl-rnreg:                       Debugging Options.  (line  329)
29855* fdump-rtl-sched:                       Debugging Options.  (line  354)
29856* fdump-rtl-sched2:                      Debugging Options.  (line  345)
29857* fdump-rtl-sibling:                     Debugging Options.  (line  296)
29858* fdump-rtl-sms:                         Debugging Options.  (line  320)
29859* fdump-rtl-stack:                       Debugging Options.  (line  304)
29860* fdump-rtl-tracer:                      Debugging Options.  (line  363)
29861* fdump-rtl-vartrack:                    Debugging Options.  (line  368)
29862* fdump-rtl-vpt:                         Debugging Options.  (line  368)
29863* fdump-rtl-web:                         Debugging Options.  (line  383)
29864* fdump-translation-unit:                Debugging Options.  (line  433)
29865* fdump-tree:                            Debugging Options.  (line  463)
29866* fdump-tree-alias:                      Debugging Options.  (line  551)
29867* fdump-tree-all:                        Debugging Options.  (line  636)
29868* fdump-tree-ccp:                        Debugging Options.  (line  555)
29869* fdump-tree-cfg:                        Debugging Options.  (line  526)
29870* fdump-tree-ch:                         Debugging Options.  (line  538)
29871* fdump-tree-copyprop:                   Debugging Options.  (line  571)
29872* fdump-tree-copyrename:                 Debugging Options.  (line  617)
29873* fdump-tree-dce:                        Debugging Options.  (line  579)
29874* fdump-tree-dom:                        Debugging Options.  (line  597)
29875* fdump-tree-dse:                        Debugging Options.  (line  602)
29876* fdump-tree-forwprop:                   Debugging Options.  (line  612)
29877* fdump-tree-fre:                        Debugging Options.  (line  567)
29878* fdump-tree-gimple:                     Debugging Options.  (line  521)
29879* fdump-tree-mudflap:                    Debugging Options.  (line  583)
29880* fdump-tree-nrv:                        Debugging Options.  (line  622)
29881* fdump-tree-phiopt:                     Debugging Options.  (line  607)
29882* fdump-tree-pre:                        Debugging Options.  (line  563)
29883* fdump-tree-salias:                     Debugging Options.  (line  546)
29884* fdump-tree-sink:                       Debugging Options.  (line  593)
29885* fdump-tree-sra:                        Debugging Options.  (line  588)
29886* fdump-tree-ssa:                        Debugging Options.  (line  542)
29887* fdump-tree-store_copyprop:             Debugging Options.  (line  575)
29888* fdump-tree-storeccp:                   Debugging Options.  (line  559)
29889* fdump-tree-vcg:                        Debugging Options.  (line  530)
29890* fdump-tree-vect:                       Debugging Options.  (line  627)
29891* fdump-tree-vrp:                        Debugging Options.  (line  632)
29892* fdump-unnumbered:                      Debugging Options.  (line  425)
29893* fearly-inlining:                       Optimize Options.   (line  204)
29894* feliminate-dwarf2-dups:                Debugging Options.  (line  125)
29895* feliminate-unused-debug-symbols:       Debugging Options.  (line   52)
29896* feliminate-unused-debug-types:         Debugging Options.  (line  782)
29897* fexceptions:                           Code Gen Options.   (line   34)
29898* fexec-charset:                         Preprocessor Options.
29899                                                             (line  467)
29900* fexpensive-optimizations:              Optimize Options.   (line  470)
29901* fextended-identifiers:                 Preprocessor Options.
29902                                                             (line  443)
29903* ffast-math:                            Optimize Options.   (line 1070)
29904* ffinite-math-only:                     Optimize Options.   (line 1114)
29905* ffix-and-continue:                     Darwin Options.     (line   97)
29906* ffixed:                                Code Gen Options.   (line  211)
29907* ffloat-store <1>:                      Disappointments.    (line   77)
29908* ffloat-store:                          Optimize Options.   (line 1056)
29909* ffor-scope:                            C++ Dialect Options.
29910                                                             (line   86)
29911* fforce-addr:                           Optimize Options.   (line  154)
29912* fforce-mem:                            Optimize Options.   (line  146)
29913* ffreestanding <1>:                     Function Attributes.
29914                                                             (line  314)
29915* ffreestanding <2>:                     Warning Options.    (line   94)
29916* ffreestanding <3>:                     C Dialect Options.  (line  190)
29917* ffreestanding:                         Standards.          (line   81)
29918* ffriend-injection:                     C++ Dialect Options.
29919                                                             (line   56)
29920* ffunction-sections:                    Optimize Options.   (line 1289)
29921* fgcse:                                 Optimize Options.   (line  386)
29922* fgcse-after-reload:                    Optimize Options.   (line  422)
29923* fgcse-las:                             Optimize Options.   (line  415)
29924* fgcse-lm:                              Optimize Options.   (line  397)
29925* fgcse-sm:                              Optimize Options.   (line  406)
29926* fgnu-runtime:                          Objective-C and Objective-C++ Dialect Options.
29927                                                             (line   39)
29928* fgnu89-inline:                         C Dialect Options.  (line   98)
29929* fhosted:                               C Dialect Options.  (line  183)
29930* filelist:                              Darwin Options.     (line  190)
29931* findirect-data:                        Darwin Options.     (line   97)
29932* finhibit-size-directive:               Code Gen Options.   (line  147)
29933* finline-functions:                     Optimize Options.   (line  185)
29934* finline-functions-called-once:         Optimize Options.   (line  196)
29935* finline-limit:                         Optimize Options.   (line  214)
29936* finput-charset:                        Preprocessor Options.
29937                                                             (line  480)
29938* finstrument-functions <1>:             Function Attributes.
29939                                                             (line  508)
29940* finstrument-functions:                 Code Gen Options.   (line  267)
29941* fkeep-inline-functions <1>:            Inline.             (line   58)
29942* fkeep-inline-functions:                Optimize Options.   (line  252)
29943* fkeep-static-consts:                   Optimize Options.   (line  259)
29944* flat_namespace:                        Darwin Options.     (line  190)
29945* fleading-underscore:                   Code Gen Options.   (line  353)
29946* fmem-report:                           Debugging Options.  (line  150)
29947* fmessage-length:                       Language Independent Options.
29948                                                             (line   15)
29949* fmodulo-sched:                         Optimize Options.   (line  288)
29950* fmove-loop-invariants:                 Optimize Options.   (line 1279)
29951* fms-extensions <1>:                    Unnamed Fields.     (line   37)
29952* fms-extensions <2>:                    C++ Dialect Options.
29953                                                             (line  121)
29954* fms-extensions:                        C Dialect Options.  (line  206)
29955* fmudflap:                              Optimize Options.   (line  333)
29956* fmudflapir:                            Optimize Options.   (line  333)
29957* fmudflapth:                            Optimize Options.   (line  333)
29958* fnext-runtime:                         Objective-C and Objective-C++ Dialect Options.
29959                                                             (line   43)
29960* fno-access-control:                    C++ Dialect Options.
29961                                                             (line   30)
29962* fno-asm:                               C Dialect Options.  (line  135)
29963* fno-branch-count-reg:                  Optimize Options.   (line  293)
29964* fno-builtin <1>:                       Other Builtins.     (line   14)
29965* fno-builtin <2>:                       Function Attributes.
29966                                                             (line  314)
29967* fno-builtin <3>:                       Warning Options.    (line   94)
29968* fno-builtin:                           C Dialect Options.  (line  149)
29969* fno-common <1>:                        Variable Attributes.
29970                                                             (line   92)
29971* fno-common:                            Code Gen Options.   (line  135)
29972* fno-cprop-registers:                   Optimize Options.   (line 1028)
29973* fno-cx-limited-range:                  Optimize Options.   (line 1186)
29974* fno-default-inline <1>:                Inline.             (line   53)
29975* fno-default-inline <2>:                Optimize Options.   (line  131)
29976* fno-default-inline:                    C++ Dialect Options.
29977                                                             (line  233)
29978* fno-defer-pop:                         Optimize Options.   (line  138)
29979* fno-elide-constructors:                C++ Dialect Options.
29980                                                             (line   69)
29981* fno-enforce-eh-specs:                  C++ Dialect Options.
29982                                                             (line   75)
29983* fno-for-scope:                         C++ Dialect Options.
29984                                                             (line   86)
29985* fno-function-cse:                      Optimize Options.   (line  303)
29986* fno-gnu-keywords:                      C++ Dialect Options.
29987                                                             (line   98)
29988* fno-guess-branch-probability:          Optimize Options.   (line  787)
29989* fno-ident:                             Code Gen Options.   (line  144)
29990* fno-implement-inlines <1>:             C++ Interface.      (line   75)
29991* fno-implement-inlines:                 C++ Dialect Options.
29992                                                             (line  115)
29993* fno-implicit-inline-templates:         C++ Dialect Options.
29994                                                             (line  109)
29995* fno-implicit-templates <1>:            Template Instantiation.
29996                                                             (line   87)
29997* fno-implicit-templates:                C++ Dialect Options.
29998                                                             (line  103)
29999* fno-inline:                            Optimize Options.   (line  179)
30000* fno-jump-tables:                       Code Gen Options.   (line  203)
30001* fno-math-errno:                        Optimize Options.   (line 1083)
30002* fno-nil-receivers:                     Objective-C and Objective-C++ Dialect Options.
30003                                                             (line   49)
30004* fno-nonansi-builtins:                  C++ Dialect Options.
30005                                                             (line  126)
30006* fno-operator-names:                    C++ Dialect Options.
30007                                                             (line  131)
30008* fno-optional-diags:                    C++ Dialect Options.
30009                                                             (line  135)
30010* fno-peephole:                          Optimize Options.   (line  778)
30011* fno-peephole2:                         Optimize Options.   (line  778)
30012* fno-rtti:                              C++ Dialect Options.
30013                                                             (line  150)
30014* fno-sched-interblock:                  Optimize Options.   (line  514)
30015* fno-sched-spec:                        Optimize Options.   (line  519)
30016* fno-show-column:                       Preprocessor Options.
30017                                                             (line  505)
30018* fno-signed-bitfields:                  C Dialect Options.  (line  268)
30019* fno-stack-limit:                       Code Gen Options.   (line  319)
30020* fno-threadsafe-statics:                C++ Dialect Options.
30021                                                             (line  172)
30022* fno-trapping-math:                     Optimize Options.   (line 1124)
30023* fno-unsigned-bitfields:                C Dialect Options.  (line  268)
30024* fno-use-cxa-get-exception-ptr:         C++ Dialect Options.
30025                                                             (line  185)
30026* fno-weak:                              C++ Dialect Options.
30027                                                             (line  218)
30028* fno-working-directory:                 Preprocessor Options.
30029                                                             (line  490)
30030* fno-zero-initialized-in-bss:           Optimize Options.   (line  314)
30031* fnon-call-exceptions:                  Code Gen Options.   (line   48)
30032* fobjc-call-cxx-cdtors:                 Objective-C and Objective-C++ Dialect Options.
30033                                                             (line   56)
30034* fobjc-direct-dispatch:                 Objective-C and Objective-C++ Dialect Options.
30035                                                             (line   81)
30036* fobjc-exceptions:                      Objective-C and Objective-C++ Dialect Options.
30037                                                             (line   85)
30038* fobjc-gc:                              Objective-C and Objective-C++ Dialect Options.
30039                                                             (line  170)
30040* fomit-frame-pointer:                   Optimize Options.   (line  158)
30041* fopenmp:                               C Dialect Options.  (line  200)
30042* foptimize-register-move:               Optimize Options.   (line  477)
30043* foptimize-sibling-calls:               Optimize Options.   (line  174)
30044* force_cpusubtype_ALL:                  Darwin Options.     (line  129)
30045* force_flat_namespace:                  Darwin Options.     (line  190)
30046* fpack-struct:                          Code Gen Options.   (line  254)
30047* fpcc-struct-return <1>:                Incompatibilities.  (line  170)
30048* fpcc-struct-return:                    Code Gen Options.   (line   70)
30049* fpch-deps:                             Preprocessor Options.
30050                                                             (line  280)
30051* fpch-preprocess:                       Preprocessor Options.
30052                                                             (line  288)
30053* fpeel-loops:                           Optimize Options.   (line 1271)
30054* fpermissive:                           C++ Dialect Options.
30055                                                             (line  140)
30056* fPIC:                                  Code Gen Options.   (line  184)
30057* fpic:                                  Code Gen Options.   (line  163)
30058* fPIE:                                  Code Gen Options.   (line  197)
30059* fpie:                                  Code Gen Options.   (line  197)
30060* fprefetch-loop-arrays:                 Optimize Options.   (line  767)
30061* fpreprocessed:                         Preprocessor Options.
30062                                                             (line  448)
30063* fprofile-arcs <1>:                     Other Builtins.     (line  236)
30064* fprofile-arcs:                         Debugging Options.  (line  154)
30065* fprofile-generate:                     Optimize Options.   (line 1035)
30066* fprofile-use:                          Optimize Options.   (line 1044)
30067* fprofile-values:                       Optimize Options.   (line 1219)
30068* frandom-string:                        Debugging Options.  (line  665)
30069* freg-struct-return:                    Code Gen Options.   (line   88)
30070* fregmove:                              Optimize Options.   (line  477)
30071* frename-registers:                     Optimize Options.   (line 1238)
30072* freorder-blocks:                       Optimize Options.   (line  804)
30073* freorder-blocks-and-partition:         Optimize Options.   (line  810)
30074* freorder-functions:                    Optimize Options.   (line  821)
30075* freplace-objc-classes:                 Objective-C and Objective-C++ Dialect Options.
30076                                                             (line  174)
30077* frepo <1>:                             Template Instantiation.
30078                                                             (line   62)
30079* frepo:                                 C++ Dialect Options.
30080                                                             (line  145)
30081* frerun-cse-after-loop:                 Optimize Options.   (line  380)
30082* frounding-math:                        Optimize Options.   (line 1139)
30083* frtl-abstract-sequences:               Optimize Options.   (line 1159)
30084* fsched-spec-load:                      Optimize Options.   (line  524)
30085* fsched-spec-load-dangerous:            Optimize Options.   (line  529)
30086* fsched-stalled-insns:                  Optimize Options.   (line  534)
30087* fsched-stalled-insns-dep:              Optimize Options.   (line  539)
30088* fsched-verbose:                        Debugging Options.  (line  675)
30089* fsched2-use-superblocks:               Optimize Options.   (line  546)
30090* fsched2-use-traces:                    Optimize Options.   (line  557)
30091* fschedule-insns:                       Optimize Options.   (line  495)
30092* fschedule-insns2:                      Optimize Options.   (line  505)
30093* fscheduling-in-modulo-scheduled-loops: Optimize Options.   (line  573)
30094* fsection-anchors:                      Optimize Options.   (line 1334)
30095* fsee:                                  Optimize Options.   (line  569)
30096* fshort-double:                         Code Gen Options.   (line  117)
30097* fshort-enums <1>:                      Non-bugs.           (line   42)
30098* fshort-enums <2>:                      Type Attributes.    (line  112)
30099* fshort-enums <3>:                      Structures unions enumerations and bit-fields implementation.
30100                                                             (line   43)
30101* fshort-enums:                          Code Gen Options.   (line  106)
30102* fshort-wchar:                          Code Gen Options.   (line  125)
30103* fsignaling-nans:                       Optimize Options.   (line 1166)
30104* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
30105* fsigned-bitfields:                     C Dialect Options.  (line  268)
30106* fsigned-char <1>:                      Characters implementation.
30107                                                             (line   31)
30108* fsigned-char:                          C Dialect Options.  (line  258)
30109* fsingle-precision-constant:            Optimize Options.   (line 1181)
30110* fsplit-ivs-in-unroller:                Optimize Options.   (line  748)
30111* fstack-check:                          Code Gen Options.   (line  304)
30112* fstack-limit-register:                 Code Gen Options.   (line  319)
30113* fstack-limit-symbol:                   Code Gen Options.   (line  319)
30114* fstats:                                C++ Dialect Options.
30115                                                             (line  160)
30116* fstrict-aliasing:                      Optimize Options.   (line  834)
30117* fstrict-overflow:                      Optimize Options.   (line  876)
30118* fsyntax-only:                          Warning Options.    (line   23)
30119* ftabstop:                              Preprocessor Options.
30120                                                             (line  461)
30121* ftemplate-depth:                       C++ Dialect Options.
30122                                                             (line  165)
30123* ftest-coverage:                        Debugging Options.  (line  210)
30124* fthread-jumps:                         Optimize Options.   (line  354)
30125* ftime-report:                          Debugging Options.  (line  146)
30126* ftracer:                               Optimize Options.   (line  731)
30127* ftrapv:                                Code Gen Options.   (line   22)
30128* ftree-vect-loop-version:               Optimize Options.   (line  713)
30129* ftree-vectorizer-verbose:              Debugging Options.  (line  640)
30130* funit-at-a-time:                       Optimize Options.   (line  965)
30131* funroll-all-loops:                     Optimize Options.   (line  742)
30132* funroll-loops:                         Optimize Options.   (line  736)
30133* funsafe-loop-optimizations:            Optimize Options.   (line  427)
30134* funsafe-math-optimizations:            Optimize Options.   (line 1100)
30135* funsigned-bitfields <1>:               Non-bugs.           (line   57)
30136* funsigned-bitfields <2>:               Structures unions enumerations and bit-fields implementation.
30137                                                             (line   17)
30138* funsigned-bitfields:                   C Dialect Options.  (line  268)
30139* funsigned-char <1>:                    Characters implementation.
30140                                                             (line   31)
30141* funsigned-char:                        C Dialect Options.  (line  240)
30142* funswitch-loops:                       Optimize Options.   (line 1283)
30143* funwind-tables:                        Code Gen Options.   (line   57)
30144* fuse-cxa-atexit:                       C++ Dialect Options.
30145                                                             (line  178)
30146* fvar-tracking:                         Debugging Options.  (line  718)
30147* fvariable-expansion-in-unroller:       Optimize Options.   (line  762)
30148* fverbose-asm:                          Code Gen Options.   (line  154)
30149* fvisibility:                           Code Gen Options.   (line  372)
30150* fvisibility-inlines-hidden:            C++ Dialect Options.
30151                                                             (line  190)
30152* fvpt:                                  Optimize Options.   (line 1229)
30153* fweb:                                  Optimize Options.   (line 1004)
30154* fwhole-program:                        Optimize Options.   (line 1015)
30155* fwide-exec-charset:                    Preprocessor Options.
30156                                                             (line  472)
30157* fworking-directory:                    Preprocessor Options.
30158                                                             (line  490)
30159* fwrapv:                                Code Gen Options.   (line   26)
30160* fzero-link:                            Objective-C and Objective-C++ Dialect Options.
30161                                                             (line  184)
30162* G <1>:                                 System V Options.   (line   10)
30163* G <2>:                                 RS/6000 and PowerPC Options.
30164                                                             (line  607)
30165* G <3>:                                 MIPS Options.       (line  216)
30166* G:                                     M32R/D Options.     (line   57)
30167* g:                                     Debugging Options.  (line   10)
30168* gcoff:                                 Debugging Options.  (line   70)
30169* gdwarf-2:                              Debugging Options.  (line   88)
30170* gen-decls:                             Objective-C and Objective-C++ Dialect Options.
30171                                                             (line  194)
30172* gfull:                                 Darwin Options.     (line   64)
30173* ggdb:                                  Debugging Options.  (line   38)
30174* gnu-ld:                                HPPA Options.       (line  113)
30175* gstabs:                                Debugging Options.  (line   44)
30176* gstabs+:                               Debugging Options.  (line   64)
30177* gused:                                 Darwin Options.     (line   59)
30178* gvms:                                  Debugging Options.  (line   95)
30179* gxcoff:                                Debugging Options.  (line   75)
30180* gxcoff+:                               Debugging Options.  (line   80)
30181* H:                                     Preprocessor Options.
30182                                                             (line  612)
30183* headerpad_max_install_names:           Darwin Options.     (line  190)
30184* help <1>:                              Preprocessor Options.
30185                                                             (line  604)
30186* help:                                  Overall Options.    (line  219)
30187* hp-ld:                                 HPPA Options.       (line  125)
30188* I <1>:                                 Directory Options.  (line   10)
30189* I:                                     Preprocessor Options.
30190                                                             (line   64)
30191* I- <1>:                                Directory Options.  (line  107)
30192* I-:                                    Preprocessor Options.
30193                                                             (line  361)
30194* idirafter:                             Preprocessor Options.
30195                                                             (line  403)
30196* if-conversion:                         Optimize Options.   (line  442)
30197* if-conversion2:                        Optimize Options.   (line  451)
30198* imacros:                               Preprocessor Options.
30199                                                             (line  394)
30200* image_base:                            Darwin Options.     (line  190)
30201* imultilib:                             Preprocessor Options.
30202                                                             (line  424)
30203* include:                               Preprocessor Options.
30204                                                             (line  383)
30205* init:                                  Darwin Options.     (line  190)
30206* install_name:                          Darwin Options.     (line  190)
30207* iprefix:                               Preprocessor Options.
30208                                                             (line  408)
30209* iquote <1>:                            Directory Options.  (line   31)
30210* iquote:                                Preprocessor Options.
30211                                                             (line  434)
30212* isysroot:                              Preprocessor Options.
30213                                                             (line  420)
30214* isystem:                               Preprocessor Options.
30215                                                             (line  428)
30216* iwithprefix:                           Preprocessor Options.
30217                                                             (line  414)
30218* iwithprefixbefore:                     Preprocessor Options.
30219                                                             (line  414)
30220* keep_private_externs:                  Darwin Options.     (line  190)
30221* L:                                     Directory Options.  (line   37)
30222* l:                                     Link Options.       (line   26)
30223* lobjc:                                 Link Options.       (line   53)
30224* M:                                     Preprocessor Options.
30225                                                             (line  173)
30226* m1:                                    SH Options.         (line    9)
30227* m10:                                   PDP-11 Options.     (line   29)
30228* m128bit-long-double:                   i386 and x86-64 Options.
30229                                                             (line  254)
30230* m16-bit:                               CRIS Options.       (line   69)
30231* m2:                                    SH Options.         (line   12)
30232* m210:                                  MCore Options.      (line   43)
30233* m3:                                    SH Options.         (line   18)
30234* m31:                                   S/390 and zSeries Options.
30235                                                             (line   79)
30236* m32 <1>:                               SPARC Options.      (line  189)
30237* m32 <2>:                               RS/6000 and PowerPC Options.
30238                                                             (line  222)
30239* m32:                                   i386 and x86-64 Options.
30240                                                             (line  464)
30241* m32-bit:                               CRIS Options.       (line   69)
30242* m32r:                                  M32R/D Options.     (line   15)
30243* m32r2:                                 M32R/D Options.     (line    9)
30244* m32rx:                                 M32R/D Options.     (line   12)
30245* m340:                                  MCore Options.      (line   43)
30246* m386:                                  i386 and x86-64 Options.
30247                                                             (line  142)
30248* m3dnow:                                i386 and x86-64 Options.
30249                                                             (line  389)
30250* m3e:                                   SH Options.         (line   21)
30251* m4:                                    SH Options.         (line   35)
30252* m4-nofpu:                              SH Options.         (line   24)
30253* m4-single:                             SH Options.         (line   31)
30254* m4-single-only:                        SH Options.         (line   27)
30255* m40:                                   PDP-11 Options.     (line   23)
30256* m45:                                   PDP-11 Options.     (line   26)
30257* m486:                                  i386 and x86-64 Options.
30258                                                             (line  142)
30259* m4a:                                   SH Options.         (line   50)
30260* m4a-nofpu:                             SH Options.         (line   38)
30261* m4a-single:                            SH Options.         (line   46)
30262* m4a-single-only:                       SH Options.         (line   42)
30263* m4al:                                  SH Options.         (line   53)
30264* m4byte-functions:                      MCore Options.      (line   27)
30265* m5200:                                 M680x0 Options.     (line   59)
30266* m64 <1>:                               SPARC Options.      (line  189)
30267* m64 <2>:                               S/390 and zSeries Options.
30268                                                             (line   79)
30269* m64 <3>:                               RS/6000 and PowerPC Options.
30270                                                             (line  222)
30271* m64:                                   i386 and x86-64 Options.
30272                                                             (line  464)
30273* m68000:                                M680x0 Options.     (line   13)
30274* m68020:                                M680x0 Options.     (line   21)
30275* m68020-40:                             M680x0 Options.     (line   70)
30276* m68020-60:                             M680x0 Options.     (line   77)
30277* m68030:                                M680x0 Options.     (line   30)
30278* m68040:                                M680x0 Options.     (line   34)
30279* m68060:                                M680x0 Options.     (line   42)
30280* m6811:                                 M68hc1x Options.    (line   13)
30281* m6812:                                 M68hc1x Options.    (line   18)
30282* m68881:                                M680x0 Options.     (line   25)
30283* m68hc11:                               M68hc1x Options.    (line   13)
30284* m68hc12:                               M68hc1x Options.    (line   18)
30285* m68hcs12:                              M68hc1x Options.    (line   23)
30286* m68S12:                                M68hc1x Options.    (line   23)
30287* m8-bit:                                CRIS Options.       (line   69)
30288* m96bit-long-double:                    i386 and x86-64 Options.
30289                                                             (line  254)
30290* mabi <1>:                              RS/6000 and PowerPC Options.
30291                                                             (line  489)
30292* mabi:                                  ARM Options.        (line   10)
30293* mabi-mmixware:                         MMIX Options.       (line   20)
30294* mabi=32:                               MIPS Options.       (line   89)
30295* mabi=64:                               MIPS Options.       (line   89)
30296* mabi=eabi:                             MIPS Options.       (line   89)
30297* mabi=gnu:                              MMIX Options.       (line   20)
30298* mabi=ibmlongdouble:                    RS/6000 and PowerPC Options.
30299                                                             (line  502)
30300* mabi=ieeelongdouble:                   RS/6000 and PowerPC Options.
30301                                                             (line  506)
30302* mabi=n32:                              MIPS Options.       (line   89)
30303* mabi=no-spe:                           RS/6000 and PowerPC Options.
30304                                                             (line  499)
30305* mabi=o64:                              MIPS Options.       (line   89)
30306* mabi=spe:                              RS/6000 and PowerPC Options.
30307                                                             (line  494)
30308* mabicalls:                             MIPS Options.       (line  100)
30309* mabort-on-noreturn:                    ARM Options.        (line  144)
30310* mabshi:                                PDP-11 Options.     (line   55)
30311* mac0:                                  PDP-11 Options.     (line   16)
30312* macc-4:                                FRV Options.        (line  113)
30313* macc-8:                                FRV Options.        (line  116)
30314* maccumulate-outgoing-args:             i386 and x86-64 Options.
30315                                                             (line  415)
30316* madjust-unroll:                        SH Options.         (line  175)
30317* mads:                                  RS/6000 and PowerPC Options.
30318                                                             (line  532)
30319* maix-struct-return:                    RS/6000 and PowerPC Options.
30320                                                             (line  482)
30321* maix32:                                RS/6000 and PowerPC Options.
30322                                                             (line  260)
30323* maix64:                                RS/6000 and PowerPC Options.
30324                                                             (line  260)
30325* malign-300:                            H8/300 Options.     (line   31)
30326* malign-double:                         i386 and x86-64 Options.
30327                                                             (line  238)
30328* malign-int:                            M680x0 Options.     (line  132)
30329* malign-labels:                         FRV Options.        (line  104)
30330* malign-loops:                          M32R/D Options.     (line   73)
30331* malign-natural:                        RS/6000 and PowerPC Options.
30332                                                             (line  299)
30333* malign-power:                          RS/6000 and PowerPC Options.
30334                                                             (line  299)
30335* malloc-cc:                             FRV Options.        (line   25)
30336* malpha-as:                             DEC Alpha Options.  (line  159)
30337* maltivec:                              RS/6000 and PowerPC Options.
30338                                                             (line  164)
30339* mam33:                                 MN10300 Options.    (line   17)
30340* maout:                                 CRIS Options.       (line   92)
30341* mapcs:                                 ARM Options.        (line   22)
30342* mapcs-frame:                           ARM Options.        (line   14)
30343* mapp-regs <1>:                         V850 Options.       (line   57)
30344* mapp-regs:                             SPARC Options.      (line   10)
30345* march <1>:                             S/390 and zSeries Options.
30346                                                             (line  108)
30347* march <2>:                             MT Options.         (line    9)
30348* march <3>:                             MIPS Options.       (line   14)
30349* march <4>:                             i386 and x86-64 Options.
30350                                                             (line  131)
30351* march <5>:                             HPPA Options.       (line    9)
30352* march <6>:                             CRIS Options.       (line   10)
30353* march:                                 ARM Options.        (line  109)
30354* masm=DIALECT:                          i386 and x86-64 Options.
30355                                                             (line  194)
30356* mauto-incdec:                          M68hc1x Options.    (line   26)
30357* mauto-pic:                             IA-64 Options.      (line   50)
30358* mb:                                    SH Options.         (line   58)
30359* mbacc:                                 MT Options.         (line   16)
30360* mbackchain:                            S/390 and zSeries Options.
30361                                                             (line   26)
30362* mbase-addresses:                       MMIX Options.       (line   54)
30363* mbcopy:                                PDP-11 Options.     (line   36)
30364* mbig <1>:                              TMS320C3x/C4x Options.
30365                                                             (line   18)
30366* mbig:                                  RS/6000 and PowerPC Options.
30367                                                             (line  414)
30368* mbig-endian <1>:                       RS/6000 and PowerPC Options.
30369                                                             (line  414)
30370* mbig-endian <2>:                       MCore Options.      (line   39)
30371* mbig-endian <3>:                       IA-64 Options.      (line    9)
30372* mbig-endian:                           ARM Options.        (line   72)
30373* mbig-memory:                           TMS320C3x/C4x Options.
30374                                                             (line   18)
30375* mbig-switch <1>:                       V850 Options.       (line   52)
30376* mbig-switch:                           HPPA Options.       (line   23)
30377* mbigtable:                             SH Options.         (line   74)
30378* mbit-align:                            RS/6000 and PowerPC Options.
30379                                                             (line  368)
30380* mbitfield:                             M680x0 Options.     (line  104)
30381* mbk:                                   TMS320C3x/C4x Options.
30382                                                             (line   27)
30383* mbranch-cheap:                         PDP-11 Options.     (line   65)
30384* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
30385* mbranch-expensive:                     PDP-11 Options.     (line   61)
30386* mbranch-likely:                        MIPS Options.       (line  367)
30387* mbranch-predict:                       MMIX Options.       (line   49)
30388* mbss-plt:                              RS/6000 and PowerPC Options.
30389                                                             (line  181)
30390* mbuild-constants:                      DEC Alpha Options.  (line  142)
30391* mbwx:                                  DEC Alpha Options.  (line  171)
30392* mc68000:                               M680x0 Options.     (line   13)
30393* mc68020:                               M680x0 Options.     (line   21)
30394* mcall-gnu:                             RS/6000 and PowerPC Options.
30395                                                             (line  474)
30396* mcall-linux:                           RS/6000 and PowerPC Options.
30397                                                             (line  470)
30398* mcall-netbsd:                          RS/6000 and PowerPC Options.
30399                                                             (line  478)
30400* mcall-prologues:                       AVR Options.        (line   43)
30401* mcall-solaris:                         RS/6000 and PowerPC Options.
30402                                                             (line  466)
30403* mcall-sysv:                            RS/6000 and PowerPC Options.
30404                                                             (line  453)
30405* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
30406                                                             (line  460)
30407* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
30408                                                             (line  463)
30409* mcallee-super-interworking:            ARM Options.        (line  234)
30410* mcaller-super-interworking:            ARM Options.        (line  240)
30411* mcallgraph-data:                       MCore Options.      (line   31)
30412* mcc-init:                              CRIS Options.       (line   46)
30413* mcfv4e:                                M680x0 Options.     (line   66)
30414* mcheck-zero-division:                  MIPS Options.       (line  254)
30415* mcirrus-fix-invalid-insns:             ARM Options.        (line  187)
30416* mcix:                                  DEC Alpha Options.  (line  171)
30417* mcmodel=embmedany:                     SPARC Options.      (line  211)
30418* mcmodel=kernel:                        i386 and x86-64 Options.
30419                                                             (line  486)
30420* mcmodel=large:                         i386 and x86-64 Options.
30421                                                             (line  498)
30422* mcmodel=medany:                        SPARC Options.      (line  205)
30423* mcmodel=medium:                        i386 and x86-64 Options.
30424                                                             (line  491)
30425* mcmodel=medlow:                        SPARC Options.      (line  194)
30426* mcmodel=medmid:                        SPARC Options.      (line  199)
30427* mcmodel=small:                         i386 and x86-64 Options.
30428                                                             (line  480)
30429* mcond-exec:                            FRV Options.        (line  152)
30430* mcond-move:                            FRV Options.        (line  128)
30431* mconst-align:                          CRIS Options.       (line   60)
30432* mconst16:                              Xtensa Options.     (line   10)
30433* mconstant-gp:                          IA-64 Options.      (line   46)
30434* mcpu <1>:                              TMS320C3x/C4x Options.
30435                                                             (line    9)
30436* mcpu <2>:                              SPARC Options.      (line   96)
30437* mcpu <3>:                              RS/6000 and PowerPC Options.
30438                                                             (line  100)
30439* mcpu <4>:                              i386 and x86-64 Options.
30440                                                             (line  136)
30441* mcpu <5>:                              FRV Options.        (line  212)
30442* mcpu <6>:                              DEC Alpha Options.  (line  223)
30443* mcpu <7>:                              CRIS Options.       (line   10)
30444* mcpu <8>:                              ARM Options.        (line   84)
30445* mcpu:                                  ARC Options.        (line   23)
30446* mcpu32:                                M680x0 Options.     (line   51)
30447* mcpu=:                                 M32C Options.       (line    7)
30448* mcsync-anomaly:                        Blackfin Options.   (line   23)
30449* MD:                                    Preprocessor Options.
30450                                                             (line  261)
30451* mdalign:                               SH Options.         (line   64)
30452* mdata:                                 ARC Options.        (line   30)
30453* mdata-align:                           CRIS Options.       (line   60)
30454* mdb:                                   TMS320C3x/C4x Options.
30455                                                             (line   32)
30456* mdebug <1>:                            S/390 and zSeries Options.
30457                                                             (line  104)
30458* mdebug:                                M32R/D Options.     (line   69)
30459* mdec-asm:                              PDP-11 Options.     (line   78)
30460* mdisable-callt:                        V850 Options.       (line   80)
30461* mdisable-fpregs:                       HPPA Options.       (line   33)
30462* mdisable-indexing:                     HPPA Options.       (line   40)
30463* mdiv:                                  MCore Options.      (line   15)
30464* mdiv=STRATEGY:                         SH Options.         (line  127)
30465* mdivide-breaks:                        MIPS Options.       (line  259)
30466* mdivide-traps:                         MIPS Options.       (line  259)
30467* mdivsi3_libfunc=NAME:                  SH Options.         (line  168)
30468* mdlmzb:                                RS/6000 and PowerPC Options.
30469                                                             (line  362)
30470* mdouble:                               FRV Options.        (line   38)
30471* mdouble-float:                         MIPS Options.       (line  173)
30472* mdp-isr-reload:                        TMS320C3x/C4x Options.
30473                                                             (line   45)
30474* mdsp:                                  MIPS Options.       (line  178)
30475* mdwarf2-asm:                           IA-64 Options.      (line   79)
30476* mdword:                                FRV Options.        (line   32)
30477* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
30478                                                             (line  419)
30479* meabi:                                 RS/6000 and PowerPC Options.
30480                                                             (line  555)
30481* mearly-stop-bits:                      IA-64 Options.      (line   85)
30482* meb:                                   Score Options.      (line    9)
30483* mel:                                   Score Options.      (line   12)
30484* melf <1>:                              MMIX Options.       (line   44)
30485* melf:                                  CRIS Options.       (line   95)
30486* melinux:                               CRIS Options.       (line   99)
30487* melinux-stacksize:                     CRIS Options.       (line   25)
30488* memb:                                  RS/6000 and PowerPC Options.
30489                                                             (line  550)
30490* membedded-data:                        MIPS Options.       (line  225)
30491* memregs=:                              M32C Options.       (line   21)
30492* mep:                                   V850 Options.       (line   16)
30493* mepsilon:                              MMIX Options.       (line   15)
30494* mesa:                                  S/390 and zSeries Options.
30495                                                             (line   87)
30496* metrax100:                             CRIS Options.       (line   31)
30497* metrax4:                               CRIS Options.       (line   31)
30498* mexplicit-relocs <1>:                  MIPS Options.       (line  245)
30499* mexplicit-relocs:                      DEC Alpha Options.  (line  184)
30500* MF:                                    Preprocessor Options.
30501                                                             (line  207)
30502* mfast-fix:                             TMS320C3x/C4x Options.
30503                                                             (line   62)
30504* mfast-indirect-calls:                  HPPA Options.       (line   52)
30505* mfaster-structs:                       SPARC Options.      (line   71)
30506* mfdpic:                                FRV Options.        (line   56)
30507* mfix:                                  DEC Alpha Options.  (line  171)
30508* mfix-and-continue:                     Darwin Options.     (line   97)
30509* mfix-r4000:                            MIPS Options.       (line  309)
30510* mfix-r4400:                            MIPS Options.       (line  323)
30511* mfix-sb1:                              MIPS Options.       (line  351)
30512* mfix-vr4120:                           MIPS Options.       (line  330)
30513* mfix-vr4130:                           MIPS Options.       (line  344)
30514* mfixed-cc:                             FRV Options.        (line   28)
30515* mfixed-range <1>:                      IA-64 Options.      (line   90)
30516* mfixed-range:                          HPPA Options.       (line   59)
30517* mfloat-abi:                            ARM Options.        (line   59)
30518* mfloat-gprs:                           RS/6000 and PowerPC Options.
30519                                                             (line  205)
30520* mfloat-ieee:                           DEC Alpha Options.  (line  179)
30521* mfloat-vax:                            DEC Alpha Options.  (line  179)
30522* mfloat32:                              PDP-11 Options.     (line   52)
30523* mfloat64:                              PDP-11 Options.     (line   48)
30524* mflush-func:                           MIPS Options.       (line  357)
30525* mflush-func=NAME:                      M32R/D Options.     (line   94)
30526* mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
30527* mfmovd:                                SH Options.         (line   78)
30528* mfp:                                   ARM Options.        (line  119)
30529* mfp-exceptions:                        MIPS Options.       (line  378)
30530* mfp-reg:                               DEC Alpha Options.  (line   25)
30531* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
30532* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
30533* mfp32:                                 MIPS Options.       (line  156)
30534* mfp64:                                 MIPS Options.       (line  159)
30535* mfpe:                                  ARM Options.        (line  119)
30536* mfpr-32:                               FRV Options.        (line   13)
30537* mfpr-64:                               FRV Options.        (line   16)
30538* mfprnd:                                RS/6000 and PowerPC Options.
30539                                                             (line   25)
30540* mfpu <1>:                              SPARC Options.      (line   20)
30541* mfpu <2>:                              PDP-11 Options.     (line    9)
30542* mfpu:                                  ARM Options.        (line  119)
30543* mfull-toc:                             RS/6000 and PowerPC Options.
30544                                                             (line  233)
30545* mfused-madd <1>:                       Xtensa Options.     (line   19)
30546* mfused-madd <2>:                       S/390 and zSeries Options.
30547                                                             (line  128)
30548* mfused-madd <3>:                       RS/6000 and PowerPC Options.
30549                                                             (line  349)
30550* mfused-madd:                           MIPS Options.       (line  294)
30551* mg:                                    VAX Options.        (line   17)
30552* MG:                                    Preprocessor Options.
30553                                                             (line  216)
30554* mgas <1>:                              HPPA Options.       (line   75)
30555* mgas:                                  DEC Alpha Options.  (line  159)
30556* mgettrcost=NUMBER:                     SH Options.         (line  190)
30557* mglibc:                                GNU/Linux Options.  (line    9)
30558* mgnu:                                  VAX Options.        (line   13)
30559* mgnu-as:                               IA-64 Options.      (line   18)
30560* mgnu-ld:                               IA-64 Options.      (line   23)
30561* mgotplt:                               CRIS Options.       (line   86)
30562* mgp32:                                 MIPS Options.       (line  150)
30563* mgp64:                                 MIPS Options.       (line  153)
30564* mgpr-32:                               FRV Options.        (line    7)
30565* mgpr-64:                               FRV Options.        (line   10)
30566* mgprel-ro:                             FRV Options.        (line   79)
30567* mh:                                    H8/300 Options.     (line   14)
30568* mhard-float <1>:                       SPARC Options.      (line   20)
30569* mhard-float <2>:                       S/390 and zSeries Options.
30570                                                             (line   11)
30571* mhard-float <3>:                       RS/6000 and PowerPC Options.
30572                                                             (line  311)
30573* mhard-float <4>:                       MIPS Options.       (line  162)
30574* mhard-float <5>:                       FRV Options.        (line   19)
30575* mhard-float:                           ARM Options.        (line   41)
30576* mhard-quad-float:                      SPARC Options.      (line   41)
30577* mhardlit:                              MCore Options.      (line   10)
30578* mhitachi:                              SH Options.         (line   81)
30579* mid-shared-library:                    Blackfin Options.   (line   39)
30580* mieee <1>:                             SH Options.         (line   96)
30581* mieee:                                 DEC Alpha Options.  (line   39)
30582* mieee-conformant:                      DEC Alpha Options.  (line  134)
30583* mieee-fp:                              i386 and x86-64 Options.
30584                                                             (line  200)
30585* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
30586* milp32:                                IA-64 Options.      (line  114)
30587* mimpure-text:                          SPARC Options.      (line   81)
30588* mindexed-addressing:                   SH Options.         (line  180)
30589* minit-stack:                           AVR Options.        (line   35)
30590* minline-all-stringops:                 i386 and x86-64 Options.
30591                                                             (line  436)
30592* minline-float-divide-max-throughput:   IA-64 Options.      (line   58)
30593* minline-float-divide-min-latency:      IA-64 Options.      (line   54)
30594* minline-int-divide-max-throughput:     IA-64 Options.      (line   66)
30595* minline-int-divide-min-latency:        IA-64 Options.      (line   62)
30596* minline-plt:                           FRV Options.        (line   64)
30597* minline-sqrt-max-throughput:           IA-64 Options.      (line   74)
30598* minline-sqrt-min-latency:              IA-64 Options.      (line   70)
30599* minmax:                                M68hc1x Options.    (line   31)
30600* minsert-sched-nops:                    RS/6000 and PowerPC Options.
30601                                                             (line  441)
30602* mint16:                                PDP-11 Options.     (line   40)
30603* mint32 <1>:                            PDP-11 Options.     (line   44)
30604* mint32:                                H8/300 Options.     (line   28)
30605* mint8:                                 AVR Options.        (line   53)
30606* minvalid-symbols:                      SH Options.         (line  213)
30607* mips1:                                 MIPS Options.       (line   59)
30608* mips16:                                MIPS Options.       (line   81)
30609* mips2:                                 MIPS Options.       (line   62)
30610* mips3:                                 MIPS Options.       (line   65)
30611* mips32:                                MIPS Options.       (line   71)
30612* mips32r2:                              MIPS Options.       (line   74)
30613* mips3d:                                MIPS Options.       (line  190)
30614* mips4:                                 MIPS Options.       (line   68)
30615* mips64:                                MIPS Options.       (line   77)
30616* misel:                                 RS/6000 and PowerPC Options.
30617                                                             (line  187)
30618* misize:                                SH Options.         (line  103)
30619* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
30620* mjump-in-delay:                        HPPA Options.       (line   28)
30621* mkernel:                               Darwin Options.     (line   75)
30622* mknuthdiv:                             MMIX Options.       (line   33)
30623* ml:                                    SH Options.         (line   61)
30624* mlarge-data:                           DEC Alpha Options.  (line  195)
30625* mlarge-data-threshold=NUMBER:          i386 and x86-64 Options.
30626                                                             (line  280)
30627* mlarge-text:                           DEC Alpha Options.  (line  213)
30628* mlibfuncs:                             MMIX Options.       (line   10)
30629* mlibrary-pic:                          FRV Options.        (line  110)
30630* mlinked-fp:                            FRV Options.        (line   94)
30631* mlinker-opt:                           HPPA Options.       (line   85)
30632* mlinux:                                CRIS Options.       (line  104)
30633* mlittle:                               RS/6000 and PowerPC Options.
30634                                                             (line  408)
30635* mlittle-endian <1>:                    SPARC Options.      (line  183)
30636* mlittle-endian <2>:                    RS/6000 and PowerPC Options.
30637                                                             (line  408)
30638* mlittle-endian <3>:                    MCore Options.      (line   39)
30639* mlittle-endian <4>:                    IA-64 Options.      (line   13)
30640* mlittle-endian:                        ARM Options.        (line   68)
30641* mlong-calls <1>:                       V850 Options.       (line   10)
30642* mlong-calls <2>:                       MIPS Options.       (line  280)
30643* mlong-calls <3>:                       M68hc1x Options.    (line   35)
30644* mlong-calls <4>:                       FRV Options.        (line   99)
30645* mlong-calls <5>:                       Blackfin Options.   (line   57)
30646* mlong-calls:                           ARM Options.        (line  149)
30647* mlong-double-128:                      S/390 and zSeries Options.
30648                                                             (line   20)
30649* mlong-double-64:                       S/390 and zSeries Options.
30650                                                             (line   20)
30651* mlong-load-store:                      HPPA Options.       (line   66)
30652* mlong32:                               MIPS Options.       (line  199)
30653* mlong64:                               MIPS Options.       (line  194)
30654* mlongcall:                             RS/6000 and PowerPC Options.
30655                                                             (line  621)
30656* mlongcalls:                            Xtensa Options.     (line   60)
30657* mloop-unsigned:                        TMS320C3x/C4x Options.
30658                                                             (line   94)
30659* mlow-64k:                              Blackfin Options.   (line   32)
30660* mlp64:                                 IA-64 Options.      (line  114)
30661* MM:                                    Preprocessor Options.
30662                                                             (line  197)
30663* mmac <1>:                              Score Options.      (line   21)
30664* mmac:                                  CRX Options.        (line    9)
30665* mmad:                                  MIPS Options.       (line  289)
30666* mmangle-cpu:                           ARC Options.        (line   15)
30667* mmax:                                  DEC Alpha Options.  (line  171)
30668* mmax-stack-frame:                      CRIS Options.       (line   22)
30669* mmcu:                                  AVR Options.        (line    9)
30670* MMD:                                   Preprocessor Options.
30671                                                             (line  276)
30672* mmedia:                                FRV Options.        (line   44)
30673* mmemcpy:                               MIPS Options.       (line  274)
30674* mmemory-latency:                       DEC Alpha Options.  (line  266)
30675* mmemparm:                              TMS320C3x/C4x Options.
30676                                                             (line  109)
30677* mmfcrf:                                RS/6000 and PowerPC Options.
30678                                                             (line   25)
30679* mminimal-toc:                          RS/6000 and PowerPC Options.
30680                                                             (line  233)
30681* mmmx:                                  i386 and x86-64 Options.
30682                                                             (line  389)
30683* mmodel=large:                          M32R/D Options.     (line   33)
30684* mmodel=medium:                         M32R/D Options.     (line   27)
30685* mmodel=small:                          M32R/D Options.     (line   18)
30686* mmpyi:                                 TMS320C3x/C4x Options.
30687                                                             (line   53)
30688* mmul-bug-workaround:                   CRIS Options.       (line   36)
30689* mmuladd:                               FRV Options.        (line   50)
30690* mmulhw:                                RS/6000 and PowerPC Options.
30691                                                             (line  355)
30692* mmult-bug:                             MN10300 Options.    (line    9)
30693* mmulti-cond-exec:                      FRV Options.        (line  176)
30694* mmultiple:                             RS/6000 and PowerPC Options.
30695                                                             (line  317)
30696* mmvcle:                                S/390 and zSeries Options.
30697                                                             (line   97)
30698* mmvme:                                 RS/6000 and PowerPC Options.
30699                                                             (line  527)
30700* mn:                                    H8/300 Options.     (line   20)
30701* mnested-cond-exec:                     FRV Options.        (line  189)
30702* mnew-mnemonics:                        RS/6000 and PowerPC Options.
30703                                                             (line   85)
30704* mnhwloop:                              Score Options.      (line   15)
30705* mno-3dnow:                             i386 and x86-64 Options.
30706                                                             (line  389)
30707* mno-4byte-functions:                   MCore Options.      (line   27)
30708* mno-abicalls:                          MIPS Options.       (line  100)
30709* mno-abshi:                             PDP-11 Options.     (line   58)
30710* mno-ac0:                               PDP-11 Options.     (line   20)
30711* mno-align-double:                      i386 and x86-64 Options.
30712                                                             (line  238)
30713* mno-align-int:                         M680x0 Options.     (line  132)
30714* mno-align-loops:                       M32R/D Options.     (line   76)
30715* mno-align-stringops:                   i386 and x86-64 Options.
30716                                                             (line  431)
30717* mno-altivec:                           RS/6000 and PowerPC Options.
30718                                                             (line  164)
30719* mno-am33:                              MN10300 Options.    (line   20)
30720* mno-app-regs <1>:                      V850 Options.       (line   61)
30721* mno-app-regs:                          SPARC Options.      (line   10)
30722* mno-bacc:                              MT Options.         (line   19)
30723* mno-backchain:                         S/390 and zSeries Options.
30724                                                             (line   26)
30725* mno-base-addresses:                    MMIX Options.       (line   54)
30726* mno-bit-align:                         RS/6000 and PowerPC Options.
30727                                                             (line  368)
30728* mno-bk:                                TMS320C3x/C4x Options.
30729                                                             (line   27)
30730* mno-branch-likely:                     MIPS Options.       (line  367)
30731* mno-branch-predict:                    MMIX Options.       (line   49)
30732* mno-bwx:                               DEC Alpha Options.  (line  171)
30733* mno-callgraph-data:                    MCore Options.      (line   31)
30734* mno-check-zero-division:               MIPS Options.       (line  254)
30735* mno-cirrus-fix-invalid-insns:          ARM Options.        (line  187)
30736* mno-cix:                               DEC Alpha Options.  (line  171)
30737* mno-cond-exec:                         FRV Options.        (line  158)
30738* mno-cond-move:                         FRV Options.        (line  134)
30739* mno-const-align:                       CRIS Options.       (line   60)
30740* mno-const16:                           Xtensa Options.     (line   10)
30741* mno-crt0 <1>:                          MT Options.         (line   25)
30742* mno-crt0:                              MN10300 Options.    (line   31)
30743* mno-csync-anomaly:                     Blackfin Options.   (line   28)
30744* mno-data-align:                        CRIS Options.       (line   60)
30745* mno-db:                                TMS320C3x/C4x Options.
30746                                                             (line   32)
30747* mno-debug:                             S/390 and zSeries Options.
30748                                                             (line  104)
30749* mno-div:                               MCore Options.      (line   15)
30750* mno-dlmzb:                             RS/6000 and PowerPC Options.
30751                                                             (line  362)
30752* mno-double:                            FRV Options.        (line   41)
30753* mno-dsp:                               MIPS Options.       (line  178)
30754* mno-dwarf2-asm:                        IA-64 Options.      (line   79)
30755* mno-dword:                             FRV Options.        (line   35)
30756* mno-eabi:                              RS/6000 and PowerPC Options.
30757                                                             (line  555)
30758* mno-early-stop-bits:                   IA-64 Options.      (line   85)
30759* mno-eflags:                            FRV Options.        (line  125)
30760* mno-embedded-data:                     MIPS Options.       (line  225)
30761* mno-ep:                                V850 Options.       (line   16)
30762* mno-epsilon:                           MMIX Options.       (line   15)
30763* mno-explicit-relocs <1>:               MIPS Options.       (line  245)
30764* mno-explicit-relocs:                   DEC Alpha Options.  (line  184)
30765* mno-fancy-math-387:                    i386 and x86-64 Options.
30766                                                             (line  227)
30767* mno-fast-fix:                          TMS320C3x/C4x Options.
30768                                                             (line   62)
30769* mno-faster-structs:                    SPARC Options.      (line   71)
30770* mno-fix:                               DEC Alpha Options.  (line  171)
30771* mno-fix-r4000:                         MIPS Options.       (line  309)
30772* mno-fix-r4400:                         MIPS Options.       (line  323)
30773* mno-float32:                           PDP-11 Options.     (line   48)
30774* mno-float64:                           PDP-11 Options.     (line   52)
30775* mno-flush-func:                        M32R/D Options.     (line   99)
30776* mno-flush-trap:                        M32R/D Options.     (line   91)
30777* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
30778                                                             (line  233)
30779* mno-fp-regs:                           DEC Alpha Options.  (line   25)
30780* mno-fp-ret-in-387:                     i386 and x86-64 Options.
30781                                                             (line  217)
30782* mno-fprnd:                             RS/6000 and PowerPC Options.
30783                                                             (line   25)
30784* mno-fpu:                               SPARC Options.      (line   25)
30785* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
30786* mno-fused-madd <2>:                    S/390 and zSeries Options.
30787                                                             (line  128)
30788* mno-fused-madd <3>:                    RS/6000 and PowerPC Options.
30789                                                             (line  349)
30790* mno-fused-madd:                        MIPS Options.       (line  294)
30791* mno-gnu-as:                            IA-64 Options.      (line   18)
30792* mno-gnu-ld:                            IA-64 Options.      (line   23)
30793* mno-gotplt:                            CRIS Options.       (line   86)
30794* mno-hardlit:                           MCore Options.      (line   10)
30795* mno-id-shared-library:                 Blackfin Options.   (line   45)
30796* mno-ieee-fp:                           i386 and x86-64 Options.
30797                                                             (line  200)
30798* mno-int16:                             PDP-11 Options.     (line   44)
30799* mno-int32:                             PDP-11 Options.     (line   40)
30800* mno-interrupts:                        AVR Options.        (line   39)
30801* mno-isel:                              RS/6000 and PowerPC Options.
30802                                                             (line  187)
30803* mno-knuthdiv:                          MMIX Options.       (line   33)
30804* mno-libfuncs:                          MMIX Options.       (line   10)
30805* mno-long-calls <1>:                    V850 Options.       (line   10)
30806* mno-long-calls <2>:                    MIPS Options.       (line  280)
30807* mno-long-calls <3>:                    M68hc1x Options.    (line   35)
30808* mno-long-calls <4>:                    HPPA Options.       (line  138)
30809* mno-long-calls <5>:                    Blackfin Options.   (line   57)
30810* mno-long-calls:                        ARM Options.        (line  149)
30811* mno-longcall:                          RS/6000 and PowerPC Options.
30812                                                             (line  621)
30813* mno-longcalls:                         Xtensa Options.     (line   60)
30814* mno-loop-unsigned:                     TMS320C3x/C4x Options.
30815                                                             (line   94)
30816* mno-low-64k:                           Blackfin Options.   (line   36)
30817* mno-mad:                               MIPS Options.       (line  289)
30818* mno-max:                               DEC Alpha Options.  (line  171)
30819* mno-media:                             FRV Options.        (line   47)
30820* mno-memcpy:                            MIPS Options.       (line  274)
30821* mno-mfcrf:                             RS/6000 and PowerPC Options.
30822                                                             (line   25)
30823* mno-mips16:                            MIPS Options.       (line   81)
30824* mno-mips3d:                            MIPS Options.       (line  190)
30825* mno-mmx:                               i386 and x86-64 Options.
30826                                                             (line  389)
30827* mno-mpyi:                              TMS320C3x/C4x Options.
30828                                                             (line   53)
30829* mno-mul-bug-workaround:                CRIS Options.       (line   36)
30830* mno-muladd:                            FRV Options.        (line   53)
30831* mno-mulhw:                             RS/6000 and PowerPC Options.
30832                                                             (line  355)
30833* mno-mult-bug:                          MN10300 Options.    (line   13)
30834* mno-multi-cond-exec:                   FRV Options.        (line  183)
30835* mno-multiple:                          RS/6000 and PowerPC Options.
30836                                                             (line  317)
30837* mno-mvcle:                             S/390 and zSeries Options.
30838                                                             (line   97)
30839* mno-nested-cond-exec:                  FRV Options.        (line  195)
30840* mno-optimize-membar:                   FRV Options.        (line  205)
30841* mno-pack:                              FRV Options.        (line  122)
30842* mno-packed-stack:                      S/390 and zSeries Options.
30843                                                             (line   46)
30844* mno-paired-single:                     MIPS Options.       (line  183)
30845* mno-parallel-insns:                    TMS320C3x/C4x Options.
30846                                                             (line  115)
30847* mno-parallel-mpy:                      TMS320C3x/C4x Options.
30848                                                             (line  120)
30849* mno-pic:                               IA-64 Options.      (line   26)
30850* mno-popcntb:                           RS/6000 and PowerPC Options.
30851                                                             (line   25)
30852* mno-power:                             RS/6000 and PowerPC Options.
30853                                                             (line   25)
30854* mno-power2:                            RS/6000 and PowerPC Options.
30855                                                             (line   25)
30856* mno-powerpc:                           RS/6000 and PowerPC Options.
30857                                                             (line   25)
30858* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
30859                                                             (line   25)
30860* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
30861                                                             (line   25)
30862* mno-powerpc64:                         RS/6000 and PowerPC Options.
30863                                                             (line   25)
30864* mno-prolog-function:                   V850 Options.       (line   23)
30865* mno-prologue-epilogue:                 CRIS Options.       (line   76)
30866* mno-prototype:                         RS/6000 and PowerPC Options.
30867                                                             (line  511)
30868* mno-push-args:                         i386 and x86-64 Options.
30869                                                             (line  408)
30870* mno-register-names:                    IA-64 Options.      (line   37)
30871* mno-regnames:                          RS/6000 and PowerPC Options.
30872                                                             (line  615)
30873* mno-relax-immediate:                   MCore Options.      (line   19)
30874* mno-relocatable:                       RS/6000 and PowerPC Options.
30875                                                             (line  385)
30876* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
30877                                                             (line  393)
30878* mno-rptb:                              TMS320C3x/C4x Options.
30879                                                             (line   72)
30880* mno-rpts:                              TMS320C3x/C4x Options.
30881                                                             (line   81)
30882* mno-scc:                               FRV Options.        (line  146)
30883* mno-sched-ar-data-spec:                IA-64 Options.      (line  128)
30884* mno-sched-ar-in-data-spec:             IA-64 Options.      (line  149)
30885* mno-sched-br-data-spec:                IA-64 Options.      (line  121)
30886* mno-sched-br-in-data-spec:             IA-64 Options.      (line  142)
30887* mno-sched-control-ldc:                 IA-64 Options.      (line  168)
30888* mno-sched-control-spec:                IA-64 Options.      (line  135)
30889* mno-sched-count-spec-in-critical-path: IA-64 Options.      (line  194)
30890* mno-sched-in-control-spec:             IA-64 Options.      (line  156)
30891* mno-sched-ldc:                         IA-64 Options.      (line  162)
30892* mno-sched-prefer-non-control-spec-insns: IA-64 Options.    (line  187)
30893* mno-sched-prefer-non-data-spec-insns:  IA-64 Options.      (line  180)
30894* mno-sched-prolog:                      ARM Options.        (line   32)
30895* mno-sched-spec-verbose:                IA-64 Options.      (line  176)
30896* mno-sdata <1>:                         RS/6000 and PowerPC Options.
30897                                                             (line  602)
30898* mno-sdata:                             IA-64 Options.      (line   42)
30899* mno-side-effects:                      CRIS Options.       (line   51)
30900* mno-single-exit:                       MMIX Options.       (line   66)
30901* mno-slow-bytes:                        MCore Options.      (line   35)
30902* mno-small-exec:                        S/390 and zSeries Options.
30903                                                             (line   72)
30904* mno-soft-float:                        DEC Alpha Options.  (line   10)
30905* mno-space-regs:                        HPPA Options.       (line   45)
30906* mno-spe:                               RS/6000 and PowerPC Options.
30907                                                             (line  196)
30908* mno-specld-anomaly:                    Blackfin Options.   (line   19)
30909* mno-split:                             PDP-11 Options.     (line   71)
30910* mno-split-addresses:                   MIPS Options.       (line  239)
30911* mno-sse:                               i386 and x86-64 Options.
30912                                                             (line  389)
30913* mno-stack-align:                       CRIS Options.       (line   60)
30914* mno-stack-bias:                        SPARC Options.      (line  220)
30915* mno-strict-align <1>:                  RS/6000 and PowerPC Options.
30916                                                             (line  380)
30917* mno-strict-align:                      M680x0 Options.     (line  152)
30918* mno-string:                            RS/6000 and PowerPC Options.
30919                                                             (line  328)
30920* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
30921                                                             (line  233)
30922* mno-svr3-shlib:                        i386 and x86-64 Options.
30923                                                             (line  287)
30924* mno-swdiv:                             RS/6000 and PowerPC Options.
30925                                                             (line  154)
30926* mno-sym32:                             MIPS Options.       (line  209)
30927* mno-tablejump:                         AVR Options.        (line   47)
30928* mno-target-align:                      Xtensa Options.     (line   47)
30929* mno-text-section-literals:             Xtensa Options.     (line   35)
30930* mno-toc:                               RS/6000 and PowerPC Options.
30931                                                             (line  402)
30932* mno-toplevel-symbols:                  MMIX Options.       (line   40)
30933* mno-tpf-trace:                         S/390 and zSeries Options.
30934                                                             (line  122)
30935* mno-unaligned-doubles:                 SPARC Options.      (line   59)
30936* mno-uninit-const-in-rodata:            MIPS Options.       (line  233)
30937* mno-update:                            RS/6000 and PowerPC Options.
30938                                                             (line  339)
30939* mno-v8plus:                            SPARC Options.      (line  168)
30940* mno-vis:                               SPARC Options.      (line  175)
30941* mno-vliw-branch:                       FRV Options.        (line  170)
30942* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
30943* mno-vrsave:                            RS/6000 and PowerPC Options.
30944                                                             (line  173)
30945* mno-wide-bitfields:                    MCore Options.      (line   23)
30946* mno-xgot:                              MIPS Options.       (line  127)
30947* mno-xl-compat:                         RS/6000 and PowerPC Options.
30948                                                             (line  268)
30949* mno-zero-extend:                       MMIX Options.       (line   27)
30950* mnobitfield:                           M680x0 Options.     (line  100)
30951* mnomacsave:                            SH Options.         (line   92)
30952* mnominmax:                             M68hc1x Options.    (line   31)
30953* mnop-fun-dllimport:                    ARM Options.        (line  174)
30954* mold-mnemonics:                        RS/6000 and PowerPC Options.
30955                                                             (line   85)
30956* momit-leaf-frame-pointer <1>:          i386 and x86-64 Options.
30957                                                             (line  443)
30958* momit-leaf-frame-pointer:              Blackfin Options.   (line    7)
30959* mone-byte-bool:                        Darwin Options.     (line   83)
30960* moptimize-membar:                      FRV Options.        (line  201)
30961* MP:                                    Preprocessor Options.
30962                                                             (line  226)
30963* mpa-risc-1-0:                          HPPA Options.       (line   19)
30964* mpa-risc-1-1:                          HPPA Options.       (line   19)
30965* mpa-risc-2-0:                          HPPA Options.       (line   19)
30966* mpack:                                 FRV Options.        (line  119)
30967* mpacked-stack:                         S/390 and zSeries Options.
30968                                                             (line   46)
30969* mpadstruct:                            SH Options.         (line  106)
30970* mpaired-single:                        MIPS Options.       (line  183)
30971* mparallel-insns:                       TMS320C3x/C4x Options.
30972                                                             (line  115)
30973* mparallel-mpy:                         TMS320C3x/C4x Options.
30974                                                             (line  120)
30975* mparanoid:                             TMS320C3x/C4x Options.
30976                                                             (line   45)
30977* mpcrel:                                M680x0 Options.     (line  144)
30978* mpdebug:                               CRIS Options.       (line   40)
30979* mpe:                                   RS/6000 and PowerPC Options.
30980                                                             (line  288)
30981* mpentium:                              i386 and x86-64 Options.
30982                                                             (line  142)
30983* mpentiumpro:                           i386 and x86-64 Options.
30984                                                             (line  142)
30985* mpic-register:                         ARM Options.        (line  183)
30986* mpoke-function-name:                   ARM Options.        (line  197)
30987* mpopcntb:                              RS/6000 and PowerPC Options.
30988                                                             (line   25)
30989* mportable-runtime:                     HPPA Options.       (line   71)
30990* mpower:                                RS/6000 and PowerPC Options.
30991                                                             (line   25)
30992* mpower2:                               RS/6000 and PowerPC Options.
30993                                                             (line   25)
30994* mpowerpc:                              RS/6000 and PowerPC Options.
30995                                                             (line   25)
30996* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
30997                                                             (line   25)
30998* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
30999                                                             (line   25)
31000* mpowerpc64:                            RS/6000 and PowerPC Options.
31001                                                             (line   25)
31002* mprefergot:                            SH Options.         (line  113)
31003* mpreferred-stack-boundary:             i386 and x86-64 Options.
31004                                                             (line  351)
31005* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
31006                                                             (line  425)
31007* mprolog-function:                      V850 Options.       (line   23)
31008* mprologue-epilogue:                    CRIS Options.       (line   76)
31009* mprototype:                            RS/6000 and PowerPC Options.
31010                                                             (line  511)
31011* mpt-fixed:                             SH Options.         (line  194)
31012* mpush-args <1>:                        i386 and x86-64 Options.
31013                                                             (line  408)
31014* mpush-args:                            CRX Options.        (line   13)
31015* MQ:                                    Preprocessor Options.
31016                                                             (line  252)
31017* mregister-names:                       IA-64 Options.      (line   37)
31018* mregnames:                             RS/6000 and PowerPC Options.
31019                                                             (line  615)
31020* mregparm <1>:                          TMS320C3x/C4x Options.
31021                                                             (line  109)
31022* mregparm:                              i386 and x86-64 Options.
31023                                                             (line  316)
31024* mrelax <1>:                            SH Options.         (line   70)
31025* mrelax <2>:                            MN10300 Options.    (line   34)
31026* mrelax:                                H8/300 Options.     (line    9)
31027* mrelax-immediate:                      MCore Options.      (line   19)
31028* mrelocatable:                          RS/6000 and PowerPC Options.
31029                                                             (line  385)
31030* mrelocatable-lib:                      RS/6000 and PowerPC Options.
31031                                                             (line  393)
31032* mreturn-pointer-on-d0:                 MN10300 Options.    (line   24)
31033* mrodata:                               ARC Options.        (line   30)
31034* mrptb:                                 TMS320C3x/C4x Options.
31035                                                             (line   72)
31036* mrpts:                                 TMS320C3x/C4x Options.
31037                                                             (line   81)
31038* mrtd <1>:                              Function Attributes.
31039                                                             (line  100)
31040* mrtd <2>:                              M680x0 Options.     (line  109)
31041* mrtd:                                  i386 and x86-64 Options.
31042                                                             (line  292)
31043* ms:                                    H8/300 Options.     (line   17)
31044* ms2600:                                H8/300 Options.     (line   24)
31045* mscc:                                  FRV Options.        (line  140)
31046* msched-ar-data-spec:                   IA-64 Options.      (line  128)
31047* msched-ar-in-data-spec:                IA-64 Options.      (line  149)
31048* msched-br-data-spec:                   IA-64 Options.      (line  121)
31049* msched-br-in-data-spec:                IA-64 Options.      (line  142)
31050* msched-control-ldc:                    IA-64 Options.      (line  168)
31051* msched-control-spec:                   IA-64 Options.      (line  135)
31052* msched-costly-dep:                     RS/6000 and PowerPC Options.
31053                                                             (line  432)
31054* msched-count-spec-in-critical-path:    IA-64 Options.      (line  194)
31055* msched-in-control-spec:                IA-64 Options.      (line  156)
31056* msched-ldc:                            IA-64 Options.      (line  162)
31057* msched-prefer-non-control-spec-insns:  IA-64 Options.      (line  187)
31058* msched-prefer-non-data-spec-insns:     IA-64 Options.      (line  180)
31059* msched-spec-verbose:                   IA-64 Options.      (line  176)
31060* mschedule:                             HPPA Options.       (line   78)
31061* mscore5:                               Score Options.      (line   25)
31062* mscore5u:                              Score Options.      (line   28)
31063* mscore7:                               Score Options.      (line   31)
31064* mscore7d:                              Score Options.      (line   34)
31065* msda:                                  V850 Options.       (line   40)
31066* msdata <1>:                            RS/6000 and PowerPC Options.
31067                                                             (line  589)
31068* msdata:                                IA-64 Options.      (line   42)
31069* msdata-data:                           RS/6000 and PowerPC Options.
31070                                                             (line  594)
31071* msdata=default:                        RS/6000 and PowerPC Options.
31072                                                             (line  589)
31073* msdata=eabi:                           RS/6000 and PowerPC Options.
31074                                                             (line  569)
31075* msdata=none <1>:                       RS/6000 and PowerPC Options.
31076                                                             (line  602)
31077* msdata=none:                           M32R/D Options.     (line   40)
31078* msdata=sdata:                          M32R/D Options.     (line   49)
31079* msdata=sysv:                           RS/6000 and PowerPC Options.
31080                                                             (line  580)
31081* msdata=use:                            M32R/D Options.     (line   53)
31082* msecure-plt:                           RS/6000 and PowerPC Options.
31083                                                             (line  176)
31084* mshared-library-id:                    Blackfin Options.   (line   49)
31085* mshort <1>:                            M68hc1x Options.    (line   40)
31086* mshort:                                M680x0 Options.     (line   94)
31087* msim <1>:                              Xstormy16 Options.  (line    9)
31088* msim <2>:                              RS/6000 and PowerPC Options.
31089                                                             (line  521)
31090* msim <3>:                              MT Options.         (line   22)
31091* msim:                                  M32C Options.       (line   13)
31092* msingle-exit:                          MMIX Options.       (line   66)
31093* msingle-float:                         MIPS Options.       (line  169)
31094* msingle-pic-base:                      ARM Options.        (line  177)
31095* msio:                                  HPPA Options.       (line  107)
31096* msize:                                 AVR Options.        (line   32)
31097* mslow-bytes:                           MCore Options.      (line   35)
31098* msmall:                                TMS320C3x/C4x Options.
31099                                                             (line   18)
31100* msmall-data:                           DEC Alpha Options.  (line  195)
31101* msmall-exec:                           S/390 and zSeries Options.
31102                                                             (line   72)
31103* msmall-memory:                         TMS320C3x/C4x Options.
31104                                                             (line   18)
31105* msmall-text:                           DEC Alpha Options.  (line  213)
31106* msoft-float <1>:                       SPARC Options.      (line   25)
31107* msoft-float <2>:                       S/390 and zSeries Options.
31108                                                             (line   11)
31109* msoft-float <3>:                       RS/6000 and PowerPC Options.
31110                                                             (line  311)
31111* msoft-float <4>:                       PDP-11 Options.     (line   13)
31112* msoft-float <5>:                       MIPS Options.       (line  165)
31113* msoft-float <6>:                       M680x0 Options.     (line   84)
31114* msoft-float <7>:                       i386 and x86-64 Options.
31115                                                             (line  205)
31116* msoft-float <8>:                       HPPA Options.       (line   91)
31117* msoft-float <9>:                       FRV Options.        (line   22)
31118* msoft-float <10>:                      DEC Alpha Options.  (line   10)
31119* msoft-float:                           ARM Options.        (line   45)
31120* msoft-quad-float:                      SPARC Options.      (line   45)
31121* msoft-reg-count:                       M68hc1x Options.    (line   43)
31122* mspace <1>:                            V850 Options.       (line   30)
31123* mspace:                                SH Options.         (line  110)
31124* mspe:                                  RS/6000 and PowerPC Options.
31125                                                             (line  196)
31126* mspecld-anomaly:                       Blackfin Options.   (line   14)
31127* msplit:                                PDP-11 Options.     (line   68)
31128* msplit-addresses:                      MIPS Options.       (line  239)
31129* msse:                                  i386 and x86-64 Options.
31130                                                             (line  389)
31131* msseregparm:                           i386 and x86-64 Options.
31132                                                             (line  327)
31133* mstack-align:                          CRIS Options.       (line   60)
31134* mstack-bias:                           SPARC Options.      (line  220)
31135* mstack-guard:                          S/390 and zSeries Options.
31136                                                             (line  148)
31137* mstack-size:                           S/390 and zSeries Options.
31138                                                             (line  148)
31139* mstackrealign:                         i386 and x86-64 Options.
31140                                                             (line  337)
31141* mstrict-align <1>:                     RS/6000 and PowerPC Options.
31142                                                             (line  380)
31143* mstrict-align:                         M680x0 Options.     (line  152)
31144* mstring:                               RS/6000 and PowerPC Options.
31145                                                             (line  328)
31146* mstructure-size-boundary:              ARM Options.        (line  129)
31147* msvr3-shlib:                           i386 and x86-64 Options.
31148                                                             (line  287)
31149* msvr4-struct-return:                   RS/6000 and PowerPC Options.
31150                                                             (line  485)
31151* mswdiv:                                RS/6000 and PowerPC Options.
31152                                                             (line  154)
31153* msym32:                                MIPS Options.       (line  209)
31154* mt:                                    IA-64 Options.      (line  106)
31155* MT:                                    Preprocessor Options.
31156                                                             (line  238)
31157* mtarget-align:                         Xtensa Options.     (line   47)
31158* mtda:                                  V850 Options.       (line   34)
31159* mtext:                                 ARC Options.        (line   30)
31160* mtext-section-literals:                Xtensa Options.     (line   35)
31161* mthreads:                              i386 and x86-64 Options.
31162                                                             (line  423)
31163* mthumb:                                ARM Options.        (line  218)
31164* mthumb-interwork:                      ARM Options.        (line   25)
31165* mti:                                   TMS320C3x/C4x Options.
31166                                                             (line  102)
31167* mtiny-stack:                           AVR Options.        (line   50)
31168* mtls-direct-seg-refs:                  i386 and x86-64 Options.
31169                                                             (line  451)
31170* mtls-size:                             IA-64 Options.      (line   97)
31171* mtoc:                                  RS/6000 and PowerPC Options.
31172                                                             (line  402)
31173* mtomcat-stats:                         FRV Options.        (line  209)
31174* mtoplevel-symbols:                     MMIX Options.       (line   40)
31175* mtp:                                   ARM Options.        (line  246)
31176* mtpcs-frame:                           ARM Options.        (line  222)
31177* mtpcs-leaf-frame:                      ARM Options.        (line  228)
31178* mtpf-trace:                            S/390 and zSeries Options.
31179                                                             (line  122)
31180* mtrap-precision:                       DEC Alpha Options.  (line  109)
31181* mtune <1>:                             SPARC Options.      (line  156)
31182* mtune <2>:                             S/390 and zSeries Options.
31183                                                             (line  115)
31184* mtune <3>:                             RS/6000 and PowerPC Options.
31185                                                             (line  144)
31186* mtune <4>:                             MIPS Options.       (line   44)
31187* mtune <5>:                             IA-64 Options.      (line  101)
31188* mtune <6>:                             i386 and x86-64 Options.
31189                                                             (line   10)
31190* mtune <7>:                             DEC Alpha Options.  (line  262)
31191* mtune <8>:                             CRIS Options.       (line   16)
31192* mtune:                                 ARM Options.        (line   99)
31193* muclibc:                               GNU/Linux Options.  (line   13)
31194* muls:                                  Score Options.      (line   18)
31195* multcost=NUMBER:                       SH Options.         (line  124)
31196* multi_module:                          Darwin Options.     (line  190)
31197* multilib-library-pic:                  FRV Options.        (line   89)
31198* multiply_defined:                      Darwin Options.     (line  190)
31199* multiply_defined_unused:               Darwin Options.     (line  190)
31200* munaligned-doubles:                    SPARC Options.      (line   59)
31201* muninit-const-in-rodata:               MIPS Options.       (line  233)
31202* munix:                                 VAX Options.        (line    9)
31203* munix-asm:                             PDP-11 Options.     (line   74)
31204* mupdate:                               RS/6000 and PowerPC Options.
31205                                                             (line  339)
31206* musermode:                             SH Options.         (line  118)
31207* mv850:                                 V850 Options.       (line   49)
31208* mv850e:                                V850 Options.       (line   69)
31209* mv850e1:                               V850 Options.       (line   64)
31210* mv8plus:                               SPARC Options.      (line  168)
31211* mvis:                                  SPARC Options.      (line  175)
31212* mvliw-branch:                          FRV Options.        (line  164)
31213* mvms-return-codes:                     DEC Alpha/VMS Options.
31214                                                             (line    9)
31215* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
31216* mvr4130-align:                         MIPS Options.       (line  388)
31217* mvrsave:                               RS/6000 and PowerPC Options.
31218                                                             (line  173)
31219* mvxworks:                              RS/6000 and PowerPC Options.
31220                                                             (line  542)
31221* mwarn-dynamicstack:                    S/390 and zSeries Options.
31222                                                             (line  141)
31223* mwarn-framesize:                       S/390 and zSeries Options.
31224                                                             (line  133)
31225* mwide-bitfields:                       MCore Options.      (line   23)
31226* mwindiss:                              RS/6000 and PowerPC Options.
31227                                                             (line  546)
31228* mwords-little-endian:                  ARM Options.        (line   76)
31229* mxgot:                                 MIPS Options.       (line  127)
31230* mxl-compat:                            RS/6000 and PowerPC Options.
31231                                                             (line  268)
31232* myellowknife:                          RS/6000 and PowerPC Options.
31233                                                             (line  537)
31234* mzarch:                                S/390 and zSeries Options.
31235                                                             (line   87)
31236* mzda:                                  V850 Options.       (line   45)
31237* mzero-extend:                          MMIX Options.       (line   27)
31238* no-integrated-cpp:                     C Dialect Options.  (line  217)
31239* no-red-zone:                           i386 and x86-64 Options.
31240                                                             (line  472)
31241* no_dead_strip_inits_and_terms:         Darwin Options.     (line  190)
31242* noall_load:                            Darwin Options.     (line  190)
31243* nocpp:                                 MIPS Options.       (line  304)
31244* nodefaultlibs:                         Link Options.       (line   62)
31245* nofixprebinding:                       Darwin Options.     (line  190)
31246* nolibdld:                              HPPA Options.       (line  190)
31247* nomultidefs:                           Darwin Options.     (line  190)
31248* noprebind:                             Darwin Options.     (line  190)
31249* noseglinkedit:                         Darwin Options.     (line  190)
31250* nostartfiles:                          Link Options.       (line   57)
31251* nostdinc:                              Preprocessor Options.
31252                                                             (line  373)
31253* nostdinc++ <1>:                        Preprocessor Options.
31254                                                             (line  378)
31255* nostdinc++:                            C++ Dialect Options.
31256                                                             (line  225)
31257* nostdlib:                              Link Options.       (line   71)
31258* o:                                     Preprocessor Options.
31259                                                             (line   72)
31260* O:                                     Optimize Options.   (line   32)
31261* o:                                     Overall Options.    (line  175)
31262* O0:                                    Optimize Options.   (line  104)
31263* O1:                                    Optimize Options.   (line   32)
31264* O2:                                    Optimize Options.   (line   63)
31265* O3:                                    Optimize Options.   (line   99)
31266* Os:                                    Optimize Options.   (line  107)
31267* P:                                     Preprocessor Options.
31268                                                             (line  551)
31269* p:                                     Debugging Options.  (line  130)
31270* pagezero_size:                         Darwin Options.     (line  190)
31271* param:                                 Optimize Options.   (line 1358)
31272* pass-exit-codes:                       Overall Options.    (line  133)
31273* pedantic <1>:                          Warnings and Errors.
31274                                                             (line   25)
31275* pedantic <2>:                          Alternate Keywords. (line   29)
31276* pedantic <3>:                          C Extensions.       (line    6)
31277* pedantic <4>:                          Preprocessor Options.
31278                                                             (line  163)
31279* pedantic <5>:                          Warning Options.    (line   27)
31280* pedantic:                              Standards.          (line   13)
31281* pedantic-errors <1>:                   Warnings and Errors.
31282                                                             (line   25)
31283* pedantic-errors <2>:                   Non-bugs.           (line  216)
31284* pedantic-errors <3>:                   Preprocessor Options.
31285                                                             (line  168)
31286* pedantic-errors <4>:                   Warning Options.    (line   69)
31287* pedantic-errors:                       Standards.          (line   13)
31288* pg:                                    Debugging Options.  (line  136)
31289* pie:                                   Link Options.       (line   92)
31290* pipe:                                  Overall Options.    (line  197)
31291* prebind:                               Darwin Options.     (line  190)
31292* prebind_all_twolevel_modules:          Darwin Options.     (line  190)
31293* preprocessor:                          Preprocessor Options.
31294                                                             (line   24)
31295* print-file-name:                       Debugging Options.  (line  728)
31296* print-libgcc-file-name:                Debugging Options.  (line  749)
31297* print-multi-directory:                 Debugging Options.  (line  734)
31298* print-multi-lib:                       Debugging Options.  (line  739)
31299* print-objc-runtime-info:               Objective-C and Objective-C++ Dialect Options.
31300                                                             (line  244)
31301* print-prog-name:                       Debugging Options.  (line  746)
31302* print-search-dirs:                     Debugging Options.  (line  757)
31303* private_bundle:                        Darwin Options.     (line  190)
31304* pthread <1>:                           SPARC Options.      (line  240)
31305* pthread <2>:                           RS/6000 and PowerPC Options.
31306                                                             (line  653)
31307* pthread:                               IA-64 Options.      (line  106)
31308* pthreads:                              SPARC Options.      (line  234)
31309* Q:                                     Debugging Options.  (line  142)
31310* Qn:                                    System V Options.   (line   18)
31311* Qy:                                    System V Options.   (line   14)
31312* rdynamic:                              Link Options.       (line   98)
31313* read_only_relocs:                      Darwin Options.     (line  190)
31314* remap:                                 Preprocessor Options.
31315                                                             (line  599)
31316* s:                                     Link Options.       (line  105)
31317* S <1>:                                 Link Options.       (line   20)
31318* S:                                     Overall Options.    (line  158)
31319* save-temps:                            Debugging Options.  (line  690)
31320* sectalign:                             Darwin Options.     (line  190)
31321* sectcreate:                            Darwin Options.     (line  190)
31322* sectobjectsymbols:                     Darwin Options.     (line  190)
31323* sectorder:                             Darwin Options.     (line  190)
31324* seg1addr:                              Darwin Options.     (line  190)
31325* seg_addr_table:                        Darwin Options.     (line  190)
31326* seg_addr_table_filename:               Darwin Options.     (line  190)
31327* segaddr:                               Darwin Options.     (line  190)
31328* seglinkedit:                           Darwin Options.     (line  190)
31329* segprot:                               Darwin Options.     (line  190)
31330* segs_read_only_addr:                   Darwin Options.     (line  190)
31331* segs_read_write_addr:                  Darwin Options.     (line  190)
31332* shared:                                Link Options.       (line  114)
31333* shared-libgcc:                         Link Options.       (line  122)
31334* sim:                                   CRIS Options.       (line  108)
31335* sim2:                                  CRIS Options.       (line  114)
31336* single_module:                         Darwin Options.     (line  190)
31337* specs:                                 Directory Options.  (line   84)
31338* static <1>:                            HPPA Options.       (line  194)
31339* static <2>:                            Darwin Options.     (line  190)
31340* static:                                Link Options.       (line  109)
31341* static-libgcc:                         Link Options.       (line  122)
31342* std <1>:                               Non-bugs.           (line  107)
31343* std <2>:                               Other Builtins.     (line   22)
31344* std <3>:                               C Dialect Options.  (line   47)
31345* std:                                   Standards.          (line   13)
31346* std=:                                  Preprocessor Options.
31347                                                             (line  324)
31348* sub_library:                           Darwin Options.     (line  190)
31349* sub_umbrella:                          Darwin Options.     (line  190)
31350* symbolic:                              Link Options.       (line  157)
31351* sysroot:                               Directory Options.  (line   92)
31352* target-help <1>:                       Preprocessor Options.
31353                                                             (line  604)
31354* target-help:                           Overall Options.    (line  228)
31355* threads <1>:                           SPARC Options.      (line  228)
31356* threads:                               HPPA Options.       (line  207)
31357* time:                                  Debugging Options.  (line  704)
31358* tls:                                   FRV Options.        (line   75)
31359* TLS:                                   FRV Options.        (line   72)
31360* traditional <1>:                       Incompatibilities.  (line    6)
31361* traditional:                           C Dialect Options.  (line  229)
31362* traditional-cpp <1>:                   Preprocessor Options.
31363                                                             (line  582)
31364* traditional-cpp:                       C Dialect Options.  (line  229)
31365* trigraphs <1>:                         Preprocessor Options.
31366                                                             (line  586)
31367* trigraphs:                             C Dialect Options.  (line  213)
31368* twolevel_namespace:                    Darwin Options.     (line  190)
31369* u:                                     Link Options.       (line  179)
31370* U:                                     Preprocessor Options.
31371                                                             (line   56)
31372* umbrella:                              Darwin Options.     (line  190)
31373* undef:                                 Preprocessor Options.
31374                                                             (line   60)
31375* undefined:                             Darwin Options.     (line  190)
31376* unexported_symbols_list:               Darwin Options.     (line  190)
31377* V:                                     Target Options.     (line   24)
31378* v <1>:                                 Preprocessor Options.
31379                                                             (line  608)
31380* v:                                     Overall Options.    (line  186)
31381* version <1>:                           Preprocessor Options.
31382                                                             (line  621)
31383* version:                               Overall Options.    (line  232)
31384* W:                                     Incompatibilities.  (line   64)
31385* w:                                     Preprocessor Options.
31386                                                             (line  159)
31387* W:                                     Warning Options.    (line  569)
31388* w:                                     Warning Options.    (line   73)
31389* Wa:                                    Assembler Options.  (line    9)
31390* Wabi:                                  C++ Dialect Options.
31391                                                             (line  239)
31392* Waddress:                              Warning Options.    (line  837)
31393* Waggregate-return:                     Warning Options.    (line  850)
31394* Wall <1>:                              Standard Libraries. (line    6)
31395* Wall <2>:                              Preprocessor Options.
31396                                                             (line   78)
31397* Wall:                                  Warning Options.    (line  553)
31398* Wassign-intercept:                     Objective-C and Objective-C++ Dialect Options.
31399                                                             (line  198)
31400* Wattributes:                           Warning Options.    (line  855)
31401* Wbad-function-cast:                    Warning Options.    (line  785)
31402* Wcast-align:                           Warning Options.    (line  799)
31403* Wcast-qual:                            Warning Options.    (line  794)
31404* Wchar-subscripts:                      Warning Options.    (line   79)
31405* Wcomment <1>:                          Preprocessor Options.
31406                                                             (line   86)
31407* Wcomment:                              Warning Options.    (line   84)
31408* Wcomments:                             Preprocessor Options.
31409                                                             (line   86)
31410* Wconversion <1>:                       Protoize Caveats.   (line   31)
31411* Wconversion:                           Warning Options.    (line  817)
31412* Wctor-dtor-privacy:                    C++ Dialect Options.
31413                                                             (line  317)
31414* Wdeclaration-after-statement:          Warning Options.    (line  751)
31415* Wdisabled-optimization:                Warning Options.    (line 1104)
31416* Wdiv-by-zero:                          Warning Options.    (line  643)
31417* weak_reference_mismatches:             Darwin Options.     (line  190)
31418* Weffc++:                               C++ Dialect Options.
31419                                                             (line  343)
31420* Wendif-labels <1>:                     Preprocessor Options.
31421                                                             (line  136)
31422* Wendif-labels:                         Warning Options.    (line  761)
31423* Werror <1>:                            Preprocessor Options.
31424                                                             (line  149)
31425* Werror:                                Warning Options.    (line 1119)
31426* Werror-implicit-function-declaration:  Warning Options.    (line  198)
31427* Werror=:                               Warning Options.    (line 1122)
31428* Wextra:                                Warning Options.    (line  569)
31429* Wfatal-errors:                         Warning Options.    (line   89)
31430* Wfloat-equal:                          Warning Options.    (line  659)
31431* Wformat <1>:                           Function Attributes.
31432                                                             (line  281)
31433* Wformat:                               Warning Options.    (line   94)
31434* Wformat-nonliteral <1>:                Function Attributes.
31435                                                             (line  334)
31436* Wformat-nonliteral:                    Warning Options.    (line  151)
31437* Wformat-security:                      Warning Options.    (line  156)
31438* Wformat-y2k:                           Warning Options.    (line  129)
31439* Wformat=2:                             Warning Options.    (line  167)
31440* whatsloaded:                           Darwin Options.     (line  190)
31441* whyload:                               Darwin Options.     (line  190)
31442* Wimplicit:                             Warning Options.    (line  204)
31443* Wimplicit-function-declaration:        Warning Options.    (line  198)
31444* Wimplicit-int:                         Warning Options.    (line  193)
31445* Wimport:                               Preprocessor Options.
31446                                                             (line  109)
31447* Winit-self:                            Warning Options.    (line  179)
31448* Winline <1>:                           Inline.             (line   42)
31449* Winline:                               Warning Options.    (line 1048)
31450* Winvalid-pch:                          Warning Options.    (line 1083)
31451* Wl:                                    Link Options.       (line  175)
31452* Wlarger-than:                          Warning Options.    (line  770)
31453* Wlong-long:                            Warning Options.    (line 1087)
31454* Wmain:                                 Warning Options.    (line  208)
31455* Wmissing-braces:                       Warning Options.    (line  214)
31456* Wmissing-declarations:                 Warning Options.    (line  877)
31457* Wmissing-field-initializers:           Warning Options.    (line  883)
31458* Wmissing-format-attribute:             Warning Options.    (line  909)
31459* Wmissing-include-dirs:                 Warning Options.    (line  224)
31460* Wmissing-noreturn:                     Warning Options.    (line  901)
31461* Wmissing-prototypes:                   Warning Options.    (line  871)
31462* Wmultichar:                            Warning Options.    (line  928)
31463* Wnested-externs:                       Warning Options.    (line 1023)
31464* Wno-address:                           Warning Options.    (line  837)
31465* Wno-attributes:                        Warning Options.    (line  855)
31466* Wno-deprecated:                        C++ Dialect Options.
31467                                                             (line  373)
31468* Wno-deprecated-declarations:           Warning Options.    (line  977)
31469* Wno-div-by-zero:                       Warning Options.    (line  643)
31470* Wno-endif-labels:                      Warning Options.    (line  761)
31471* Wno-format-extra-args:                 Warning Options.    (line  133)
31472* Wno-format-zero-length:                Warning Options.    (line  147)
31473* Wno-import:                            Warning Options.    (line   76)
31474* Wno-int-to-pointer-cast:               Warning Options.    (line 1075)
31475* Wno-invalid-offsetof:                  Warning Options.    (line 1061)
31476* Wno-long-long:                         Warning Options.    (line 1087)
31477* Wno-multichar:                         Warning Options.    (line  928)
31478* Wno-non-template-friend:               C++ Dialect Options.
31479                                                             (line  384)
31480* Wno-overflow:                          Warning Options.    (line  983)
31481* Wno-pmf-conversions <1>:               Bound member functions.
31482                                                             (line   35)
31483* Wno-pmf-conversions:                   C++ Dialect Options.
31484                                                             (line  425)
31485* Wno-pointer-sign:                      Warning Options.    (line 1113)
31486* Wno-pointer-to-int-cast:               Warning Options.    (line 1079)
31487* Wno-pragmas:                           Warning Options.    (line  481)
31488* Wno-protocol:                          Objective-C and Objective-C++ Dialect Options.
31489                                                             (line  202)
31490* Wno-variadic-macros:                   Warning Options.    (line 1093)
31491* Wno-volatile-register-var:             Warning Options.    (line 1099)
31492* Wnon-virtual-dtor:                     C++ Dialect Options.
31493                                                             (line  322)
31494* Wnonnull:                              Warning Options.    (line  172)
31495* Wnormalized:                           Warning Options.    (line  934)
31496* Wold-style-cast:                       C++ Dialect Options.
31497                                                             (line  400)
31498* Wold-style-definition:                 Warning Options.    (line  867)
31499* Woverlength-strings:                   Warning Options.    (line 1141)
31500* Woverloaded-virtual:                   C++ Dialect Options.
31501                                                             (line  406)
31502* Woverride-init:                        Warning Options.    (line  986)
31503* Wp:                                    Preprocessor Options.
31504                                                             (line   13)
31505* Wpacked:                               Warning Options.    (line  994)
31506* Wpadded:                               Warning Options.    (line 1011)
31507* Wparentheses:                          Warning Options.    (line  227)
31508* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
31509* Wpointer-arith:                        Warning Options.    (line  779)
31510* Wpointer-sign:                         Warning Options.    (line 1113)
31511* Wpragmas:                              Warning Options.    (line  481)
31512* Wredundant-decls:                      Warning Options.    (line 1018)
31513* Wreorder:                              C++ Dialect Options.
31514                                                             (line  327)
31515* Wreturn-type:                          Warning Options.    (line  319)
31516* Wselector:                             Objective-C and Objective-C++ Dialect Options.
31517                                                             (line  212)
31518* Wsequence-point:                       Warning Options.    (line  273)
31519* Wshadow:                               Warning Options.    (line  765)
31520* Wsign-compare:                         Warning Options.    (line  830)
31521* Wsign-promo:                           C++ Dialect Options.
31522                                                             (line  429)
31523* Wstack-protector:                      Warning Options.    (line 1136)
31524* Wstrict-aliasing:                      Warning Options.    (line  486)
31525* Wstrict-aliasing=2:                    Warning Options.    (line  493)
31526* Wstrict-null-sentinel:                 C++ Dialect Options.
31527                                                             (line  377)
31528* Wstrict-overflow:                      Warning Options.    (line  502)
31529* Wstrict-prototypes:                    Warning Options.    (line  861)
31530* Wstrict-selector-match:                Objective-C and Objective-C++ Dialect Options.
31531                                                             (line  224)
31532* Wswitch:                               Warning Options.    (line  338)
31533* Wswitch-enum:                          Warning Options.    (line  349)
31534* Wswitch-switch:                        Warning Options.    (line  346)
31535* Wsystem-headers <1>:                   Preprocessor Options.
31536                                                             (line  153)
31537* Wsystem-headers:                       Warning Options.    (line  648)
31538* Wtraditional <1>:                      Preprocessor Options.
31539                                                             (line  103)
31540* Wtraditional:                          Warning Options.    (line  674)
31541* Wtrigraphs <1>:                        Preprocessor Options.
31542                                                             (line   91)
31543* Wtrigraphs:                            Warning Options.    (line  355)
31544* Wundeclared-selector:                  Objective-C and Objective-C++ Dialect Options.
31545                                                             (line  232)
31546* Wundef <1>:                            Preprocessor Options.
31547                                                             (line  112)
31548* Wundef:                                Warning Options.    (line  758)
31549* Wuninitialized:                        Warning Options.    (line  400)
31550* Wunknown-pragmas:                      Warning Options.    (line  474)
31551* Wunreachable-code:                     Warning Options.    (line 1026)
31552* Wunsafe-loop-optimizations:            Warning Options.    (line  773)
31553* Wunused:                               Warning Options.    (line  393)
31554* Wunused-function:                      Warning Options.    (line  360)
31555* Wunused-label:                         Warning Options.    (line  365)
31556* Wunused-macros:                        Preprocessor Options.
31557                                                             (line  117)
31558* Wunused-parameter:                     Warning Options.    (line  372)
31559* Wunused-value:                         Warning Options.    (line  387)
31560* Wunused-variable:                      Warning Options.    (line  379)
31561* Wvariadic-macros:                      Warning Options.    (line 1093)
31562* Wvolatile-register-var:                Warning Options.    (line 1099)
31563* Wwrite-strings:                        Warning Options.    (line  805)
31564* x <1>:                                 Preprocessor Options.
31565                                                             (line  308)
31566* x:                                     Overall Options.    (line  109)
31567* Xassembler:                            Assembler Options.  (line   13)
31568* Xlinker:                               Link Options.       (line  163)
31569* Ym:                                    System V Options.   (line   26)
31570* YP:                                    System V Options.   (line   22)
31571
31572
31573File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
31574
31575Keyword Index
31576*************
31577
31578�[index�]
31579* Menu:
31580
31581* ! in constraint:                       Multi-Alternative.  (line   33)
31582* # in constraint:                       Modifiers.          (line   57)
31583* #pragma:                               Pragmas.            (line    6)
31584* #pragma implementation:                C++ Interface.      (line   39)
31585* #pragma implementation, implied:       C++ Interface.      (line   46)
31586* #pragma interface:                     C++ Interface.      (line   20)
31587* #pragma, reason for not using:         Function Attributes.
31588                                                             (line  916)
31589* $:                                     Dollar Signs.       (line    6)
31590* % in constraint:                       Modifiers.          (line   45)
31591* %include:                              Spec Files.         (line   27)
31592* %include_noerr:                        Spec Files.         (line   31)
31593* %rename:                               Spec Files.         (line   35)
31594* & in constraint:                       Modifiers.          (line   25)
31595* ':                                     Incompatibilities.  (line  116)
31596* * in constraint:                       Modifiers.          (line   62)
31597* + in constraint:                       Modifiers.          (line   12)
31598* -lgcc, use with -nodefaultlibs:        Link Options.       (line   79)
31599* -lgcc, use with -nostdlib:             Link Options.       (line   79)
31600* -nodefaultlibs and unresolved references: Link Options.    (line   79)
31601* -nostdlib and unresolved references:   Link Options.       (line   79)
31602* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
31603                                                             (line  607)
31604* //:                                    C++ Comments.       (line    6)
31605* 0 in constraint:                       Simple Constraints. (line  115)
31606* < in constraint:                       Simple Constraints. (line   46)
31607* = in constraint:                       Modifiers.          (line    8)
31608* > in constraint:                       Simple Constraints. (line   50)
31609* ? in constraint:                       Multi-Alternative.  (line   27)
31610* ?: extensions:                         Conditionals.       (line    6)
31611* ?: side effect:                        Conditionals.       (line   20)
31612* _ in variables in macros:              Typeof.             (line   42)
31613* __builtin___fprintf_chk:               Object Size Checking.
31614                                                             (line    6)
31615* __builtin___memcpy_chk:                Object Size Checking.
31616                                                             (line    6)
31617* __builtin___memmove_chk:               Object Size Checking.
31618                                                             (line    6)
31619* __builtin___mempcpy_chk:               Object Size Checking.
31620                                                             (line    6)
31621* __builtin___memset_chk:                Object Size Checking.
31622                                                             (line    6)
31623* __builtin___printf_chk:                Object Size Checking.
31624                                                             (line    6)
31625* __builtin___snprintf_chk:              Object Size Checking.
31626                                                             (line    6)
31627* __builtin___sprintf_chk:               Object Size Checking.
31628                                                             (line    6)
31629* __builtin___stpcpy_chk:                Object Size Checking.
31630                                                             (line    6)
31631* __builtin___strcat_chk:                Object Size Checking.
31632                                                             (line    6)
31633* __builtin___strcpy_chk:                Object Size Checking.
31634                                                             (line    6)
31635* __builtin___strncat_chk:               Object Size Checking.
31636                                                             (line    6)
31637* __builtin___strncpy_chk:               Object Size Checking.
31638                                                             (line    6)
31639* __builtin___vfprintf_chk:              Object Size Checking.
31640                                                             (line    6)
31641* __builtin___vprintf_chk:               Object Size Checking.
31642                                                             (line    6)
31643* __builtin___vsnprintf_chk:             Object Size Checking.
31644                                                             (line    6)
31645* __builtin___vsprintf_chk:              Object Size Checking.
31646                                                             (line    6)
31647* __builtin_apply:                       Constructing Calls. (line   31)
31648* __builtin_apply_args:                  Constructing Calls. (line   20)
31649* __builtin_choose_expr:                 Other Builtins.     (line  150)
31650* __builtin_clz:                         Other Builtins.     (line  383)
31651* __builtin_clzl:                        Other Builtins.     (line  401)
31652* __builtin_clzll:                       Other Builtins.     (line  421)
31653* __builtin_constant_p:                  Other Builtins.     (line  190)
31654* __builtin_ctz:                         Other Builtins.     (line  387)
31655* __builtin_ctzl:                        Other Builtins.     (line  405)
31656* __builtin_ctzll:                       Other Builtins.     (line  425)
31657* __builtin_expect:                      Other Builtins.     (line  236)
31658* __builtin_ffs:                         Other Builtins.     (line  379)
31659* __builtin_ffsl:                        Other Builtins.     (line  397)
31660* __builtin_ffsll:                       Other Builtins.     (line  417)
31661* __builtin_frame_address:               Return Address.     (line   34)
31662* __builtin_huge_val:                    Other Builtins.     (line  300)
31663* __builtin_huge_valf:                   Other Builtins.     (line  305)
31664* __builtin_huge_vall:                   Other Builtins.     (line  308)
31665* __builtin_inf:                         Other Builtins.     (line  312)
31666* __builtin_infd128:                     Other Builtins.     (line  322)
31667* __builtin_infd32:                      Other Builtins.     (line  316)
31668* __builtin_infd64:                      Other Builtins.     (line  319)
31669* __builtin_inff:                        Other Builtins.     (line  326)
31670* __builtin_infl:                        Other Builtins.     (line  331)
31671* __builtin_isgreater:                   Other Builtins.     (line    6)
31672* __builtin_isgreaterequal:              Other Builtins.     (line    6)
31673* __builtin_isless:                      Other Builtins.     (line    6)
31674* __builtin_islessequal:                 Other Builtins.     (line    6)
31675* __builtin_islessgreater:               Other Builtins.     (line    6)
31676* __builtin_isunordered:                 Other Builtins.     (line    6)
31677* __builtin_nan:                         Other Builtins.     (line  335)
31678* __builtin_nand128:                     Other Builtins.     (line  357)
31679* __builtin_nand32:                      Other Builtins.     (line  351)
31680* __builtin_nand64:                      Other Builtins.     (line  354)
31681* __builtin_nanf:                        Other Builtins.     (line  361)
31682* __builtin_nanl:                        Other Builtins.     (line  364)
31683* __builtin_nans:                        Other Builtins.     (line  368)
31684* __builtin_nansf:                       Other Builtins.     (line  372)
31685* __builtin_nansl:                       Other Builtins.     (line  375)
31686* __builtin_object_size:                 Object Size Checking.
31687                                                             (line    6)
31688* __builtin_offsetof:                    Offsetof.           (line    6)
31689* __builtin_parity:                      Other Builtins.     (line  394)
31690* __builtin_parityl:                     Other Builtins.     (line  413)
31691* __builtin_parityll:                    Other Builtins.     (line  433)
31692* __builtin_popcount:                    Other Builtins.     (line  391)
31693* __builtin_popcountl:                   Other Builtins.     (line  409)
31694* __builtin_popcountll:                  Other Builtins.     (line  429)
31695* __builtin_powi:                        Other Builtins.     (line    6)
31696* __builtin_powif:                       Other Builtins.     (line    6)
31697* __builtin_powil:                       Other Builtins.     (line    6)
31698* __builtin_prefetch:                    Other Builtins.     (line  261)
31699* __builtin_return:                      Constructing Calls. (line   48)
31700* __builtin_return_address:              Return Address.     (line   11)
31701* __builtin_types_compatible_p:          Other Builtins.     (line  104)
31702* __complex__ keyword:                   Complex.            (line    6)
31703* __declspec(dllexport):                 Function Attributes.
31704                                                             (line  161)
31705* __declspec(dllimport):                 Function Attributes.
31706                                                             (line  193)
31707* __extension__:                         Alternate Keywords. (line   29)
31708* __func__ identifier:                   Function Names.     (line    6)
31709* __FUNCTION__ identifier:               Function Names.     (line    6)
31710* __imag__ keyword:                      Complex.            (line   27)
31711* __PRETTY_FUNCTION__ identifier:        Function Names.     (line    6)
31712* __real__ keyword:                      Complex.            (line   27)
31713* __STDC_HOSTED__:                       Standards.          (line    6)
31714* __sync_add_and_fetch:                  Atomic Builtins.    (line   57)
31715* __sync_and_and_fetch:                  Atomic Builtins.    (line   57)
31716* __sync_bool_compare_and_swap:          Atomic Builtins.    (line   65)
31717* __sync_fetch_and_add:                  Atomic Builtins.    (line   45)
31718* __sync_fetch_and_and:                  Atomic Builtins.    (line   45)
31719* __sync_fetch_and_nand:                 Atomic Builtins.    (line   45)
31720* __sync_fetch_and_or:                   Atomic Builtins.    (line   45)
31721* __sync_fetch_and_sub:                  Atomic Builtins.    (line   45)
31722* __sync_fetch_and_xor:                  Atomic Builtins.    (line   45)
31723* __sync_lock_release:                   Atomic Builtins.    (line   95)
31724* __sync_lock_test_and_set:              Atomic Builtins.    (line   77)
31725* __sync_nand_and_fetch:                 Atomic Builtins.    (line   57)
31726* __sync_or_and_fetch:                   Atomic Builtins.    (line   57)
31727* __sync_sub_and_fetch:                  Atomic Builtins.    (line   57)
31728* __sync_synchronize:                    Atomic Builtins.    (line   74)
31729* __sync_val_compare_and_swap:           Atomic Builtins.    (line   65)
31730* __sync_xor_and_fetch:                  Atomic Builtins.    (line   57)
31731* __thread:                              Thread-Local.       (line    6)
31732* _Complex keyword:                      Complex.            (line    6)
31733* _Decimal128 data type:                 Decimal Float.      (line    6)
31734* _Decimal32 data type:                  Decimal Float.      (line    6)
31735* _Decimal64 data type:                  Decimal Float.      (line    6)
31736* _exit:                                 Other Builtins.     (line    6)
31737* _Exit:                                 Other Builtins.     (line    6)
31738* ABI:                                   Compatibility.      (line    6)
31739* abort:                                 Other Builtins.     (line    6)
31740* abs:                                   Other Builtins.     (line    6)
31741* accessing volatiles:                   Volatiles.          (line    6)
31742* acos:                                  Other Builtins.     (line    6)
31743* acosf:                                 Other Builtins.     (line    6)
31744* acosh:                                 Other Builtins.     (line    6)
31745* acoshf:                                Other Builtins.     (line    6)
31746* acoshl:                                Other Builtins.     (line    6)
31747* acosl:                                 Other Builtins.     (line    6)
31748* Ada:                                   G++ and GCC.        (line    6)
31749* address constraints:                   Simple Constraints. (line  142)
31750* address of a label:                    Labels as Values.   (line    6)
31751* address_operand:                       Simple Constraints. (line  146)
31752* alias attribute:                       Function Attributes.
31753                                                             (line   33)
31754* aliasing of parameters:                Code Gen Options.   (line  332)
31755* aligned attribute <1>:                 Type Attributes.    (line   30)
31756* aligned attribute:                     Variable Attributes.
31757                                                             (line   23)
31758* alignment:                             Alignment.          (line    6)
31759* alloca:                                Other Builtins.     (line    6)
31760* alloca vs variable-length arrays:      Variable Length.    (line   27)
31761* Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
31762                                                             (line  497)
31763* alternate keywords:                    Alternate Keywords. (line    6)
31764* always_inline function attribute:      Function Attributes.
31765                                                             (line   46)
31766* AMD x86-64 Options:                    i386 and x86-64 Options.
31767                                                             (line    6)
31768* AMD1:                                  Standards.          (line    6)
31769* ANSI C:                                Standards.          (line    6)
31770* ANSI C standard:                       Standards.          (line    6)
31771* ANSI C89:                              Standards.          (line    6)
31772* ANSI support:                          C Dialect Options.  (line   10)
31773* ANSI X3.159-1989:                      Standards.          (line    6)
31774* apostrophes:                           Incompatibilities.  (line  116)
31775* application binary interface:          Compatibility.      (line    6)
31776* ARC Options:                           ARC Options.        (line    6)
31777* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
31778                                                             (line    6)
31779* ARM options:                           ARM Options.        (line    6)
31780* arrays of length zero:                 Zero Length.        (line    6)
31781* arrays of variable length:             Variable Length.    (line    6)
31782* arrays, non-lvalue:                    Subscripting.       (line    6)
31783* asin:                                  Other Builtins.     (line    6)
31784* asinf:                                 Other Builtins.     (line    6)
31785* asinh:                                 Other Builtins.     (line    6)
31786* asinhf:                                Other Builtins.     (line    6)
31787* asinhl:                                Other Builtins.     (line    6)
31788* asinl:                                 Other Builtins.     (line    6)
31789* asm constraints:                       Constraints.        (line    6)
31790* asm expressions:                       Extended Asm.       (line    6)
31791* assembler instructions:                Extended Asm.       (line    6)
31792* assembler names for identifiers:       Asm Labels.         (line    6)
31793* assembly code, invalid:                Bug Criteria.       (line   12)
31794* atan:                                  Other Builtins.     (line    6)
31795* atan2:                                 Other Builtins.     (line    6)
31796* atan2f:                                Other Builtins.     (line    6)
31797* atan2l:                                Other Builtins.     (line    6)
31798* atanf:                                 Other Builtins.     (line    6)
31799* atanh:                                 Other Builtins.     (line    6)
31800* atanhf:                                Other Builtins.     (line    6)
31801* atanhl:                                Other Builtins.     (line    6)
31802* atanl:                                 Other Builtins.     (line    6)
31803* attribute of types:                    Type Attributes.    (line    6)
31804* attribute of variables:                Variable Attributes.
31805                                                             (line    6)
31806* attribute syntax:                      Attribute Syntax.   (line    6)
31807* autoincrement/decrement addressing:    Simple Constraints. (line   28)
31808* automatic inline for C++ member fns:   Inline.             (line   53)
31809* AVR Options:                           AVR Options.        (line    6)
31810* Backwards Compatibility:               Backwards Compatibility.
31811                                                             (line    6)
31812* base class members:                    Name lookup.        (line    6)
31813* bcmp:                                  Other Builtins.     (line    6)
31814* below100 attribute:                    Variable Attributes.
31815                                                             (line  449)
31816* binary compatibility:                  Compatibility.      (line    6)
31817* Blackfin Options:                      Blackfin Options.   (line    6)
31818* bound pointer to member function:      Bound member functions.
31819                                                             (line    6)
31820* bounds checking:                       Optimize Options.   (line  333)
31821* bug criteria:                          Bug Criteria.       (line    6)
31822* bugs:                                  Bugs.               (line    6)
31823* bugs, known:                           Trouble.            (line    6)
31824* built-in functions <1>:                Other Builtins.     (line    6)
31825* built-in functions:                    C Dialect Options.  (line  149)
31826* bzero:                                 Other Builtins.     (line    6)
31827* C compilation options:                 Invoking GCC.       (line   17)
31828* C intermediate output, nonexistent:    G++ and GCC.        (line   35)
31829* C language extensions:                 C Extensions.       (line    6)
31830* C language, traditional:               C Dialect Options.  (line  227)
31831* C standard:                            Standards.          (line    6)
31832* C standards:                           Standards.          (line    6)
31833* c++:                                   Invoking G++.       (line   13)
31834* C++:                                   G++ and GCC.        (line   30)
31835* C++ comments:                          C++ Comments.       (line    6)
31836* C++ compilation options:               Invoking GCC.       (line   23)
31837* C++ interface and implementation headers: C++ Interface.   (line    6)
31838* C++ language extensions:               C++ Extensions.     (line    6)
31839* C++ member fns, automatically inline:  Inline.             (line   53)
31840* C++ misunderstandings:                 C++ Misunderstandings.
31841                                                             (line    6)
31842* C++ options, command line:             C++ Dialect Options.
31843                                                             (line    6)
31844* C++ pragmas, effect on inlining:       C++ Interface.      (line   66)
31845* C++ source file suffixes:              Invoking G++.       (line    6)
31846* C++ static data, declaring and defining: Static Definitions.
31847                                                             (line    6)
31848* C89:                                   Standards.          (line    6)
31849* C90:                                   Standards.          (line    6)
31850* C94:                                   Standards.          (line    6)
31851* C95:                                   Standards.          (line    6)
31852* C99:                                   Standards.          (line    6)
31853* C9X:                                   Standards.          (line    6)
31854* C_INCLUDE_PATH:                        Environment Variables.
31855                                                             (line  124)
31856* cabs:                                  Other Builtins.     (line    6)
31857* cabsf:                                 Other Builtins.     (line    6)
31858* cabsl:                                 Other Builtins.     (line    6)
31859* cacos:                                 Other Builtins.     (line    6)
31860* cacosf:                                Other Builtins.     (line    6)
31861* cacosh:                                Other Builtins.     (line    6)
31862* cacoshf:                               Other Builtins.     (line    6)
31863* cacoshl:                               Other Builtins.     (line    6)
31864* cacosl:                                Other Builtins.     (line    6)
31865* calling functions through the function vector on the H8/300 processors: Function Attributes.
31866                                                             (line  373)
31867* calloc:                                Other Builtins.     (line    6)
31868* carg:                                  Other Builtins.     (line    6)
31869* cargf:                                 Other Builtins.     (line    6)
31870* cargl:                                 Other Builtins.     (line    6)
31871* case labels in initializers:           Designated Inits.   (line    6)
31872* case ranges:                           Case Ranges.        (line    6)
31873* casin:                                 Other Builtins.     (line    6)
31874* casinf:                                Other Builtins.     (line    6)
31875* casinh:                                Other Builtins.     (line    6)
31876* casinhf:                               Other Builtins.     (line    6)
31877* casinhl:                               Other Builtins.     (line    6)
31878* casinl:                                Other Builtins.     (line    6)
31879* cast to a union:                       Cast to Union.      (line    6)
31880* catan:                                 Other Builtins.     (line    6)
31881* catanf:                                Other Builtins.     (line    6)
31882* catanh:                                Other Builtins.     (line    6)
31883* catanhf:                               Other Builtins.     (line    6)
31884* catanhl:                               Other Builtins.     (line    6)
31885* catanl:                                Other Builtins.     (line    6)
31886* cbrt:                                  Other Builtins.     (line    6)
31887* cbrtf:                                 Other Builtins.     (line    6)
31888* cbrtl:                                 Other Builtins.     (line    6)
31889* ccos:                                  Other Builtins.     (line    6)
31890* ccosf:                                 Other Builtins.     (line    6)
31891* ccosh:                                 Other Builtins.     (line    6)
31892* ccoshf:                                Other Builtins.     (line    6)
31893* ccoshl:                                Other Builtins.     (line    6)
31894* ccosl:                                 Other Builtins.     (line    6)
31895* ceil:                                  Other Builtins.     (line    6)
31896* ceilf:                                 Other Builtins.     (line    6)
31897* ceill:                                 Other Builtins.     (line    6)
31898* cexp:                                  Other Builtins.     (line    6)
31899* cexpf:                                 Other Builtins.     (line    6)
31900* cexpl:                                 Other Builtins.     (line    6)
31901* character set, execution:              Preprocessor Options.
31902                                                             (line  467)
31903* character set, input:                  Preprocessor Options.
31904                                                             (line  480)
31905* character set, input normalization:    Warning Options.    (line  934)
31906* character set, wide execution:         Preprocessor Options.
31907                                                             (line  472)
31908* cimag:                                 Other Builtins.     (line    6)
31909* cimagf:                                Other Builtins.     (line    6)
31910* cimagl:                                Other Builtins.     (line    6)
31911* cleanup attribute:                     Variable Attributes.
31912                                                             (line   76)
31913* clog:                                  Other Builtins.     (line    6)
31914* clogf:                                 Other Builtins.     (line    6)
31915* clogl:                                 Other Builtins.     (line    6)
31916* COBOL:                                 G++ and GCC.        (line   23)
31917* code generation conventions:           Code Gen Options.   (line    6)
31918* code, mixed with declarations:         Mixed Declarations. (line    6)
31919* command options:                       Invoking GCC.       (line    6)
31920* comments, C++ style:                   C++ Comments.       (line    6)
31921* common attribute:                      Variable Attributes.
31922                                                             (line   92)
31923* comparison of signed and unsigned values, warning: Warning Options.
31924                                                             (line  830)
31925* compiler bugs, reporting:              Bug Reporting.      (line    6)
31926* compiler compared to C++ preprocessor: G++ and GCC.        (line   35)
31927* compiler options, C++:                 C++ Dialect Options.
31928                                                             (line    6)
31929* compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
31930                                                             (line    6)
31931* compiler version, specifying:          Target Options.     (line    6)
31932* COMPILER_PATH:                         Environment Variables.
31933                                                             (line   85)
31934* complex conjugation:                   Complex.            (line   34)
31935* complex numbers:                       Complex.            (line    6)
31936* compound literals:                     Compound Literals.  (line    6)
31937* computed gotos:                        Labels as Values.   (line    6)
31938* conditional expressions, extensions:   Conditionals.       (line    6)
31939* conflicting types:                     Disappointments.    (line   21)
31940* conj:                                  Other Builtins.     (line    6)
31941* conjf:                                 Other Builtins.     (line    6)
31942* conjl:                                 Other Builtins.     (line    6)
31943* const applied to function:             Function Attributes.
31944                                                             (line    6)
31945* const function attribute:              Function Attributes.
31946                                                             (line  106)
31947* constants in constraints:              Simple Constraints. (line   58)
31948* constraint modifier characters:        Modifiers.          (line    6)
31949* constraint, matching:                  Simple Constraints. (line  127)
31950* constraints, asm:                      Constraints.        (line    6)
31951* constraints, machine specific:         Machine Constraints.
31952                                                             (line    6)
31953* constructing calls:                    Constructing Calls. (line    6)
31954* constructor expressions:               Compound Literals.  (line    6)
31955* constructor function attribute:        Function Attributes.
31956                                                             (line  132)
31957* contributors:                          Contributors.       (line    6)
31958* copysign:                              Other Builtins.     (line    6)
31959* copysignf:                             Other Builtins.     (line    6)
31960* copysignl:                             Other Builtins.     (line    6)
31961* core dump:                             Bug Criteria.       (line    9)
31962* cos:                                   Other Builtins.     (line    6)
31963* cosf:                                  Other Builtins.     (line    6)
31964* cosh:                                  Other Builtins.     (line    6)
31965* coshf:                                 Other Builtins.     (line    6)
31966* coshl:                                 Other Builtins.     (line    6)
31967* cosl:                                  Other Builtins.     (line    6)
31968* CPATH:                                 Environment Variables.
31969                                                             (line  123)
31970* CPLUS_INCLUDE_PATH:                    Environment Variables.
31971                                                             (line  125)
31972* cpow:                                  Other Builtins.     (line    6)
31973* cpowf:                                 Other Builtins.     (line    6)
31974* cpowl:                                 Other Builtins.     (line    6)
31975* cproj:                                 Other Builtins.     (line    6)
31976* cprojf:                                Other Builtins.     (line    6)
31977* cprojl:                                Other Builtins.     (line    6)
31978* creal:                                 Other Builtins.     (line    6)
31979* crealf:                                Other Builtins.     (line    6)
31980* creall:                                Other Builtins.     (line    6)
31981* CRIS Options:                          CRIS Options.       (line    6)
31982* cross compiling:                       Target Options.     (line    6)
31983* CRX Options:                           CRX Options.        (line    6)
31984* csin:                                  Other Builtins.     (line    6)
31985* csinf:                                 Other Builtins.     (line    6)
31986* csinh:                                 Other Builtins.     (line    6)
31987* csinhf:                                Other Builtins.     (line    6)
31988* csinhl:                                Other Builtins.     (line    6)
31989* csinl:                                 Other Builtins.     (line    6)
31990* csqrt:                                 Other Builtins.     (line    6)
31991* csqrtf:                                Other Builtins.     (line    6)
31992* csqrtl:                                Other Builtins.     (line    6)
31993* ctan:                                  Other Builtins.     (line    6)
31994* ctanf:                                 Other Builtins.     (line    6)
31995* ctanh:                                 Other Builtins.     (line    6)
31996* ctanhf:                                Other Builtins.     (line    6)
31997* ctanhl:                                Other Builtins.     (line    6)
31998* ctanl:                                 Other Builtins.     (line    6)
31999* Darwin options:                        Darwin Options.     (line    6)
32000* dcgettext:                             Other Builtins.     (line    6)
32001* DD integer suffix:                     Decimal Float.      (line    6)
32002* dd integer suffix:                     Decimal Float.      (line    6)
32003* deallocating variable length arrays:   Variable Length.    (line   23)
32004* debugging information options:         Debugging Options.  (line    6)
32005* decimal floating types:                Decimal Float.      (line    6)
32006* declaration scope:                     Incompatibilities.  (line   80)
32007* declarations inside expressions:       Statement Exprs.    (line    6)
32008* declarations, mixed with code:         Mixed Declarations. (line    6)
32009* declaring attributes of functions:     Function Attributes.
32010                                                             (line    6)
32011* declaring static data in C++:          Static Definitions. (line    6)
32012* defining static data in C++:           Static Definitions. (line    6)
32013* dependencies for make as output:       Environment Variables.
32014                                                             (line  151)
32015* dependencies, make:                    Preprocessor Options.
32016                                                             (line  173)
32017* DEPENDENCIES_OUTPUT:                   Environment Variables.
32018                                                             (line  150)
32019* dependent name lookup:                 Name lookup.        (line    6)
32020* deprecated attribute:                  Variable Attributes.
32021                                                             (line  100)
32022* deprecated attribute.:                 Function Attributes.
32023                                                             (line  143)
32024* designated initializers:               Designated Inits.   (line    6)
32025* designator lists:                      Designated Inits.   (line   94)
32026* designators:                           Designated Inits.   (line   61)
32027* destructor function attribute:         Function Attributes.
32028                                                             (line  132)
32029* DF integer suffix:                     Decimal Float.      (line    6)
32030* df integer suffix:                     Decimal Float.      (line    6)
32031* dgettext:                              Other Builtins.     (line    6)
32032* diagnostic messages:                   Language Independent Options.
32033                                                             (line    6)
32034* dialect options:                       C Dialect Options.  (line    6)
32035* digits in constraint:                  Simple Constraints. (line  115)
32036* directory options:                     Directory Options.  (line    6)
32037* DL integer suffix:                     Decimal Float.      (line    6)
32038* dl integer suffix:                     Decimal Float.      (line    6)
32039* dollar signs in identifier names:      Dollar Signs.       (line    6)
32040* double-word arithmetic:                Long Long.          (line    6)
32041* downward funargs:                      Nested Functions.   (line    6)
32042* drem:                                  Other Builtins.     (line    6)
32043* dremf:                                 Other Builtins.     (line    6)
32044* dreml:                                 Other Builtins.     (line    6)
32045* E in constraint:                       Simple Constraints. (line   77)
32046* earlyclobber operand:                  Modifiers.          (line   25)
32047* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
32048                                                             (line  240)
32049* empty structures:                      Empty Structures.   (line    6)
32050* environment variables:                 Environment Variables.
32051                                                             (line    6)
32052* erf:                                   Other Builtins.     (line    6)
32053* erfc:                                  Other Builtins.     (line    6)
32054* erfcf:                                 Other Builtins.     (line    6)
32055* erfcl:                                 Other Builtins.     (line    6)
32056* erff:                                  Other Builtins.     (line    6)
32057* erfl:                                  Other Builtins.     (line    6)
32058* error messages:                        Warnings and Errors.
32059                                                             (line    6)
32060* escaped newlines:                      Escaped Newlines.   (line    6)
32061* exception handler functions on the Blackfin processor: Function Attributes.
32062                                                             (line  250)
32063* exclamation point:                     Multi-Alternative.  (line   33)
32064* exit:                                  Other Builtins.     (line    6)
32065* exp:                                   Other Builtins.     (line    6)
32066* exp10:                                 Other Builtins.     (line    6)
32067* exp10f:                                Other Builtins.     (line    6)
32068* exp10l:                                Other Builtins.     (line    6)
32069* exp2:                                  Other Builtins.     (line    6)
32070* exp2f:                                 Other Builtins.     (line    6)
32071* exp2l:                                 Other Builtins.     (line    6)
32072* expf:                                  Other Builtins.     (line    6)
32073* expl:                                  Other Builtins.     (line    6)
32074* explicit register variables:           Explicit Reg Vars.  (line    6)
32075* expm1:                                 Other Builtins.     (line    6)
32076* expm1f:                                Other Builtins.     (line    6)
32077* expm1l:                                Other Builtins.     (line    6)
32078* expressions containing statements:     Statement Exprs.    (line    6)
32079* expressions, constructor:              Compound Literals.  (line    6)
32080* extended asm:                          Extended Asm.       (line    6)
32081* extensible constraints:                Simple Constraints. (line  151)
32082* extensions, ?::                        Conditionals.       (line    6)
32083* extensions, C language:                C Extensions.       (line    6)
32084* extensions, C++ language:              C++ Extensions.     (line    6)
32085* external declaration scope:            Incompatibilities.  (line   80)
32086* externally_visible attribute.:         Function Attributes.
32087                                                             (line  907)
32088* F in constraint:                       Simple Constraints. (line   82)
32089* fabs:                                  Other Builtins.     (line    6)
32090* fabsf:                                 Other Builtins.     (line    6)
32091* fabsl:                                 Other Builtins.     (line    6)
32092* fatal signal:                          Bug Criteria.       (line    9)
32093* fdim:                                  Other Builtins.     (line    6)
32094* fdimf:                                 Other Builtins.     (line    6)
32095* fdiml:                                 Other Builtins.     (line    6)
32096* FDL, GNU Free Documentation License:   GNU Free Documentation License.
32097                                                             (line    6)
32098* ffs:                                   Other Builtins.     (line    6)
32099* file name suffix:                      Overall Options.    (line   14)
32100* file names:                            Link Options.       (line   10)
32101* flatten function attribute:            Function Attributes.
32102                                                             (line   91)
32103* flexible array members:                Zero Length.        (line    6)
32104* float as function value type:          Incompatibilities.  (line  141)
32105* floating point precision <1>:          Disappointments.    (line   68)
32106* floating point precision:              Optimize Options.   (line 1060)
32107* floor:                                 Other Builtins.     (line    6)
32108* floorf:                                Other Builtins.     (line    6)
32109* floorl:                                Other Builtins.     (line    6)
32110* fma:                                   Other Builtins.     (line    6)
32111* fmaf:                                  Other Builtins.     (line    6)
32112* fmal:                                  Other Builtins.     (line    6)
32113* fmax:                                  Other Builtins.     (line    6)
32114* fmaxf:                                 Other Builtins.     (line    6)
32115* fmaxl:                                 Other Builtins.     (line    6)
32116* fmin:                                  Other Builtins.     (line    6)
32117* fminf:                                 Other Builtins.     (line    6)
32118* fminl:                                 Other Builtins.     (line    6)
32119* fmod:                                  Other Builtins.     (line    6)
32120* fmodf:                                 Other Builtins.     (line    6)
32121* fmodl:                                 Other Builtins.     (line    6)
32122* force_align_arg_pointer attribute:     Function Attributes.
32123                                                             (line  636)
32124* format function attribute:             Function Attributes.
32125                                                             (line  281)
32126* format_arg function attribute:         Function Attributes.
32127                                                             (line  334)
32128* Fortran:                               G++ and GCC.        (line    6)
32129* forwarding calls:                      Constructing Calls. (line    6)
32130* fprintf:                               Other Builtins.     (line    6)
32131* fprintf_unlocked:                      Other Builtins.     (line    6)
32132* fputs:                                 Other Builtins.     (line    6)
32133* fputs_unlocked:                        Other Builtins.     (line    6)
32134* freestanding environment:              Standards.          (line    6)
32135* freestanding implementation:           Standards.          (line    6)
32136* frexp:                                 Other Builtins.     (line    6)
32137* frexpf:                                Other Builtins.     (line    6)
32138* frexpl:                                Other Builtins.     (line    6)
32139* FRV Options:                           FRV Options.        (line    6)
32140* fscanf:                                Other Builtins.     (line    6)
32141* fscanf, and constant strings:          Incompatibilities.  (line   17)
32142* function addressability on the M32R/D: Function Attributes.
32143                                                             (line  457)
32144* function attributes:                   Function Attributes.
32145                                                             (line    6)
32146* function pointers, arithmetic:         Pointer Arith.      (line    6)
32147* function prototype declarations:       Function Prototypes.
32148                                                             (line    6)
32149* function without a prologue/epilogue code: Function Attributes.
32150                                                             (line  485)
32151* function, size of pointer to:          Pointer Arith.      (line    6)
32152* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
32153                                                             (line  428)
32154* functions in arbitrary sections:       Function Attributes.
32155                                                             (line    6)
32156* functions that are passed arguments in registers on the 386: Function Attributes.
32157                                                             (line    6)
32158* functions that behave like malloc:     Function Attributes.
32159                                                             (line    6)
32160* functions that do not pop the argument stack on the 386: Function Attributes.
32161                                                             (line    6)
32162* functions that do pop the argument stack on the 386: Function Attributes.
32163                                                             (line  100)
32164* functions that have no side effects:   Function Attributes.
32165                                                             (line    6)
32166* functions that never return:           Function Attributes.
32167                                                             (line    6)
32168* functions that pop the argument stack on the 386: Function Attributes.
32169                                                             (line    6)
32170* functions that return more than once:  Function Attributes.
32171                                                             (line    6)
32172* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
32173                                                             (line  491)
32174* functions which handle memory bank switching: Function Attributes.
32175                                                             (line  256)
32176* functions with non-null pointer arguments: Function Attributes.
32177                                                             (line    6)
32178* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
32179                                                             (line    6)
32180* g in constraint:                       Simple Constraints. (line  108)
32181* G in constraint:                       Simple Constraints. (line   86)
32182* g++:                                   Invoking G++.       (line   13)
32183* G++:                                   G++ and GCC.        (line   30)
32184* gamma:                                 Other Builtins.     (line    6)
32185* gammaf:                                Other Builtins.     (line    6)
32186* gammal:                                Other Builtins.     (line    6)
32187* GCC:                                   G++ and GCC.        (line    6)
32188* GCC command options:                   Invoking GCC.       (line    6)
32189* GCC_EXEC_PREFIX:                       Environment Variables.
32190                                                             (line   52)
32191* gcc_struct:                            Type Attributes.    (line  302)
32192* gcc_struct attribute:                  Variable Attributes.
32193                                                             (line  313)
32194* gcov:                                  Debugging Options.  (line  168)
32195* gettext:                               Other Builtins.     (line    6)
32196* global offset table:                   Code Gen Options.   (line  163)
32197* global register after longjmp:         Global Reg Vars.    (line   66)
32198* global register variables:             Global Reg Vars.    (line    6)
32199* GNAT:                                  G++ and GCC.        (line   30)
32200* GNU C Compiler:                        G++ and GCC.        (line    6)
32201* GNU Compiler Collection:               G++ and GCC.        (line    6)
32202* gnu_inline function attribute:         Function Attributes.
32203                                                             (line   51)
32204* goto with computed label:              Labels as Values.   (line    6)
32205* gp-relative references (MIPS):         MIPS Options.       (line  216)
32206* gprof:                                 Debugging Options.  (line  135)
32207* grouping options:                      Invoking GCC.       (line   26)
32208* H in constraint:                       Simple Constraints. (line   86)
32209* hardware models and configurations, specifying: Submodel Options.
32210                                                             (line    6)
32211* hex floats:                            Hex Floats.         (line    6)
32212* hosted environment <1>:                C Dialect Options.  (line  183)
32213* hosted environment:                    Standards.          (line    6)
32214* hosted implementation:                 Standards.          (line    6)
32215* HPPA Options:                          HPPA Options.       (line    6)
32216* hypot:                                 Other Builtins.     (line    6)
32217* hypotf:                                Other Builtins.     (line    6)
32218* hypotl:                                Other Builtins.     (line    6)
32219* I in constraint:                       Simple Constraints. (line   69)
32220* i in constraint:                       Simple Constraints. (line   58)
32221* i386 Options:                          i386 and x86-64 Options.
32222                                                             (line    6)
32223* IA-64 Options:                         IA-64 Options.      (line    6)
32224* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
32225                                                             (line    6)
32226* identifier names, dollar signs in:     Dollar Signs.       (line    6)
32227* identifiers, names in assembler code:  Asm Labels.         (line    6)
32228* ilogb:                                 Other Builtins.     (line    6)
32229* ilogbf:                                Other Builtins.     (line    6)
32230* ilogbl:                                Other Builtins.     (line    6)
32231* imaxabs:                               Other Builtins.     (line    6)
32232* implementation-defined behavior, C language: C Implementation.
32233                                                             (line    6)
32234* implied #pragma implementation:        C++ Interface.      (line   46)
32235* incompatibilities of GCC:              Incompatibilities.  (line    6)
32236* increment operators:                   Bug Criteria.       (line   17)
32237* index:                                 Other Builtins.     (line    6)
32238* indirect calls on ARM:                 Function Attributes.
32239                                                             (line  418)
32240* indirect calls on MIPS:                Function Attributes.
32241                                                             (line  440)
32242* init_priority attribute:               C++ Attributes.     (line    9)
32243* initializations in expressions:        Compound Literals.  (line    6)
32244* initializers with labeled elements:    Designated Inits.   (line    6)
32245* initializers, non-constant:            Initializers.       (line    6)
32246* inline automatic for C++ member fns:   Inline.             (line   53)
32247* inline functions:                      Inline.             (line    6)
32248* inline functions, omission of:         Inline.             (line   58)
32249* inlining and C++ pragmas:              C++ Interface.      (line   66)
32250* installation trouble:                  Trouble.            (line    6)
32251* integrating function code:             Inline.             (line    6)
32252* Intel 386 Options:                     i386 and x86-64 Options.
32253                                                             (line    6)
32254* interface and implementation headers, C++: C++ Interface.  (line    6)
32255* intermediate C version, nonexistent:   G++ and GCC.        (line   35)
32256* interrupt handler functions:           Function Attributes.
32257                                                             (line  384)
32258* interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
32259                                                             (line  406)
32260* introduction:                          Top.                (line    6)
32261* invalid assembly code:                 Bug Criteria.       (line   12)
32262* invalid input:                         Bug Criteria.       (line   42)
32263* invoking g++:                          Invoking G++.       (line   21)
32264* isalnum:                               Other Builtins.     (line    6)
32265* isalpha:                               Other Builtins.     (line    6)
32266* isascii:                               Other Builtins.     (line    6)
32267* isblank:                               Other Builtins.     (line    6)
32268* iscntrl:                               Other Builtins.     (line    6)
32269* isdigit:                               Other Builtins.     (line    6)
32270* isgraph:                               Other Builtins.     (line    6)
32271* islower:                               Other Builtins.     (line    6)
32272* ISO 9899:                              Standards.          (line    6)
32273* ISO C:                                 Standards.          (line    6)
32274* ISO C standard:                        Standards.          (line    6)
32275* ISO C90:                               Standards.          (line    6)
32276* ISO C94:                               Standards.          (line    6)
32277* ISO C95:                               Standards.          (line    6)
32278* ISO C99:                               Standards.          (line    6)
32279* ISO C9X:                               Standards.          (line    6)
32280* ISO support:                           C Dialect Options.  (line   10)
32281* ISO/IEC 9899:                          Standards.          (line    6)
32282* isprint:                               Other Builtins.     (line    6)
32283* ispunct:                               Other Builtins.     (line    6)
32284* isspace:                               Other Builtins.     (line    6)
32285* isupper:                               Other Builtins.     (line    6)
32286* iswalnum:                              Other Builtins.     (line    6)
32287* iswalpha:                              Other Builtins.     (line    6)
32288* iswblank:                              Other Builtins.     (line    6)
32289* iswcntrl:                              Other Builtins.     (line    6)
32290* iswdigit:                              Other Builtins.     (line    6)
32291* iswgraph:                              Other Builtins.     (line    6)
32292* iswlower:                              Other Builtins.     (line    6)
32293* iswprint:                              Other Builtins.     (line    6)
32294* iswpunct:                              Other Builtins.     (line    6)
32295* iswspace:                              Other Builtins.     (line    6)
32296* iswupper:                              Other Builtins.     (line    6)
32297* iswxdigit:                             Other Builtins.     (line    6)
32298* isxdigit:                              Other Builtins.     (line    6)
32299* j0:                                    Other Builtins.     (line    6)
32300* j0f:                                   Other Builtins.     (line    6)
32301* j0l:                                   Other Builtins.     (line    6)
32302* j1:                                    Other Builtins.     (line    6)
32303* j1f:                                   Other Builtins.     (line    6)
32304* j1l:                                   Other Builtins.     (line    6)
32305* Java:                                  G++ and GCC.        (line    6)
32306* java_interface attribute:              C++ Attributes.     (line   29)
32307* jn:                                    Other Builtins.     (line    6)
32308* jnf:                                   Other Builtins.     (line    6)
32309* jnl:                                   Other Builtins.     (line    6)
32310* keywords, alternate:                   Alternate Keywords. (line    6)
32311* known causes of trouble:               Trouble.            (line    6)
32312* labeled elements in initializers:      Designated Inits.   (line    6)
32313* labels as values:                      Labels as Values.   (line    6)
32314* labs:                                  Other Builtins.     (line    6)
32315* LANG:                                  Environment Variables.
32316                                                             (line   21)
32317* language dialect options:              C Dialect Options.  (line    6)
32318* LC_ALL:                                Environment Variables.
32319                                                             (line   21)
32320* LC_CTYPE:                              Environment Variables.
32321                                                             (line   21)
32322* LC_MESSAGES:                           Environment Variables.
32323                                                             (line   21)
32324* ldexp:                                 Other Builtins.     (line    6)
32325* ldexpf:                                Other Builtins.     (line    6)
32326* ldexpl:                                Other Builtins.     (line    6)
32327* length-zero arrays:                    Zero Length.        (line    6)
32328* lgamma:                                Other Builtins.     (line    6)
32329* lgammaf:                               Other Builtins.     (line    6)
32330* lgammal:                               Other Builtins.     (line    6)
32331* Libraries:                             Link Options.       (line   24)
32332* LIBRARY_PATH:                          Environment Variables.
32333                                                             (line   91)
32334* link options:                          Link Options.       (line    6)
32335* LL integer suffix:                     Long Long.          (line    6)
32336* llabs:                                 Other Builtins.     (line    6)
32337* llrint:                                Other Builtins.     (line    6)
32338* llrintf:                               Other Builtins.     (line    6)
32339* llrintl:                               Other Builtins.     (line    6)
32340* llround:                               Other Builtins.     (line    6)
32341* llroundf:                              Other Builtins.     (line    6)
32342* llroundl:                              Other Builtins.     (line    6)
32343* load address instruction:              Simple Constraints. (line  142)
32344* local labels:                          Local Labels.       (line    6)
32345* local variables in macros:             Typeof.             (line   42)
32346* local variables, specifying registers: Local Reg Vars.     (line    6)
32347* locale:                                Environment Variables.
32348                                                             (line   21)
32349* locale definition:                     Environment Variables.
32350                                                             (line  100)
32351* log:                                   Other Builtins.     (line    6)
32352* log10:                                 Other Builtins.     (line    6)
32353* log10f:                                Other Builtins.     (line    6)
32354* log10l:                                Other Builtins.     (line    6)
32355* log1p:                                 Other Builtins.     (line    6)
32356* log1pf:                                Other Builtins.     (line    6)
32357* log1pl:                                Other Builtins.     (line    6)
32358* log2:                                  Other Builtins.     (line    6)
32359* log2f:                                 Other Builtins.     (line    6)
32360* log2l:                                 Other Builtins.     (line    6)
32361* logb:                                  Other Builtins.     (line    6)
32362* logbf:                                 Other Builtins.     (line    6)
32363* logbl:                                 Other Builtins.     (line    6)
32364* logf:                                  Other Builtins.     (line    6)
32365* logl:                                  Other Builtins.     (line    6)
32366* long long data types:                  Long Long.          (line    6)
32367* longjmp:                               Global Reg Vars.    (line   66)
32368* longjmp incompatibilities:             Incompatibilities.  (line   39)
32369* longjmp warnings:                      Warning Options.    (line  457)
32370* lrint:                                 Other Builtins.     (line    6)
32371* lrintf:                                Other Builtins.     (line    6)
32372* lrintl:                                Other Builtins.     (line    6)
32373* lround:                                Other Builtins.     (line    6)
32374* lroundf:                               Other Builtins.     (line    6)
32375* lroundl:                               Other Builtins.     (line    6)
32376* m in constraint:                       Simple Constraints. (line   17)
32377* M32C options:                          M32C Options.       (line    6)
32378* M32R/D options:                        M32R/D Options.     (line    6)
32379* M680x0 options:                        M680x0 Options.     (line    6)
32380* M68hc1x options:                       M68hc1x Options.    (line    6)
32381* machine dependent options:             Submodel Options.   (line    6)
32382* machine specific constraints:          Machine Constraints.
32383                                                             (line    6)
32384* macro with variable arguments:         Variadic Macros.    (line    6)
32385* macros containing asm:                 Extended Asm.       (line  239)
32386* macros, inline alternative:            Inline.             (line    6)
32387* macros, local labels:                  Local Labels.       (line    6)
32388* macros, local variables in:            Typeof.             (line   42)
32389* macros, statements in expressions:     Statement Exprs.    (line    6)
32390* macros, types of arguments:            Typeof.             (line    6)
32391* make:                                  Preprocessor Options.
32392                                                             (line  173)
32393* malloc:                                Other Builtins.     (line    6)
32394* malloc attribute:                      Function Attributes.
32395                                                             (line  447)
32396* matching constraint:                   Simple Constraints. (line  127)
32397* MCore options:                         MCore Options.      (line    6)
32398* member fns, automatically inline:      Inline.             (line   53)
32399* memcmp:                                Other Builtins.     (line    6)
32400* memcpy:                                Other Builtins.     (line    6)
32401* memory references in constraints:      Simple Constraints. (line   17)
32402* mempcpy:                               Other Builtins.     (line    6)
32403* memset:                                Other Builtins.     (line    6)
32404* Mercury:                               G++ and GCC.        (line   23)
32405* message formatting:                    Language Independent Options.
32406                                                             (line    6)
32407* messages, warning:                     Warning Options.    (line    6)
32408* messages, warning and error:           Warnings and Errors.
32409                                                             (line    6)
32410* middle-operands, omitted:              Conditionals.       (line    6)
32411* MIPS options:                          MIPS Options.       (line    6)
32412* misunderstandings in C++:              C++ Misunderstandings.
32413                                                             (line    6)
32414* mixed declarations and code:           Mixed Declarations. (line    6)
32415* mktemp, and constant strings:          Incompatibilities.  (line   13)
32416* MMIX Options:                          MMIX Options.       (line    6)
32417* MN10300 options:                       MN10300 Options.    (line    6)
32418* mode attribute:                        Variable Attributes.
32419                                                             (line  118)
32420* modf:                                  Other Builtins.     (line    6)
32421* modff:                                 Other Builtins.     (line    6)
32422* modfl:                                 Other Builtins.     (line    6)
32423* modifiers in constraints:              Modifiers.          (line    6)
32424* ms_struct:                             Type Attributes.    (line  302)
32425* ms_struct attribute:                   Variable Attributes.
32426                                                             (line  313)
32427* MT options:                            MT Options.         (line    6)
32428* mudflap:                               Optimize Options.   (line  333)
32429* multiple alternative constraints:      Multi-Alternative.  (line    6)
32430* multiprecision arithmetic:             Long Long.          (line    6)
32431* n in constraint:                       Simple Constraints. (line   63)
32432* names used in assembler code:          Asm Labels.         (line    6)
32433* naming convention, implementation headers: C++ Interface.  (line   46)
32434* nearbyint:                             Other Builtins.     (line    6)
32435* nearbyintf:                            Other Builtins.     (line    6)
32436* nearbyintl:                            Other Builtins.     (line    6)
32437* nested functions:                      Nested Functions.   (line    6)
32438* newlines (escaped):                    Escaped Newlines.   (line    6)
32439* nextafter:                             Other Builtins.     (line    6)
32440* nextafterf:                            Other Builtins.     (line    6)
32441* nextafterl:                            Other Builtins.     (line    6)
32442* nexttoward:                            Other Builtins.     (line    6)
32443* nexttowardf:                           Other Builtins.     (line    6)
32444* nexttowardl:                           Other Builtins.     (line    6)
32445* NFC:                                   Warning Options.    (line  934)
32446* NFKC:                                  Warning Options.    (line  934)
32447* NMI handler functions on the Blackfin processor: Function Attributes.
32448                                                             (line  502)
32449* no_instrument_function function attribute: Function Attributes.
32450                                                             (line  508)
32451* nocommon attribute:                    Variable Attributes.
32452                                                             (line   92)
32453* noinline function attribute:           Function Attributes.
32454                                                             (line  513)
32455* non-constant initializers:             Initializers.       (line    6)
32456* non-static inline function:            Inline.             (line   70)
32457* nonnull function attribute:            Function Attributes.
32458                                                             (line  517)
32459* noreturn function attribute:           Function Attributes.
32460                                                             (line  540)
32461* nothrow function attribute:            Function Attributes.
32462                                                             (line  582)
32463* o in constraint:                       Simple Constraints. (line   21)
32464* OBJC_INCLUDE_PATH:                     Environment Variables.
32465                                                             (line  126)
32466* Objective-C <1>:                       Standards.          (line  110)
32467* Objective-C:                           G++ and GCC.        (line    6)
32468* Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
32469                                                             (line    6)
32470* Objective-C++ <1>:                     Standards.          (line  110)
32471* Objective-C++:                         G++ and GCC.        (line    6)
32472* offsettable address:                   Simple Constraints. (line   21)
32473* old-style function definitions:        Function Prototypes.
32474                                                             (line    6)
32475* omitted middle-operands:               Conditionals.       (line    6)
32476* open coding:                           Inline.             (line    6)
32477* openmp parallel:                       C Dialect Options.  (line  200)
32478* operand constraints, asm:              Constraints.        (line    6)
32479* optimize options:                      Optimize Options.   (line    6)
32480* options to control diagnostics formatting: Language Independent Options.
32481                                                             (line    6)
32482* options to control warnings:           Warning Options.    (line    6)
32483* options, C++:                          C++ Dialect Options.
32484                                                             (line    6)
32485* options, code generation:              Code Gen Options.   (line    6)
32486* options, debugging:                    Debugging Options.  (line    6)
32487* options, dialect:                      C Dialect Options.  (line    6)
32488* options, directory search:             Directory Options.  (line    6)
32489* options, GCC command:                  Invoking GCC.       (line    6)
32490* options, grouping:                     Invoking GCC.       (line   26)
32491* options, linking:                      Link Options.       (line    6)
32492* options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
32493                                                             (line    6)
32494* options, optimization:                 Optimize Options.   (line    6)
32495* options, order:                        Invoking GCC.       (line   30)
32496* options, preprocessor:                 Preprocessor Options.
32497                                                             (line    6)
32498* order of evaluation, side effects:     Non-bugs.           (line  196)
32499* order of options:                      Invoking GCC.       (line   30)
32500* other register constraints:            Simple Constraints. (line  151)
32501* output file option:                    Overall Options.    (line  174)
32502* overloaded virtual fn, warning:        C++ Dialect Options.
32503                                                             (line  406)
32504* p in constraint:                       Simple Constraints. (line  142)
32505* packed attribute:                      Variable Attributes.
32506                                                             (line  129)
32507* parameter forward declaration:         Variable Length.    (line   60)
32508* parameters, aliased:                   Code Gen Options.   (line  332)
32509* Pascal:                                G++ and GCC.        (line   23)
32510* PDP-11 Options:                        PDP-11 Options.     (line    6)
32511* PIC:                                   Code Gen Options.   (line  163)
32512* pmf:                                   Bound member functions.
32513                                                             (line    6)
32514* pointer arguments:                     Function Attributes.
32515                                                             (line  111)
32516* pointer to member function:            Bound member functions.
32517                                                             (line    6)
32518* portions of temporary objects, pointers to: Temporaries.   (line    6)
32519* pow:                                   Other Builtins.     (line    6)
32520* pow10:                                 Other Builtins.     (line    6)
32521* pow10f:                                Other Builtins.     (line    6)
32522* pow10l:                                Other Builtins.     (line    6)
32523* PowerPC options:                       PowerPC Options.    (line    6)
32524* powf:                                  Other Builtins.     (line    6)
32525* powl:                                  Other Builtins.     (line    6)
32526* pragma, align:                         Solaris Pragmas.    (line   11)
32527* pragma, diagnostic:                    Diagnostic Pragmas. (line   14)
32528* pragma, extern_prefix:                 Symbol-Renaming Pragmas.
32529                                                             (line   19)
32530* pragma, fini:                          Solaris Pragmas.    (line   19)
32531* pragma, init:                          Solaris Pragmas.    (line   24)
32532* pragma, long_calls:                    ARM Pragmas.        (line   11)
32533* pragma, long_calls_off:                ARM Pragmas.        (line   17)
32534* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
32535                                                             (line   14)
32536* pragma, mark:                          Darwin Pragmas.     (line   11)
32537* pragma, memregs:                       M32C Pragmas.       (line    7)
32538* pragma, no_long_calls:                 ARM Pragmas.        (line   14)
32539* pragma, options align:                 Darwin Pragmas.     (line   14)
32540* pragma, reason for not using:          Function Attributes.
32541                                                             (line  916)
32542* pragma, redefine_extname:              Symbol-Renaming Pragmas.
32543                                                             (line   14)
32544* pragma, segment:                       Darwin Pragmas.     (line   21)
32545* pragma, unused:                        Darwin Pragmas.     (line   24)
32546* pragma, visibility:                    Visibility Pragmas. (line    8)
32547* pragma, weak:                          Weak Pragmas.       (line   10)
32548* pragmas:                               Pragmas.            (line    6)
32549* pragmas in C++, effect on inlining:    C++ Interface.      (line   66)
32550* pragmas, interface and implementation: C++ Interface.      (line    6)
32551* pragmas, warning of unknown:           Warning Options.    (line  474)
32552* precompiled headers:                   Precompiled Headers.
32553                                                             (line    6)
32554* preprocessing numbers:                 Incompatibilities.  (line  173)
32555* preprocessing tokens:                  Incompatibilities.  (line  173)
32556* preprocessor options:                  Preprocessor Options.
32557                                                             (line    6)
32558* printf:                                Other Builtins.     (line    6)
32559* printf_unlocked:                       Other Builtins.     (line    6)
32560* prof:                                  Debugging Options.  (line  129)
32561* promotion of formal parameters:        Function Prototypes.
32562                                                             (line    6)
32563* pure function attribute:               Function Attributes.
32564                                                             (line  590)
32565* push address instruction:              Simple Constraints. (line  142)
32566* putchar:                               Other Builtins.     (line    6)
32567* puts:                                  Other Builtins.     (line    6)
32568* qsort, and global register variables:  Global Reg Vars.    (line   42)
32569* question mark:                         Multi-Alternative.  (line   27)
32570* r in constraint:                       Simple Constraints. (line   54)
32571* ranges in case statements:             Case Ranges.        (line    6)
32572* read-only strings:                     Incompatibilities.  (line    9)
32573* register variable after longjmp:       Global Reg Vars.    (line   66)
32574* registers:                             Extended Asm.       (line    6)
32575* registers for local variables:         Local Reg Vars.     (line    6)
32576* registers in constraints:              Simple Constraints. (line   54)
32577* registers, global allocation:          Explicit Reg Vars.  (line    6)
32578* registers, global variables in:        Global Reg Vars.    (line    6)
32579* regparm attribute:                     Function Attributes.
32580                                                             (line  612)
32581* relocation truncated to fit (MIPS):    MIPS Options.       (line  135)
32582* remainder:                             Other Builtins.     (line    6)
32583* remainderf:                            Other Builtins.     (line    6)
32584* remainderl:                            Other Builtins.     (line    6)
32585* remquo:                                Other Builtins.     (line    6)
32586* remquof:                               Other Builtins.     (line    6)
32587* remquol:                               Other Builtins.     (line    6)
32588* reordering, warning:                   C++ Dialect Options.
32589                                                             (line  327)
32590* reporting bugs:                        Bugs.               (line    6)
32591* rest argument (in macro):              Variadic Macros.    (line    6)
32592* restricted pointers:                   Restricted Pointers.
32593                                                             (line    6)
32594* restricted references:                 Restricted Pointers.
32595                                                             (line    6)
32596* restricted this pointer:               Restricted Pointers.
32597                                                             (line    6)
32598* returns_twice attribute:               Function Attributes.
32599                                                             (line  649)
32600* rindex:                                Other Builtins.     (line    6)
32601* rint:                                  Other Builtins.     (line    6)
32602* rintf:                                 Other Builtins.     (line    6)
32603* rintl:                                 Other Builtins.     (line    6)
32604* round:                                 Other Builtins.     (line    6)
32605* roundf:                                Other Builtins.     (line    6)
32606* roundl:                                Other Builtins.     (line    6)
32607* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
32608                                                             (line    6)
32609* RTTI:                                  Vague Linkage.      (line   43)
32610* run-time options:                      Code Gen Options.   (line    6)
32611* s in constraint:                       Simple Constraints. (line   90)
32612* S/390 and zSeries Options:             S/390 and zSeries Options.
32613                                                             (line    6)
32614* save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
32615                                                             (line  658)
32616* scalb:                                 Other Builtins.     (line    6)
32617* scalbf:                                Other Builtins.     (line    6)
32618* scalbl:                                Other Builtins.     (line    6)
32619* scalbln:                               Other Builtins.     (line    6)
32620* scalblnf:                              Other Builtins.     (line    6)
32621* scalbn:                                Other Builtins.     (line    6)
32622* scalbnf:                               Other Builtins.     (line    6)
32623* scanf, and constant strings:           Incompatibilities.  (line   17)
32624* scanfnl:                               Other Builtins.     (line    6)
32625* scope of a variable length array:      Variable Length.    (line   23)
32626* scope of declaration:                  Disappointments.    (line   21)
32627* scope of external declarations:        Incompatibilities.  (line   80)
32628* Score Options:                         Score Options.      (line    6)
32629* search path:                           Directory Options.  (line    6)
32630* section function attribute:            Function Attributes.
32631                                                             (line  663)
32632* section variable attribute:            Variable Attributes.
32633                                                             (line  144)
32634* sentinel function attribute:           Function Attributes.
32635                                                             (line  679)
32636* setjmp:                                Global Reg Vars.    (line   66)
32637* setjmp incompatibilities:              Incompatibilities.  (line   39)
32638* shared strings:                        Incompatibilities.  (line    9)
32639* shared variable attribute:             Variable Attributes.
32640                                                             (line  189)
32641* side effect in ?::                     Conditionals.       (line   20)
32642* side effects, macro argument:          Statement Exprs.    (line   35)
32643* side effects, order of evaluation:     Non-bugs.           (line  196)
32644* signal handler functions on the AVR processors: Function Attributes.
32645                                                             (line  710)
32646* signbit:                               Other Builtins.     (line    6)
32647* signbitf:                              Other Builtins.     (line    6)
32648* signbitl:                              Other Builtins.     (line    6)
32649* signed and unsigned values, comparison warning: Warning Options.
32650                                                             (line  830)
32651* significand:                           Other Builtins.     (line    6)
32652* significandf:                          Other Builtins.     (line    6)
32653* significandl:                          Other Builtins.     (line    6)
32654* simple constraints:                    Simple Constraints. (line    6)
32655* sin:                                   Other Builtins.     (line    6)
32656* sincos:                                Other Builtins.     (line    6)
32657* sincosf:                               Other Builtins.     (line    6)
32658* sincosl:                               Other Builtins.     (line    6)
32659* sinf:                                  Other Builtins.     (line    6)
32660* sinh:                                  Other Builtins.     (line    6)
32661* sinhf:                                 Other Builtins.     (line    6)
32662* sinhl:                                 Other Builtins.     (line    6)
32663* sinl:                                  Other Builtins.     (line    6)
32664* sizeof:                                Typeof.             (line    6)
32665* smaller data references:               M32R/D Options.     (line   57)
32666* smaller data references (MIPS):        MIPS Options.       (line  216)
32667* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
32668                                                             (line  607)
32669* snprintf:                              Other Builtins.     (line    6)
32670* SPARC options:                         SPARC Options.      (line    6)
32671* Spec Files:                            Spec Files.         (line    6)
32672* specified registers:                   Explicit Reg Vars.  (line    6)
32673* specifying compiler version and target machine: Target Options.
32674                                                             (line    6)
32675* specifying hardware config:            Submodel Options.   (line    6)
32676* specifying machine version:            Target Options.     (line    6)
32677* specifying registers for local variables: Local Reg Vars.  (line    6)
32678* speed of compilation:                  Precompiled Headers.
32679                                                             (line    6)
32680* sprintf:                               Other Builtins.     (line    6)
32681* sqrt:                                  Other Builtins.     (line    6)
32682* sqrtf:                                 Other Builtins.     (line    6)
32683* sqrtl:                                 Other Builtins.     (line    6)
32684* sscanf:                                Other Builtins.     (line    6)
32685* sscanf, and constant strings:          Incompatibilities.  (line   17)
32686* sseregparm attribute:                  Function Attributes.
32687                                                             (line  629)
32688* statements inside expressions:         Statement Exprs.    (line    6)
32689* static data in C++, declaring and defining: Static Definitions.
32690                                                             (line    6)
32691* stpcpy:                                Other Builtins.     (line    6)
32692* stpncpy:                               Other Builtins.     (line    6)
32693* strcasecmp:                            Other Builtins.     (line    6)
32694* strcat:                                Other Builtins.     (line    6)
32695* strchr:                                Other Builtins.     (line    6)
32696* strcmp:                                Other Builtins.     (line    6)
32697* strcpy:                                Other Builtins.     (line    6)
32698* strcspn:                               Other Builtins.     (line    6)
32699* strdup:                                Other Builtins.     (line    6)
32700* strfmon:                               Other Builtins.     (line    6)
32701* strftime:                              Other Builtins.     (line    6)
32702* string constants:                      Incompatibilities.  (line    9)
32703* strlen:                                Other Builtins.     (line    6)
32704* strncasecmp:                           Other Builtins.     (line    6)
32705* strncat:                               Other Builtins.     (line    6)
32706* strncmp:                               Other Builtins.     (line    6)
32707* strncpy:                               Other Builtins.     (line    6)
32708* strndup:                               Other Builtins.     (line    6)
32709* strpbrk:                               Other Builtins.     (line    6)
32710* strrchr:                               Other Builtins.     (line    6)
32711* strspn:                                Other Builtins.     (line    6)
32712* strstr:                                Other Builtins.     (line    6)
32713* struct:                                Unnamed Fields.     (line    6)
32714* structures:                            Incompatibilities.  (line  146)
32715* structures, constructor expression:    Compound Literals.  (line    6)
32716* submodel options:                      Submodel Options.   (line    6)
32717* subscripting:                          Subscripting.       (line    6)
32718* subscripting and function values:      Subscripting.       (line    6)
32719* suffixes for C++ source:               Invoking G++.       (line    6)
32720* SUNPRO_DEPENDENCIES:                   Environment Variables.
32721                                                             (line  166)
32722* suppressing warnings:                  Warning Options.    (line    6)
32723* surprises in C++:                      C++ Misunderstandings.
32724                                                             (line    6)
32725* syntax checking:                       Warning Options.    (line   22)
32726* system headers, warnings from:         Warning Options.    (line  648)
32727* tan:                                   Other Builtins.     (line    6)
32728* tanf:                                  Other Builtins.     (line    6)
32729* tanh:                                  Other Builtins.     (line    6)
32730* tanhf:                                 Other Builtins.     (line    6)
32731* tanhl:                                 Other Builtins.     (line    6)
32732* tanl:                                  Other Builtins.     (line    6)
32733* target machine, specifying:            Target Options.     (line    6)
32734* target options:                        Target Options.     (line    6)
32735* TC1:                                   Standards.          (line    6)
32736* TC2:                                   Standards.          (line    6)
32737* Technical Corrigenda:                  Standards.          (line    6)
32738* Technical Corrigendum 1:               Standards.          (line    6)
32739* Technical Corrigendum 2:               Standards.          (line    6)
32740* template instantiation:                Template Instantiation.
32741                                                             (line    6)
32742* temporaries, lifetime of:              Temporaries.        (line    6)
32743* tgamma:                                Other Builtins.     (line    6)
32744* tgammaf:                               Other Builtins.     (line    6)
32745* tgammal:                               Other Builtins.     (line    6)
32746* Thread-Local Storage:                  Thread-Local.       (line    6)
32747* thunks:                                Nested Functions.   (line    6)
32748* tiny data section on the H8/300H and H8S: Function Attributes.
32749                                                             (line  732)
32750* TLS:                                   Thread-Local.       (line    6)
32751* tls_model attribute:                   Variable Attributes.
32752                                                             (line  213)
32753* TMPDIR:                                Environment Variables.
32754                                                             (line   45)
32755* TMS320C3x/C4x Options:                 TMS320C3x/C4x Options.
32756                                                             (line    6)
32757* toascii:                               Other Builtins.     (line    6)
32758* tolower:                               Other Builtins.     (line    6)
32759* toupper:                               Other Builtins.     (line    6)
32760* towlower:                              Other Builtins.     (line    6)
32761* towupper:                              Other Builtins.     (line    6)
32762* traditional C language:                C Dialect Options.  (line  227)
32763* treelang <1>:                          Standards.          (line  123)
32764* treelang:                              G++ and GCC.        (line    6)
32765* trunc:                                 Other Builtins.     (line    6)
32766* truncf:                                Other Builtins.     (line    6)
32767* truncl:                                Other Builtins.     (line    6)
32768* two-stage name lookup:                 Name lookup.        (line    6)
32769* type alignment:                        Alignment.          (line    6)
32770* type attributes:                       Type Attributes.    (line    6)
32771* type_info:                             Vague Linkage.      (line   43)
32772* typedef names as function parameters:  Incompatibilities.  (line   97)
32773* typeof:                                Typeof.             (line    6)
32774* ULL integer suffix:                    Long Long.          (line    6)
32775* Ultrix calling convention:             Interoperation.     (line  150)
32776* undefined behavior:                    Bug Criteria.       (line   17)
32777* undefined function value:              Bug Criteria.       (line   17)
32778* underscores in variables in macros:    Typeof.             (line   42)
32779* union:                                 Unnamed Fields.     (line    6)
32780* union, casting to a:                   Cast to Union.      (line    6)
32781* unions:                                Incompatibilities.  (line  146)
32782* unknown pragmas, warning:              Warning Options.    (line  474)
32783* unresolved references and -nodefaultlibs: Link Options.    (line   79)
32784* unresolved references and -nostdlib:   Link Options.       (line   79)
32785* unused attribute.:                     Function Attributes.
32786                                                             (line  744)
32787* used attribute.:                       Function Attributes.
32788                                                             (line  749)
32789* User stack pointer in interrupts on the Blackfin: Function Attributes.
32790                                                             (line  413)
32791* V in constraint:                       Simple Constraints. (line   41)
32792* V850 Options:                          V850 Options.       (line    6)
32793* vague linkage:                         Vague Linkage.      (line    6)
32794* value after longjmp:                   Global Reg Vars.    (line   66)
32795* variable addressability on the IA-64:  Function Attributes.
32796                                                             (line  457)
32797* variable addressability on the M32R/D: Variable Attributes.
32798                                                             (line  294)
32799* variable alignment:                    Alignment.          (line    6)
32800* variable attributes:                   Variable Attributes.
32801                                                             (line    6)
32802* variable number of arguments:          Variadic Macros.    (line    6)
32803* variable-length array scope:           Variable Length.    (line   23)
32804* variable-length arrays:                Variable Length.    (line    6)
32805* variables in specified registers:      Explicit Reg Vars.  (line    6)
32806* variables, local, in macros:           Typeof.             (line   42)
32807* variadic macros:                       Variadic Macros.    (line    6)
32808* VAX calling convention:                Interoperation.     (line  150)
32809* VAX options:                           VAX Options.        (line    6)
32810* vfprintf:                              Other Builtins.     (line    6)
32811* vfscanf:                               Other Builtins.     (line    6)
32812* visibility attribute:                  Function Attributes.
32813                                                             (line  755)
32814* VLAs:                                  Variable Length.    (line    6)
32815* void pointers, arithmetic:             Pointer Arith.      (line    6)
32816* void, size of pointer to:              Pointer Arith.      (line    6)
32817* volatile access:                       Volatiles.          (line    6)
32818* volatile applied to function:          Function Attributes.
32819                                                             (line    6)
32820* volatile read:                         Volatiles.          (line    6)
32821* volatile write:                        Volatiles.          (line    6)
32822* vprintf:                               Other Builtins.     (line    6)
32823* vscanf:                                Other Builtins.     (line    6)
32824* vsnprintf:                             Other Builtins.     (line    6)
32825* vsprintf:                              Other Builtins.     (line    6)
32826* vsscanf:                               Other Builtins.     (line    6)
32827* vtable:                                Vague Linkage.      (line   28)
32828* warn_unused_result attribute:          Function Attributes.
32829                                                             (line  849)
32830* warning for comparison of signed and unsigned values: Warning Options.
32831                                                             (line  830)
32832* warning for overloaded virtual fn:     C++ Dialect Options.
32833                                                             (line  406)
32834* warning for reordering of member initializers: C++ Dialect Options.
32835                                                             (line  327)
32836* warning for unknown pragmas:           Warning Options.    (line  474)
32837* warning messages:                      Warning Options.    (line    6)
32838* warnings from system headers:          Warning Options.    (line  648)
32839* warnings vs errors:                    Warnings and Errors.
32840                                                             (line    6)
32841* weak attribute:                        Function Attributes.
32842                                                             (line  866)
32843* weakref attribute:                     Function Attributes.
32844                                                             (line  875)
32845* whitespace:                            Incompatibilities.  (line  112)
32846* X in constraint:                       Simple Constraints. (line  112)
32847* X3.159-1989:                           Standards.          (line    6)
32848* x86-64 options:                        x86-64 Options.     (line    6)
32849* x86-64 Options:                        i386 and x86-64 Options.
32850                                                             (line    6)
32851* Xstormy16 Options:                     Xstormy16 Options.  (line    6)
32852* Xtensa Options:                        Xtensa Options.     (line    6)
32853* y0:                                    Other Builtins.     (line    6)
32854* y0f:                                   Other Builtins.     (line    6)
32855* y0l:                                   Other Builtins.     (line    6)
32856* y1:                                    Other Builtins.     (line    6)
32857* y1f:                                   Other Builtins.     (line    6)
32858* y1l:                                   Other Builtins.     (line    6)
32859* yn:                                    Other Builtins.     (line    6)
32860* ynf:                                   Other Builtins.     (line    6)
32861* ynl:                                   Other Builtins.     (line    6)
32862* zero-length arrays:                    Zero Length.        (line    6)
32863* zero-size structures:                  Empty Structures.   (line    6)
32864* zSeries options:                       zSeries Options.    (line    6)
32865
32866
32867
32868Tag Table:
32869Node: Top2067
32870Node: G++ and GCC3749
32871Node: Standards5814
32872Node: Invoking GCC12942
32873Node: Option Summary16703
32874Node: Overall Options45263
32875Node: Invoking G++54489
32876Node: C Dialect Options55968
32877Node: C++ Dialect Options68381
32878Node: Objective-C and Objective-C++ Dialect Options87431
32879Node: Language Independent Options99027
32880Node: Warning Options101109
32881Node: Debugging Options152492
32882Node: Optimize Options184360
32883Node: Preprocessor Options264634
32884Ref: Wtrigraphs268598
32885Ref: dashMF273355
32886Ref: fdollars-in-identifiers282513
32887Node: Assembler Options290569
32888Node: Link Options291274
32889Ref: Link Options-Footnote-1299842
32890Node: Directory Options300176
32891Node: Spec Files306238
32892Node: Target Options325544
32893Node: Submodel Options326968
32894Node: ARC Options328598
32895Node: ARM Options329788
32896Node: AVR Options341399
32897Node: Blackfin Options343532
32898Node: CRIS Options346300
32899Node: CRX Options350519
32900Node: Darwin Options350944
32901Node: DEC Alpha Options357897
32902Node: DEC Alpha/VMS Options369374
32903Node: FRV Options369759
32904Node: GNU/Linux Options376429
32905Node: H8/300 Options376887
32906Node: HPPA Options377954
32907Node: i386 and x86-64 Options387547
32908Node: IA-64 Options408992
32909Node: M32C Options416309
32910Node: M32R/D Options417600
32911Node: M680x0 Options421187
32912Node: M68hc1x Options428564
32913Node: MCore Options430132
32914Node: MIPS Options431153
32915Node: MMIX Options446236
32916Node: MN10300 Options448718
32917Node: MT Options450136
32918Node: PDP-11 Options451050
32919Node: PowerPC Options452884
32920Node: RS/6000 and PowerPC Options453118
32921Node: S/390 and zSeries Options481787
32922Node: Score Options489102
32923Node: SH Options489930
32924Node: SPARC Options499154
32925Node: System V Options509997
32926Node: TMS320C3x/C4x Options510831
32927Node: V850 Options516356
32928Node: VAX Options519501
32929Node: x86-64 Options520048
32930Node: Xstormy16 Options520262
32931Node: Xtensa Options520551
32932Node: zSeries Options524391
32933Node: Code Gen Options524587
32934Node: Environment Variables545236
32935Node: Precompiled Headers552908
32936Node: Running Protoize559145
32937Node: C Implementation565482
32938Node: Translation implementation567145
32939Node: Environment implementation567719
32940Node: Identifiers implementation568269
32941Node: Characters implementation569323
32942Node: Integers implementation572129
32943Node: Floating point implementation573954
32944Node: Arrays and pointers implementation576883
32945Ref: Arrays and pointers implementation-Footnote-1578318
32946Node: Hints implementation578442
32947Node: Structures unions enumerations and bit-fields implementation579908
32948Node: Qualifiers implementation581871
32949Node: Declarators implementation583643
32950Node: Statements implementation583985
32951Node: Preprocessing directives implementation584312
32952Node: Library functions implementation586417
32953Node: Architecture implementation587057
32954Node: Locale-specific behavior implementation587760
32955Node: C Extensions588065
32956Node: Statement Exprs592463
32957Node: Local Labels596976
32958Node: Labels as Values599955
32959Ref: Labels as Values-Footnote-1602009
32960Node: Nested Functions602192
32961Node: Constructing Calls606086
32962Node: Typeof608422
32963Node: Conditionals611588
32964Node: Long Long612479
32965Node: Complex613980
32966Node: Decimal Float616549
32967Node: Hex Floats618230
32968Node: Zero Length619271
32969Node: Empty Structures622548
32970Node: Variable Length622964
32971Node: Variadic Macros625731
32972Node: Escaped Newlines628113
32973Node: Subscripting628952
32974Node: Pointer Arith629675
32975Node: Initializers630243
32976Node: Compound Literals630739
32977Node: Designated Inits632914
32978Node: Case Ranges636569
32979Node: Cast to Union637252
32980Node: Mixed Declarations638348
32981Node: Function Attributes638854
32982Node: Attribute Syntax682699
32983Node: Function Prototypes693570
32984Node: C++ Comments695351
32985Node: Dollar Signs695870
32986Node: Character Escapes696335
32987Node: Alignment696629
32988Node: Variable Attributes697946
32989Ref: i386 Variable Attributes710969
32990Node: Type Attributes716466
32991Ref: i386 Type Attributes729768
32992Ref: PowerPC Type Attributes730612
32993Node: Inline731465
32994Node: Extended Asm736797
32995Ref: Example of asm with clobbered asm reg742883
32996Node: Constraints756979
32997Node: Simple Constraints757829
32998Node: Multi-Alternative764356
32999Node: Modifiers766073
33000Node: Machine Constraints768967
33001Node: Asm Labels796214
33002Node: Explicit Reg Vars797890
33003Node: Global Reg Vars799498
33004Node: Local Reg Vars804048
33005Node: Alternate Keywords806489
33006Node: Incomplete Enums807917
33007Node: Function Names808674
33008Node: Return Address810864
33009Node: Vector Extensions813661
33010Node: Offsetof817163
33011Node: Atomic Builtins817949
33012Node: Object Size Checking823034
33013Node: Other Builtins828391
33014Node: Target Builtins850479
33015Node: Alpha Built-in Functions851212
33016Node: ARM Built-in Functions854204
33017Node: Blackfin Built-in Functions860911
33018Node: FR-V Built-in Functions861528
33019Node: Argument Types862387
33020Node: Directly-mapped Integer Functions864143
33021Node: Directly-mapped Media Functions865225
33022Node: Raw read/write Functions872257
33023Node: Other Built-in Functions873169
33024Node: X86 Built-in Functions874358
33025Node: MIPS DSP Built-in Functions892481
33026Node: MIPS Paired-Single Support900906
33027Node: Paired-Single Arithmetic902516
33028Node: Paired-Single Built-in Functions903456
33029Node: MIPS-3D Built-in Functions906120
33030Node: PowerPC AltiVec Built-in Functions911489
33031Node: SPARC VIS Built-in Functions1012793
33032Node: Target Format Checks1014452
33033Node: Solaris Format Checks1014859
33034Node: Pragmas1015256
33035Node: ARM Pragmas1015886
33036Node: M32C Pragmas1016489
33037Node: RS/6000 and PowerPC Pragmas1017065
33038Node: Darwin Pragmas1017807
33039Node: Solaris Pragmas1018874
33040Node: Symbol-Renaming Pragmas1020035
33041Node: Structure-Packing Pragmas1022657
33042Node: Weak Pragmas1024288
33043Node: Diagnostic Pragmas1025090
33044Node: Visibility Pragmas1027083
33045Node: Unnamed Fields1027804
33046Node: Thread-Local1029314
33047Node: C99 Thread-Local Edits1031398
33048Node: C++98 Thread-Local Edits1033410
33049Node: C++ Extensions1036855
33050Node: Volatiles1038431
33051Node: Restricted Pointers1041107
33052Node: Vague Linkage1042701
33053Node: C++ Interface1046357
33054Ref: C++ Interface-Footnote-11050654
33055Node: Template Instantiation1050791
33056Node: Bound member functions1057803
33057Node: C++ Attributes1059346
33058Node: Namespace Association1061004
33059Node: Java Exceptions1062422
33060Node: Deprecated Features1063827
33061Node: Backwards Compatibility1066802
33062Node: Objective-C1068157
33063Node: Executing code before main1068738
33064Node: What you can and what you cannot do in +load1071344
33065Node: Type encoding1073511
33066Node: Garbage Collection1076898
33067Node: Constant string objects1079522
33068Node: compatibility_alias1082030
33069Node: Compatibility1082908
33070Node: Gcov1089475
33071Node: Gcov Intro1089999
33072Node: Invoking Gcov1092715
33073Node: Gcov and Optimization1104575
33074Node: Gcov Data Files1107228
33075Node: Cross-profiling1108366
33076Node: Trouble1110192
33077Node: Actual Bugs1111732
33078Node: Cross-Compiler Problems1112472
33079Node: Interoperation1112886
33080Node: Incompatibilities1120484
33081Node: Fixed Headers1128634
33082Node: Standard Libraries1130297
33083Node: Disappointments1131669
33084Node: C++ Misunderstandings1136027
33085Node: Static Definitions1136846
33086Node: Name lookup1137899
33087Ref: Name lookup-Footnote-11142677
33088Node: Temporaries1142864
33089Node: Copy Assignment1144840
33090Node: Protoize Caveats1146647
33091Node: Non-bugs1150609
33092Node: Warnings and Errors1161113
33093Node: Bugs1162877
33094Node: Bug Criteria1163441
33095Node: Bug Reporting1165651
33096Node: Service1166043
33097Node: Contributing1166862
33098Node: Funding1167602
33099Node: GNU Project1170091
33100Node: Copying1170737
33101Node: GNU Free Documentation License1189914
33102Node: Contributors1212320
33103Node: Option Index1248176
33104Node: Keyword Index1384054
33105
33106End Tag Table
33107