1This is doc/gcc.info, produced by makeinfo version 4.7 from
2/home/mitchell/gcc-3.4.2/gcc-3.4.2/gcc/doc/gcc.texi.
3
4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
51999, 2000, 2001, 2002, 2003, 2004 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 Programming
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 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 3.4.2.  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, Java, Fortran,
102and 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++, and Objective-C languages.
134
135
136File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
137
1382 Language Standards Supported by GCC
139*************************************
140
141For each language compiled by GCC for which there is a standard, GCC
142attempts to follow one or more versions of that standard, possibly with
143some exceptions, and possibly with some extensions.
144
145 GCC supports three versions of the C standard, although support for
146the most recent version is not yet complete.
147
148 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
149published in 1990.  This standard was ratified as an ISO standard
150(ISO/IEC 9899:1990) later in 1990.  There were no technical differences
151between these publications, although the sections of the ANSI standard
152were renumbered and became clauses in the ISO standard.  This standard,
153in both its forms, is commonly known as "C89", or occasionally as
154"C90", from the dates of ratification.  The ANSI standard, but not the
155ISO standard, also came with a Rationale document.  To select this
156standard in GCC, use one of the options `-ansi', `-std=c89' or
157`-std=iso9899:1990'; to obtain all the diagnostics required by the
158standard, you should also specify `-pedantic' (or `-pedantic-errors' if
159you want them to be errors rather than warnings).  *Note Options
160Controlling C Dialect: C Dialect Options.
161
162 Errors in the 1990 ISO C standard were corrected in two Technical
163Corrigenda published in 1994 and 1996.  GCC does not support the
164uncorrected version.
165
166 An amendment to the 1990 standard was published in 1995.  This
167amendment added digraphs and `__STDC_VERSION__' to the language, but
168otherwise concerned the library.  This amendment is commonly known as
169"AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
170select this standard in GCC, use the option `-std=iso9899:199409'
171(with, as for other standard versions, `-pedantic' to receive all
172required diagnostics).
173
174 A new edition of the ISO C standard was published in 1999 as ISO/IEC
1759899:1999, and is commonly known as "C99".  GCC has incomplete support
176for this standard version; see
177`http://gcc.gnu.org/gcc-3.4/c99status.html' for details.  To select this
178standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
179development, drafts of this standard version were referred to as "C9X".)
180
181 Errors in the 1999 ISO C standard were corrected in a Technical
182Corrigendum published in 2001.  GCC does not support the uncorrected
183version.
184
185 By default, GCC provides some extensions to the C language that on
186rare occasions conflict with the C standard.  *Note Extensions to the C
187Language Family: C Extensions.  Use of the `-std' options listed above
188will disable these extensions where they conflict with the C standard
189version selected.  You may also select an extended version of the C
190language explicitly with `-std=gnu89' (for C89 with GNU extensions) or
191`-std=gnu99' (for C99 with GNU extensions).  The default, if no C
192language dialect options are given, is `-std=gnu89'; this will change to
193`-std=gnu99' in some future release when the C99 support is complete.
194Some features that are part of the C99 standard are accepted as
195extensions in C89 mode.
196
197 The ISO C standard defines (in clause 4) two classes of conforming
198implementation.  A "conforming hosted implementation" supports the
199whole standard including all the library facilities; a "conforming
200freestanding implementation" is only required to provide certain
201library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
202and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
203also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
204types, added in C99, are not required for freestanding implementations.
205The standard also defines two environments for programs, a
206"freestanding environment", required of all implementations and which
207may not have library facilities beyond those required of freestanding
208implementations, where the handling of program startup and termination
209are implementation-defined, and a "hosted environment", which is not
210required, in which all the library facilities are provided and startup
211is through a function `int main (void)' or `int main (int, char *[])'.
212An OS kernel would be a freestanding environment; a program using the
213facilities of an operating system would normally be in a hosted
214implementation.
215
216 GCC aims towards being usable as a conforming freestanding
217implementation, or as the compiler for a conforming hosted
218implementation.  By default, it will act as the compiler for a hosted
219implementation, defining `__STDC_HOSTED__' as `1' and presuming that
220when the names of ISO C functions are used, they have the semantics
221defined in the standard.  To make it act as a conforming freestanding
222implementation for a freestanding environment, use the option
223`-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
224make assumptions about the meanings of function names from the standard
225library, with exceptions noted below.  To build an OS kernel, you may
226well still need to make your own arrangements for linking and startup.
227*Note Options Controlling C Dialect: C Dialect Options.
228
229 GCC does not provide the library facilities required only of hosted
230implementations, nor yet all the facilities required by C99 of
231freestanding implementations; to use the facilities of a hosted
232environment, you will need to find them elsewhere (for example, in the
233GNU C library).  *Note Standard Libraries: Standard Libraries.
234
235 Most of the compiler support routines used by GCC are present in
236`libgcc', but there are a few exceptions.  GCC requires the
237freestanding environment provide `memcpy', `memmove', `memset' and
238`memcmp'.  Some older ports of GCC are configured to use the BSD
239`bcopy', `bzero' and `bcmp' functions instead, but this is deprecated
240for new ports.  Finally, if `__builtin_trap' is used, and the target
241does not implement the `trap' pattern, then GCC will emit a call to
242`abort'.
243
244 For references to Technical Corrigenda, Rationale documents and
245information concerning the history of C that is available online, see
246`http://gcc.gnu.org/readings.html'
247
248 There is no formal written standard for Objective-C.  The most
249authoritative manual is "Object-Oriented Programming and the
250Objective-C Language", available at a number of web sites
251
252   * `http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/' is
253     a recent version
254
255   * `http://www.toodarkpark.org/computers/objc/' is an older example
256
257   * `http://www.gnustep.org' has 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 The GNU Fortran Language: (g77)Language, for details of the
269Fortran language supported by GCC.
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, `-fforce-mem', `-fstrength-reduce', `-Wformat' and so on.
311Most of these have both positive and negative forms; the negative form
312of `-ffoo' would be `-fno-foo'.  This manual documents only one of
313these two forms, 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 Dialect Options:: Variations on Objective-C.
327* Language Independent Options:: Controlling how diagnostics should be
328                        formatted.
329* Warning Options::     How picky should the compiler be?
330* Debugging Options::   Symbol tables, measurements, and debugging dumps.
331* Optimize Options::    How much optimization?
332* Preprocessor Options:: Controlling header files and macro definitions.
333                         Also, getting dependency information for Make.
334* Assembler Options::   Passing options to the assembler.
335* Link Options::        Specifying libraries and so on.
336* Directory Options::   Where to find header files and libraries.
337                        Where to find the compiler executable files.
338* Spec Files::          How to pass switches to sub-processes.
339* Target Options::      Running a cross-compiler, or an old version of GCC.
340* Submodel Options::    Specifying minor hardware or convention variations,
341                        such as 68010 vs 68020.
342* Code Gen Options::    Specifying conventions for function calls, data layout
343                        and register usage.
344* Environment Variables:: Env vars that affect GCC.
345* Precompiled Headers:: Compiling a header once, and using it many times.
346* Running Protoize::    Automatically adding or removing function prototypes.
347
348
349File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
350
3513.1 Option Summary
352==================
353
354Here is a summary of all the options, grouped by type.  Explanations are
355in the following sections.
356
357_Overall Options_
358     *Note Options Controlling the Kind of Output: Overall Options.
359          -c  -S  -E  -o FILE  -pipe  -pass-exit-codes
360          -x LANGUAGE  -v  -###  --help  --target-help  --version
361
362_C Language Options_
363     *Note Options Controlling C Dialect: C Dialect Options.
364          -ansi  -std=STANDARD  -aux-info FILENAME
365          -fno-asm  -fno-builtin  -fno-builtin-FUNCTION
366          -fhosted  -ffreestanding  -fms-extensions
367          -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp
368          -fallow-single-precision  -fcond-mismatch
369          -fsigned-bitfields  -fsigned-char
370          -funsigned-bitfields  -funsigned-char
371          -fwritable-strings
372
373_C++ Language Options_
374     *Note Options Controlling C++ Dialect: C++ Dialect Options.
375          -fabi-version=N  -fno-access-control  -fcheck-new
376          -fconserve-space  -fno-const-strings
377          -fno-elide-constructors
378          -fno-enforce-eh-specs
379          -ffor-scope  -fno-for-scope  -fno-gnu-keywords
380          -fno-implicit-templates
381          -fno-implicit-inline-templates
382          -fno-implement-inlines  -fms-extensions
383          -fno-nonansi-builtins  -fno-operator-names
384          -fno-optional-diags  -fpermissive
385          -frepo  -fno-rtti  -fstats  -ftemplate-depth-N
386          -fuse-cxa-atexit  -fno-weak  -nostdinc++
387          -fno-default-inline  -Wabi  -Wctor-dtor-privacy
388          -Wnon-virtual-dtor  -Wreorder
389          -Weffc++  -Wno-deprecated
390          -Wno-non-template-friend  -Wold-style-cast
391          -Woverloaded-virtual  -Wno-pmf-conversions
392          -Wsign-promo  -Wsynth
393
394_Objective-C Language Options_
395     *Note Options Controlling Objective-C Dialect: Objective-C Dialect
396     Options.
397          -fconstant-string-class=CLASS-NAME
398          -fgnu-runtime  -fnext-runtime
399          -fno-nil-receivers
400          -fobjc-exceptions
401          -freplace-objc-classes
402          -fzero-link
403          -gen-decls
404          -Wno-protocol  -Wselector -Wundeclared-selector
405
406_Language Independent Options_
407     *Note Options to Control Diagnostic Messages Formatting: Language
408     Independent Options.
409          -fmessage-length=N
410          -fdiagnostics-show-location=[once|every-line]
411
412_Warning Options_
413     *Note Options to Request or Suppress Warnings: Warning Options.
414          -fsyntax-only  -pedantic  -pedantic-errors
415          -w  -Wextra  -Wall  -Waggregate-return
416          -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment
417          -Wconversion  -Wno-deprecated-declarations
418          -Wdisabled-optimization  -Wno-div-by-zero  -Wendif-labels
419          -Werror  -Werror-implicit-function-declaration
420          -Wfloat-equal  -Wformat  -Wformat=2
421          -Wno-format-extra-args -Wformat-nonliteral
422          -Wformat-security  -Wformat-y2k
423          -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int
424          -Wimport  -Wno-import  -Winit-self  -Winline
425          -Wno-invalid-offsetof  -Winvalid-pch
426          -Wlarger-than-LEN  -Wlong-long
427          -Wmain  -Wmissing-braces
428          -Wmissing-format-attribute  -Wmissing-noreturn
429          -Wno-multichar  -Wnonnull  -Wpacked  -Wpadded
430          -Wparentheses  -Wpointer-arith  -Wredundant-decls
431          -Wreturn-type  -Wsequence-point  -Wshadow
432          -Wsign-compare  -Wstrict-aliasing
433          -Wswitch  -Wswitch-default  -Wswitch-enum
434          -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized
435          -Wunknown-pragmas  -Wunreachable-code
436          -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter
437          -Wunused-value  -Wunused-variable  -Wwrite-strings
438
439_C-only Warning Options_
440          -Wbad-function-cast  -Wmissing-declarations
441          -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition
442          -Wstrict-prototypes  -Wtraditional
443          -Wdeclaration-after-statement
444
445_Debugging Options_
446     *Note Options for Debugging Your Program or GCC: Debugging Options.
447          -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion
448          -fdump-unnumbered  -fdump-translation-unit[-N]
449          -fdump-class-hierarchy[-N]
450          -fdump-tree-original[-N]
451          -fdump-tree-optimized[-N]
452          -fdump-tree-inlined[-N]
453          -feliminate-dwarf2-dups -feliminate-unused-debug-types
454          -feliminate-unused-debug-symbols -fmem-report -fprofile-arcs
455          -frandom-seed=STRING -fsched-verbose=N
456          -ftest-coverage  -ftime-report
457          -g  -gLEVEL  -gcoff -gdwarf-2
458          -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+
459          -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name
460          -print-multi-directory  -print-multi-lib
461          -print-prog-name=PROGRAM  -print-search-dirs  -Q
462          -save-temps  -time
463
464_Optimization Options_
465     *Note Options that Control Optimization: Optimize Options.
466          -falign-functions=N  -falign-jumps=N
467          -falign-labels=N  -falign-loops=N
468          -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize
469          -fbranch-target-load-optimize2 -fcaller-saves  -fcprop-registers
470          -fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections
471          -fdelayed-branch  -fdelete-null-pointer-checks
472          -fexpensive-optimizations  -ffast-math  -ffloat-store
473          -fforce-addr  -fforce-mem  -ffunction-sections
474          -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -floop-optimize
475          -fcrossjumping  -fif-conversion  -fif-conversion2
476          -finline-functions  -finline-limit=N  -fkeep-inline-functions
477          -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants
478          -fmove-all-movables  -fnew-ra  -fno-branch-count-reg
479          -fno-default-inline  -fno-defer-pop
480          -fno-function-cse  -fno-guess-branch-probability
481          -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2
482          -funsafe-math-optimizations  -ffinite-math-only
483          -fno-trapping-math  -fno-zero-initialized-in-bss
484          -fomit-frame-pointer  -foptimize-register-move
485          -foptimize-sibling-calls  -fprefetch-loop-arrays
486          -fprofile-generate -fprofile-use
487          -freduce-all-givs  -fregmove  -frename-registers
488          -freorder-blocks  -freorder-functions
489          -frerun-cse-after-loop  -frerun-loop-opt
490          -frounding-math -fschedule-insns  -fschedule-insns2
491          -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load
492          -fsched-spec-load-dangerous
493          -fsched-stalled-insns=N -sched-stalled-insns-dep=N
494          -fsched2-use-superblocks
495          -fsched2-use-traces  -fsignaling-nans
496          -fsingle-precision-constant
497          -fstrength-reduce  -fstrict-aliasing  -ftracer  -fthread-jumps
498          -funroll-all-loops  -funroll-loops  -fpeel-loops
499          -funswitch-loops  -fold-unroll-loops  -fold-unroll-all-loops
500          --param NAME=VALUE
501          -O  -O0  -O1  -O2  -O3  -Os
502
503_Preprocessor Options_
504     *Note Options Controlling the Preprocessor: Preprocessor Options.
505          -AQUESTION=ANSWER
506          -A-QUESTION[=ANSWER]
507          -C  -dD  -dI  -dM  -dN
508          -DMACRO[=DEFN]  -E  -H
509          -idirafter DIR
510          -include FILE  -imacros FILE
511          -iprefix FILE  -iwithprefix DIR
512          -iwithprefixbefore DIR  -isystem DIR
513          -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc
514          -P  -fworking-directory  -remap
515          -trigraphs  -undef  -UMACRO  -Wp,OPTION
516          -Xpreprocessor OPTION
517
518_Assembler Option_
519     *Note Passing Options to the Assembler: Assembler Options.
520          -Wa,OPTION  -Xassembler OPTION
521
522_Linker Options_
523     *Note Options for Linking: Link Options.
524          OBJECT-FILE-NAME  -lLIBRARY
525          -nostartfiles  -nodefaultlibs  -nostdlib -pie
526          -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic
527          -Wl,OPTION  -Xlinker OPTION
528          -u SYMBOL
529
530_Directory Options_
531     *Note Options for Directory Search: Directory Options.
532          -BPREFIX  -IDIR  -I-  -LDIR  -specs=FILE
533
534_Target Options_
535     *Note Target Options::.
536          -V VERSION  -b MACHINE
537
538_Machine Dependent Options_
539     *Note Hardware Models and Configurations: Submodel Options.
540
541     _M680x0 Options_
542          -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
543          -m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020
544          -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel
545          -malign-int  -mstrict-align  -msep-data  -mno-sep-data
546          -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
547
548     _M68hc1x Options_
549          -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12
550          -mauto-incdec  -minmax  -mlong-calls  -mshort
551          -msoft-reg-count=COUNT
552
553     _VAX Options_
554          -mg  -mgnu  -munix
555
556     _SPARC Options_
557          -mcpu=CPU-TYPE
558          -mtune=CPU-TYPE
559          -mcmodel=CODE-MODEL
560          -m32  -m64  -mapp-regs  -mno-app-regs
561          -mfaster-structs  -mno-faster-structs
562          -mflat  -mno-flat  -mfpu  -mno-fpu
563          -mhard-float  -msoft-float
564          -mhard-quad-float  -msoft-quad-float
565          -mimpure-text  -mno-impure-text  -mlittle-endian
566          -mstack-bias  -mno-stack-bias
567          -munaligned-doubles  -mno-unaligned-doubles
568          -mv8plus  -mno-v8plus  -mvis  -mno-vis
569          -mcypress  -mf930  -mf934
570          -msparclite  -msupersparc  -mv8
571          -threads -pthreads
572
573     _ARM Options_
574          -mapcs-frame  -mno-apcs-frame
575          -mapcs-26  -mapcs-32
576          -mapcs-stack-check  -mno-apcs-stack-check
577          -mapcs-float  -mno-apcs-float
578          -mapcs-reentrant  -mno-apcs-reentrant
579          -msched-prolog  -mno-sched-prolog
580          -mlittle-endian  -mbig-endian  -mwords-little-endian
581          -malignment-traps  -mno-alignment-traps
582          -msoft-float  -mhard-float  -mfpe
583          -mthumb-interwork  -mno-thumb-interwork
584          -mcpu=NAME  -march=NAME  -mfpe=NAME
585          -mstructure-size-boundary=N
586          -mabort-on-noreturn
587          -mlong-calls  -mno-long-calls
588          -msingle-pic-base  -mno-single-pic-base
589          -mpic-register=REG
590          -mnop-fun-dllimport
591          -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
592          -mpoke-function-name
593          -mthumb  -marm
594          -mtpcs-frame  -mtpcs-leaf-frame
595          -mcaller-super-interworking  -mcallee-super-interworking
596
597     _MN10300 Options_
598          -mmult-bug  -mno-mult-bug
599          -mam33  -mno-am33
600          -mam33-2  -mno-am33-2
601          -mno-crt0  -mrelax
602
603     _M32R/D Options_
604          -m32r2 -m32rx -m32r
605          -mdebug
606          -malign-loops -mno-align-loops
607          -missue-rate=NUMBER
608          -mbranch-cost=NUMBER
609          -mmodel=CODE-SIZE-MODEL-TYPE
610          -msdata=SDATA-TYPE
611          -mno-flush-func -mflush-func=NAME
612          -mno-flush-trap -mflush-trap=NUMBER
613          -G NUM
614
615     _RS/6000 and PowerPC Options_
616          -mcpu=CPU-TYPE
617          -mtune=CPU-TYPE
618          -mpower  -mno-power  -mpower2  -mno-power2
619          -mpowerpc  -mpowerpc64  -mno-powerpc
620          -maltivec  -mno-altivec
621          -mpowerpc-gpopt  -mno-powerpc-gpopt
622          -mpowerpc-gfxopt  -mno-powerpc-gfxopt
623          -mnew-mnemonics  -mold-mnemonics
624          -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc
625          -m64  -m32  -mxl-call  -mno-xl-call  -mpe
626          -malign-power  -malign-natural
627          -msoft-float  -mhard-float  -mmultiple  -mno-multiple
628          -mstring  -mno-string  -mupdate  -mno-update
629          -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align
630          -mstrict-align  -mno-strict-align  -mrelocatable
631          -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib
632          -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian
633          -mdynamic-no-pic
634          -mprioritize-restricted-insns=PRIORITY
635          -msched-costly-dep=DEPENDENCE_TYPE
636          -minsert-sched-nops=SCHEME
637          -mcall-sysv  -mcall-netbsd
638          -maix-struct-return  -msvr4-struct-return
639          -mabi=altivec  -mabi=no-altivec
640          -mabi=spe  -mabi=no-spe
641          -misel=yes  -misel=no
642          -mspe=yes  -mspe=no
643          -mfloat-gprs=yes  -mfloat-gprs=no
644          -mprototype  -mno-prototype
645          -msim  -mmvme  -mads  -myellowknife  -memb  -msdata
646          -msdata=OPT  -mvxworks  -mwindiss  -G NUM  -pthread
647
648     _Darwin Options_
649          -all_load  -allowable_client  -arch  -arch_errors_fatal
650          -arch_only  -bind_at_load  -bundle  -bundle_loader
651          -client_name  -compatibility_version  -current_version
652          -dependency-file  -dylib_file  -dylinker_install_name
653          -dynamic  -dynamiclib  -exported_symbols_list
654          -filelist  -flat_namespace  -force_cpusubtype_ALL
655          -force_flat_namespace  -headerpad_max_install_names
656          -image_base  -init  -install_name  -keep_private_externs
657          -multi_module  -multiply_defined  -multiply_defined_unused
658          -noall_load  -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit
659          -pagezero_size  -prebind  -prebind_all_twolevel_modules
660          -private_bundle  -read_only_relocs  -sectalign
661          -sectobjectsymbols  -whyload  -seg1addr
662          -sectcreate  -sectobjectsymbols  -sectorder
663          -seg_addr_table  -seg_addr_table_filename  -seglinkedit
664          -segprot  -segs_read_only_addr  -segs_read_write_addr
665          -single_module  -static  -sub_library  -sub_umbrella
666          -twolevel_namespace  -umbrella  -undefined
667          -unexported_symbols_list  -weak_reference_mismatches
668          -whatsloaded
669
670     _MIPS Options_
671          -EL  -EB  -march=ARCH  -mtune=ARCH
672          -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64
673          -mips16  -mno-mips16  -mabi=ABI  -mabicalls  -mno-abicalls
674          -mxgot  -mno-xgot  -membedded-pic  -mno-embedded-pic
675          -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float
676          -msingle-float  -mdouble-float  -mint64  -mlong64  -mlong32
677          -GNUM  -membedded-data  -mno-embedded-data
678          -muninit-const-in-rodata  -mno-uninit-const-in-rodata
679          -msplit-addresses  -mno-split-addresses
680          -mexplicit-relocs  -mno-explicit-relocs
681          -mrnames  -mno-rnames
682          -mcheck-zero-division  -mno-check-zero-division
683          -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
684          -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp
685          -mfix-sb1  -mno-fix-sb1  -mflush-func=FUNC
686          -mno-flush-func  -mbranch-likely  -mno-branch-likely
687
688     _i386 and x86-64 Options_
689          -mtune=CPU-TYPE  -march=CPU-TYPE
690          -mfpmath=UNIT
691          -masm=DIALECT  -mno-fancy-math-387
692          -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib
693          -mno-wide-multiply  -mrtd  -malign-double
694          -mpreferred-stack-boundary=NUM
695          -mmmx  -msse  -msse2 -msse3 -m3dnow
696          -mthreads  -mno-align-stringops  -minline-all-stringops
697          -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double
698          -m96bit-long-double  -mregparm=NUM  -momit-leaf-frame-pointer
699          -mno-red-zone -mno-tls-direct-seg-refs
700          -mcmodel=CODE-MODEL
701          -m32  -m64
702
703     _HPPA Options_
704          -march=ARCHITECTURE-TYPE
705          -mbig-switch  -mdisable-fpregs  -mdisable-indexing
706          -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
707          -mjump-in-delay -mlinker-opt -mlong-calls
708          -mlong-load-store  -mno-big-switch  -mno-disable-fpregs
709          -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
710          -mno-jump-in-delay  -mno-long-load-store
711          -mno-portable-runtime  -mno-soft-float
712          -mno-space-regs  -msoft-float  -mpa-risc-1-0
713          -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
714          -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio
715          -nolibdld  -static  -threads
716
717     _Intel 960 Options_
718          -mCPU-TYPE  -masm-compat  -mclean-linkage
719          -mcode-align  -mcomplex-addr  -mleaf-procedures
720          -mic-compat  -mic2.0-compat  -mic3.0-compat
721          -mintel-asm  -mno-clean-linkage  -mno-code-align
722          -mno-complex-addr  -mno-leaf-procedures
723          -mno-old-align  -mno-strict-align  -mno-tail-call
724          -mnumerics  -mold-align  -msoft-float  -mstrict-align
725          -mtail-call
726
727     _DEC Alpha Options_
728          -mno-fp-regs  -msoft-float  -malpha-as  -mgas
729          -mieee  -mieee-with-inexact  -mieee-conformant
730          -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE
731          -mtrap-precision=MODE  -mbuild-constants
732          -mcpu=CPU-TYPE  -mtune=CPU-TYPE
733          -mbwx  -mmax  -mfix  -mcix
734          -mfloat-vax  -mfloat-ieee
735          -mexplicit-relocs  -msmall-data  -mlarge-data
736          -msmall-text  -mlarge-text
737          -mmemory-latency=TIME
738
739     _DEC Alpha/VMS Options_
740          -mvms-return-codes
741
742     _H8/300 Options_
743          -mrelax  -mh  -ms  -mn  -mint32  -malign-300
744
745     _SH Options_
746          -m1  -m2  -m2e  -m3  -m3e
747          -m4-nofpu  -m4-single-only  -m4-single  -m4
748          -m5-64media  -m5-64media-nofpu
749          -m5-32media  -m5-32media-nofpu
750          -m5-compact  -m5-compact-nofpu
751          -mb  -ml  -mdalign  -mrelax
752          -mbigtable  -mfmovd  -mhitachi  -mnomacsave
753          -mieee  -misize  -mpadstruct  -mspace
754          -mprefergot  -musermode
755
756     _System V Options_
757          -Qy  -Qn  -YP,PATHS  -Ym,DIR
758
759     _ARC Options_
760          -EB  -EL
761          -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION
762          -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
763
764     _TMS320C3x/C4x Options_
765          -mcpu=CPU  -mbig  -msmall  -mregparm  -mmemparm
766          -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload
767          -mrpts=COUNT  -mrptb  -mdb  -mloop-unsigned
768          -mparallel-insns  -mparallel-mpy  -mpreserve-float
769
770     _V850 Options_
771          -mlong-calls  -mno-long-calls  -mep  -mno-ep
772          -mprolog-function  -mno-prolog-function  -mspace
773          -mtda=N  -msda=N  -mzda=N
774          -mapp-regs  -mno-app-regs
775          -mdisable-callt  -mno-disable-callt
776          -mv850e1
777          -mv850e
778          -mv850  -mbig-switch
779
780     _NS32K Options_
781          -m32032  -m32332  -m32532  -m32081  -m32381
782          -mmult-add  -mnomult-add  -msoft-float  -mrtd  -mnortd
783          -mregparam  -mnoregparam  -msb  -mnosb
784          -mbitfield  -mnobitfield  -mhimem  -mnohimem
785
786     _AVR Options_
787          -mmcu=MCU  -msize  -minit-stack=N  -mno-interrupts
788          -mcall-prologues  -mno-tablejump  -mtiny-stack
789
790     _MCore Options_
791          -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
792          -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
793          -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
794          -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
795          -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
796
797     _MMIX Options_
798          -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
799          -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
800          -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
801          -mno-base-addresses  -msingle-exit  -mno-single-exit
802
803     _IA-64 Options_
804          -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
805          -mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata
806          -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency
807          -minline-float-divide-max-throughput
808          -minline-int-divide-min-latency
809          -minline-int-divide-max-throughput  -mno-dwarf2-asm
810          -mfixed-range=REGISTER-RANGE
811
812     _D30V Options_
813          -mextmem  -mextmemory  -monchip  -mno-asm-optimize
814          -masm-optimize  -mbranch-cost=N  -mcond-exec=N
815
816     _S/390 and zSeries Options_
817          -mtune=CPU-TYPE  -march=CPU-TYPE
818          -mhard-float  -msoft-float  -mbackchain  -mno-backchain
819          -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle
820          -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch  -mfused-madd  -mno-fused-madd
821
822     _CRIS Options_
823          -mcpu=CPU  -march=CPU  -mtune=CPU
824          -mmax-stack-frame=N  -melinux-stacksize=N
825          -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects
826          -mstack-align  -mdata-align  -mconst-align
827          -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt
828          -melf  -maout  -melinux  -mlinux  -sim  -sim2
829          -mmul-bug-workaround  -mno-mul-bug-workaround
830
831     _PDP-11 Options_
832          -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
833          -mbcopy  -mbcopy-builtin  -mint32  -mno-int16
834          -mint16  -mno-int32  -mfloat32  -mno-float64
835          -mfloat64  -mno-float32  -mabshi  -mno-abshi
836          -mbranch-expensive  -mbranch-cheap
837          -msplit  -mno-split  -munix-asm  -mdec-asm
838
839     _Xstormy16 Options_
840          -msim
841
842     _Xtensa Options_
843          -mconst16 -mno-const16
844          -mfused-madd  -mno-fused-madd
845          -mtext-section-literals  -mno-text-section-literals
846          -mtarget-align  -mno-target-align
847          -mlongcalls  -mno-longcalls
848
849     _FRV Options_
850          -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64
851          -mhard-float  -msoft-float
852          -malloc-cc  -mfixed-cc  -mdword  -mno-dword
853          -mdouble  -mno-double
854          -mmedia  -mno-media  -mmuladd  -mno-muladd
855          -mlibrary-pic  -macc-4 -macc-8
856          -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move
857          -mscc  -mno-scc  -mcond-exec  -mno-cond-exec
858          -mvliw-branch  -mno-vliw-branch
859          -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec
860          -mno-nested-cond-exec  -mtomcat-stats
861          -mcpu=CPU
862
863_Code Generation Options_
864     *Note Options for Code Generation Conventions: Code Gen Options.
865          -fcall-saved-REG  -fcall-used-REG
866          -ffixed-REG  -fexceptions
867          -fnon-call-exceptions  -funwind-tables
868          -fasynchronous-unwind-tables
869          -finhibit-size-directive  -finstrument-functions
870          -fno-common  -fno-ident
871          -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE
872          -freg-struct-return  -fshared-data  -fshort-enums
873          -fshort-double  -fshort-wchar
874          -fverbose-asm  -fpack-struct  -fstack-check
875          -fstack-limit-register=REG  -fstack-limit-symbol=SYM
876          -fargument-alias  -fargument-noalias
877          -fargument-noalias-global  -fleading-underscore
878          -ftls-model=MODEL
879          -ftrapv  -fwrapv  -fbounds-check
880
881
882* Menu:
883
884* Overall Options::     Controlling the kind of output:
885                        an executable, object files, assembler files,
886                        or preprocessed source.
887* C Dialect Options::   Controlling the variant of C language compiled.
888* C++ Dialect Options:: Variations on C++.
889* Objective-C Dialect Options:: Variations on Objective-C.
890* Language Independent Options:: Controlling how diagnostics should be
891                        formatted.
892* Warning Options::     How picky should the compiler be?
893* Debugging Options::   Symbol tables, measurements, and debugging dumps.
894* Optimize Options::    How much optimization?
895* Preprocessor Options:: Controlling header files and macro definitions.
896                         Also, getting dependency information for Make.
897* Assembler Options::   Passing options to the assembler.
898* Link Options::        Specifying libraries and so on.
899* Directory Options::   Where to find header files and libraries.
900                        Where to find the compiler executable files.
901* Spec Files::          How to pass switches to sub-processes.
902* Target Options::      Running a cross-compiler, or an old version of GCC.
903
904
905File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
906
9073.2 Options Controlling the Kind of Output
908==========================================
909
910Compilation can involve up to four stages: preprocessing, compilation
911proper, assembly and linking, always in that order.  GCC is capable of
912preprocessing and compiling several files either into several assembler
913input files, or into one assembler input file; then each assembler
914input file produces an object file, and linking combines all the object
915files (those newly compiled, and those specified as input) into an
916executable file.
917
918 For any given input file, the file name suffix determines what kind of
919compilation is done:
920
921`FILE.c'
922     C source code which must be preprocessed.
923
924`FILE.i'
925     C source code which should not be preprocessed.
926
927`FILE.ii'
928     C++ source code which should not be preprocessed.
929
930`FILE.m'
931     Objective-C source code.  Note that you must link with the library
932     `libobjc.a' to make an Objective-C program work.
933
934`FILE.mi'
935     Objective-C source code which should not be preprocessed.
936
937`FILE.h'
938     C or C++ header file to be turned into a precompiled header.
939
940`FILE.cc'
941`FILE.cp'
942`FILE.cxx'
943`FILE.cpp'
944`FILE.CPP'
945`FILE.c++'
946`FILE.C'
947     C++ source code which must be preprocessed.  Note that in `.cxx',
948     the last two letters must both be literally `x'.  Likewise, `.C'
949     refers to a literal capital C.
950
951`FILE.hh'
952`FILE.H'
953     C++ header file to be turned into a precompiled header.
954
955`FILE.f'
956`FILE.for'
957`FILE.FOR'
958     Fortran source code which should not be preprocessed.
959
960`FILE.F'
961`FILE.fpp'
962`FILE.FPP'
963     Fortran source code which must be preprocessed (with the
964     traditional preprocessor).
965
966`FILE.r'
967     Fortran source code which must be preprocessed with a RATFOR
968     preprocessor (not included with GCC).
969
970     *Note Options Controlling the Kind of Output: (g77)Overall
971     Options, for more details of the handling of Fortran input files.
972
973`FILE.ads'
974     Ada source code file which contains a library unit declaration (a
975     declaration of a package, subprogram, or generic, or a generic
976     instantiation), or a library unit renaming declaration (a package,
977     generic, or subprogram renaming declaration).  Such files are also
978     called "specs".
979
980`FILE.adb'
981     Ada source code file containing a library unit body (a subprogram
982     or package body).  Such files are also called "bodies".
983
984`FILE.s'
985     Assembler code.
986
987`FILE.S'
988     Assembler code which must be preprocessed.
989
990`OTHER'
991     An object file to be fed straight into linking.  Any file name
992     with no recognized suffix is treated this way.
993
994 You can specify the input language explicitly with the `-x' option:
995
996`-x LANGUAGE'
997     Specify explicitly the LANGUAGE for the following input files
998     (rather than letting the compiler choose a default based on the
999     file name suffix).  This option applies to all following input
1000     files until the next `-x' option.  Possible values for LANGUAGE
1001     are:
1002          c  c-header  cpp-output
1003          c++  c++-header  c++-cpp-output
1004          objective-c  objective-c-header  objc-cpp-output
1005          assembler  assembler-with-cpp
1006          ada
1007          f77  f77-cpp-input  ratfor
1008          java
1009          treelang
1010
1011`-x none'
1012     Turn off any specification of a language, so that subsequent files
1013     are handled according to their file name suffixes (as they are if
1014     `-x' has not been used at all).
1015
1016`-pass-exit-codes'
1017     Normally the `gcc' program will exit with the code of 1 if any
1018     phase of the compiler returns a non-success return code.  If you
1019     specify `-pass-exit-codes', the `gcc' program will instead return
1020     with numerically highest error produced by any phase that returned
1021     an error indication.
1022
1023 If you only want some of the stages of compilation, you can use `-x'
1024(or filename suffixes) to tell `gcc' where to start, and one of the
1025options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1026some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1027do nothing at all.
1028
1029`-c'
1030     Compile or assemble the source files, but do not link.  The linking
1031     stage simply is not done.  The ultimate output is in the form of an
1032     object file for each source file.
1033
1034     By default, the object file name for a source file is made by
1035     replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1036
1037     Unrecognized input files, not requiring compilation or assembly,
1038     are ignored.
1039
1040`-S'
1041     Stop after the stage of compilation proper; do not assemble.  The
1042     output is in the form of an assembler code file for each
1043     non-assembler input file specified.
1044
1045     By default, the assembler file name for a source file is made by
1046     replacing the suffix `.c', `.i', etc., with `.s'.
1047
1048     Input files that don't require compilation are ignored.
1049
1050`-E'
1051     Stop after the preprocessing stage; do not run the compiler
1052     proper.  The output is in the form of preprocessed source code,
1053     which is sent to the standard output.
1054
1055     Input files which don't require preprocessing are ignored.
1056
1057`-o FILE'
1058     Place output in file FILE.  This applies regardless to whatever
1059     sort of output is being produced, whether it be an executable file,
1060     an object file, an assembler file or preprocessed C code.
1061
1062     If you specify `-o' when compiling more than one input file, or
1063     you are producing an executable file as output, all the source
1064     files on the command line will be compiled at once.
1065
1066     If `-o' is not specified, the default is to put an executable file
1067     in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1068     assembler file in `SOURCE.s', and all preprocessed C source on
1069     standard output.
1070
1071`-v'
1072     Print (on standard error output) the commands executed to run the
1073     stages of compilation.  Also print the version number of the
1074     compiler driver program and of the preprocessor and the compiler
1075     proper.
1076
1077`-###'
1078     Like `-v' except the commands are not executed and all command
1079     arguments are quoted.  This is useful for shell scripts to capture
1080     the driver-generated command lines.
1081
1082`-pipe'
1083     Use pipes rather than temporary files for communication between the
1084     various stages of compilation.  This fails to work on some systems
1085     where the assembler is unable to read from a pipe; but the GNU
1086     assembler has no trouble.
1087
1088`--help'
1089     Print (on the standard output) a description of the command line
1090     options understood by `gcc'.  If the `-v' option is also specified
1091     then `--help' will also be passed on to the various processes
1092     invoked by `gcc', so that they can display the command line options
1093     they accept.  If the `-Wextra' option is also specified then
1094     command line options which have no documentation associated with
1095     them will also be displayed.
1096
1097`--target-help'
1098     Print (on the standard output) a description of target specific
1099     command line options for each tool.
1100
1101`--version'
1102     Display the version number and copyrights of the invoked GCC.
1103
1104
1105File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1106
11073.3 Compiling C++ Programs
1108==========================
1109
1110C++ source files conventionally use one of the suffixes `.C', `.cc',
1111`.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1112`.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'.  GCC
1113recognizes files with these names and compiles them as C++ programs
1114even if you call the compiler the same way as for compiling C programs
1115(usually with the name `gcc').
1116
1117 However, C++ programs often require class libraries as well as a
1118compiler that understands the C++ language--and under some
1119circumstances, you might want to compile programs or header files from
1120standard input, or otherwise without a suffix that flags them as C++
1121programs.  You might also like to precompile a C header file with a
1122`.h' extension to be used in C++ compilations.  `g++' is a program that
1123calls GCC with the default language set to C++, and automatically
1124specifies linking against the C++ library.  On many systems, `g++' is
1125also installed with the name `c++'.
1126
1127 When you compile C++ programs, you may specify many of the same
1128command-line options that you use for compiling programs in any
1129language; or command-line options meaningful for C and related
1130languages; or options that are meaningful only for C++ programs.  *Note
1131Options Controlling C Dialect: C Dialect Options, for explanations of
1132options for languages related to C.  *Note Options Controlling C++
1133Dialect: C++ Dialect Options, for explanations of options that are
1134meaningful only for C++ programs.
1135
1136
1137File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1138
11393.4 Options Controlling C Dialect
1140=================================
1141
1142The following options control the dialect of C (or languages derived
1143from C, such as C++ and Objective-C) that the compiler accepts:
1144
1145`-ansi'
1146     In C mode, support all ISO C90 programs.  In C++ mode, remove GNU
1147     extensions that conflict with ISO C++.
1148
1149     This turns off certain features of GCC that are incompatible with
1150     ISO C90 (when compiling C code), or of standard C++ (when
1151     compiling C++ code), such as the `asm' and `typeof' keywords, and
1152     predefined macros such as `unix' and `vax' that identify the type
1153     of system you are using.  It also enables the undesirable and
1154     rarely used ISO trigraph feature.  For the C compiler, it disables
1155     recognition of C++ style `//' comments as well as the `inline'
1156     keyword.
1157
1158     The alternate keywords `__asm__', `__extension__', `__inline__'
1159     and `__typeof__' continue to work despite `-ansi'.  You would not
1160     want to use them in an ISO C program, of course, but it is useful
1161     to put them in header files that might be included in compilations
1162     done with `-ansi'.  Alternate predefined macros such as `__unix__'
1163     and `__vax__' are also available, with or without `-ansi'.
1164
1165     The `-ansi' option does not cause non-ISO programs to be rejected
1166     gratuitously.  For that, `-pedantic' is required in addition to
1167     `-ansi'.  *Note Warning Options::.
1168
1169     The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1170     is used.  Some header files may notice this macro and refrain from
1171     declaring certain functions or defining certain macros that the
1172     ISO standard doesn't call for; this is to avoid interfering with
1173     any programs that might use these names for other things.
1174
1175     Functions which would normally be built in but do not have
1176     semantics defined by ISO C (such as `alloca' and `ffs') are not
1177     built-in functions with `-ansi' is used.  *Note Other built-in
1178     functions provided by GCC: Other Builtins, for details of the
1179     functions affected.
1180
1181`-std='
1182     Determine the language standard.  This option is currently only
1183     supported when compiling C or C++.  A value for this option must be
1184     provided; possible values are
1185
1186    `c89'
1187    `iso9899:1990'
1188          ISO C90 (same as `-ansi').
1189
1190    `iso9899:199409'
1191          ISO C90 as modified in amendment 1.
1192
1193    `c99'
1194    `c9x'
1195    `iso9899:1999'
1196    `iso9899:199x'
1197          ISO C99.  Note that this standard is not yet fully supported;
1198          see `http://gcc.gnu.org/gcc-3.4/c99status.html' for more
1199          information.  The names `c9x' and `iso9899:199x' are
1200          deprecated.
1201
1202    `gnu89'
1203          Default, ISO C90 plus GNU extensions (including some C99
1204          features).
1205
1206    `gnu99'
1207    `gnu9x'
1208          ISO C99 plus GNU extensions.  When ISO C99 is fully
1209          implemented in GCC, this will become the default.  The name
1210          `gnu9x' is deprecated.
1211
1212    `c++98'
1213          The 1998 ISO C++ standard plus amendments.
1214
1215    `gnu++98'
1216          The same as `-std=c++98' plus GNU extensions.  This is the
1217          default for C++ code.
1218
1219     Even when this option is not specified, you can still use some of
1220     the features of newer standards in so far as they do not conflict
1221     with previous C standards.  For example, you may use
1222     `__restrict__' even when `-std=c99' is not specified.
1223
1224     The `-std' options specifying some version of ISO C have the same
1225     effects as `-ansi', except that features that were not in ISO C90
1226     but are in the specified version (for example, `//' comments and
1227     the `inline' keyword in ISO C99) are not disabled.
1228
1229     *Note Language Standards Supported by GCC: Standards, for details
1230     of these standard versions.
1231
1232`-aux-info FILENAME'
1233     Output to the given filename prototyped declarations for all
1234     functions declared and/or defined in a translation unit, including
1235     those in header files.  This option is silently ignored in any
1236     language other than C.
1237
1238     Besides declarations, the file indicates, in comments, the origin
1239     of each declaration (source file and line), whether the
1240     declaration was implicit, prototyped or unprototyped (`I', `N' for
1241     new or `O' for old, respectively, in the first character after the
1242     line number and the colon), and whether it came from a declaration
1243     or a definition (`C' or `F', respectively, in the following
1244     character).  In the case of function definitions, a K&R-style list
1245     of arguments followed by their declarations is also provided,
1246     inside comments, after the declaration.
1247
1248`-fno-asm'
1249     Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1250     code can use these words as identifiers.  You can use the keywords
1251     `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1252     `-fno-asm'.
1253
1254     In C++, this switch only affects the `typeof' keyword, since `asm'
1255     and `inline' are standard keywords.  You may want to use the
1256     `-fno-gnu-keywords' flag instead, which has the same effect.  In
1257     C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1258     the `asm' and `typeof' keywords, since `inline' is a standard
1259     keyword in ISO C99.
1260
1261`-fno-builtin'
1262`-fno-builtin-FUNCTION'
1263     Don't recognize built-in functions that do not begin with
1264     `__builtin_' as prefix.  *Note Other built-in functions provided
1265     by GCC: Other Builtins, for details of the functions affected,
1266     including those which are not built-in functions when `-ansi' or
1267     `-std' options for strict ISO C conformance are used because they
1268     do not have an ISO standard meaning.
1269
1270     GCC normally generates special code to handle certain built-in
1271     functions more efficiently; for instance, calls to `alloca' may
1272     become single instructions that adjust the stack directly, and
1273     calls to `memcpy' may become inline copy loops.  The resulting
1274     code is often both smaller and faster, but since the function
1275     calls no longer appear as such, you cannot set a breakpoint on
1276     those calls, nor can you change the behavior of the functions by
1277     linking with a different library.
1278
1279     With the `-fno-builtin-FUNCTION' option only the built-in function
1280     FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1281     If a function is named this is not built-in in this version of
1282     GCC, this option is ignored.  There is no corresponding
1283     `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1284     functions selectively when using `-fno-builtin' or
1285     `-ffreestanding', you may define macros such as:
1286
1287          #define abs(n)          __builtin_abs ((n))
1288          #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1289
1290`-fhosted'
1291     Assert that compilation takes place in a hosted environment.  This
1292     implies `-fbuiltin'.  A hosted environment is one in which the
1293     entire standard library is available, and in which `main' has a
1294     return type of `int'.  Examples are nearly everything except a
1295     kernel.  This is equivalent to `-fno-freestanding'.
1296
1297`-ffreestanding'
1298     Assert that compilation takes place in a freestanding environment.
1299     This implies `-fno-builtin'.  A freestanding environment is one
1300     in which the standard library may not exist, and program startup
1301     may not necessarily be at `main'.  The most obvious example is an
1302     OS kernel.  This is equivalent to `-fno-hosted'.
1303
1304     *Note Language Standards Supported by GCC: Standards, for details
1305     of freestanding and hosted environments.
1306
1307`-fms-extensions'
1308     Accept some non-standard constructs used in Microsoft header files.
1309
1310`-trigraphs'
1311     Support ISO C trigraphs.  The `-ansi' option (and `-std' options
1312     for strict ISO C conformance) implies `-trigraphs'.
1313
1314`-no-integrated-cpp'
1315     Performs a compilation in two passes: preprocessing and compiling.
1316     This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1317     via the `-B' option. The user supplied compilation step can then
1318     add in an additional preprocessing step after normal preprocessing
1319     but before compiling. The default is to use the integrated cpp
1320     (internal cpp)
1321
1322     The semantics of this option will change if "cc1", "cc1plus", and
1323     "cc1obj" are merged.
1324
1325`-traditional'
1326`-traditional-cpp'
1327     Formerly, these options caused GCC to attempt to emulate a
1328     pre-standard C compiler.  They are now only supported with the
1329     `-E' switch.  The preprocessor continues to support a pre-standard
1330     mode.  See the GNU CPP manual for details.
1331
1332`-fcond-mismatch'
1333     Allow conditional expressions with mismatched types in the second
1334     and third arguments.  The value of such an expression is void.
1335     This option is not supported for C++.
1336
1337`-funsigned-char'
1338     Let the type `char' be unsigned, like `unsigned char'.
1339
1340     Each kind of machine has a default for what `char' should be.  It
1341     is either like `unsigned char' by default or like `signed char' by
1342     default.
1343
1344     Ideally, a portable program should always use `signed char' or
1345     `unsigned char' when it depends on the signedness of an object.
1346     But many programs have been written to use plain `char' and expect
1347     it to be signed, or expect it to be unsigned, depending on the
1348     machines they were written for.  This option, and its inverse, let
1349     you make such a program work with the opposite default.
1350
1351     The type `char' is always a distinct type from each of `signed
1352     char' or `unsigned char', even though its behavior is always just
1353     like one of those two.
1354
1355`-fsigned-char'
1356     Let the type `char' be signed, like `signed char'.
1357
1358     Note that this is equivalent to `-fno-unsigned-char', which is the
1359     negative form of `-funsigned-char'.  Likewise, the option
1360     `-fno-signed-char' is equivalent to `-funsigned-char'.
1361
1362`-fsigned-bitfields'
1363`-funsigned-bitfields'
1364`-fno-signed-bitfields'
1365`-fno-unsigned-bitfields'
1366     These options control whether a bit-field is signed or unsigned,
1367     when the declaration does not use either `signed' or `unsigned'.
1368     By default, such a bit-field is signed, because this is
1369     consistent: the basic integer types such as `int' are signed types.
1370
1371`-fwritable-strings'
1372     Store string constants in the writable data segment and don't
1373     uniquize them.  This is for compatibility with old programs which
1374     assume they can write into string constants.
1375
1376     Writing into string constants is a very bad idea; "constants"
1377     should be constant.
1378
1379     This option is deprecated.
1380
1381
1382File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
1383
13843.5 Options Controlling C++ Dialect
1385===================================
1386
1387This section describes the command-line options that are only meaningful
1388for C++ programs; but you can also use most of the GNU compiler options
1389regardless of what language your program is in.  For example, you might
1390compile a file `firstClass.C' like this:
1391
1392     g++ -g -frepo -O -c firstClass.C
1393
1394In this example, only `-frepo' is an option meant only for C++
1395programs; you can use the other options with any language supported by
1396GCC.
1397
1398 Here is a list of options that are _only_ for compiling C++ programs:
1399
1400`-fabi-version=N'
1401     Use version N of the C++ ABI.  Version 2 is the version of the C++
1402     ABI that first appeared in G++ 3.4.  Version 1 is the version of
1403     the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1404     be the version that conforms most closely to the C++ ABI
1405     specification.  Therefore, the ABI obtained using version 0 will
1406     change as ABI bugs are fixed.
1407
1408     The default is version 2.
1409
1410`-fno-access-control'
1411     Turn off all access checking.  This switch is mainly useful for
1412     working around bugs in the access control code.
1413
1414`-fcheck-new'
1415     Check that the pointer returned by `operator new' is non-null
1416     before attempting to modify the storage allocated.  This check is
1417     normally unnecessary because the C++ standard specifies that
1418     `operator new' will only return `0' if it is declared `throw()',
1419     in which case the compiler will always check the return value even
1420     without this option.  In all other cases, when `operator new' has
1421     a non-empty exception specification, memory exhaustion is
1422     signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
1423
1424`-fconserve-space'
1425     Put uninitialized or runtime-initialized global variables into the
1426     common segment, as C does.  This saves space in the executable at
1427     the cost of not diagnosing duplicate definitions.  If you compile
1428     with this flag and your program mysteriously crashes after
1429     `main()' has completed, you may have an object that is being
1430     destroyed twice because two definitions were merged.
1431
1432     This option is no longer useful on most targets, now that support
1433     has been added for putting variables into BSS without making them
1434     common.
1435
1436`-fno-const-strings'
1437     Give string constants type `char *' instead of type `const char
1438     *'.  By default, G++ uses type `const char *' as required by the
1439     standard.  Even if you use `-fno-const-strings', you cannot
1440     actually modify the value of a string constant, unless you also use
1441     `-fwritable-strings'.
1442
1443     This option might be removed in a future release of G++.  For
1444     maximum portability, you should structure your code so that it
1445     works with string constants that have type `const char *'.
1446
1447`-fno-elide-constructors'
1448     The C++ standard allows an implementation to omit creating a
1449     temporary which is only used to initialize another object of the
1450     same type.  Specifying this option disables that optimization, and
1451     forces G++ to call the copy constructor in all cases.
1452
1453`-fno-enforce-eh-specs'
1454     Don't check for violation of exception specifications at runtime.
1455     This option violates the C++ standard, but may be useful for
1456     reducing code size in production builds, much like defining
1457     `NDEBUG'.  The compiler will still optimize based on the exception
1458     specifications.
1459
1460`-ffor-scope'
1461`-fno-for-scope'
1462     If `-ffor-scope' is specified, the scope of variables declared in
1463     a for-init-statement is limited to the `for' loop itself, as
1464     specified by the C++ standard.  If `-fno-for-scope' is specified,
1465     the scope of variables declared in a for-init-statement extends to
1466     the end of the enclosing scope, as was the case in old versions of
1467     G++, and other (traditional) implementations of C++.
1468
1469     The default if neither flag is given to follow the standard, but
1470     to allow and give a warning for old-style code that would
1471     otherwise be invalid, or have different behavior.
1472
1473`-fno-gnu-keywords'
1474     Do not recognize `typeof' as a keyword, so that code can use this
1475     word as an identifier.  You can use the keyword `__typeof__'
1476     instead.  `-ansi' implies `-fno-gnu-keywords'.
1477
1478`-fno-implicit-templates'
1479     Never emit code for non-inline templates which are instantiated
1480     implicitly (i.e. by use); only emit code for explicit
1481     instantiations.  *Note Template Instantiation::, for more
1482     information.
1483
1484`-fno-implicit-inline-templates'
1485     Don't emit code for implicit instantiations of inline templates,
1486     either.  The default is to handle inlines differently so that
1487     compiles with and without optimization will need the same set of
1488     explicit instantiations.
1489
1490`-fno-implement-inlines'
1491     To save space, do not emit out-of-line copies of inline functions
1492     controlled by `#pragma implementation'.  This will cause linker
1493     errors if these functions are not inlined everywhere they are
1494     called.
1495
1496`-fms-extensions'
1497     Disable pedantic warnings about constructs used in MFC, such as
1498     implicit int and getting a pointer to member function via
1499     non-standard syntax.
1500
1501`-fno-nonansi-builtins'
1502     Disable built-in declarations of functions that are not mandated by
1503     ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
1504     `bzero', `conjf', and other related functions.
1505
1506`-fno-operator-names'
1507     Do not treat the operator name keywords `and', `bitand', `bitor',
1508     `compl', `not', `or' and `xor' as synonyms as keywords.
1509
1510`-fno-optional-diags'
1511     Disable diagnostics that the standard says a compiler does not
1512     need to issue.  Currently, the only such diagnostic issued by G++
1513     is the one for a name having multiple meanings within a class.
1514
1515`-fpermissive'
1516     Downgrade some diagnostics about nonconformant code from errors to
1517     warnings.  Thus, using `-fpermissive' will allow some
1518     nonconforming code to compile.
1519
1520`-frepo'
1521     Enable automatic template instantiation at link time.  This option
1522     also implies `-fno-implicit-templates'.  *Note Template
1523     Instantiation::, for more information.
1524
1525`-fno-rtti'
1526     Disable generation of information about every class with virtual
1527     functions for use by the C++ runtime type identification features
1528     (`dynamic_cast' and `typeid').  If you don't use those parts of
1529     the language, you can save some space by using this flag.  Note
1530     that exception handling uses the same information, but it will
1531     generate it as needed.
1532
1533`-fstats'
1534     Emit statistics about front-end processing at the end of the
1535     compilation.  This information is generally only useful to the G++
1536     development team.
1537
1538`-ftemplate-depth-N'
1539     Set the maximum instantiation depth for template classes to N.  A
1540     limit on the template instantiation depth is needed to detect
1541     endless recursions during template class instantiation.  ANSI/ISO
1542     C++ conforming programs must not rely on a maximum depth greater
1543     than 17.
1544
1545`-fuse-cxa-atexit'
1546     Register destructors for objects with static storage duration with
1547     the `__cxa_atexit' function rather than the `atexit' function.
1548     This option is required for fully standards-compliant handling of
1549     static destructors, but will only work if your C library supports
1550     `__cxa_atexit'.
1551
1552`-fno-weak'
1553     Do not use weak symbol support, even if it is provided by the
1554     linker.  By default, G++ will use weak symbols if they are
1555     available.  This option exists only for testing, and should not be
1556     used by end-users; it will result in inferior code and has no
1557     benefits.  This option may be removed in a future release of G++.
1558
1559`-nostdinc++'
1560     Do not search for header files in the standard directories
1561     specific to C++, but do still search the other standard
1562     directories.  (This option is used when building the C++ library.)
1563
1564 In addition, these optimization, warning, and code generation options
1565have meanings only for C++ programs:
1566
1567`-fno-default-inline'
1568     Do not assume `inline' for functions defined inside a class scope.
1569     *Note Options That Control Optimization: Optimize Options.  Note
1570     that these functions will have linkage like inline functions; they
1571     just won't be inlined by default.
1572
1573`-Wabi (C++ only)'
1574     Warn when G++ generates code that is probably not compatible with
1575     the vendor-neutral C++ ABI.  Although an effort has been made to
1576     warn about all such cases, there are probably some cases that are
1577     not warned about, even though G++ is generating incompatible code.
1578     There may also be cases where warnings are emitted even though
1579     the code that is generated will be compatible.
1580
1581     You should rewrite your code to avoid these warnings if you are
1582     concerned about the fact that code generated by G++ may not be
1583     binary compatible with code generated by other compilers.
1584
1585     The known incompatibilities at this point include:
1586
1587        * Incorrect handling of tail-padding for bit-fields.  G++ may
1588          attempt to pack data into the same byte as a base class.  For
1589          example:
1590
1591               struct A { virtual void f(); int f1 : 1; };
1592               struct B : public A { int f2 : 1; };
1593
1594          In this case, G++ will place `B::f2' into the same byte
1595          as`A::f1'; other compilers will not.  You can avoid this
1596          problem by explicitly padding `A' so that its size is a
1597          multiple of the byte size on your platform; that will cause
1598          G++ and other compilers to layout `B' identically.
1599
1600        * Incorrect handling of tail-padding for virtual bases.  G++
1601          does not use tail padding when laying out virtual bases.  For
1602          example:
1603
1604               struct A { virtual void f(); char c1; };
1605               struct B { B(); char c2; };
1606               struct C : public A, public virtual B {};
1607
1608          In this case, G++ will not place `B' into the tail-padding for
1609          `A'; other compilers will.  You can avoid this problem by
1610          explicitly padding `A' so that its size is a multiple of its
1611          alignment (ignoring virtual base classes); that will cause
1612          G++ and other compilers to layout `C' identically.
1613
1614        * Incorrect handling of bit-fields with declared widths greater
1615          than that of their underlying types, when the bit-fields
1616          appear in a union.  For example:
1617
1618               union U { int i : 4096; };
1619
1620          Assuming that an `int' does not have 4096 bits, G++ will make
1621          the union too small by the number of bits in an `int'.
1622
1623        * Empty classes can be placed at incorrect offsets.  For
1624          example:
1625
1626               struct A {};
1627
1628               struct B {
1629                 A a;
1630                 virtual void f ();
1631               };
1632
1633               struct C : public B, public A {};
1634
1635          G++ will place the `A' base class of `C' at a nonzero offset;
1636          it should be placed at offset zero.  G++ mistakenly believes
1637          that the `A' data member of `B' is already at offset zero.
1638
1639        * Names of template functions whose types involve `typename' or
1640          template template parameters can be mangled incorrectly.
1641
1642               template <typename Q>
1643               void f(typename Q::X) {}
1644
1645               template <template <typename> class Q>
1646               void f(typename Q<int>::X) {}
1647
1648          Instantiations of these templates may be mangled incorrectly.
1649
1650
1651`-Wctor-dtor-privacy (C++ only)'
1652     Warn when a class seems unusable because all the constructors or
1653     destructors in that class are private, and it has neither friends
1654     nor public static member functions.
1655
1656`-Wnon-virtual-dtor (C++ only)'
1657     Warn when a class appears to be polymorphic, thereby requiring a
1658     virtual destructor, yet it declares a non-virtual one.  This
1659     warning is enabled by `-Wall'.
1660
1661`-Wreorder (C++ only)'
1662     Warn when the order of member initializers given in the code does
1663     not match the order in which they must be executed.  For instance:
1664
1665          struct A {
1666            int i;
1667            int j;
1668            A(): j (0), i (1) { }
1669          };
1670
1671     The compiler will rearrange the member initializers for `i' and
1672     `j' to match the declaration order of the members, emitting a
1673     warning to that effect.  This warning is enabled by `-Wall'.
1674
1675 The following `-W...' options are not affected by `-Wall'.
1676
1677`-Weffc++ (C++ only)'
1678     Warn about violations of the following style guidelines from Scott
1679     Meyers' `Effective C++' book:
1680
1681        * Item 11:  Define a copy constructor and an assignment
1682          operator for classes with dynamically allocated memory.
1683
1684        * Item 12:  Prefer initialization to assignment in constructors.
1685
1686        * Item 14:  Make destructors virtual in base classes.
1687
1688        * Item 15:  Have `operator=' return a reference to `*this'.
1689
1690        * Item 23:  Don't try to return a reference when you must
1691          return an object.
1692
1693
1694     Also warn about violations of the following style guidelines from
1695     Scott Meyers' `More Effective C++' book:
1696
1697        * Item 6:  Distinguish between prefix and postfix forms of
1698          increment and decrement operators.
1699
1700        * Item 7:  Never overload `&&', `||', or `,'.
1701
1702
1703     When selecting this option, be aware that the standard library
1704     headers do not obey all of these guidelines; use `grep -v' to
1705     filter out those warnings.
1706
1707`-Wno-deprecated (C++ only)'
1708     Do not warn about usage of deprecated features.  *Note Deprecated
1709     Features::.
1710
1711`-Wno-non-template-friend (C++ only)'
1712     Disable warnings when non-templatized friend functions are declared
1713     within a template.  Since the advent of explicit template
1714     specification support in G++, if the name of the friend is an
1715     unqualified-id (i.e., `friend foo(int)'), the C++ language
1716     specification demands that the friend declare or define an
1717     ordinary, nontemplate function.  (Section 14.5.3).  Before G++
1718     implemented explicit specification, unqualified-ids could be
1719     interpreted as a particular specialization of a templatized
1720     function.  Because this non-conforming behavior is no longer the
1721     default behavior for G++, `-Wnon-template-friend' allows the
1722     compiler to check existing code for potential trouble spots and is
1723     on by default.  This new compiler behavior can be turned off with
1724     `-Wno-non-template-friend' which keeps the conformant compiler code
1725     but disables the helpful warning.
1726
1727`-Wold-style-cast (C++ only)'
1728     Warn if an old-style (C-style) cast to a non-void type is used
1729     within a C++ program.  The new-style casts (`static_cast',
1730     `reinterpret_cast', and `const_cast') are less vulnerable to
1731     unintended effects and much easier to search for.
1732
1733`-Woverloaded-virtual (C++ only)'
1734     Warn when a function declaration hides virtual functions from a
1735     base class.  For example, in:
1736
1737          struct A {
1738            virtual void f();
1739          };
1740
1741          struct B: public A {
1742            void f(int);
1743          };
1744
1745     the `A' class version of `f' is hidden in `B', and code like:
1746
1747          B* b;
1748          b->f();
1749
1750     will fail to compile.
1751
1752`-Wno-pmf-conversions (C++ only)'
1753     Disable the diagnostic for converting a bound pointer to member
1754     function to a plain pointer.
1755
1756`-Wsign-promo (C++ only)'
1757     Warn when overload resolution chooses a promotion from unsigned or
1758     enumerated type to a signed type, over a conversion to an unsigned
1759     type of the same size.  Previous versions of G++ would try to
1760     preserve unsignedness, but the standard mandates the current
1761     behavior.
1762
1763`-Wsynth (C++ only)'
1764     Warn when G++'s synthesis behavior does not match that of cfront.
1765     For instance:
1766
1767          struct A {
1768            operator int ();
1769            A& operator = (int);
1770          };
1771
1772          main ()
1773          {
1774            A a,b;
1775            a = b;
1776          }
1777
1778     In this example, G++ will synthesize a default `A& operator =
1779     (const A&);', while cfront will use the user-defined `operator ='.
1780
1781
1782File: gcc.info,  Node: Objective-C Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
1783
17843.6 Options Controlling Objective-C Dialect
1785===========================================
1786
1787(NOTE: This manual does not describe the Objective-C language itself.
1788See `http://gcc.gnu.org/readings.html' for references.)
1789
1790 This section describes the command-line options that are only
1791meaningful for Objective-C programs, but you can also use most of the
1792GNU compiler options regardless of what language your program is in.
1793For example, you might compile a file `some_class.m' like this:
1794
1795     gcc -g -fgnu-runtime -O -c some_class.m
1796
1797In this example, `-fgnu-runtime' is an option meant only for
1798Objective-C programs; you can use the other options with any language
1799supported by GCC.
1800
1801 Here is a list of options that are _only_ for compiling Objective-C
1802programs:
1803
1804`-fconstant-string-class=CLASS-NAME'
1805     Use CLASS-NAME as the name of the class to instantiate for each
1806     literal string specified with the syntax `@"..."'.  The default
1807     class name is `NXConstantString' if the GNU runtime is being used,
1808     and `NSConstantString' if the NeXT runtime is being used (see
1809     below).  The `-fconstant-cfstrings' option, if also present, will
1810     override the `-fconstant-string-class' setting and cause `@"..."'
1811     literals to be laid out as constant CoreFoundation strings.
1812
1813`-fgnu-runtime'
1814     Generate object code compatible with the standard GNU Objective-C
1815     runtime.  This is the default for most types of systems.
1816
1817`-fnext-runtime'
1818     Generate output compatible with the NeXT runtime.  This is the
1819     default for NeXT-based systems, including Darwin and Mac OS X.
1820     The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
1821     option is used.
1822
1823`-fno-nil-receivers'
1824     Assume that all Objective-C message dispatches (e.g., `[receiver
1825     message:arg]') in this translation unit ensure that the receiver
1826     is not `nil'.  This allows for more efficient entry points in the
1827     runtime to be used.  Currently, this option is only available in
1828     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1829
1830`-fobjc-exceptions'
1831     Enable syntactic support for structured exception handling in
1832     Objective-C, similar to what is offered by C++ and Java.
1833     Currently, this option is only available in conjunction with the
1834     NeXT runtime on Mac OS X 10.3 and later.
1835
1836            @try {
1837              ...
1838                 @throw expr;
1839              ...
1840            }
1841            @catch (AnObjCClass *exc) {
1842              ...
1843                @throw expr;
1844              ...
1845                @throw;
1846              ...
1847            }
1848            @catch (AnotherClass *exc) {
1849              ...
1850            }
1851            @catch (id allOthers) {
1852              ...
1853            }
1854            @finally {
1855              ...
1856                @throw expr;
1857              ...
1858            }
1859
1860     The `@throw' statement may appear anywhere in an Objective-C or
1861     Objective-C++ program; when used inside of a `@catch' block, the
1862     `@throw' may appear without an argument (as shown above), in which
1863     case the object caught by the `@catch' will be rethrown.
1864
1865     Note that only (pointers to) Objective-C objects may be thrown and
1866     caught using this scheme.  When an object is thrown, it will be
1867     caught by the nearest `@catch' clause capable of handling objects
1868     of that type, analogously to how `catch' blocks work in C++ and
1869     Java.  A `@catch(id ...)' clause (as shown above) may also be
1870     provided to catch any and all Objective-C exceptions not caught by
1871     previous `@catch' clauses (if any).
1872
1873     The `@finally' clause, if present, will be executed upon exit from
1874     the immediately preceding `@try ... @catch' section.  This will
1875     happen regardless of whether any exceptions are thrown, caught or
1876     rethrown inside the `@try ... @catch' section, analogously to the
1877     behavior of the `finally' clause in Java.
1878
1879     There are several caveats to using the new exception mechanism:
1880
1881        * Although currently designed to be binary compatible with
1882          `NS_HANDLER'-style idioms provided by the `NSException'
1883          class, the new exceptions can only be used on Mac OS X 10.3
1884          (Panther) and later systems, due to additional functionality
1885          needed in the (NeXT) Objective-C runtime.
1886
1887        * As mentioned above, the new exceptions do not support handling
1888          types other than Objective-C objects.   Furthermore, when
1889          used from Objective-C++, the Objective-C exception model does
1890          not interoperate with C++ exceptions at this time.  This
1891          means you cannot `@throw' an exception from Objective-C and
1892          `catch' it in C++, or vice versa (i.e., `throw ... @catch').
1893
1894     The `-fobjc-exceptions' switch also enables the use of
1895     synchronization blocks for thread-safe execution:
1896
1897            @synchronized (ObjCClass *guard) {
1898              ...
1899            }
1900
1901     Upon entering the `@synchronized' block, a thread of execution
1902     shall first check whether a lock has been placed on the
1903     corresponding `guard' object by another thread.  If it has, the
1904     current thread shall wait until the other thread relinquishes its
1905     lock.  Once `guard' becomes available, the current thread will
1906     place its own lock on it, execute the code contained in the
1907     `@synchronized' block, and finally relinquish the lock (thereby
1908     making `guard' available to other threads).
1909
1910     Unlike Java, Objective-C does not allow for entire methods to be
1911     marked `@synchronized'.  Note that throwing exceptions out of
1912     `@synchronized' blocks is allowed, and will cause the guarding
1913     object to be unlocked properly.
1914
1915`-freplace-objc-classes'
1916     Emit a special marker instructing `ld(1)' not to statically link in
1917     the resulting object file, and allow `dyld(1)' to load it in at
1918     run time instead.  This is used in conjunction with the
1919     Fix-and-Continue debugging mode, where the object file in question
1920     may be recompiled and dynamically reloaded in the course of
1921     program execution, without the need to restart the program itself.
1922     Currently, Fix-and-Continue functionality is only available in
1923     conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1924
1925`-fzero-link'
1926     When compiling for the NeXT runtime, the compiler ordinarily
1927     replaces calls to `objc_getClass("...")' (when the name of the
1928     class is known at compile time) with static class references that
1929     get initialized at load time, which improves run-time performance.
1930     Specifying the `-fzero-link' flag suppresses this behavior and
1931     causes calls to `objc_getClass("...")' to be retained.  This is
1932     useful in Zero-Link debugging mode, since it allows for individual
1933     class implementations to be modified during program execution.
1934
1935`-gen-decls'
1936     Dump interface declarations for all classes seen in the source
1937     file to a file named `SOURCENAME.decl'.
1938
1939`-Wno-protocol'
1940     If a class is declared to implement a protocol, a warning is
1941     issued for every method in the protocol that is not implemented by
1942     the class.  The default behavior is to issue a warning for every
1943     method not explicitly implemented in the class, even if a method
1944     implementation is inherited from the superclass.  If you use the
1945     `-Wno-protocol' option, then methods inherited from the superclass
1946     are considered to be implemented, and no warning is issued for
1947     them.
1948
1949`-Wselector'
1950     Warn if multiple methods of different types for the same selector
1951     are found during compilation.  The check is performed on the list
1952     of methods in the final stage of compilation.  Additionally, a
1953     check is performed for each selector appearing in a
1954     `@selector(...)'  expression, and a corresponding method for that
1955     selector has been found during compilation.  Because these checks
1956     scan the method table only at the end of compilation, these
1957     warnings are not produced if the final stage of compilation is not
1958     reached, for example because an error is found during compilation,
1959     or because the `-fsyntax-only' option is being used.
1960
1961`-Wundeclared-selector'
1962     Warn if a `@selector(...)' expression referring to an undeclared
1963     selector is found.  A selector is considered undeclared if no
1964     method with that name has been declared before the
1965     `@selector(...)' expression, either explicitly in an `@interface'
1966     or `@protocol' declaration, or implicitly in an `@implementation'
1967     section.  This option always performs its checks as soon as a
1968     `@selector(...)' expression is found, while `-Wselector' only
1969     performs its checks in the final stage of compilation.  This also
1970     enforces the coding style convention that methods and selectors
1971     must be declared before being used.
1972
1973`-print-objc-runtime-info'
1974     Generate C header describing the largest structure that is passed
1975     by value, if any.
1976
1977
1978
1979File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C Dialect Options,  Up: Invoking GCC
1980
19813.7 Options to Control Diagnostic Messages Formatting
1982=====================================================
1983
1984Traditionally, diagnostic messages have been formatted irrespective of
1985the output device's aspect (e.g. its width, ...).  The options described
1986below can be used to control the diagnostic messages formatting
1987algorithm, e.g. how many characters per line, how often source location
1988information should be reported.  Right now, only the C++ front end can
1989honor these options.  However it is expected, in the near future, that
1990the remaining front ends would be able to digest them correctly.
1991
1992`-fmessage-length=N'
1993     Try to format error messages so that they fit on lines of about N
1994     characters.  The default is 72 characters for `g++' and 0 for the
1995     rest of the front ends supported by GCC.  If N is zero, then no
1996     line-wrapping will be done; each error message will appear on a
1997     single line.
1998
1999`-fdiagnostics-show-location=once'
2000     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2001     messages reporter to emit _once_ source location information; that
2002     is, in case the message is too long to fit on a single physical
2003     line and has to be wrapped, the source location won't be emitted
2004     (as prefix) again, over and over, in subsequent continuation
2005     lines.  This is the default behavior.
2006
2007`-fdiagnostics-show-location=every-line'
2008     Only meaningful in line-wrapping mode.  Instructs the diagnostic
2009     messages reporter to emit the same source location information (as
2010     prefix) for physical lines that result from the process of breaking
2011     a message which is too long to fit on a single line.
2012
2013
2014
2015File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
2016
20173.8 Options to Request or Suppress Warnings
2018===========================================
2019
2020Warnings are diagnostic messages that report constructions which are
2021not inherently erroneous but which are risky or suggest there may have
2022been an error.
2023
2024 You can request many specific warnings with options beginning `-W',
2025for example `-Wimplicit' to request warnings on implicit declarations.
2026Each of these specific warning options also has a negative form
2027beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2028This manual lists only one of the two forms, whichever is not the
2029default.
2030
2031 The following options control the amount and kinds of warnings produced
2032by GCC; for further, language-specific options also refer to *Note C++
2033Dialect Options:: and *Note Objective-C Dialect Options::.
2034
2035`-fsyntax-only'
2036     Check the code for syntax errors, but don't do anything beyond
2037     that.
2038
2039`-pedantic'
2040     Issue all the warnings demanded by strict ISO C and ISO C++;
2041     reject all programs that use forbidden extensions, and some other
2042     programs that do not follow ISO C and ISO C++.  For ISO C, follows
2043     the version of the ISO C standard specified by any `-std' option
2044     used.
2045
2046     Valid ISO C and ISO C++ programs should compile properly with or
2047     without this option (though a rare few will require `-ansi' or a
2048     `-std' option specifying the required version of ISO C).  However,
2049     without this option, certain GNU extensions and traditional C and
2050     C++ features are supported as well.  With this option, they are
2051     rejected.
2052
2053     `-pedantic' does not cause warning messages for use of the
2054     alternate keywords whose names begin and end with `__'.  Pedantic
2055     warnings are also disabled in the expression that follows
2056     `__extension__'.  However, only system header files should use
2057     these escape routes; application programs should avoid them.
2058     *Note Alternate Keywords::.
2059
2060     Some users try to use `-pedantic' to check programs for strict ISO
2061     C conformance.  They soon find that it does not do quite what they
2062     want: it finds some non-ISO practices, but not all--only those for
2063     which ISO C _requires_ a diagnostic, and some others for which
2064     diagnostics have been added.
2065
2066     A feature to report any failure to conform to ISO C might be
2067     useful in some instances, but would require considerable
2068     additional work and would be quite different from `-pedantic'.  We
2069     don't have plans to support such a feature in the near future.
2070
2071     Where the standard specified with `-std' represents a GNU extended
2072     dialect of C, such as `gnu89' or `gnu99', there is a corresponding
2073     "base standard", the version of ISO C on which the GNU extended
2074     dialect is based.  Warnings from `-pedantic' are given where they
2075     are required by the base standard.  (It would not make sense for
2076     such warnings to be given only for features not in the specified
2077     GNU C dialect, since by definition the GNU dialects of C include
2078     all features the compiler supports with the given option, and
2079     there would be nothing to warn about.)
2080
2081`-pedantic-errors'
2082     Like `-pedantic', except that errors are produced rather than
2083     warnings.
2084
2085`-w'
2086     Inhibit all warning messages.
2087
2088`-Wno-import'
2089     Inhibit warning messages about the use of `#import'.
2090
2091`-Wchar-subscripts'
2092     Warn if an array subscript has type `char'.  This is a common cause
2093     of error, as programmers often forget that this type is signed on
2094     some machines.
2095
2096`-Wcomment'
2097     Warn whenever a comment-start sequence `/*' appears in a `/*'
2098     comment, or whenever a Backslash-Newline appears in a `//' comment.
2099
2100`-Wformat'
2101     Check calls to `printf' and `scanf', etc., to make sure that the
2102     arguments supplied have types appropriate to the format string
2103     specified, and that the conversions specified in the format string
2104     make sense.  This includes standard functions, and others
2105     specified by format attributes (*note Function Attributes::), in
2106     the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2107     extension, not in the C standard) families.
2108
2109     The formats are checked against the format features supported by
2110     GNU libc version 2.2.  These include all ISO C90 and C99 features,
2111     as well as features from the Single Unix Specification and some
2112     BSD and GNU extensions.  Other library implementations may not
2113     support all these features; GCC does not support warning about
2114     features that go beyond a particular library's limitations.
2115     However, if `-pedantic' is used with `-Wformat', warnings will be
2116     given about format features not in the selected standard version
2117     (but not for `strfmon' formats, since those are not in any version
2118     of the C standard).  *Note Options Controlling C Dialect: C
2119     Dialect Options.
2120
2121     Since `-Wformat' also checks for null format arguments for several
2122     functions, `-Wformat' also implies `-Wnonnull'.
2123
2124     `-Wformat' is included in `-Wall'.  For more control over some
2125     aspects of format checking, the options `-Wformat-y2k',
2126     `-Wno-format-extra-args', `-Wno-format-zero-length',
2127     `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2128     available, but are not included in `-Wall'.
2129
2130`-Wformat-y2k'
2131     If `-Wformat' is specified, also warn about `strftime' formats
2132     which may yield only a two-digit year.
2133
2134`-Wno-format-extra-args'
2135     If `-Wformat' is specified, do not warn about excess arguments to a
2136     `printf' or `scanf' format function.  The C standard specifies
2137     that such arguments are ignored.
2138
2139     Where the unused arguments lie between used arguments that are
2140     specified with `$' operand number specifications, normally
2141     warnings are still given, since the implementation could not know
2142     what type to pass to `va_arg' to skip the unused arguments.
2143     However, in the case of `scanf' formats, this option will suppress
2144     the warning if the unused arguments are all pointers, since the
2145     Single Unix Specification says that such unused arguments are
2146     allowed.
2147
2148`-Wno-format-zero-length'
2149     If `-Wformat' is specified, do not warn about zero-length formats.
2150     The C standard specifies that zero-length formats are allowed.
2151
2152`-Wformat-nonliteral'
2153     If `-Wformat' is specified, also warn if the format string is not a
2154     string literal and so cannot be checked, unless the format function
2155     takes its format arguments as a `va_list'.
2156
2157`-Wformat-security'
2158     If `-Wformat' is specified, also warn about uses of format
2159     functions that represent possible security problems.  At present,
2160     this warns about calls to `printf' and `scanf' functions where the
2161     format string is not a string literal and there are no format
2162     arguments, as in `printf (foo);'.  This may be a security hole if
2163     the format string came from untrusted input and contains `%n'.
2164     (This is currently a subset of what `-Wformat-nonliteral' warns
2165     about, but in future warnings may be added to `-Wformat-security'
2166     that are not included in `-Wformat-nonliteral'.)
2167
2168`-Wformat=2'
2169     Enable `-Wformat' plus format checks not included in `-Wformat'.
2170     Currently equivalent to `-Wformat -Wformat-nonliteral
2171     -Wformat-security -Wformat-y2k'.
2172
2173`-Wnonnull'
2174     Warn about passing a null pointer for arguments marked as
2175     requiring a non-null value by the `nonnull' function attribute.
2176
2177     `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
2178     disabled with the `-Wno-nonnull' option.
2179
2180`-Winit-self (C, C++, and Objective-C only)'
2181     Warn about uninitialized variables which are initialized with
2182     themselves.  Note this option can only be used with the
2183     `-Wuninitialized' option, which in turn only works with `-O1' and
2184     above.
2185
2186     For example, GCC will warn about `i' being uninitialized in the
2187     following snippet only when `-Winit-self' has been specified:
2188          int f()
2189          {
2190            int i = i;
2191            return i;
2192          }
2193
2194`-Wimplicit-int'
2195     Warn when a declaration does not specify a type.
2196
2197`-Wimplicit-function-declaration'
2198`-Werror-implicit-function-declaration'
2199     Give a warning (or error) whenever a function is used before being
2200     declared.
2201
2202`-Wimplicit'
2203     Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
2204
2205`-Wmain'
2206     Warn if the type of `main' is suspicious.  `main' should be a
2207     function with external linkage, returning int, taking either zero
2208     arguments, two, or three arguments of appropriate types.
2209
2210`-Wmissing-braces'
2211     Warn if an aggregate or union initializer is not fully bracketed.
2212     In the following example, the initializer for `a' is not fully
2213     bracketed, but that for `b' is fully bracketed.
2214
2215          int a[2][2] = { 0, 1, 2, 3 };
2216          int b[2][2] = { { 0, 1 }, { 2, 3 } };
2217
2218`-Wparentheses'
2219     Warn if parentheses are omitted in certain contexts, such as when
2220     there is an assignment in a context where a truth value is
2221     expected, or when operators are nested whose precedence people
2222     often get confused about.
2223
2224     Also warn about constructions where there may be confusion to which
2225     `if' statement an `else' branch belongs.  Here is an example of
2226     such a case:
2227
2228          {
2229            if (a)
2230              if (b)
2231                foo ();
2232            else
2233              bar ();
2234          }
2235
2236     In C, every `else' branch belongs to the innermost possible `if'
2237     statement, which in this example is `if (b)'.  This is often not
2238     what the programmer expected, as illustrated in the above example
2239     by indentation the programmer chose.  When there is the potential
2240     for this confusion, GCC will issue a warning when this flag is
2241     specified.  To eliminate the warning, add explicit braces around
2242     the innermost `if' statement so there is no way the `else' could
2243     belong to the enclosing `if'.  The resulting code would look like
2244     this:
2245
2246          {
2247            if (a)
2248              {
2249                if (b)
2250                  foo ();
2251                else
2252                  bar ();
2253              }
2254          }
2255
2256`-Wsequence-point'
2257     Warn about code that may have undefined semantics because of
2258     violations of sequence point rules in the C standard.
2259
2260     The C standard defines the order in which expressions in a C
2261     program are evaluated in terms of "sequence points", which
2262     represent a partial ordering between the execution of parts of the
2263     program: those executed before the sequence point, and those
2264     executed after it.  These occur after the evaluation of a full
2265     expression (one which is not part of a larger expression), after
2266     the evaluation of the first operand of a `&&', `||', `? :' or `,'
2267     (comma) operator, before a function is called (but after the
2268     evaluation of its arguments and the expression denoting the called
2269     function), and in certain other places.  Other than as expressed
2270     by the sequence point rules, the order of evaluation of
2271     subexpressions of an expression is not specified.  All these rules
2272     describe only a partial order rather than a total order, since,
2273     for example, if two functions are called within one expression
2274     with no sequence point between them, the order in which the
2275     functions are called is not specified.  However, the standards
2276     committee have ruled that function calls do not overlap.
2277
2278     It is not specified when between sequence points modifications to
2279     the values of objects take effect.  Programs whose behavior
2280     depends on this have undefined behavior; the C standard specifies
2281     that "Between the previous and next sequence point an object shall
2282     have its stored value modified at most once by the evaluation of
2283     an expression.  Furthermore, the prior value shall be read only to
2284     determine the value to be stored.".  If a program breaks these
2285     rules, the results on any particular implementation are entirely
2286     unpredictable.
2287
2288     Examples of code with undefined behavior are `a = a++;', `a[n] =
2289     b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
2290     diagnosed by this option, and it may give an occasional false
2291     positive result, but in general it has been found fairly effective
2292     at detecting this sort of problem in programs.
2293
2294     The present implementation of this option only works for C
2295     programs.  A future implementation may also work for C++ programs.
2296
2297     The C standard is worded confusingly, therefore there is some
2298     debate over the precise meaning of the sequence point rules in
2299     subtle cases.  Links to discussions of the problem, including
2300     proposed formal definitions, may be found on the GCC readings
2301     page, at `http://gcc.gnu.org/readings.html'.
2302
2303`-Wreturn-type'
2304     Warn whenever a function is defined with a return-type that
2305     defaults to `int'.  Also warn about any `return' statement with no
2306     return-value in a function whose return-type is not `void'.
2307
2308     For C++, a function without return type always produces a
2309     diagnostic message, even when `-Wno-return-type' is specified.
2310     The only exceptions are `main' and functions defined in system
2311     headers.
2312
2313`-Wswitch'
2314     Warn whenever a `switch' statement has an index of enumerated type
2315     and lacks a `case' for one or more of the named codes of that
2316     enumeration.  (The presence of a `default' label prevents this
2317     warning.)  `case' labels outside the enumeration range also
2318     provoke warnings when this option is used.
2319
2320`-Wswitch-default'
2321     Warn whenever a `switch' statement does not have a `default' case.
2322
2323`-Wswitch-enum'
2324     Warn whenever a `switch' statement has an index of enumerated type
2325     and lacks a `case' for one or more of the named codes of that
2326     enumeration.  `case' labels outside the enumeration range also
2327     provoke warnings when this option is used.
2328
2329`-Wtrigraphs'
2330     Warn if any trigraphs are encountered that might change the
2331     meaning of the program (trigraphs within comments are not warned
2332     about).
2333
2334`-Wunused-function'
2335     Warn whenever a static function is declared but not defined or a
2336     non\-inline static function is unused.
2337
2338`-Wunused-label'
2339     Warn whenever a label is declared but not used.
2340
2341     To suppress this warning use the `unused' attribute (*note
2342     Variable Attributes::).
2343
2344`-Wunused-parameter'
2345     Warn whenever a function parameter is unused aside from its
2346     declaration.
2347
2348     To suppress this warning use the `unused' attribute (*note
2349     Variable Attributes::).
2350
2351`-Wunused-variable'
2352     Warn whenever a local variable or non-constant static variable is
2353     unused aside from its declaration
2354
2355     To suppress this warning use the `unused' attribute (*note
2356     Variable Attributes::).
2357
2358`-Wunused-value'
2359     Warn whenever a statement computes a result that is explicitly not
2360     used.
2361
2362     To suppress this warning cast the expression to `void'.
2363
2364`-Wunused'
2365     All the above `-Wunused' options combined.
2366
2367     In order to get a warning about an unused function parameter, you
2368     must either specify `-Wextra -Wunused' (note that `-Wall' implies
2369     `-Wunused'), or separately specify `-Wunused-parameter'.
2370
2371`-Wuninitialized'
2372     Warn if an automatic variable is used without first being
2373     initialized or if a variable may be clobbered by a `setjmp' call.
2374
2375     These warnings are possible only in optimizing compilation,
2376     because they require data flow information that is computed only
2377     when optimizing.  If you don't specify `-O', you simply won't get
2378     these warnings.
2379
2380     If you want to warn about code which uses the uninitialized value
2381     of the variable in its own initializer, use the `-Winit-self'
2382     option.
2383
2384     These warnings occur only for variables that are candidates for
2385     register allocation.  Therefore, they do not occur for a variable
2386     that is declared `volatile', or whose address is taken, or whose
2387     size is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
2388     structures, unions or arrays, even when they are in registers.
2389
2390     Note that there may be no warning about a variable that is used
2391     only to compute a value that itself is never used, because such
2392     computations may be deleted by data flow analysis before the
2393     warnings are printed.
2394
2395     These warnings are made optional because GCC is not smart enough
2396     to see all the reasons why the code might be correct despite
2397     appearing to have an error.  Here is one example of how this can
2398     happen:
2399
2400          {
2401            int x;
2402            switch (y)
2403              {
2404              case 1: x = 1;
2405                break;
2406              case 2: x = 4;
2407                break;
2408              case 3: x = 5;
2409              }
2410            foo (x);
2411          }
2412
2413     If the value of `y' is always 1, 2 or 3, then `x' is always
2414     initialized, but GCC doesn't know this.  Here is another common
2415     case:
2416
2417          {
2418            int save_y;
2419            if (change_y) save_y = y, y = new_y;
2420            ...
2421            if (change_y) y = save_y;
2422          }
2423
2424     This has no bug because `save_y' is used only if it is set.
2425
2426     This option also warns when a non-volatile automatic variable
2427     might be changed by a call to `longjmp'.  These warnings as well
2428     are possible only in optimizing compilation.
2429
2430     The compiler sees only the calls to `setjmp'.  It cannot know
2431     where `longjmp' will be called; in fact, a signal handler could
2432     call it at any point in the code.  As a result, you may get a
2433     warning even when there is in fact no problem because `longjmp'
2434     cannot in fact be called at the place which would cause a problem.
2435
2436     Some spurious warnings can be avoided if you declare all the
2437     functions you use that never return as `noreturn'.  *Note Function
2438     Attributes::.
2439
2440`-Wunknown-pragmas'
2441     Warn when a #pragma directive is encountered which is not
2442     understood by GCC.  If this command line option is used, warnings
2443     will even be issued for unknown pragmas in system header files.
2444     This is not the case if the warnings were only enabled by the
2445     `-Wall' command line option.
2446
2447`-Wstrict-aliasing'
2448     This option is only active when `-fstrict-aliasing' is active.  It
2449     warns about code which might break the strict aliasing rules that
2450     the compiler is using for optimization. The warning does not catch
2451     all cases, but does attempt to catch the more common pitfalls. It
2452     is included in `-Wall'.
2453
2454`-Wall'
2455     All of the above `-W' options combined.  This enables all the
2456     warnings about constructions that some users consider
2457     questionable, and that are easy to avoid (or modify to prevent the
2458     warning), even in conjunction with macros.  This also enables some
2459     language-specific warnings described in *Note C++ Dialect
2460     Options:: and *Note Objective-C Dialect Options::.
2461
2462 The following `-W...' options are not implied by `-Wall'.  Some of
2463them warn about constructions that users generally do not consider
2464questionable, but which occasionally you might wish to check for;
2465others warn about constructions that are necessary or hard to avoid in
2466some cases, and there is no simple way to modify the code to suppress
2467the warning.
2468
2469`-Wextra'
2470     (This option used to be called `-W'.  The older name is still
2471     supported, but the newer name is more descriptive.)  Print extra
2472     warning messages for these events:
2473
2474        * A function can return either with or without a value.
2475          (Falling off the end of the function body is considered
2476          returning without a value.)  For example, this function would
2477          evoke such a warning:
2478
2479               foo (a)
2480               {
2481                 if (a > 0)
2482                   return a;
2483               }
2484
2485        * An expression-statement or the left-hand side of a comma
2486          expression contains no side effects.  To suppress the
2487          warning, cast the unused expression to void.  For example, an
2488          expression such as `x[i,j]' will cause a warning, but
2489          `x[(void)i,j]' will not.
2490
2491        * An unsigned value is compared against zero with `<' or `>='.
2492
2493        * A comparison like `x<=y<=z' appears; this is equivalent to
2494          `(x<=y ? 1 : 0) <= z', which is a different interpretation
2495          from that of ordinary mathematical notation.
2496
2497        * Storage-class specifiers like `static' are not the first
2498          things in a declaration.  According to the C Standard, this
2499          usage is obsolescent.
2500
2501        * The return type of a function has a type qualifier such as
2502          `const'.  Such a type qualifier has no effect, since the
2503          value returned by a function is not an lvalue.  (But don't
2504          warn about the GNU extension of `volatile void' return types.
2505          That extension will be warned about if `-pedantic' is
2506          specified.)
2507
2508        * If `-Wall' or `-Wunused' is also specified, warn about unused
2509          arguments.
2510
2511        * A comparison between signed and unsigned values could produce
2512          an incorrect result when the signed value is converted to
2513          unsigned.  (But don't warn if `-Wno-sign-compare' is also
2514          specified.)
2515
2516        * An aggregate has an initializer which does not initialize all
2517          members.  For example, the following code would cause such a
2518          warning, because `x.h' would be implicitly initialized to
2519          zero:
2520
2521               struct s { int f, g, h; };
2522               struct s x = { 3, 4 };
2523
2524        * A function parameter is declared without a type specifier in
2525          K&R-style functions:
2526
2527               void foo(bar) { }
2528
2529        * An empty body occurs in an `if' or `else' statement.
2530
2531        * A pointer is compared against integer zero with `<', `<=',
2532          `>', or `>='.
2533
2534        * A variable might be changed by `longjmp' or `vfork'.
2535
2536        * Any of several floating-point events that often indicate
2537          errors, such as overflow, underflow, loss of precision, etc.
2538
2539        * (C++ only) An enumerator and a non-enumerator both appear in
2540          a conditional expression.
2541
2542        * (C++ only) A non-static reference or non-static `const'
2543          member appears in a class without constructors.
2544
2545        * (C++ only) Ambiguous virtual bases.
2546
2547        * (C++ only) Subscripting an array which has been declared
2548          `register'.
2549
2550        * (C++ only) Taking the address of a variable which has been
2551          declared `register'.
2552
2553        * (C++ only) A base class is not initialized in a derived
2554          class' copy constructor.
2555
2556`-Wno-div-by-zero'
2557     Do not warn about compile-time integer division by zero.  Floating
2558     point division by zero is not warned about, as it can be a
2559     legitimate way of obtaining infinities and NaNs.
2560
2561`-Wsystem-headers'
2562     Print warning messages for constructs found in system header files.
2563     Warnings from system headers are normally suppressed, on the
2564     assumption that they usually do not indicate real problems and
2565     would only make the compiler output harder to read.  Using this
2566     command line option tells GCC to emit warnings from system headers
2567     as if they occurred in user code.  However, note that using
2568     `-Wall' in conjunction with this option will _not_ warn about
2569     unknown pragmas in system headers--for that, `-Wunknown-pragmas'
2570     must also be used.
2571
2572`-Wfloat-equal'
2573     Warn if floating point values are used in equality comparisons.
2574
2575     The idea behind this is that sometimes it is convenient (for the
2576     programmer) to consider floating-point values as approximations to
2577     infinitely precise real numbers.  If you are doing this, then you
2578     need to compute (by analyzing the code, or in some other way) the
2579     maximum or likely maximum error that the computation introduces,
2580     and allow for it when performing comparisons (and when producing
2581     output, but that's a different problem).  In particular, instead
2582     of testing for equality, you would check to see whether the two
2583     values have ranges that overlap; and this is done with the
2584     relational operators, so equality comparisons are probably
2585     mistaken.
2586
2587`-Wtraditional (C only)'
2588     Warn about certain constructs that behave differently in
2589     traditional and ISO C.  Also warn about ISO C constructs that have
2590     no traditional C equivalent, and/or problematic constructs which
2591     should be avoided.
2592
2593        * Macro parameters that appear within string literals in the
2594          macro body.  In traditional C macro replacement takes place
2595          within string literals, but does not in ISO C.
2596
2597        * In traditional C, some preprocessor directives did not exist.
2598          Traditional preprocessors would only consider a line to be a
2599          directive if the `#' appeared in column 1 on the line.
2600          Therefore `-Wtraditional' warns about directives that
2601          traditional C understands but would ignore because the `#'
2602          does not appear as the first character on the line.  It also
2603          suggests you hide directives like `#pragma' not understood by
2604          traditional C by indenting them.  Some traditional
2605          implementations would not recognize `#elif', so it suggests
2606          avoiding it altogether.
2607
2608        * A function-like macro that appears without arguments.
2609
2610        * The unary plus operator.
2611
2612        * The `U' integer constant suffix, or the `F' or `L' floating
2613          point constant suffixes.  (Traditional C does support the `L'
2614          suffix on integer constants.)  Note, these suffixes appear in
2615          macros defined in the system headers of most modern systems,
2616          e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
2617          macros in user code might normally lead to spurious warnings,
2618          however GCC's integrated preprocessor has enough context to
2619          avoid warning in these cases.
2620
2621        * A function declared external in one block and then used after
2622          the end of the block.
2623
2624        * A `switch' statement has an operand of type `long'.
2625
2626        * A non-`static' function declaration follows a `static' one.
2627          This construct is not accepted by some traditional C
2628          compilers.
2629
2630        * The ISO type of an integer constant has a different width or
2631          signedness from its traditional type.  This warning is only
2632          issued if the base of the constant is ten.  I.e. hexadecimal
2633          or octal values, which typically represent bit patterns, are
2634          not warned about.
2635
2636        * Usage of ISO string concatenation is detected.
2637
2638        * Initialization of automatic aggregates.
2639
2640        * Identifier conflicts with labels.  Traditional C lacks a
2641          separate namespace for labels.
2642
2643        * Initialization of unions.  If the initializer is zero, the
2644          warning is omitted.  This is done under the assumption that
2645          the zero initializer in user code appears conditioned on e.g.
2646          `__STDC__' to avoid missing initializer warnings and relies
2647          on default initialization to zero in the traditional C case.
2648
2649        * Conversions by prototypes between fixed/floating point values
2650          and vice versa.  The absence of these prototypes when
2651          compiling with traditional C would cause serious problems.
2652          This is a subset of the possible conversion warnings, for the
2653          full set use `-Wconversion'.
2654
2655        * Use of ISO C style function definitions.  This warning
2656          intentionally is _not_ issued for prototype declarations or
2657          variadic functions because these ISO C features will appear
2658          in your code when using libiberty's traditional C
2659          compatibility macros, `PARAMS' and `VPARAMS'.  This warning
2660          is also bypassed for nested functions because that feature is
2661          already a GCC extension and thus not relevant to traditional
2662          C compatibility.
2663
2664`-Wdeclaration-after-statement (C only)'
2665     Warn when a declaration is found after a statement in a block.
2666     This construct, known from C++, was introduced with ISO C99 and is
2667     by default allowed in GCC.  It is not supported by ISO C90 and was
2668     not supported by GCC versions before GCC 3.0.  *Note Mixed
2669     Declarations::.
2670
2671`-Wundef'
2672     Warn if an undefined identifier is evaluated in an `#if' directive.
2673
2674`-Wendif-labels'
2675     Warn whenever an `#else' or an `#endif' are followed by text.
2676
2677`-Wshadow'
2678     Warn whenever a local variable shadows another local variable,
2679     parameter or global variable or whenever a built-in function is
2680     shadowed.
2681
2682`-Wlarger-than-LEN'
2683     Warn whenever an object of larger than LEN bytes is defined.
2684
2685`-Wpointer-arith'
2686     Warn about anything that depends on the "size of" a function type
2687     or of `void'.  GNU C assigns these types a size of 1, for
2688     convenience in calculations with `void *' pointers and pointers to
2689     functions.
2690
2691`-Wbad-function-cast (C only)'
2692     Warn whenever a function call is cast to a non-matching type.  For
2693     example, warn if `int malloc()' is cast to `anything *'.
2694
2695`-Wcast-qual'
2696     Warn whenever a pointer is cast so as to remove a type qualifier
2697     from the target type.  For example, warn if a `const char *' is
2698     cast to an ordinary `char *'.
2699
2700`-Wcast-align'
2701     Warn whenever a pointer is cast such that the required alignment
2702     of the target is increased.  For example, warn if a `char *' is
2703     cast to an `int *' on machines where integers can only be accessed
2704     at two- or four-byte boundaries.
2705
2706`-Wwrite-strings'
2707     When compiling C, give string constants the type `const
2708     char[LENGTH]' so that copying the address of one into a
2709     non-`const' `char *' pointer will get a warning; when compiling
2710     C++, warn about the deprecated conversion from string constants to
2711     `char *'.  These warnings will help you find at compile time code
2712     that can try to write into a string constant, but only if you have
2713     been very careful about using `const' in declarations and
2714     prototypes.  Otherwise, it will just be a nuisance; this is why we
2715     did not make `-Wall' request these warnings.
2716
2717`-Wconversion'
2718     Warn if a prototype causes a type conversion that is different
2719     from what would happen to the same argument in the absence of a
2720     prototype.  This includes conversions of fixed point to floating
2721     and vice versa, and conversions changing the width or signedness
2722     of a fixed point argument except when the same as the default
2723     promotion.
2724
2725     Also, warn if a negative integer constant expression is implicitly
2726     converted to an unsigned type.  For example, warn about the
2727     assignment `x = -1' if `x' is unsigned.  But do not warn about
2728     explicit casts like `(unsigned) -1'.
2729
2730`-Wsign-compare'
2731     Warn when a comparison between signed and unsigned values could
2732     produce an incorrect result when the signed value is converted to
2733     unsigned.  This warning is also enabled by `-Wextra'; to get the
2734     other warnings of `-Wextra' without this warning, use `-Wextra
2735     -Wno-sign-compare'.
2736
2737`-Waggregate-return'
2738     Warn if any functions that return structures or unions are defined
2739     or called.  (In languages where you can return an array, this also
2740     elicits a warning.)
2741
2742`-Wstrict-prototypes (C only)'
2743     Warn if a function is declared or defined without specifying the
2744     argument types.  (An old-style function definition is permitted
2745     without a warning if preceded by a declaration which specifies the
2746     argument types.)
2747
2748`-Wold-style-definition (C only)'
2749     Warn if an old-style function definition is used.  A warning is
2750     given even if there is a previous prototype.
2751
2752`-Wmissing-prototypes (C only)'
2753     Warn if a global function is defined without a previous prototype
2754     declaration.  This warning is issued even if the definition itself
2755     provides a prototype.  The aim is to detect global functions that
2756     fail to be declared in header files.
2757
2758`-Wmissing-declarations (C only)'
2759     Warn if a global function is defined without a previous
2760     declaration.  Do so even if the definition itself provides a
2761     prototype.  Use this option to detect global functions that are
2762     not declared in header files.
2763
2764`-Wmissing-noreturn'
2765     Warn about functions which might be candidates for attribute
2766     `noreturn'.  Note these are only possible candidates, not absolute
2767     ones.  Care should be taken to manually verify functions actually
2768     do not ever return before adding the `noreturn' attribute,
2769     otherwise subtle code generation bugs could be introduced.  You
2770     will not get a warning for `main' in hosted C environments.
2771
2772`-Wmissing-format-attribute'
2773     If `-Wformat' is enabled, also warn about functions which might be
2774     candidates for `format' attributes.  Note these are only possible
2775     candidates, not absolute ones.  GCC will guess that `format'
2776     attributes might be appropriate for any function that calls a
2777     function like `vprintf' or `vscanf', but this might not always be
2778     the case, and some functions for which `format' attributes are
2779     appropriate may not be detected.  This option has no effect unless
2780     `-Wformat' is enabled (possibly by `-Wall').
2781
2782`-Wno-multichar'
2783     Do not warn if a multicharacter constant (`'FOOF'') is used.
2784     Usually they indicate a typo in the user's code, as they have
2785     implementation-defined values, and should not be used in portable
2786     code.
2787
2788`-Wno-deprecated-declarations'
2789     Do not warn about uses of functions, variables, and types marked as
2790     deprecated by using the `deprecated' attribute.  (*note Function
2791     Attributes::, *note Variable Attributes::, *note Type
2792     Attributes::.)
2793
2794`-Wpacked'
2795     Warn if a structure is given the packed attribute, but the packed
2796     attribute has no effect on the layout or size of the structure.
2797     Such structures may be mis-aligned for little benefit.  For
2798     instance, in this code, the variable `f.x' in `struct bar' will be
2799     misaligned even though `struct bar' does not itself have the
2800     packed attribute:
2801
2802          struct foo {
2803            int x;
2804            char a, b, c, d;
2805          } __attribute__((packed));
2806          struct bar {
2807            char z;
2808            struct foo f;
2809          };
2810
2811`-Wpadded'
2812     Warn if padding is included in a structure, either to align an
2813     element of the structure or to align the whole structure.
2814     Sometimes when this happens it is possible to rearrange the fields
2815     of the structure to reduce the padding and so make the structure
2816     smaller.
2817
2818`-Wredundant-decls'
2819     Warn if anything is declared more than once in the same scope,
2820     even in cases where multiple declaration is valid and changes
2821     nothing.
2822
2823`-Wnested-externs (C only)'
2824     Warn if an `extern' declaration is encountered within a function.
2825
2826`-Wunreachable-code'
2827     Warn if the compiler detects that code will never be executed.
2828
2829     This option is intended to warn when the compiler detects that at
2830     least a whole line of source code will never be executed, because
2831     some condition is never satisfied or because it is after a
2832     procedure that never returns.
2833
2834     It is possible for this option to produce a warning even though
2835     there are circumstances under which part of the affected line can
2836     be executed, so care should be taken when removing
2837     apparently-unreachable code.
2838
2839     For instance, when a function is inlined, a warning may mean that
2840     the line is unreachable in only one inlined copy of the function.
2841
2842     This option is not made part of `-Wall' because in a debugging
2843     version of a program there is often substantial code which checks
2844     correct functioning of the program and is, hopefully, unreachable
2845     because the program does work.  Another common use of unreachable
2846     code is to provide behavior which is selectable at compile-time.
2847
2848`-Winline'
2849     Warn if a function can not be inlined and it was declared as
2850     inline.  Even with this option, the compiler will not warn about
2851     failures to inline functions declared in system headers.
2852
2853     The compiler uses a variety of heuristics to determine whether or
2854     not to inline a function.  For example, the compiler takes into
2855     account the size of the function being inlined and the the amount
2856     of inlining that has already been done in the current function.
2857     Therefore, seemingly insignificant changes in the source program
2858     can cause the warnings produced by `-Winline' to appear or
2859     disappear.
2860
2861`-Wno-invalid-offsetof (C++ only)'
2862     Suppress warnings from applying the `offsetof' macro to a non-POD
2863     type.  According to the 1998 ISO C++ standard, applying `offsetof'
2864     to a non-POD type is undefined.  In existing C++ implementations,
2865     however, `offsetof' typically gives meaningful results even when
2866     applied to certain kinds of non-POD types. (Such as a simple
2867     `struct' that fails to be a POD type only by virtue of having a
2868     constructor.)  This flag is for users who are aware that they are
2869     writing nonportable code and who have deliberately chosen to
2870     ignore the warning about it.
2871
2872     The restrictions on `offsetof' may be relaxed in a future version
2873     of the C++ standard.
2874
2875`-Winvalid-pch'
2876     Warn if a precompiled header (*note Precompiled Headers::) is
2877     found in the search path but can't be used.
2878
2879`-Wlong-long'
2880     Warn if `long long' type is used.  This is default.  To inhibit
2881     the warning messages, use `-Wno-long-long'.  Flags `-Wlong-long'
2882     and `-Wno-long-long' are taken into account only when `-pedantic'
2883     flag is used.
2884
2885`-Wdisabled-optimization'
2886     Warn if a requested optimization pass is disabled.  This warning
2887     does not generally indicate that there is anything wrong with your
2888     code; it merely indicates that GCC's optimizers were unable to
2889     handle the code effectively.  Often, the problem is that your code
2890     is too big or too complex; GCC will refuse to optimize programs
2891     when the optimization itself is likely to take inordinate amounts
2892     of time.
2893
2894`-Werror'
2895     Make all warnings into errors.
2896
2897
2898File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
2899
29003.9 Options for Debugging Your Program or GCC
2901=============================================
2902
2903GCC has various special options that are used for debugging either your
2904program or GCC:
2905
2906`-g'
2907     Produce debugging information in the operating system's native
2908     format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
2909     debugging information.
2910
2911     On most systems that use stabs format, `-g' enables use of extra
2912     debugging information that only GDB can use; this extra information
2913     makes debugging work better in GDB but will probably make other
2914     debuggers crash or refuse to read the program.  If you want to
2915     control for certain whether to generate the extra information, use
2916     `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
2917     below).
2918
2919     Unlike most other C compilers, GCC allows you to use `-g' with
2920     `-O'.  The shortcuts taken by optimized code may occasionally
2921     produce surprising results: some variables you declared may not
2922     exist at all; flow of control may briefly move where you did not
2923     expect it; some statements may not be executed because they
2924     compute constant results or their values were already at hand;
2925     some statements may execute in different places because they were
2926     moved out of loops.
2927
2928     Nevertheless it proves possible to debug optimized output.  This
2929     makes it reasonable to use the optimizer for programs that might
2930     have bugs.
2931
2932     The following options are useful when GCC is generated with the
2933     capability for more than one debugging format.
2934
2935`-ggdb'
2936     Produce debugging information for use by GDB.  This means to use
2937     the most expressive format available (DWARF 2, stabs, or the
2938     native format if neither of those are supported), including GDB
2939     extensions if at all possible.
2940
2941`-gstabs'
2942     Produce debugging information in stabs format (if that is
2943     supported), without GDB extensions.  This is the format used by
2944     DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
2945     systems this option produces stabs debugging output which is not
2946     understood by DBX or SDB.  On System V Release 4 systems this
2947     option requires the GNU assembler.
2948
2949`-feliminate-unused-debug-symbols'
2950     Produce debugging information in stabs format (if that is
2951     supported), for only symbols that are actually used.
2952
2953`-gstabs+'
2954     Produce debugging information in stabs format (if that is
2955     supported), using GNU extensions understood only by the GNU
2956     debugger (GDB).  The use of these extensions is likely to make
2957     other debuggers crash or refuse to read the program.
2958
2959`-gcoff'
2960     Produce debugging information in COFF format (if that is
2961     supported).  This is the format used by SDB on most System V
2962     systems prior to System V Release 4.
2963
2964`-gxcoff'
2965     Produce debugging information in XCOFF format (if that is
2966     supported).  This is the format used by the DBX debugger on IBM
2967     RS/6000 systems.
2968
2969`-gxcoff+'
2970     Produce debugging information in XCOFF format (if that is
2971     supported), using GNU extensions understood only by the GNU
2972     debugger (GDB).  The use of these extensions is likely to make
2973     other debuggers crash or refuse to read the program, and may cause
2974     assemblers other than the GNU assembler (GAS) to fail with an
2975     error.
2976
2977`-gdwarf-2'
2978     Produce debugging information in DWARF version 2 format (if that is
2979     supported).  This is the format used by DBX on IRIX 6.
2980
2981`-gvms'
2982     Produce debugging information in VMS debug format (if that is
2983     supported).  This is the format used by DEBUG on VMS systems.
2984
2985`-gLEVEL'
2986`-ggdbLEVEL'
2987`-gstabsLEVEL'
2988`-gcoffLEVEL'
2989`-gxcoffLEVEL'
2990`-gvmsLEVEL'
2991     Request debugging information and also use LEVEL to specify how
2992     much information.  The default level is 2.
2993
2994     Level 1 produces minimal information, enough for making backtraces
2995     in parts of the program that you don't plan to debug.  This
2996     includes descriptions of functions and external variables, but no
2997     information about local variables and no line numbers.
2998
2999     Level 3 includes extra information, such as all the macro
3000     definitions present in the program.  Some debuggers support macro
3001     expansion when you use `-g3'.
3002
3003     Note that in order to avoid confusion between DWARF1 debug level 2,
3004     and DWARF2 `-gdwarf-2' does not accept a concatenated debug level.
3005     Instead use an additional `-gLEVEL' option to change the debug
3006     level for DWARF2.
3007
3008`-feliminate-dwarf2-dups'
3009     Compress DWARF2 debugging information by eliminating duplicated
3010     information about each symbol.  This option only makes sense when
3011     generating DWARF2 debugging information with `-gdwarf-2'.
3012
3013`-p'
3014     Generate extra code to write profile information suitable for the
3015     analysis program `prof'.  You must use this option when compiling
3016     the source files you want data about, and you must also use it when
3017     linking.
3018
3019`-pg'
3020     Generate extra code to write profile information suitable for the
3021     analysis program `gprof'.  You must use this option when compiling
3022     the source files you want data about, and you must also use it when
3023     linking.
3024
3025`-Q'
3026     Makes the compiler print out each function name as it is compiled,
3027     and print some statistics about each pass when it finishes.
3028
3029`-ftime-report'
3030     Makes the compiler print some statistics about the time consumed
3031     by each pass when it finishes.
3032
3033`-fmem-report'
3034     Makes the compiler print some statistics about permanent memory
3035     allocation when it finishes.
3036
3037`-fprofile-arcs'
3038     Add code so that program flow "arcs" are instrumented.  During
3039     execution the program records how many times each branch and call
3040     is executed and how many times it is taken or returns.  When the
3041     compiled program exits it saves this data to a file called
3042     `AUXNAME.gcda' for each source file. The data may be used for
3043     profile-directed optimizations (`-fbranch-probabilities'), or for
3044     test coverage analysis (`-ftest-coverage'). Each object file's
3045     AUXNAME is generated from the name of the output file, if
3046     explicitly specified and it is not the final executable, otherwise
3047     it is the basename of the source file. In both cases any suffix is
3048     removed (e.g.  `foo.gcda' for input file `dir/foo.c', or
3049     `dir/foo.gcda' for output file specified as `-o dir/foo.o').
3050
3051        * Compile the source files with `-fprofile-arcs' plus
3052          optimization and code generation options. For test coverage
3053          analysis, use the additional `-ftest-coverage' option. You do
3054          not need to profile every source file in a program.
3055
3056        * Link your object files with `-lgcov' or `-fprofile-arcs' (the
3057          latter implies the former).
3058
3059        * Run the program on a representative workload to generate the
3060          arc profile information. This may be repeated any number of
3061          times. You can run concurrent instances of your program, and
3062          provided that the file system supports locking, the data
3063          files will be correctly updated. Also `fork' calls are
3064          detected and correctly handled (double counting will not
3065          happen).
3066
3067        * For profile-directed optimizations, compile the source files
3068          again with the same optimization and code generation options
3069          plus `-fbranch-probabilities' (*note Options that Control
3070          Optimization: Optimize Options.).
3071
3072        * For test coverage analysis, use `gcov' to produce human
3073          readable information from the `.gcno' and `.gcda' files.
3074          Refer to the `gcov' documentation for further information.
3075
3076
3077     With `-fprofile-arcs', for each function of your program GCC
3078     creates a program flow graph, then finds a spanning tree for the
3079     graph.  Only arcs that are not on the spanning tree have to be
3080     instrumented: the compiler adds code to count the number of times
3081     that these arcs are executed.  When an arc is the only exit or
3082     only entrance to a block, the instrumentation code can be added to
3083     the block; otherwise, a new basic block must be created to hold
3084     the instrumentation code.
3085
3086`-ftest-coverage'
3087     Produce a notes file that the `gcov' code-coverage utility (*note
3088     `gcov'--a Test Coverage Program: Gcov.) can use to show program
3089     coverage. Each source file's note file is called `AUXNAME.gcno'.
3090     Refer to the `-fprofile-arcs' option above for a description of
3091     AUXNAME and instructions on how to generate test coverage data.
3092     Coverage data will match the source files more closely, if you do
3093     not optimize.
3094
3095`-dLETTERS'
3096     Says to make debugging dumps during compilation at times specified
3097     by LETTERS.  This is used for debugging the compiler.  The file
3098     names for most of the dumps are made by appending a pass number
3099     and a word to the DUMPNAME. DUMPNAME is generated from the name of
3100     the output file, if explicitly specified and it is not an
3101     executable, otherwise it is the basename of the source file. In
3102     both cases any suffix is removed (e.g.  `foo.01.rtl' or
3103     `foo.02.sibling').  Here are the possible letters for use in
3104     LETTERS, and their meanings:
3105
3106    `A'
3107          Annotate the assembler output with miscellaneous debugging
3108          information.
3109
3110    `b'
3111          Dump after computing branch probabilities, to `FILE.12.bp'.
3112
3113    `B'
3114          Dump after block reordering, to `FILE.31.bbro'.
3115
3116    `c'
3117          Dump after instruction combination, to the file
3118          `FILE.20.combine'.
3119
3120    `C'
3121          Dump after the first if conversion, to the file `FILE.14.ce1'.
3122          Also dump after the second if conversion, to the file
3123          `FILE.21.ce2'.
3124
3125    `d'
3126          Dump after branch target load optimization, to to
3127          `FILE.32.btl'.  Also dump after delayed branch scheduling, to
3128          `FILE.36.dbr'.
3129
3130    `D'
3131          Dump all macro definitions, at the end of preprocessing, in
3132          addition to normal output.
3133
3134    `E'
3135          Dump after the third if conversion, to `FILE.30.ce3'.
3136
3137    `f'
3138          Dump after control and data flow analysis, to `FILE.11.cfg'.
3139          Also dump after life analysis, to `FILE.19.life'.
3140
3141    `F'
3142          Dump after purging `ADDRESSOF' codes, to `FILE.07.addressof'.
3143
3144    `g'
3145          Dump after global register allocation, to `FILE.25.greg'.
3146
3147    `G'
3148          Dump after GCSE, to `FILE.08.gcse'.  Also dump after jump
3149          bypassing and control flow optimizations, to `FILE.10.bypass'.
3150
3151    `h'
3152          Dump after finalization of EH handling code, to `FILE.03.eh'.
3153
3154    `i'
3155          Dump after sibling call optimizations, to `FILE.02.sibling'.
3156
3157    `j'
3158          Dump after the first jump optimization, to `FILE.04.jump'.
3159
3160    `k'
3161          Dump after conversion from registers to stack, to
3162          `FILE.34.stack'.
3163
3164    `l'
3165          Dump after local register allocation, to `FILE.24.lreg'.
3166
3167    `L'
3168          Dump after loop optimization passes, to `FILE.09.loop' and
3169          `FILE.16.loop2'.
3170
3171    `M'
3172          Dump after performing the machine dependent reorganization
3173          pass, to `FILE.35.mach'.
3174
3175    `n'
3176          Dump after register renumbering, to `FILE.29.rnreg'.
3177
3178    `N'
3179          Dump after the register move pass, to `FILE.22.regmove'.
3180
3181    `o'
3182          Dump after post-reload optimizations, to `FILE.26.postreload'.
3183
3184    `r'
3185          Dump after RTL generation, to `FILE.01.rtl'.
3186
3187    `R'
3188          Dump after the second scheduling pass, to `FILE.33.sched2'.
3189
3190    `s'
3191          Dump after CSE (including the jump optimization that
3192          sometimes follows CSE), to `FILE.06.cse'.
3193
3194    `S'
3195          Dump after the first scheduling pass, to `FILE.23.sched'.
3196
3197    `t'
3198          Dump after the second CSE pass (including the jump
3199          optimization that sometimes follows CSE), to `FILE.18.cse2'.
3200
3201    `T'
3202          Dump after running tracer, to `FILE.15.tracer'.
3203
3204    `u'
3205          Dump after null pointer elimination pass to `FILE.05.null'.
3206
3207    `U'
3208          Dump callgraph and unit-at-a-time optimization `FILE.00.unit'.
3209
3210    `V'
3211          Dump after the value profile transformations, to
3212          `FILE.13.vpt'.
3213
3214    `w'
3215          Dump after the second flow pass, to `FILE.27.flow2'.
3216
3217    `z'
3218          Dump after the peephole pass, to `FILE.28.peephole2'.
3219
3220    `Z'
3221          Dump after constructing the web, to `FILE.17.web'.
3222
3223    `a'
3224          Produce all the dumps listed above.
3225
3226    `H'
3227          Produce a core dump whenever an error occurs.
3228
3229    `m'
3230          Print statistics on memory usage, at the end of the run, to
3231          standard error.
3232
3233    `p'
3234          Annotate the assembler output with a comment indicating which
3235          pattern and alternative was used.  The length of each
3236          instruction is also printed.
3237
3238    `P'
3239          Dump the RTL in the assembler output as a comment before each
3240          instruction.  Also turns on `-dp' annotation.
3241
3242    `v'
3243          For each of the other indicated dump files (except for
3244          `FILE.01.rtl'), dump a representation of the control flow
3245          graph suitable for viewing with VCG to `FILE.PASS.vcg'.
3246
3247    `x'
3248          Just generate RTL for a function instead of compiling it.
3249          Usually used with `r'.
3250
3251    `y'
3252          Dump debugging information during parsing, to standard error.
3253
3254`-fdump-unnumbered'
3255     When doing debugging dumps (see `-d' option above), suppress
3256     instruction numbers and line number note output.  This makes it
3257     more feasible to use diff on debugging dumps for compiler
3258     invocations with different options, in particular with and without
3259     `-g'.
3260
3261`-fdump-translation-unit (C and C++ only)'
3262`-fdump-translation-unit-OPTIONS (C and C++ only)'
3263     Dump a representation of the tree structure for the entire
3264     translation unit to a file.  The file name is made by appending
3265     `.tu' to the source file name.  If the `-OPTIONS' form is used,
3266     OPTIONS controls the details of the dump as described for the
3267     `-fdump-tree' options.
3268
3269`-fdump-class-hierarchy (C++ only)'
3270`-fdump-class-hierarchy-OPTIONS (C++ only)'
3271     Dump a representation of each class's hierarchy and virtual
3272     function table layout to a file.  The file name is made by
3273     appending `.class' to the source file name.  If the `-OPTIONS'
3274     form is used, OPTIONS controls the details of the dump as
3275     described for the `-fdump-tree' options.
3276
3277`-fdump-tree-SWITCH (C++ only)'
3278`-fdump-tree-SWITCH-OPTIONS (C++ only)'
3279     Control the dumping at various stages of processing the
3280     intermediate language tree to a file.  The file name is generated
3281     by appending a switch specific suffix to the source file name.  If
3282     the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
3283     options that control the details of the dump. Not all options are
3284     applicable to all dumps, those which are not meaningful will be
3285     ignored. The following options are available
3286
3287    `address'
3288          Print the address of each node.  Usually this is not
3289          meaningful as it changes according to the environment and
3290          source file. Its primary use is for tying up a dump file with
3291          a debug environment.
3292
3293    `slim'
3294          Inhibit dumping of members of a scope or body of a function
3295          merely because that scope has been reached. Only dump such
3296          items when they are directly reachable by some other path.
3297
3298    `all'
3299          Turn on all options.
3300
3301     The following tree dumps are possible:
3302    `original'
3303          Dump before any tree based optimization, to `FILE.original'.
3304
3305    `optimized'
3306          Dump after all tree based optimization, to `FILE.optimized'.
3307
3308    `inlined'
3309          Dump after function inlining, to `FILE.inlined'.
3310
3311`-frandom-seed=STRING'
3312     This option provides a seed that GCC uses when it would otherwise
3313     use random numbers.  It is used to generate certain symbol names
3314     that have to be different in every compiled file. It is also used
3315     to place unique stamps in coverage data files and the object files
3316     that produce them. You can use the `-frandom-seed' option to
3317     produce reproducibly identical object files.
3318
3319     The STRING should be different for every file you compile.
3320
3321`-fsched-verbose=N'
3322     On targets that use instruction scheduling, this option controls
3323     the amount of debugging output the scheduler prints.  This
3324     information is written to standard error, unless `-dS' or `-dR' is
3325     specified, in which case it is output to the usual dump listing
3326     file, `.sched' or `.sched2' respectively.  However for N greater
3327     than nine, the output is always printed to standard error.
3328
3329     For N greater than zero, `-fsched-verbose' outputs the same
3330     information as `-dRS'.  For N greater than one, it also output
3331     basic block probabilities, detailed ready list information and
3332     unit/insn info.  For N greater than two, it includes RTL at abort
3333     point, control-flow and regions info.  And for N over four,
3334     `-fsched-verbose' also includes dependence info.
3335
3336`-save-temps'
3337     Store the usual "temporary" intermediate files permanently; place
3338     them in the current directory and name them based on the source
3339     file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
3340     files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
3341     preprocessed `foo.i' output file even though the compiler now
3342     normally uses an integrated preprocessor.
3343
3344`-time'
3345     Report the CPU time taken by each subprocess in the compilation
3346     sequence.  For C source files, this is the compiler proper and
3347     assembler (plus the linker if linking is done).  The output looks
3348     like this:
3349
3350          # cc1 0.12 0.01
3351          # as 0.00 0.01
3352
3353     The first number on each line is the "user time," that is time
3354     spent executing the program itself.  The second number is "system
3355     time," time spent executing operating system routines on behalf of
3356     the program.  Both numbers are in seconds.
3357
3358`-print-file-name=LIBRARY'
3359     Print the full absolute name of the library file LIBRARY that
3360     would be used when linking--and don't do anything else.  With this
3361     option, GCC does not compile or link anything; it just prints the
3362     file name.
3363
3364`-print-multi-directory'
3365     Print the directory name corresponding to the multilib selected by
3366     any other switches present in the command line.  This directory is
3367     supposed to exist in `GCC_EXEC_PREFIX'.
3368
3369`-print-multi-lib'
3370     Print the mapping from multilib directory names to compiler
3371     switches that enable them.  The directory name is separated from
3372     the switches by `;', and each switch starts with an `@' instead of
3373     the `-', without spaces between multiple switches.  This is
3374     supposed to ease shell-processing.
3375
3376`-print-prog-name=PROGRAM'
3377     Like `-print-file-name', but searches for a program such as `cpp'.
3378
3379`-print-libgcc-file-name'
3380     Same as `-print-file-name=libgcc.a'.
3381
3382     This is useful when you use `-nostdlib' or `-nodefaultlibs' but
3383     you do want to link with `libgcc.a'.  You can do
3384
3385          gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
3386
3387`-print-search-dirs'
3388     Print the name of the configured installation directory and a list
3389     of program and library directories `gcc' will search--and don't do
3390     anything else.
3391
3392     This is useful when `gcc' prints the error message `installation
3393     problem, cannot exec cpp0: No such file or directory'.  To resolve
3394     this you either need to put `cpp0' and the other compiler
3395     components where `gcc' expects to find them, or you can set the
3396     environment variable `GCC_EXEC_PREFIX' to the directory where you
3397     installed them.  Don't forget the trailing '/'.  *Note Environment
3398     Variables::.
3399
3400`-dumpmachine'
3401     Print the compiler's target machine (for example,
3402     `i686-pc-linux-gnu')--and don't do anything else.
3403
3404`-dumpversion'
3405     Print the compiler version (for example, `3.0')--and don't do
3406     anything else.
3407
3408`-dumpspecs'
3409     Print the compiler's built-in specs--and don't do anything else.
3410     (This is used when GCC itself is being built.)  *Note Spec Files::.
3411
3412`-feliminate-unused-debug-types'
3413     Normally, when producing DWARF2 output, GCC will emit debugging
3414     information for all types declared in a compilation unit,
3415     regardless of whether or not they are actually used in that
3416     compilation unit.  Sometimes this is useful, such as if, in the
3417     debugger, you want to cast a value to a type that is not actually
3418     used in your program (but is declared).  More often, however, this
3419     results in a significant amount of wasted space.  With this
3420     option, GCC will avoid producing debug symbol output for types
3421     that are nowhere used in the source file being compiled.
3422
3423
3424File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
3425
34263.10 Options That Control Optimization
3427======================================
3428
3429These options control various sorts of optimizations.
3430
3431 Without any optimization option, the compiler's goal is to reduce the
3432cost of compilation and to make debugging produce the expected results.
3433Statements are independent: if you stop the program with a breakpoint
3434between statements, you can then assign a new value to any variable or
3435change the program counter to any other statement in the function and
3436get exactly the results you would expect from the source code.
3437
3438 Turning on optimization flags makes the compiler attempt to improve
3439the performance and/or code size at the expense of compilation time and
3440possibly the ability to debug the program.
3441
3442 The compiler performs optimization based on the knowledge it has of
3443the program.  Using the `-funit-at-a-time' flag will allow the compiler
3444to consider information gained from later functions in the file when
3445compiling a function.  Compiling multiple files at once to a single
3446output file (and using `-funit-at-a-time') will allow the compiler to
3447use information gained from all of the files when compiling each of
3448them.
3449
3450 Not all optimizations are controlled directly by a flag.  Only
3451optimizations that have a flag are listed.
3452
3453`-O'
3454`-O1'
3455     Optimize.  Optimizing compilation takes somewhat more time, and a
3456     lot more memory for a large function.
3457
3458     With `-O', the compiler tries to reduce code size and execution
3459     time, without performing any optimizations that take a great deal
3460     of compilation time.
3461
3462     `-O' turns on the following optimization flags:
3463          -fdefer-pop
3464          -fmerge-constants
3465          -fthread-jumps
3466          -floop-optimize
3467          -fif-conversion
3468          -fif-conversion2
3469          -fdelayed-branch
3470          -fguess-branch-probability
3471          -fcprop-registers
3472
3473     `-O' also turns on `-fomit-frame-pointer' on machines where doing
3474     so does not interfere with debugging.
3475
3476`-O2'
3477     Optimize even more.  GCC performs nearly all supported
3478     optimizations that do not involve a space-speed tradeoff.  The
3479     compiler does not perform loop unrolling or function inlining when
3480     you specify `-O2'.  As compared to `-O', this option increases
3481     both compilation time and the performance of the generated code.
3482
3483     `-O2' turns on all optimization flags specified by `-O'.  It also
3484     turns on the following optimization flags:
3485          -fforce-mem
3486          -foptimize-sibling-calls
3487          -fstrength-reduce
3488          -fcse-follow-jumps  -fcse-skip-blocks
3489          -frerun-cse-after-loop  -frerun-loop-opt
3490          -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las
3491          -fdelete-null-pointer-checks
3492          -fexpensive-optimizations
3493          -fregmove
3494          -fschedule-insns  -fschedule-insns2
3495          -fsched-interblock  -fsched-spec
3496          -fcaller-saves
3497          -fpeephole2
3498          -freorder-blocks  -freorder-functions
3499          -fstrict-aliasing
3500          -funit-at-a-time
3501          -falign-functions  -falign-jumps
3502          -falign-loops  -falign-labels
3503          -fcrossjumping
3504
3505     Please note the warning under `-fgcse' about invoking `-O2' on
3506     programs that use computed gotos.
3507
3508`-O3'
3509     Optimize yet more.  `-O3' turns on all optimizations specified by
3510     `-O2' and also turns on the `-finline-functions', `-fweb' and
3511     `-frename-registers' options.
3512
3513`-O0'
3514     Do not optimize.  This is the default.
3515
3516`-Os'
3517     Optimize for size.  `-Os' enables all `-O2' optimizations that do
3518     not typically increase code size.  It also performs further
3519     optimizations designed to reduce code size.
3520
3521     `-Os' disables the following optimization flags:
3522          -falign-functions  -falign-jumps  -falign-loops
3523          -falign-labels  -freorder-blocks  -fprefetch-loop-arrays
3524
3525     If you use multiple `-O' options, with or without level numbers,
3526     the last such option is the one that is effective.
3527
3528 Options of the form `-fFLAG' specify machine-independent flags.  Most
3529flags have both positive and negative forms; the negative form of
3530`-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
3531is listed--the one you typically will use.  You can figure out the
3532other form by either removing `no-' or adding it.
3533
3534 The following options control specific optimizations.  They are either
3535activated by `-O' options or are related to ones that are.  You can use
3536the following flags in the rare cases when "fine-tuning" of
3537optimizations to be performed is desired.
3538
3539`-fno-default-inline'
3540     Do not make member functions inline by default merely because they
3541     are defined inside the class scope (C++ only).  Otherwise, when
3542     you specify `-O', member functions defined inside class scope are
3543     compiled inline by default; i.e., you don't need to add `inline'
3544     in front of the member function name.
3545
3546`-fno-defer-pop'
3547     Always pop the arguments to each function call as soon as that
3548     function returns.  For machines which must pop arguments after a
3549     function call, the compiler normally lets arguments accumulate on
3550     the stack for several function calls and pops them all at once.
3551
3552     Disabled at levels `-O', `-O2', `-O3', `-Os'.
3553
3554`-fforce-mem'
3555     Force memory operands to be copied into registers before doing
3556     arithmetic on them.  This produces better code by making all memory
3557     references potential common subexpressions.  When they are not
3558     common subexpressions, instruction combination should eliminate
3559     the separate register-load.
3560
3561     Enabled at levels `-O2', `-O3', `-Os'.
3562
3563`-fforce-addr'
3564     Force memory address constants to be copied into registers before
3565     doing arithmetic on them.  This may produce better code just as
3566     `-fforce-mem' may.
3567
3568`-fomit-frame-pointer'
3569     Don't keep the frame pointer in a register for functions that
3570     don't need one.  This avoids the instructions to save, set up and
3571     restore frame pointers; it also makes an extra register available
3572     in many functions.  *It also makes debugging impossible on some
3573     machines.*
3574
3575     On some machines, such as the VAX, this flag has no effect, because
3576     the standard calling sequence automatically handles the frame
3577     pointer and nothing is saved by pretending it doesn't exist.  The
3578     machine-description macro `FRAME_POINTER_REQUIRED' controls
3579     whether a target machine supports this flag.  *Note Register
3580     Usage: (gccint)Registers.
3581
3582     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3583
3584`-foptimize-sibling-calls'
3585     Optimize sibling and tail recursive calls.
3586
3587     Enabled at levels `-O2', `-O3', `-Os'.
3588
3589`-fno-inline'
3590     Don't pay attention to the `inline' keyword.  Normally this option
3591     is used to keep the compiler from expanding any functions inline.
3592     Note that if you are not optimizing, no functions can be expanded
3593     inline.
3594
3595`-finline-functions'
3596     Integrate all simple functions into their callers.  The compiler
3597     heuristically decides which functions are simple enough to be worth
3598     integrating in this way.
3599
3600     If all calls to a given function are integrated, and the function
3601     is declared `static', then the function is normally not output as
3602     assembler code in its own right.
3603
3604     Enabled at level `-O3'.
3605
3606`-finline-limit=N'
3607     By default, GCC limits the size of functions that can be inlined.
3608     This flag allows the control of this limit for functions that are
3609     explicitly marked as inline (i.e., marked with the inline keyword
3610     or defined within the class definition in c++).  N is the size of
3611     functions that can be inlined in number of pseudo instructions
3612     (not counting parameter handling).  The default value of N is 600.
3613     Increasing this value can result in more inlined code at the cost
3614     of compilation time and memory consumption.  Decreasing usually
3615     makes the compilation faster and less code will be inlined (which
3616     presumably means slower programs).  This option is particularly
3617     useful for programs that use inlining heavily such as those based
3618     on recursive templates with C++.
3619
3620     Inlining is actually controlled by a number of parameters, which
3621     may be specified individually by using `--param NAME=VALUE'.  The
3622     `-finline-limit=N' option sets some of these parameters as follows:
3623
3624    `max-inline-insns-single'
3625          is set to N/2.
3626
3627    `max-inline-insns-auto'
3628          is set to N/2.
3629
3630    `min-inline-insns'
3631          is set to 130 or N/4, whichever is smaller.
3632
3633    `max-inline-insns-rtl'
3634          is set to N.
3635
3636     See below for a documentation of the individual parameters
3637     controlling inlining.
3638
3639     _Note:_ pseudo instruction represents, in this particular context,
3640     an abstract measurement of function's size.  In no way, it
3641     represents a count of assembly instructions and as such its exact
3642     meaning might change from one release to an another.
3643
3644`-fkeep-inline-functions'
3645     Even if all calls to a given function are integrated, and the
3646     function is declared `static', nevertheless output a separate
3647     run-time callable version of the function.  This switch does not
3648     affect `extern inline' functions.
3649
3650`-fkeep-static-consts'
3651     Emit variables declared `static const' when optimization isn't
3652     turned on, even if the variables aren't referenced.
3653
3654     GCC enables this option by default.  If you want to force the
3655     compiler to check if the variable was referenced, regardless of
3656     whether or not optimization is turned on, use the
3657     `-fno-keep-static-consts' option.
3658
3659`-fmerge-constants'
3660     Attempt to merge identical constants (string constants and
3661     floating point constants) across compilation units.
3662
3663     This option is the default for optimized compilation if the
3664     assembler and linker support it.  Use `-fno-merge-constants' to
3665     inhibit this behavior.
3666
3667     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3668
3669`-fmerge-all-constants'
3670     Attempt to merge identical constants and identical variables.
3671
3672     This option implies `-fmerge-constants'.  In addition to
3673     `-fmerge-constants' this considers e.g. even constant initialized
3674     arrays or initialized constant variables with integral or floating
3675     point types.  Languages like C or C++ require each non-automatic
3676     variable to have distinct location, so using this option will
3677     result in non-conforming behavior.
3678
3679`-fnew-ra'
3680     Use a graph coloring register allocator.  Currently this option is
3681     meant only for testing.  Users should not specify this option,
3682     since it is not yet ready for production use.
3683
3684`-fno-branch-count-reg'
3685     Do not use "decrement and branch" instructions on a count register,
3686     but instead generate a sequence of instructions that decrement a
3687     register, compare it against zero, then branch based upon the
3688     result.  This option is only meaningful on architectures that
3689     support such instructions, which include x86, PowerPC, IA-64 and
3690     S/390.
3691
3692     The default is `-fbranch-count-reg', enabled when
3693     `-fstrength-reduce' is enabled.
3694
3695`-fno-function-cse'
3696     Do not put function addresses in registers; make each instruction
3697     that calls a constant function contain the function's address
3698     explicitly.
3699
3700     This option results in less efficient code, but some strange hacks
3701     that alter the assembler output may be confused by the
3702     optimizations performed when this option is not used.
3703
3704     The default is `-ffunction-cse'
3705
3706`-fno-zero-initialized-in-bss'
3707     If the target supports a BSS section, GCC by default puts
3708     variables that are initialized to zero into BSS.  This can save
3709     space in the resulting code.
3710
3711     This option turns off this behavior because some programs
3712     explicitly rely on variables going to the data section.  E.g., so
3713     that the resulting executable can find the beginning of that
3714     section and/or make assumptions based on that.
3715
3716     The default is `-fzero-initialized-in-bss'.
3717
3718`-fstrength-reduce'
3719     Perform the optimizations of loop strength reduction and
3720     elimination of iteration variables.
3721
3722     Enabled at levels `-O2', `-O3', `-Os'.
3723
3724`-fthread-jumps'
3725     Perform optimizations where we check to see if a jump branches to a
3726     location where another comparison subsumed by the first is found.
3727     If so, the first branch is redirected to either the destination of
3728     the second branch or a point immediately following it, depending
3729     on whether the condition is known to be true or false.
3730
3731     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3732
3733`-fcse-follow-jumps'
3734     In common subexpression elimination, scan through jump instructions
3735     when the target of the jump is not reached by any other path.  For
3736     example, when CSE encounters an `if' statement with an `else'
3737     clause, CSE will follow the jump when the condition tested is
3738     false.
3739
3740     Enabled at levels `-O2', `-O3', `-Os'.
3741
3742`-fcse-skip-blocks'
3743     This is similar to `-fcse-follow-jumps', but causes CSE to follow
3744     jumps which conditionally skip over blocks.  When CSE encounters a
3745     simple `if' statement with no else clause, `-fcse-skip-blocks'
3746     causes CSE to follow the jump around the body of the `if'.
3747
3748     Enabled at levels `-O2', `-O3', `-Os'.
3749
3750`-frerun-cse-after-loop'
3751     Re-run common subexpression elimination after loop optimizations
3752     has been performed.
3753
3754     Enabled at levels `-O2', `-O3', `-Os'.
3755
3756`-frerun-loop-opt'
3757     Run the loop optimizer twice.
3758
3759     Enabled at levels `-O2', `-O3', `-Os'.
3760
3761`-fgcse'
3762     Perform a global common subexpression elimination pass.  This pass
3763     also performs global constant and copy propagation.
3764
3765     _Note:_ When compiling a program using computed gotos, a GCC
3766     extension, you may get better runtime performance if you disable
3767     the global common subexpression elimination pass by adding
3768     `-fno-gcse' to the command line.
3769
3770     Enabled at levels `-O2', `-O3', `-Os'.
3771
3772`-fgcse-lm'
3773     When `-fgcse-lm' is enabled, global common subexpression
3774     elimination will attempt to move loads which are only killed by
3775     stores into themselves.  This allows a loop containing a
3776     load/store sequence to be changed to a load outside the loop, and
3777     a copy/store within the loop.
3778
3779     Enabled by default when gcse is enabled.
3780
3781`-fgcse-sm'
3782     When `-fgcse-sm' is enabled, a store motion pass is run after
3783     global common subexpression elimination.  This pass will attempt
3784     to move stores out of loops.  When used in conjunction with
3785     `-fgcse-lm', loops containing a load/store sequence can be changed
3786     to a load before the loop and a store after the loop.
3787
3788     Enabled by default when gcse is enabled.
3789
3790`-fgcse-las'
3791     When `-fgcse-las' is enabled, the global common subexpression
3792     elimination pass eliminates redundant loads that come after stores
3793     to the same memory location (both partial and full redundancies).
3794
3795     Enabled by default when gcse is enabled.
3796
3797`-floop-optimize'
3798     Perform loop optimizations: move constant expressions out of
3799     loops, simplify exit test conditions and optionally do
3800     strength-reduction and loop unrolling as well.
3801
3802     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3803
3804`-fcrossjumping'
3805     Perform cross-jumping transformation. This transformation unifies
3806     equivalent code and save code size. The resulting code may or may
3807     not perform better than without cross-jumping.
3808
3809     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3810
3811`-fif-conversion'
3812     Attempt to transform conditional jumps into branch-less
3813     equivalents.  This include use of conditional moves, min, max, set
3814     flags and abs instructions, and some tricks doable by standard
3815     arithmetics.  The use of conditional execution on chips where it
3816     is available is controlled by `if-conversion2'.
3817
3818     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3819
3820`-fif-conversion2'
3821     Use conditional execution (where available) to transform
3822     conditional jumps into branch-less equivalents.
3823
3824     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3825
3826`-fdelete-null-pointer-checks'
3827     Use global dataflow analysis to identify and eliminate useless
3828     checks for null pointers.  The compiler assumes that dereferencing
3829     a null pointer would have halted the program.  If a pointer is
3830     checked after it has already been dereferenced, it cannot be null.
3831
3832     In some environments, this assumption is not true, and programs can
3833     safely dereference null pointers.  Use
3834     `-fno-delete-null-pointer-checks' to disable this optimization for
3835     programs which depend on that behavior.
3836
3837     Enabled at levels `-O2', `-O3', `-Os'.
3838
3839`-fexpensive-optimizations'
3840     Perform a number of minor optimizations that are relatively
3841     expensive.
3842
3843     Enabled at levels `-O2', `-O3', `-Os'.
3844
3845`-foptimize-register-move'
3846`-fregmove'
3847     Attempt to reassign register numbers in move instructions and as
3848     operands of other simple instructions in order to maximize the
3849     amount of register tying.  This is especially helpful on machines
3850     with two-operand instructions.
3851
3852     Note `-fregmove' and `-foptimize-register-move' are the same
3853     optimization.
3854
3855     Enabled at levels `-O2', `-O3', `-Os'.
3856
3857`-fdelayed-branch'
3858     If supported for the target machine, attempt to reorder
3859     instructions to exploit instruction slots available after delayed
3860     branch instructions.
3861
3862     Enabled at levels `-O', `-O2', `-O3', `-Os'.
3863
3864`-fschedule-insns'
3865     If supported for the target machine, attempt to reorder
3866     instructions to eliminate execution stalls due to required data
3867     being unavailable.  This helps machines that have slow floating
3868     point or memory load instructions by allowing other instructions
3869     to be issued until the result of the load or floating point
3870     instruction is required.
3871
3872     Enabled at levels `-O2', `-O3', `-Os'.
3873
3874`-fschedule-insns2'
3875     Similar to `-fschedule-insns', but requests an additional pass of
3876     instruction scheduling after register allocation has been done.
3877     This is especially useful on machines with a relatively small
3878     number of registers and where memory load instructions take more
3879     than one cycle.
3880
3881     Enabled at levels `-O2', `-O3', `-Os'.
3882
3883`-fno-sched-interblock'
3884     Don't schedule instructions across basic blocks.  This is normally
3885     enabled by default when scheduling before register allocation, i.e.
3886     with `-fschedule-insns' or at `-O2' or higher.
3887
3888`-fno-sched-spec'
3889     Don't allow speculative motion of non-load instructions.  This is
3890     normally enabled by default when scheduling before register
3891     allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
3892
3893`-fsched-spec-load'
3894     Allow speculative motion of some load instructions.  This only
3895     makes sense when scheduling before register allocation, i.e. with
3896     `-fschedule-insns' or at `-O2' or higher.
3897
3898`-fsched-spec-load-dangerous'
3899     Allow speculative motion of more load instructions.  This only
3900     makes sense when scheduling before register allocation, i.e. with
3901     `-fschedule-insns' or at `-O2' or higher.
3902
3903`-fsched-stalled-insns=N'
3904     Define how many insns (if any) can be moved prematurely from the
3905     queue of stalled insns into the ready list, during the second
3906     scheduling pass.
3907
3908`-fsched-stalled-insns-dep=N'
3909     Define how many insn groups (cycles) will be examined for a
3910     dependency on a stalled insn that is candidate for premature
3911     removal from the queue of stalled insns.  Has an effect only
3912     during the second scheduling pass, and only if
3913     `-fsched-stalled-insns' is used and its value is not zero.
3914
3915`-fsched2-use-superblocks'
3916     When scheduling after register allocation, do use superblock
3917     scheduling algorithm.  Superblock scheduling allows motion across
3918     basic block boundaries resulting on faster schedules.  This option
3919     is experimental, as not all machine descriptions used by GCC model
3920     the CPU closely enough to avoid unreliable results from the
3921     algorithm.
3922
3923     This only makes sense when scheduling after register allocation,
3924     i.e. with `-fschedule-insns2' or at `-O2' or higher.
3925
3926`-fsched2-use-traces'
3927     Use `-fsched2-use-superblocks' algorithm when scheduling after
3928     register allocation and additionally perform code duplication in
3929     order to increase the size of superblocks using tracer pass.  See
3930     `-ftracer' for details on trace formation.
3931
3932     This mode should produce faster but significantly longer programs.
3933     Also without `-fbranch-probabilities' the traces constructed may
3934     not match the reality and hurt the performance.  This only makes
3935     sense when scheduling after register allocation, i.e. with
3936     `-fschedule-insns2' or at `-O2' or higher.
3937
3938`-fcaller-saves'
3939     Enable values to be allocated in registers that will be clobbered
3940     by function calls, by emitting extra instructions to save and
3941     restore the registers around such calls.  Such allocation is done
3942     only when it seems to result in better code than would otherwise
3943     be produced.
3944
3945     This option is always enabled by default on certain machines,
3946     usually those which have no call-preserved registers to use
3947     instead.
3948
3949     Enabled at levels `-O2', `-O3', `-Os'.
3950
3951`-fmove-all-movables'
3952     Forces all invariant computations in loops to be moved outside the
3953     loop.
3954
3955`-freduce-all-givs'
3956     Forces all general-induction variables in loops to be
3957     strength-reduced.
3958
3959     _Note:_ When compiling programs written in Fortran,
3960     `-fmove-all-movables' and `-freduce-all-givs' are enabled by
3961     default when you use the optimizer.
3962
3963     These options may generate better or worse code; results are highly
3964     dependent on the structure of loops within the source code.
3965
3966     These two options are intended to be removed someday, once they
3967     have helped determine the efficacy of various approaches to
3968     improving loop optimizations.
3969
3970     Please contact <gcc@gcc.gnu.org>, and describe how use of these
3971     options affects the performance of your production code.  Examples
3972     of code that runs _slower_ when these options are _enabled_ are
3973     very valuable.
3974
3975`-fno-peephole'
3976`-fno-peephole2'
3977     Disable any machine-specific peephole optimizations.  The
3978     difference between `-fno-peephole' and `-fno-peephole2' is in how
3979     they are implemented in the compiler; some targets use one, some
3980     use the other, a few use both.
3981
3982     `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
3983     levels `-O2', `-O3', `-Os'.
3984
3985`-fno-guess-branch-probability'
3986     Do not guess branch probabilities using a randomized model.
3987
3988     Sometimes GCC will opt to use a randomized model to guess branch
3989     probabilities, when none are available from either profiling
3990     feedback (`-fprofile-arcs') or `__builtin_expect'.  This means that
3991     different runs of the compiler on the same program may produce
3992     different object code.
3993
3994     In a hard real-time system, people don't want different runs of the
3995     compiler to produce code that has different behavior; minimizing
3996     non-determinism is of paramount import.  This switch allows users
3997     to reduce non-determinism, possibly at the expense of inferior
3998     optimization.
3999
4000     The default is `-fguess-branch-probability' at levels `-O', `-O2',
4001     `-O3', `-Os'.
4002
4003`-freorder-blocks'
4004     Reorder basic blocks in the compiled function in order to reduce
4005     number of taken branches and improve code locality.
4006
4007     Enabled at levels `-O2', `-O3'.
4008
4009`-freorder-functions'
4010     Reorder basic blocks in the compiled function in order to reduce
4011     number of taken branches and improve code locality. This is
4012     implemented by using special subsections `text.hot' for most
4013     frequently executed functions and `text.unlikely' for unlikely
4014     executed functions.  Reordering is done by the linker so object
4015     file format must support named sections and linker must place them
4016     in a reasonable way.
4017
4018     Also profile feedback must be available in to make this option
4019     effective.  See `-fprofile-arcs' for details.
4020
4021     Enabled at levels `-O2', `-O3', `-Os'.
4022
4023`-fstrict-aliasing'
4024     Allows the compiler to assume the strictest aliasing rules
4025     applicable to the language being compiled.  For C (and C++), this
4026     activates optimizations based on the type of expressions.  In
4027     particular, an object of one type is assumed never to reside at
4028     the same address as an object of a different type, unless the
4029     types are almost the same.  For example, an `unsigned int' can
4030     alias an `int', but not a `void*' or a `double'.  A character type
4031     may alias any other type.
4032
4033     Pay special attention to code like this:
4034          union a_union {
4035            int i;
4036            double d;
4037          };
4038
4039          int f() {
4040            a_union t;
4041            t.d = 3.0;
4042            return t.i;
4043          }
4044     The practice of reading from a different union member than the one
4045     most recently written to (called "type-punning") is common.  Even
4046     with `-fstrict-aliasing', type-punning is allowed, provided the
4047     memory is accessed through the union type.  So, the code above
4048     will work as expected.  However, this code might not:
4049          int f() {
4050            a_union t;
4051            int* ip;
4052            t.d = 3.0;
4053            ip = &t.i;
4054            return *ip;
4055          }
4056
4057     Every language that wishes to perform language-specific alias
4058     analysis should define a function that computes, given an `tree'
4059     node, an alias set for the node.  Nodes in different alias sets
4060     are not allowed to alias.  For an example, see the C front-end
4061     function `c_get_alias_set'.
4062
4063     Enabled at levels `-O2', `-O3', `-Os'.
4064
4065`-falign-functions'
4066`-falign-functions=N'
4067     Align the start of functions to the next power-of-two greater than
4068     N, skipping up to N bytes.  For instance, `-falign-functions=32'
4069     aligns functions to the next 32-byte boundary, but
4070     `-falign-functions=24' would align to the next 32-byte boundary
4071     only if this can be done by skipping 23 bytes or less.
4072
4073     `-fno-align-functions' and `-falign-functions=1' are equivalent
4074     and mean that functions will not be aligned.
4075
4076     Some assemblers only support this flag when N is a power of two;
4077     in that case, it is rounded up.
4078
4079     If N is not specified or is zero, use a machine-dependent default.
4080
4081     Enabled at levels `-O2', `-O3'.
4082
4083`-falign-labels'
4084`-falign-labels=N'
4085     Align all branch targets to a power-of-two boundary, skipping up to
4086     N bytes like `-falign-functions'.  This option can easily make
4087     code slower, because it must insert dummy operations for when the
4088     branch target is reached in the usual flow of the code.
4089
4090     `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
4091     that labels will not be aligned.
4092
4093     If `-falign-loops' or `-falign-jumps' are applicable and are
4094     greater than this value, then their values are used instead.
4095
4096     If N is not specified or is zero, use a machine-dependent default
4097     which is very likely to be `1', meaning no alignment.
4098
4099     Enabled at levels `-O2', `-O3'.
4100
4101`-falign-loops'
4102`-falign-loops=N'
4103     Align loops to a power-of-two boundary, skipping up to N bytes
4104     like `-falign-functions'.  The hope is that the loop will be
4105     executed many times, which will make up for any execution of the
4106     dummy operations.
4107
4108     `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
4109     that loops will not be aligned.
4110
4111     If N is not specified or is zero, use a machine-dependent default.
4112
4113     Enabled at levels `-O2', `-O3'.
4114
4115`-falign-jumps'
4116`-falign-jumps=N'
4117     Align branch targets to a power-of-two boundary, for branch targets
4118     where the targets can only be reached by jumping, skipping up to N
4119     bytes like `-falign-functions'.  In this case, no dummy operations
4120     need be executed.
4121
4122     `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
4123     that loops will not be aligned.
4124
4125     If N is not specified or is zero, use a machine-dependent default.
4126
4127     Enabled at levels `-O2', `-O3'.
4128
4129`-frename-registers'
4130     Attempt to avoid false dependencies in scheduled code by making use
4131     of registers left over after register allocation.  This
4132     optimization will most benefit processors with lots of registers.
4133     It can, however, make debugging impossible, since variables will
4134     no longer stay in a "home register".
4135
4136`-fweb'
4137     Constructs webs as commonly used for register allocation purposes
4138     and assign each web individual pseudo register.  This allows the
4139     register allocation pass to operate on pseudos directly, but also
4140     strengthens several other optimization passes, such as CSE, loop
4141     optimizer and trivial dead code remover.  It can, however, make
4142     debugging impossible, since variables will no longer stay in a
4143     "home register".
4144
4145     Enabled at levels `-O3'.
4146
4147`-fno-cprop-registers'
4148     After register allocation and post-register allocation instruction
4149     splitting, we perform a copy-propagation pass to try to reduce
4150     scheduling dependencies and occasionally eliminate the copy.
4151
4152     Disabled at levels `-O', `-O2', `-O3', `-Os'.
4153
4154`-fprofile-generate'
4155     Enable options usually used for instrumenting application to
4156     produce profile useful for later recompilation with profile
4157     feedback based optimization.  You must use `-fprofile-generate'
4158     both when compiling and when linking your program.
4159
4160     The following options are enabled: `-fprofile-arcs',
4161     `-fprofile-values', `-fvpt'.
4162
4163`-fprofile-use'
4164     Enable profile feedback directed optimizations, and optimizations
4165     generally profitable only with profile feedback available.
4166
4167     The following options are enabled: `-fbranch-probabilities',
4168     `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'.
4169
4170
4171 The following options control compiler behavior regarding floating
4172point arithmetic.  These options trade off between speed and
4173correctness.  All must be specifically enabled.
4174
4175`-ffloat-store'
4176     Do not store floating point variables in registers, and inhibit
4177     other options that might change whether a floating point value is
4178     taken from a register or memory.
4179
4180     This option prevents undesirable excess precision on machines such
4181     as the 68000 where the floating registers (of the 68881) keep more
4182     precision than a `double' is supposed to have.  Similarly for the
4183     x86 architecture.  For most programs, the excess precision does
4184     only good, but a few programs rely on the precise definition of
4185     IEEE floating point.  Use `-ffloat-store' for such programs, after
4186     modifying them to store all pertinent intermediate computations
4187     into variables.
4188
4189`-ffast-math'
4190     Sets `-fno-math-errno', `-funsafe-math-optimizations',
4191     `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math'
4192     and `-fno-signaling-nans'.
4193
4194     This option causes the preprocessor macro `__FAST_MATH__' to be
4195     defined.
4196
4197     This option should never be turned on by any `-O' option since it
4198     can result in incorrect output for programs which depend on an
4199     exact implementation of IEEE or ISO rules/specifications for math
4200     functions.
4201
4202`-fno-math-errno'
4203     Do not set ERRNO after calling math functions that are executed
4204     with a single instruction, e.g., sqrt.  A program that relies on
4205     IEEE exceptions for math error handling may want to use this flag
4206     for speed while maintaining IEEE arithmetic compatibility.
4207
4208     This option should never be turned on by any `-O' option since it
4209     can result in incorrect output for programs which depend on an
4210     exact implementation of IEEE or ISO rules/specifications for math
4211     functions.
4212
4213     The default is `-fmath-errno'.
4214
4215`-funsafe-math-optimizations'
4216     Allow optimizations for floating-point arithmetic that (a) assume
4217     that arguments and results are valid and (b) may violate IEEE or
4218     ANSI standards.  When used at link-time, it may include libraries
4219     or startup files that change the default FPU control word or other
4220     similar optimizations.
4221
4222     This option should never be turned on by any `-O' option since it
4223     can result in incorrect output for programs which depend on an
4224     exact implementation of IEEE or ISO rules/specifications for math
4225     functions.
4226
4227     The default is `-fno-unsafe-math-optimizations'.
4228
4229`-ffinite-math-only'
4230     Allow optimizations for floating-point arithmetic that assume that
4231     arguments and results are not NaNs or +-Infs.
4232
4233     This option should never be turned on by any `-O' option since it
4234     can result in incorrect output for programs which depend on an
4235     exact implementation of IEEE or ISO rules/specifications.
4236
4237     The default is `-fno-finite-math-only'.
4238
4239`-fno-trapping-math'
4240     Compile code assuming that floating-point operations cannot
4241     generate user-visible traps.  These traps include division by
4242     zero, overflow, underflow, inexact result and invalid operation.
4243     This option implies `-fno-signaling-nans'.  Setting this option
4244     may allow faster code if one relies on "non-stop" IEEE arithmetic,
4245     for example.
4246
4247     This option should never be turned on by any `-O' option since it
4248     can result in incorrect output for programs which depend on an
4249     exact implementation of IEEE or ISO rules/specifications for math
4250     functions.
4251
4252     The default is `-ftrapping-math'.
4253
4254`-frounding-math'
4255     Disable transformations and optimizations that assume default
4256     floating point rounding behavior.  This is round-to-zero for all
4257     floating point to integer conversions, and round-to-nearest for
4258     all other arithmetic truncations.  This option should be specified
4259     for programs that change the FP rounding mode dynamically, or that
4260     may be executed with a non-default rounding mode.  This option
4261     disables constant folding of floating point expressions at
4262     compile-time (which may be affected by rounding mode) and
4263     arithmetic transformations that are unsafe in the presence of
4264     sign-dependent rounding modes.
4265
4266     The default is `-fno-rounding-math'.
4267
4268     This option is experimental and does not currently guarantee to
4269     disable all GCC optimizations that are affected by rounding mode.
4270     Future versions of GCC may provide finer control of this setting
4271     using C99's `FENV_ACCESS' pragma.  This command line option will
4272     be used to specify the default state for `FENV_ACCESS'.
4273
4274`-fsignaling-nans'
4275     Compile code assuming that IEEE signaling NaNs may generate
4276     user-visible traps during floating-point operations.  Setting this
4277     option disables optimizations that may change the number of
4278     exceptions visible with signaling NaNs.  This option implies
4279     `-ftrapping-math'.
4280
4281     This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
4282     defined.
4283
4284     The default is `-fno-signaling-nans'.
4285
4286     This option is experimental and does not currently guarantee to
4287     disable all GCC optimizations that affect signaling NaN behavior.
4288
4289`-fsingle-precision-constant'
4290     Treat floating point constant as single precision constant instead
4291     of implicitly converting it to double precision constant.
4292
4293
4294 The following options control optimizations that may improve
4295performance, but are not enabled by any `-O' options.  This section
4296includes experimental options that may produce broken code.
4297
4298`-fbranch-probabilities'
4299     After running a program compiled with `-fprofile-arcs' (*note
4300     Options for Debugging Your Program or `gcc': Debugging Options.),
4301     you can compile it a second time using `-fbranch-probabilities',
4302     to improve optimizations based on the number of times each branch
4303     was taken.  When the program compiled with `-fprofile-arcs' exits
4304     it saves arc execution counts to a file called `SOURCENAME.gcda'
4305     for each source file  The information in this data file is very
4306     dependent on the structure of the generated code, so you must use
4307     the same source code and the same optimization options for both
4308     compilations.
4309
4310     With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
4311     each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
4312     optimization.  Currently, they are only used in one place: in
4313     `reorg.c', instead of guessing which path a branch is mostly to
4314     take, the `REG_BR_PROB' values are used to exactly determine which
4315     path is taken more often.
4316
4317`-fprofile-values'
4318     If combined with `-fprofile-arcs', it adds code so that some data
4319     about values of expressions in the program is gathered.
4320
4321     With `-fbranch-probabilities', it reads back the data gathered
4322     from profiling values of expressions and adds `REG_VALUE_PROFILE'
4323     notes to instructions for their later usage in optimizations.
4324
4325`-fvpt'
4326     If combined with `-fprofile-arcs', it instructs the compiler to add
4327     a code to gather information about values of expressions.
4328
4329     With `-fbranch-probabilities', it reads back the data gathered and
4330     actually performs the optimizations based on them.  Currently the
4331     optimizations include specialization of division operation using
4332     the knowledge about the value of the denominator.
4333
4334`-fnew-ra'
4335     Use a graph coloring register allocator.  Currently this option is
4336     meant for testing, so we are interested to hear about
4337     miscompilations with `-fnew-ra'.
4338
4339`-ftracer'
4340     Perform tail duplication to enlarge superblock size. This
4341     transformation simplifies the control flow of the function
4342     allowing other optimizations to do better job.
4343
4344`-funit-at-a-time'
4345     Parse the whole compilation unit before starting to produce code.
4346     This allows some extra optimizations to take place but consumes
4347     more memory.
4348
4349`-funroll-loops'
4350     Unroll loops whose number of iterations can be determined at
4351     compile time or upon entry to the loop.  `-funroll-loops' implies
4352     `-frerun-cse-after-loop'.  It also turns on complete loop peeling
4353     (i.e. complete removal of loops with small constant number of
4354     iterations).  This option makes code larger, and may or may not
4355     make it run faster.
4356
4357`-funroll-all-loops'
4358     Unroll all loops, even if their number of iterations is uncertain
4359     when the loop is entered.  This usually makes programs run more
4360     slowly.  `-funroll-all-loops' implies the same options as
4361     `-funroll-loops'.
4362
4363`-fpeel-loops'
4364     Peels the loops for that there is enough information that they do
4365     not roll much (from profile feedback).  It also turns on complete
4366     loop peeling (i.e. complete removal of loops with small constant
4367     number of iterations).
4368
4369`-funswitch-loops'
4370     Move branches with loop invariant conditions out of the loop, with
4371     duplicates of the loop on both branches (modified according to
4372     result of the condition).
4373
4374`-fold-unroll-loops'
4375     Unroll loops whose number of iterations can be determined at
4376     compile time or upon entry to the loop, using the old loop
4377     unroller whose loop recognition is based on notes from frontend.
4378     `-fold-unroll-loops' implies both `-fstrength-reduce' and
4379     `-frerun-cse-after-loop'.  This option makes code larger, and may
4380     or may not make it run faster.
4381
4382`-fold-unroll-all-loops'
4383     Unroll all loops, even if their number of iterations is uncertain
4384     when the loop is entered. This is done using the old loop unroller
4385     whose loop recognition is based on notes from frontend.  This
4386     usually makes programs run more slowly.  `-fold-unroll-all-loops'
4387     implies the same options as `-fold-unroll-loops'.
4388
4389`-funswitch-loops'
4390     Move branches with loop invariant conditions out of the loop, with
4391     duplicates of the loop on both branches (modified according to
4392     result of the condition).
4393
4394`-funswitch-loops'
4395     Move branches with loop invariant conditions out of the loop, with
4396     duplicates of the loop on both branches (modified according to
4397     result of the condition).
4398
4399`-fprefetch-loop-arrays'
4400     If supported by the target machine, generate instructions to
4401     prefetch memory to improve the performance of loops that access
4402     large arrays.
4403
4404     Disabled at level `-Os'.
4405
4406`-ffunction-sections'
4407`-fdata-sections'
4408     Place each function or data item into its own section in the output
4409     file if the target supports arbitrary sections.  The name of the
4410     function or the name of the data item determines the section's name
4411     in the output file.
4412
4413     Use these options on systems where the linker can perform
4414     optimizations to improve locality of reference in the instruction
4415     space.  Most systems using the ELF object format and SPARC
4416     processors running Solaris 2 have linkers with such optimizations.
4417     AIX may have these optimizations in the future.
4418
4419     Only use these options when there are significant benefits from
4420     doing so.  When you specify these options, the assembler and
4421     linker will create larger object and executable files and will
4422     also be slower.  You will not be able to use `gprof' on all
4423     systems if you specify this option and you may have problems with
4424     debugging if you specify both this option and `-g'.
4425
4426`-fbranch-target-load-optimize'
4427     Perform branch target register load optimization before prologue /
4428     epilogue threading.  The use of target registers can typically be
4429     exposed only during reload, thus hoisting loads out of loops and
4430     doing inter-block scheduling needs a separate optimization pass.
4431
4432`-fbranch-target-load-optimize2'
4433     Perform branch target register load optimization after prologue /
4434     epilogue threading.
4435
4436`--param NAME=VALUE'
4437     In some places, GCC uses various constants to control the amount of
4438     optimization that is done.  For example, GCC will not inline
4439     functions that contain more that a certain number of instructions.
4440     You can control some of these constants on the command-line using
4441     the `--param' option.
4442
4443     The names of specific parameters, and the meaning of the values,
4444     are tied to the internals of the compiler, and are subject to
4445     change without notice in future releases.
4446
4447     In each case, the VALUE is an integer.  The allowable choices for
4448     NAME are given in the following table:
4449
4450    `max-crossjump-edges'
4451          The maximum number of incoming edges to consider for
4452          crossjumping.  The algorithm used by `-fcrossjumping' is
4453          O(N^2) in the number of edges incoming to each block.
4454          Increasing values mean more aggressive optimization, making
4455          the compile time increase with probably small improvement in
4456          executable size.
4457
4458    `max-delay-slot-insn-search'
4459          The maximum number of instructions to consider when looking
4460          for an instruction to fill a delay slot.  If more than this
4461          arbitrary number of instructions is searched, the time
4462          savings from filling the delay slot will be minimal so stop
4463          searching.  Increasing values mean more aggressive
4464          optimization, making the compile time increase with probably
4465          small improvement in executable run time.
4466
4467    `max-delay-slot-live-search'
4468          When trying to fill delay slots, the maximum number of
4469          instructions to consider when searching for a block with
4470          valid live register information.  Increasing this arbitrarily
4471          chosen value means more aggressive optimization, increasing
4472          the compile time.  This parameter should be removed when the
4473          delay slot code is rewritten to maintain the control-flow
4474          graph.
4475
4476    `max-gcse-memory'
4477          The approximate maximum amount of memory that will be
4478          allocated in order to perform the global common subexpression
4479          elimination optimization.  If more memory than specified is
4480          required, the optimization will not be done.
4481
4482    `max-gcse-passes'
4483          The maximum number of passes of GCSE to run.
4484
4485    `max-pending-list-length'
4486          The maximum number of pending dependencies scheduling will
4487          allow before flushing the current state and starting over.
4488          Large functions with few branches or calls can create
4489          excessively large lists which needlessly consume memory and
4490          resources.
4491
4492    `max-inline-insns-single'
4493          Several parameters control the tree inliner used in gcc.
4494          This number sets the maximum number of instructions (counted
4495          in GCC's internal representation) in a single function that
4496          the tree inliner will consider for inlining.  This only
4497          affects functions declared inline and methods implemented in
4498          a class declaration (C++).  The default value is 500.
4499
4500    `max-inline-insns-auto'
4501          When you use `-finline-functions' (included in `-O3'), a lot
4502          of functions that would otherwise not be considered for
4503          inlining by the compiler will be investigated.  To those
4504          functions, a different (more restrictive) limit compared to
4505          functions declared inline can be applied.  The default value
4506          is 100.
4507
4508    `large-function-insns'
4509          The limit specifying really large functions.  For functions
4510          greater than this limit inlining is constrained by `--param
4511          large-function-growth'.  This parameter is useful primarily
4512          to avoid extreme compilation time caused by non-linear
4513          algorithms used by the backend.  This parameter is ignored
4514          when `-funit-at-a-time' is not used.  The default value is
4515          3000.
4516
4517    `large-function-growth'
4518          Specifies maximal growth of large function caused by inlining
4519          in percents.  This parameter is ignored when
4520          `-funit-at-a-time' is not used.  The default value is 200.
4521
4522    `inline-unit-growth'
4523          Specifies maximal overall growth of the compilation unit
4524          caused by inlining.  This parameter is ignored when
4525          `-funit-at-a-time' is not used.  The default value is 150.
4526
4527    `max-inline-insns-rtl'
4528          For languages that use the RTL inliner (this happens at a
4529          later stage than tree inlining), you can set the maximum
4530          allowable size (counted in RTL instructions) for the RTL
4531          inliner with this parameter.  The default value is 600.
4532
4533    `max-unrolled-insns'
4534          The maximum number of instructions that a loop should have if
4535          that loop is unrolled, and if the loop is unrolled, it
4536          determines how many times the loop code is unrolled.
4537
4538    `max-average-unrolled-insns'
4539          The maximum number of instructions biased by probabilities of
4540          their execution that a loop should have if that loop is
4541          unrolled, and if the loop is unrolled, it determines how many
4542          times the loop code is unrolled.
4543
4544    `max-unroll-times'
4545          The maximum number of unrollings of a single loop.
4546
4547    `max-peeled-insns'
4548          The maximum number of instructions that a loop should have if
4549          that loop is peeled, and if the loop is peeled, it determines
4550          how many times the loop code is peeled.
4551
4552    `max-peel-times'
4553          The maximum number of peelings of a single loop.
4554
4555    `max-completely-peeled-insns'
4556          The maximum number of insns of a completely peeled loop.
4557
4558    `max-completely-peel-times'
4559          The maximum number of iterations of a loop to be suitable for
4560          complete peeling.
4561
4562    `max-unswitch-insns'
4563          The maximum number of insns of an unswitched loop.
4564
4565    `max-unswitch-level'
4566          The maximum number of branches unswitched in a single loop.
4567
4568    `hot-bb-count-fraction'
4569          Select fraction of the maximal count of repetitions of basic
4570          block in program given basic block needs to have to be
4571          considered hot.
4572
4573    `hot-bb-frequency-fraction'
4574          Select fraction of the maximal frequency of executions of
4575          basic block in function given basic block needs to have to be
4576          considered hot
4577
4578    `tracer-dynamic-coverage'
4579    `tracer-dynamic-coverage-feedback'
4580          This value is used to limit superblock formation once the
4581          given percentage of executed instructions is covered.  This
4582          limits unnecessary code size expansion.
4583
4584          The `tracer-dynamic-coverage-feedback' is used only when
4585          profile feedback is available.  The real profiles (as opposed
4586          to statically estimated ones) are much less balanced allowing
4587          the threshold to be larger value.
4588
4589    `tracer-max-code-growth'
4590          Stop tail duplication once code growth has reached given
4591          percentage.  This is rather hokey argument, as most of the
4592          duplicates will be eliminated later in cross jumping, so it
4593          may be set to much higher values than is the desired code
4594          growth.
4595
4596    `tracer-min-branch-ratio'
4597          Stop reverse growth when the reverse probability of best edge
4598          is less than this threshold (in percent).
4599
4600    `tracer-min-branch-ratio'
4601    `tracer-min-branch-ratio-feedback'
4602          Stop forward growth if the best edge do have probability
4603          lower than this threshold.
4604
4605          Similarly to `tracer-dynamic-coverage' two values are
4606          present, one for compilation for profile feedback and one for
4607          compilation without.  The value for compilation with profile
4608          feedback needs to be more conservative (higher) in order to
4609          make tracer effective.
4610
4611    `max-cse-path-length'
4612          Maximum number of basic blocks on path that cse considers.
4613
4614    `ggc-min-expand'
4615          GCC uses a garbage collector to manage its own memory
4616          allocation.  This parameter specifies the minimum percentage
4617          by which the garbage collector's heap should be allowed to
4618          expand between collections.  Tuning this may improve
4619          compilation speed; it has no effect on code generation.
4620
4621          The default is 30% + 70% * (RAM/1GB) with an upper bound of
4622          100% when RAM >= 1GB.  If `getrlimit' is available, the
4623          notion of "RAM" is the smallest of actual RAM, RLIMIT_RSS,
4624          RLIMIT_DATA and RLIMIT_AS.  If GCC is not able to calculate
4625          RAM on a particular platform, the lower bound of 30% is used.
4626          Setting this parameter and `ggc-min-heapsize' to zero causes
4627          a full collection to occur at every opportunity.  This is
4628          extremely slow, but can be useful for debugging.
4629
4630    `ggc-min-heapsize'
4631          Minimum size of the garbage collector's heap before it begins
4632          bothering to collect garbage.  The first collection occurs
4633          after the heap expands by `ggc-min-expand'% beyond
4634          `ggc-min-heapsize'.  Again, tuning this may improve
4635          compilation speed, and has no effect on code generation.
4636
4637          The default is RAM/8, with a lower bound of 4096 (four
4638          megabytes) and an upper bound of 131072 (128 megabytes).  If
4639          `getrlimit' is available, the notion of "RAM" is the smallest
4640          of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If GCC
4641          is not able to calculate RAM on a particular platform, the
4642          lower bound is used.  Setting this parameter very large
4643          effectively disables garbage collection.  Setting this
4644          parameter and `ggc-min-expand' to zero causes a full
4645          collection to occur at every opportunity.
4646
4647    `max-reload-search-insns'
4648          The maximum number of instruction reload should look backward
4649          for equivalent register.  Increasing values mean more
4650          aggressive optimization, making the compile time increase
4651          with probably slightly better performance.  The default value
4652          is 100.
4653
4654    `max-cselib-memory-location'
4655          The maximum number of memory locations cselib should take
4656          into acount.  Increasing values mean more aggressive
4657          optimization, making the compile time increase with probably
4658          slightly better performance.  The default value is 500.
4659
4660    `reorder-blocks-duplicate'
4661    `reorder-blocks-duplicate-feedback'
4662          Used by basic block reordering pass to decide whether to use
4663          unconditional branch or duplicate the code on its
4664          destination.  Code is duplicated when its estimated size is
4665          smaller than this value multiplied by the estimated size of
4666          unconditional jump in the hot spots of the program.
4667
4668          The `reorder-block-duplicate-feedback' is used only when
4669          profile feedback is available and may be set to higher values
4670          than `reorder-block-duplicate' since information about the
4671          hot spots is more accurate.
4672
4673
4674File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
4675
46763.11 Options Controlling the Preprocessor
4677=========================================
4678
4679These options control the C preprocessor, which is run on each C source
4680file before actual compilation.
4681
4682 If you use the `-E' option, nothing is done except preprocessing.
4683Some of these options make sense only together with `-E' because they
4684cause the preprocessor output to be unsuitable for actual compilation.
4685
4686     You can use `-Wp,OPTION' to bypass the compiler driver and pass
4687     OPTION directly through to the preprocessor.  If OPTION contains
4688     commas, it is split into multiple options at the commas.  However,
4689     many options are modified, translated or interpreted by the
4690     compiler driver before being passed to the preprocessor, and `-Wp'
4691     forcibly bypasses this phase.  The preprocessor's direct interface
4692     is undocumented and subject to change, so whenever possible you
4693     should avoid using `-Wp' and let the driver handle the options
4694     instead.
4695
4696`-Xpreprocessor OPTION'
4697     Pass OPTION as an option to the preprocessor.  You can use this to
4698     supply system-specific preprocessor options which GCC does not
4699     know how to recognize.
4700
4701     If you want to pass an option that takes an argument, you must use
4702     `-Xpreprocessor' twice, once for the option and once for the
4703     argument.
4704
4705`-D NAME'
4706     Predefine NAME as a macro, with definition `1'.
4707
4708`-D NAME=DEFINITION'
4709     Predefine NAME as a macro, with definition DEFINITION.  The
4710     contents of DEFINITION are tokenized and processed as if they
4711     appeared during translation phase three in a `#define' directive.
4712     In particular, the definition will be truncated by embedded
4713     newline characters.
4714
4715     If you are invoking the preprocessor from a shell or shell-like
4716     program you may need to use the shell's quoting syntax to protect
4717     characters such as spaces that have a meaning in the shell syntax.
4718
4719     If you wish to define a function-like macro on the command line,
4720     write its argument list with surrounding parentheses before the
4721     equals sign (if any).  Parentheses are meaningful to most shells,
4722     so you will need to quote the option.  With `sh' and `csh',
4723     `-D'NAME(ARGS...)=DEFINITION'' works.
4724
4725     `-D' and `-U' options are processed in the order they are given on
4726     the command line.  All `-imacros FILE' and `-include FILE' options
4727     are processed after all `-D' and `-U' options.
4728
4729`-U NAME'
4730     Cancel any previous definition of NAME, either built in or
4731     provided with a `-D' option.
4732
4733`-undef'
4734     Do not predefine any system-specific or GCC-specific macros.  The
4735     standard predefined macros remain defined.
4736
4737`-I DIR'
4738     Add the directory DIR to the list of directories to be searched
4739     for header files.  Directories named by `-I' are searched before
4740     the standard system include directories.  If the directory DIR is
4741     a standard system include directory, the option is ignored to
4742     ensure that the default search order for system directories and
4743     the special treatment of system headers are not defeated .
4744
4745`-o FILE'
4746     Write output to FILE.  This is the same as specifying FILE as the
4747     second non-option argument to `cpp'.  `gcc' has a different
4748     interpretation of a second non-option argument, so you must use
4749     `-o' to specify the output file.
4750
4751`-Wall'
4752     Turns on all optional warnings which are desirable for normal code.
4753     At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
4754     warning about integer promotion causing a change of sign in `#if'
4755     expressions.  Note that many of the preprocessor's warnings are on
4756     by default and have no options to control them.
4757
4758`-Wcomment'
4759`-Wcomments'
4760     Warn whenever a comment-start sequence `/*' appears in a `/*'
4761     comment, or whenever a backslash-newline appears in a `//' comment.
4762     (Both forms have the same effect.)
4763
4764`-Wtrigraphs'
4765     Most trigraphs in comments cannot affect the meaning of the
4766     program.  However, a trigraph that would form an escaped newline
4767     (`??/' at the end of a line) can, by changing where the comment
4768     begins or ends.  Therefore, only trigraphs that would form escaped
4769     newlines produce warnings inside a comment.
4770
4771     This option is implied by `-Wall'.  If `-Wall' is not given, this
4772     option is still enabled unless trigraphs are enabled.  To get
4773     trigraph conversion without warnings, but get the other `-Wall'
4774     warnings, use `-trigraphs -Wall -Wno-trigraphs'.
4775
4776`-Wtraditional'
4777     Warn about certain constructs that behave differently in
4778     traditional and ISO C.  Also warn about ISO C constructs that have
4779     no traditional C equivalent, and problematic constructs which
4780     should be avoided.
4781
4782`-Wimport'
4783     Warn the first time `#import' is used.
4784
4785`-Wundef'
4786     Warn whenever an identifier which is not a macro is encountered in
4787     an `#if' directive, outside of `defined'.  Such identifiers are
4788     replaced with zero.
4789
4790`-Wunused-macros'
4791     Warn about macros defined in the main file that are unused.  A
4792     macro is "used" if it is expanded or tested for existence at least
4793     once.  The preprocessor will also warn if the macro has not been
4794     used at the time it is redefined or undefined.
4795
4796     Built-in macros, macros defined on the command line, and macros
4797     defined in include files are not warned about.
4798
4799     *Note:* If a macro is actually used, but only used in skipped
4800     conditional blocks, then CPP will report it as unused.  To avoid
4801     the warning in such a case, you might improve the scope of the
4802     macro's definition by, for example, moving it into the first
4803     skipped block.  Alternatively, you could provide a dummy use with
4804     something like:
4805
4806          #if defined the_macro_causing_the_warning
4807          #endif
4808
4809`-Wendif-labels'
4810     Warn whenever an `#else' or an `#endif' are followed by text.
4811     This usually happens in code of the form
4812
4813          #if FOO
4814          ...
4815          #else FOO
4816          ...
4817          #endif FOO
4818
4819     The second and third `FOO' should be in comments, but often are not
4820     in older programs.  This warning is on by default.
4821
4822`-Werror'
4823     Make all warnings into hard errors.  Source code which triggers
4824     warnings will be rejected.
4825
4826`-Wsystem-headers'
4827     Issue warnings for code in system headers.  These are normally
4828     unhelpful in finding bugs in your own code, therefore suppressed.
4829     If you are responsible for the system library, you may want to see
4830     them.
4831
4832`-w'
4833     Suppress all warnings, including those which GNU CPP issues by
4834     default.
4835
4836`-pedantic'
4837     Issue all the mandatory diagnostics listed in the C standard.
4838     Some of them are left out by default, since they trigger
4839     frequently on harmless code.
4840
4841`-pedantic-errors'
4842     Issue all the mandatory diagnostics, and make all mandatory
4843     diagnostics into errors.  This includes mandatory diagnostics that
4844     GCC issues without `-pedantic' but treats as warnings.
4845
4846`-M'
4847     Instead of outputting the result of preprocessing, output a rule
4848     suitable for `make' describing the dependencies of the main source
4849     file.  The preprocessor outputs one `make' rule containing the
4850     object file name for that source file, a colon, and the names of
4851     all the included files, including those coming from `-include' or
4852     `-imacros' command line options.
4853
4854     Unless specified explicitly (with `-MT' or `-MQ'), the object file
4855     name consists of the basename of the source file with any suffix
4856     replaced with object file suffix.  If there are many included
4857     files then the rule is split into several lines using `\'-newline.
4858     The rule has no commands.
4859
4860     This option does not suppress the preprocessor's debug output,
4861     such as `-dM'.  To avoid mixing such debug output with the
4862     dependency rules you should explicitly specify the dependency
4863     output file with `-MF', or use an environment variable like
4864     `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
4865     output will still be sent to the regular output stream as normal.
4866
4867     Passing `-M' to the driver implies `-E', and suppresses warnings
4868     with an implicit `-w'.
4869
4870`-MM'
4871     Like `-M' but do not mention header files that are found in system
4872     header directories, nor header files that are included, directly
4873     or indirectly, from such a header.
4874
4875     This implies that the choice of angle brackets or double quotes in
4876     an `#include' directive does not in itself determine whether that
4877     header will appear in `-MM' dependency output.  This is a slight
4878     change in semantics from GCC versions 3.0 and earlier.
4879
4880`-MF FILE'
4881     When used with `-M' or `-MM', specifies a file to write the
4882     dependencies to.  If no `-MF' switch is given the preprocessor
4883     sends the rules to the same place it would have sent preprocessed
4884     output.
4885
4886     When used with the driver options `-MD' or `-MMD', `-MF' overrides
4887     the default dependency output file.
4888
4889`-MG'
4890     In conjunction with an option such as `-M' requesting dependency
4891     generation, `-MG' assumes missing header files are generated files
4892     and adds them to the dependency list without raising an error.
4893     The dependency filename is taken directly from the `#include'
4894     directive without prepending any path.  `-MG' also suppresses
4895     preprocessed output, as a missing header file renders this useless.
4896
4897     This feature is used in automatic updating of makefiles.
4898
4899`-MP'
4900     This option instructs CPP to add a phony target for each dependency
4901     other than the main file, causing each to depend on nothing.  These
4902     dummy rules work around errors `make' gives if you remove header
4903     files without updating the `Makefile' to match.
4904
4905     This is typical output:
4906
4907          test.o: test.c test.h
4908
4909          test.h:
4910
4911`-MT TARGET'
4912     Change the target of the rule emitted by dependency generation.  By
4913     default CPP takes the name of the main input file, including any
4914     path, deletes any file suffix such as `.c', and appends the
4915     platform's usual object suffix.  The result is the target.
4916
4917     An `-MT' option will set the target to be exactly the string you
4918     specify.  If you want multiple targets, you can specify them as a
4919     single argument to `-MT', or use multiple `-MT' options.
4920
4921     For example, `-MT '$(objpfx)foo.o'' might give
4922
4923          $(objpfx)foo.o: foo.c
4924
4925`-MQ TARGET'
4926     Same as `-MT', but it quotes any characters which are special to
4927     Make.  `-MQ '$(objpfx)foo.o'' gives
4928
4929          $$(objpfx)foo.o: foo.c
4930
4931     The default target is automatically quoted, as if it were given
4932     with `-MQ'.
4933
4934`-MD'
4935     `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
4936     implied.  The driver determines FILE based on whether an `-o'
4937     option is given.  If it is, the driver uses its argument but with
4938     a suffix of `.d', otherwise it take the basename of the input file
4939     and applies a `.d' suffix.
4940
4941     If `-MD' is used in conjunction with `-E', any `-o' switch is
4942     understood to specify the dependency output file (but *note -MF:
4943     dashMF.), but if used without `-E', each `-o' is understood to
4944     specify a target object file.
4945
4946     Since `-E' is not implied, `-MD' can be used to generate a
4947     dependency output file as a side-effect of the compilation process.
4948
4949`-MMD'
4950     Like `-MD' except mention only user header files, not system
4951     -header files.
4952
4953`-fpch-deps'
4954     When using precompiled headers (*note Precompiled Headers::), this
4955     flag will cause the dependency-output flags to also list the files
4956     from the precompiled header's dependencies.  If not specified only
4957     the precompiled header would be listed and not the files that were
4958     used to create it because those files are not consulted when a
4959     precompiled header is used.
4960
4961`-x c'
4962`-x c++'
4963`-x objective-c'
4964`-x assembler-with-cpp'
4965     Specify the source language: C, C++, Objective-C, or assembly.
4966     This has nothing to do with standards conformance or extensions;
4967     it merely selects which base syntax to expect.  If you give none
4968     of these options, cpp will deduce the language from the extension
4969     of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
4970     extensions for C++ and assembly are also recognized.  If cpp does
4971     not recognize the extension, it will treat the file as C; this is
4972     the most generic mode.
4973
4974     *Note:* Previous versions of cpp accepted a `-lang' option which
4975     selected both the language and the standards conformance level.
4976     This option has been removed, because it conflicts with the `-l'
4977     option.
4978
4979`-std=STANDARD'
4980`-ansi'
4981     Specify the standard to which the code should conform.  Currently
4982     CPP knows about C and C++ standards; others may be added in the
4983     future.
4984
4985     STANDARD may be one of:
4986    `iso9899:1990'
4987    `c89'
4988          The ISO C standard from 1990.  `c89' is the customary
4989          shorthand for this version of the standard.
4990
4991          The `-ansi' option is equivalent to `-std=c89'.
4992
4993    `iso9899:199409'
4994          The 1990 C standard, as amended in 1994.
4995
4996    `iso9899:1999'
4997    `c99'
4998    `iso9899:199x'
4999    `c9x'
5000          The revised ISO C standard, published in December 1999.
5001          Before publication, this was known as C9X.
5002
5003    `gnu89'
5004          The 1990 C standard plus GNU extensions.  This is the default.
5005
5006    `gnu99'
5007    `gnu9x'
5008          The 1999 C standard plus GNU extensions.
5009
5010    `c++98'
5011          The 1998 ISO C++ standard plus amendments.
5012
5013    `gnu++98'
5014          The same as `-std=c++98' plus GNU extensions.  This is the
5015          default for C++ code.
5016
5017`-I-'
5018     Split the include path.  Any directories specified with `-I'
5019     options before `-I-' are searched only for headers requested with
5020     `#include "FILE"'; they are not searched for `#include <FILE>'.
5021     If additional directories are specified with `-I' options after
5022     the `-I-', those directories are searched for all `#include'
5023     directives.
5024
5025     In addition, `-I-' inhibits the use of the directory of the current
5026     file directory as the first search directory for `#include "FILE"'.
5027
5028`-nostdinc'
5029     Do not search the standard system directories for header files.
5030     Only the directories you have specified with `-I' options (and the
5031     directory of the current file, if appropriate) are searched.
5032
5033`-nostdinc++'
5034     Do not search for header files in the C++-specific standard
5035     directories, but do still search the other standard directories.
5036     (This option is used when building the C++ library.)
5037
5038`-include FILE'
5039     Process FILE as if `#include "file"' appeared as the first line of
5040     the primary source file.  However, the first directory searched
5041     for FILE is the preprocessor's working directory _instead of_ the
5042     directory containing the main source file.  If not found there, it
5043     is searched for in the remainder of the `#include "..."' search
5044     chain as normal.
5045
5046     If multiple `-include' options are given, the files are included
5047     in the order they appear on the command line.
5048
5049`-imacros FILE'
5050     Exactly like `-include', except that any output produced by
5051     scanning FILE is thrown away.  Macros it defines remain defined.
5052     This allows you to acquire all the macros from a header without
5053     also processing its declarations.
5054
5055     All files specified by `-imacros' are processed before all files
5056     specified by `-include'.
5057
5058`-idirafter DIR'
5059     Search DIR for header files, but do it _after_ all directories
5060     specified with `-I' and the standard system directories have been
5061     exhausted.  DIR is treated as a system include directory.
5062
5063`-iprefix PREFIX'
5064     Specify PREFIX as the prefix for subsequent `-iwithprefix'
5065     options.  If the prefix represents a directory, you should include
5066     the final `/'.
5067
5068`-iwithprefix DIR'
5069`-iwithprefixbefore DIR'
5070     Append DIR to the prefix specified previously with `-iprefix', and
5071     add the resulting directory to the include search path.
5072     `-iwithprefixbefore' puts it in the same place `-I' would;
5073     `-iwithprefix' puts it where `-idirafter' would.
5074
5075`-isystem DIR'
5076     Search DIR for header files, after all directories specified by
5077     `-I' but before the standard system directories.  Mark it as a
5078     system directory, so that it gets the same special treatment as is
5079     applied to the standard system directories.
5080
5081`-fdollars-in-identifiers'
5082     Accept `$' in identifiers.
5083
5084`-fpreprocessed'
5085     Indicate to the preprocessor that the input file has already been
5086     preprocessed.  This suppresses things like macro expansion,
5087     trigraph conversion, escaped newline splicing, and processing of
5088     most directives.  The preprocessor still recognizes and removes
5089     comments, so that you can pass a file preprocessed with `-C' to
5090     the compiler without problems.  In this mode the integrated
5091     preprocessor is little more than a tokenizer for the front ends.
5092
5093     `-fpreprocessed' is implicit if the input file has one of the
5094     extensions `.i', `.ii' or `.mi'.  These are the extensions that
5095     GCC uses for preprocessed files created by `-save-temps'.
5096
5097`-ftabstop=WIDTH'
5098     Set the distance between tab stops.  This helps the preprocessor
5099     report correct column numbers in warnings or errors, even if tabs
5100     appear on the line.  If the value is less than 1 or greater than
5101     100, the option is ignored.  The default is 8.
5102
5103`-fexec-charset=CHARSET'
5104     Set the execution character set, used for string and character
5105     constants.  The default is UTF-8.  CHARSET can be any encoding
5106     supported by the system's `iconv' library routine.
5107
5108`-fwide-exec-charset=CHARSET'
5109     Set the wide execution character set, used for wide string and
5110     character constants.  The default is UTF-32 or UTF-16, whichever
5111     corresponds to the width of `wchar_t'.  As with
5112     `-ftarget-charset', CHARSET can be any encoding supported by the
5113     system's `iconv' library routine; however, you will have problems
5114     with encodings that do not fit exactly in `wchar_t'.
5115
5116`-finput-charset=CHARSET'
5117     Set the input character set, used for translation from the
5118     character set of the input file to the source character set used
5119     by GCC. If the locale does not specify, or GCC cannot get this
5120     information from the locale, the default is UTF-8. This can be
5121     overridden by either the locale or this command line option.
5122     Currently the command line option takes precedence if there's a
5123     conflict. CHARSET can be any encoding supported by the system's
5124     `iconv' library routine.
5125
5126`-fworking-directory'
5127     Enable generation of linemarkers in the preprocessor output that
5128     will let the compiler know the current working directory at the
5129     time of preprocessing.  When this option is enabled, the
5130     preprocessor will emit, after the initial linemarker, a second
5131     linemarker with the current working directory followed by two
5132     slashes.  GCC will use this directory, when it's present in the
5133     preprocessed input, as the directory emitted as the current
5134     working directory in some debugging information formats.  This
5135     option is implicitly enabled if debugging information is enabled,
5136     but this can be inhibited with the negated form
5137     `-fno-working-directory'.  If the `-P' flag is present in the
5138     command line, this option has no effect, since no `#line'
5139     directives are emitted whatsoever.
5140
5141`-fno-show-column'
5142     Do not print column numbers in diagnostics.  This may be necessary
5143     if diagnostics are being scanned by a program that does not
5144     understand the column numbers, such as `dejagnu'.
5145
5146`-A PREDICATE=ANSWER'
5147     Make an assertion with the predicate PREDICATE and answer ANSWER.
5148     This form is preferred to the older form `-A PREDICATE(ANSWER)',
5149     which is still supported, because it does not use shell special
5150     characters.
5151
5152`-A -PREDICATE=ANSWER'
5153     Cancel an assertion with the predicate PREDICATE and answer ANSWER.
5154
5155`-dCHARS'
5156     CHARS is a sequence of one or more of the following characters,
5157     and must not be preceded by a space.  Other characters are
5158     interpreted by the compiler proper, or reserved for future
5159     versions of GCC, and so are silently ignored.  If you specify
5160     characters whose behavior conflicts, the result is undefined.
5161
5162    `M'
5163          Instead of the normal output, generate a list of `#define'
5164          directives for all the macros defined during the execution of
5165          the preprocessor, including predefined macros.  This gives
5166          you a way of finding out what is predefined in your version
5167          of the preprocessor.  Assuming you have no file `foo.h', the
5168          command
5169
5170               touch foo.h; cpp -dM foo.h
5171
5172          will show all the predefined macros.
5173
5174    `D'
5175          Like `M' except in two respects: it does _not_ include the
5176          predefined macros, and it outputs _both_ the `#define'
5177          directives and the result of preprocessing.  Both kinds of
5178          output go to the standard output file.
5179
5180    `N'
5181          Like `D', but emit only the macro names, not their expansions.
5182
5183    `I'
5184          Output `#include' directives in addition to the result of
5185          preprocessing.
5186
5187`-P'
5188     Inhibit generation of linemarkers in the output from the
5189     preprocessor.  This might be useful when running the preprocessor
5190     on something that is not C code, and will be sent to a program
5191     which might be confused by the linemarkers.
5192
5193`-C'
5194     Do not discard comments.  All comments are passed through to the
5195     output file, except for comments in processed directives, which
5196     are deleted along with the directive.
5197
5198     You should be prepared for side effects when using `-C'; it causes
5199     the preprocessor to treat comments as tokens in their own right.
5200     For example, comments appearing at the start of what would be a
5201     directive line have the effect of turning that line into an
5202     ordinary source line, since the first token on the line is no
5203     longer a `#'.
5204
5205`-CC'
5206     Do not discard comments, including during macro expansion.  This is
5207     like `-C', except that comments contained within macros are also
5208     passed through to the output file where the macro is expanded.
5209
5210     In addition to the side-effects of the `-C' option, the `-CC'
5211     option causes all C++-style comments inside a macro to be
5212     converted to C-style comments.  This is to prevent later use of
5213     that macro from inadvertently commenting out the remainder of the
5214     source line.
5215
5216     The `-CC' option is generally used to support lint comments.
5217
5218`-traditional-cpp'
5219     Try to imitate the behavior of old-fashioned C preprocessors, as
5220     opposed to ISO C preprocessors.
5221
5222`-trigraphs'
5223     Process trigraph sequences.  These are three-character sequences,
5224     all starting with `??', that are defined by ISO C to stand for
5225     single characters.  For example, `??/' stands for `\', so `'??/n''
5226     is a character constant for a newline.  By default, GCC ignores
5227     trigraphs, but in standard-conforming modes it converts them.  See
5228     the `-std' and `-ansi' options.
5229
5230     The nine trigraphs and their replacements are
5231
5232          Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
5233          Replacement:      [    ]    {    }    #    \    ^    |    ~
5234
5235`-remap'
5236     Enable special code to work around file systems which only permit
5237     very short file names, such as MS-DOS.
5238
5239`--help'
5240`--target-help'
5241     Print text describing all the command line options instead of
5242     preprocessing anything.
5243
5244`-v'
5245     Verbose mode.  Print out GNU CPP's version number at the beginning
5246     of execution, and report the final form of the include path.
5247
5248`-H'
5249     Print the name of each header file used, in addition to other
5250     normal activities.  Each name is indented to show how deep in the
5251     `#include' stack it is.  Precompiled header files are also
5252     printed, even if they are found to be invalid; an invalid
5253     precompiled header file is printed with `...x' and a valid one
5254     with `...!' .
5255
5256`-version'
5257`--version'
5258     Print out GNU CPP's version number.  With one dash, proceed to
5259     preprocess as normal.  With two dashes, exit immediately.
5260
5261
5262File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
5263
52643.12 Passing Options to the Assembler
5265=====================================
5266
5267You can pass options to the assembler.
5268
5269`-Wa,OPTION'
5270     Pass OPTION as an option to the assembler.  If OPTION contains
5271     commas, it is split into multiple options at the commas.
5272
5273`-Xassembler OPTION'
5274     Pass OPTION as an option to the assembler.  You can use this to
5275     supply system-specific assembler options which GCC does not know
5276     how to recognize.
5277
5278     If you want to pass an option that takes an argument, you must use
5279     `-Xassembler' twice, once for the option and once for the argument.
5280
5281
5282
5283File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
5284
52853.13 Options for Linking
5286========================
5287
5288These options come into play when the compiler links object files into
5289an executable output file.  They are meaningless if the compiler is not
5290doing a link step.
5291
5292`OBJECT-FILE-NAME'
5293     A file name that does not end in a special recognized suffix is
5294     considered to name an object file or library.  (Object files are
5295     distinguished from libraries by the linker according to the file
5296     contents.)  If linking is done, these object files are used as
5297     input to the linker.
5298
5299`-c'
5300`-S'
5301`-E'
5302     If any of these options is used, then the linker is not run, and
5303     object file names should not be used as arguments.  *Note Overall
5304     Options::.
5305
5306`-lLIBRARY'
5307`-l LIBRARY'
5308     Search the library named LIBRARY when linking.  (The second
5309     alternative with the library as a separate argument is only for
5310     POSIX compliance and is not recommended.)
5311
5312     It makes a difference where in the command you write this option;
5313     the linker searches and processes libraries and object files in
5314     the order they are specified.  Thus, `foo.o -lz bar.o' searches
5315     library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
5316     refers to functions in `z', those functions may not be loaded.
5317
5318     The linker searches a standard list of directories for the library,
5319     which is actually a file named `libLIBRARY.a'.  The linker then
5320     uses this file as if it had been specified precisely by name.
5321
5322     The directories searched include several standard system
5323     directories plus any that you specify with `-L'.
5324
5325     Normally the files found this way are library files--archive files
5326     whose members are object files.  The linker handles an archive
5327     file by scanning through it for members which define symbols that
5328     have so far been referenced but not defined.  But if the file that
5329     is found is an ordinary object file, it is linked in the usual
5330     fashion.  The only difference between using an `-l' option and
5331     specifying a file name is that `-l' surrounds LIBRARY with `lib'
5332     and `.a' and searches several directories.
5333
5334`-lobjc'
5335     You need this special case of the `-l' option in order to link an
5336     Objective-C program.
5337
5338`-nostartfiles'
5339     Do not use the standard system startup files when linking.  The
5340     standard system libraries are used normally, unless `-nostdlib' or
5341     `-nodefaultlibs' is used.
5342
5343`-nodefaultlibs'
5344     Do not use the standard system libraries when linking.  Only the
5345     libraries you specify will be passed to the linker.  The standard
5346     startup files are used normally, unless `-nostartfiles' is used.
5347     The compiler may generate calls to memcmp, memset, and memcpy for
5348     System V (and ISO C) environments or to bcopy and bzero for BSD
5349     environments.  These entries are usually resolved by entries in
5350     libc.  These entry points should be supplied through some other
5351     mechanism when this option is specified.
5352
5353`-nostdlib'
5354     Do not use the standard system startup files or libraries when
5355     linking.  No startup files and only the libraries you specify will
5356     be passed to the linker.  The compiler may generate calls to
5357     memcmp, memset, and memcpy for System V (and ISO C) environments
5358     or to bcopy and bzero for BSD environments.  These entries are
5359     usually resolved by entries in libc.  These entry points should be
5360     supplied through some other mechanism when this option is
5361     specified.
5362
5363     One of the standard libraries bypassed by `-nostdlib' and
5364     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
5365     that GCC uses to overcome shortcomings of particular machines, or
5366     special needs for some languages.  (*Note Interfacing to GCC
5367     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
5368     most cases, you need `libgcc.a' even when you want to avoid other
5369     standard libraries.  In other words, when you specify `-nostdlib'
5370     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
5371     This ensures that you have no unresolved references to internal GCC
5372     library subroutines.  (For example, `__main', used to ensure C++
5373     constructors will be called; *note `collect2': (gccint)Collect2.)
5374
5375`-pie'
5376     Produce a position independent executable on targets which support
5377     it.  For predictable results, you must also specify the same set
5378     of options that were used to generate code (`-fpie', `-fPIE', or
5379     model suboptions) when you specify this option.
5380
5381`-s'
5382     Remove all symbol table and relocation information from the
5383     executable.
5384
5385`-static'
5386     On systems that support dynamic linking, this prevents linking
5387     with the shared libraries.  On other systems, this option has no
5388     effect.
5389
5390`-shared'
5391     Produce a shared object which can then be linked with other
5392     objects to form an executable.  Not all systems support this
5393     option.  For predictable results, you must also specify the same
5394     set of options that were used to generate code (`-fpic', `-fPIC',
5395     or model suboptions) when you specify this option.(1)
5396
5397`-shared-libgcc'
5398`-static-libgcc'
5399     On systems that provide `libgcc' as a shared library, these options
5400     force the use of either the shared or static version respectively.
5401     If no shared version of `libgcc' was built when the compiler was
5402     configured, these options have no effect.
5403
5404     There are several situations in which an application should use the
5405     shared `libgcc' instead of the static version.  The most common of
5406     these is when the application wishes to throw and catch exceptions
5407     across different shared libraries.  In that case, each of the
5408     libraries as well as the application itself should use the shared
5409     `libgcc'.
5410
5411     Therefore, the G++ and GCJ drivers automatically add
5412     `-shared-libgcc' whenever you build a shared library or a main
5413     executable, because C++ and Java programs typically use
5414     exceptions, so this is the right thing to do.
5415
5416     If, instead, you use the GCC driver to create shared libraries,
5417     you may find that they will not always be linked with the shared
5418     `libgcc'.  If GCC finds, at its configuration time, that you have
5419     a non-GNU linker or a GNU linker that does not support option
5420     `--eh-frame-hdr', it will link the shared version of `libgcc' into
5421     shared libraries by default.  Otherwise, it will take advantage of
5422     the linker and optimize away the linking with the shared version
5423     of `libgcc', linking with the static version of libgcc by default.
5424     This allows exceptions to propagate through such shared
5425     libraries, without incurring relocation costs at library load time.
5426
5427     However, if a library or main executable is supposed to throw or
5428     catch exceptions, you must link it using the G++ or GCJ driver, as
5429     appropriate for the languages used in the program, or using the
5430     option `-shared-libgcc', such that it is linked with the shared
5431     `libgcc'.
5432
5433`-symbolic'
5434     Bind references to global symbols when building a shared object.
5435     Warn about any unresolved references (unless overridden by the
5436     link editor option `-Xlinker -z -Xlinker defs').  Only a few
5437     systems support this option.
5438
5439`-Xlinker OPTION'
5440     Pass OPTION as an option to the linker.  You can use this to
5441     supply system-specific linker options which GCC does not know how
5442     to recognize.
5443
5444     If you want to pass an option that takes an argument, you must use
5445     `-Xlinker' twice, once for the option and once for the argument.
5446     For example, to pass `-assert definitions', you must write
5447     `-Xlinker -assert -Xlinker definitions'.  It does not work to write
5448     `-Xlinker "-assert definitions"', because this passes the entire
5449     string as a single argument, which is not what the linker expects.
5450
5451`-Wl,OPTION'
5452     Pass OPTION as an option to the linker.  If OPTION contains
5453     commas, it is split into multiple options at the commas.
5454
5455`-u SYMBOL'
5456     Pretend the symbol SYMBOL is undefined, to force linking of
5457     library modules to define it.  You can use `-u' multiple times with
5458     different symbols to force loading of additional library modules.
5459
5460 ---------- Footnotes ----------
5461
5462 (1) On some systems, `gcc -shared' needs to build supplementary stub
5463code for constructors to work.  On multi-libbed systems, `gcc -shared'
5464must select the correct support libraries to link against.  Failing to
5465supply the correct flags may lead to subtle defects.  Supplying them in
5466cases where they are not necessary is innocuous.
5467
5468
5469File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
5470
54713.14 Options for Directory Search
5472=================================
5473
5474These options specify directories to search for header files, for
5475libraries and for parts of the compiler:
5476
5477`-IDIR'
5478     Add the directory DIR to the head of the list of directories to be
5479     searched for header files.  This can be used to override a system
5480     header file, substituting your own version, since these
5481     directories are searched before the system header file
5482     directories.  However, you should not use this option to add
5483     directories that contain vendor-supplied system header files (use
5484     `-isystem' for that).  If you use more than one `-I' option, the
5485     directories are scanned in left-to-right order; the standard
5486     system directories come after.
5487
5488     If a standard system include directory, or a directory specified
5489     with `-isystem', is also specified with `-I', the `-I' option will
5490     be ignored.  The directory will still be searched but as a system
5491     directory at its normal position in the system include chain.
5492     This is to ensure that GCC's procedure to fix buggy system headers
5493     and the ordering for the include_next directive are not
5494     inadvertently changed.  If you really need to change the search
5495     order for system directories, use the `-nostdinc' and/or
5496     `-isystem' options.
5497
5498`-I-'
5499     Any directories you specify with `-I' options before the `-I-'
5500     option are searched only for the case of `#include "FILE"'; they
5501     are not searched for `#include <FILE>'.
5502
5503     If additional directories are specified with `-I' options after
5504     the `-I-', these directories are searched for all `#include'
5505     directives.  (Ordinarily _all_ `-I' directories are used this way.)
5506
5507     In addition, the `-I-' option inhibits the use of the current
5508     directory (where the current input file came from) as the first
5509     search directory for `#include "FILE"'.  There is no way to
5510     override this effect of `-I-'.  With `-I.' you can specify
5511     searching the directory which was current when the compiler was
5512     invoked.  That is not exactly the same as what the preprocessor
5513     does by default, but it is often satisfactory.
5514
5515     `-I-' does not inhibit the use of the standard system directories
5516     for header files.  Thus, `-I-' and `-nostdinc' are independent.
5517
5518`-LDIR'
5519     Add directory DIR to the list of directories to be searched for
5520     `-l'.
5521
5522`-BPREFIX'
5523     This option specifies where to find the executables, libraries,
5524     include files, and data files of the compiler itself.
5525
5526     The compiler driver program runs one or more of the subprograms
5527     `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
5528     program it tries to run, both with and without `MACHINE/VERSION/'
5529     (*note Target Options::).
5530
5531     For each subprogram to be run, the compiler driver first tries the
5532     `-B' prefix, if any.  If that name is not found, or if `-B' was
5533     not specified, the driver tries two standard prefixes, which are
5534     `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
5535     results in a file name that is found, the unmodified program name
5536     is searched for using the directories specified in your `PATH'
5537     environment variable.
5538
5539     The compiler will check to see if the path provided by the `-B'
5540     refers to a directory, and if necessary it will add a directory
5541     separator character at the end of the path.
5542
5543     `-B' prefixes that effectively specify directory names also apply
5544     to libraries in the linker, because the compiler translates these
5545     options into `-L' options for the linker.  They also apply to
5546     includes files in the preprocessor, because the compiler
5547     translates these options into `-isystem' options for the
5548     preprocessor.  In this case, the compiler appends `include' to the
5549     prefix.
5550
5551     The run-time support file `libgcc.a' can also be searched for using
5552     the `-B' prefix, if needed.  If it is not found there, the two
5553     standard prefixes above are tried, and that is all.  The file is
5554     left out of the link if it is not found by those means.
5555
5556     Another way to specify a prefix much like the `-B' prefix is to use
5557     the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
5558     Variables::.
5559
5560     As a special kludge, if the path provided by `-B' is
5561     `[dir/]stageN/', where N is a number in the range 0 to 9, then it
5562     will be replaced by `[dir/]include'.  This is to help with
5563     boot-strapping the compiler.
5564
5565`-specs=FILE'
5566     Process FILE after the compiler reads in the standard `specs'
5567     file, in order to override the defaults that the `gcc' driver
5568     program uses when determining what switches to pass to `cc1',
5569     `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
5570     specified on the command line, and they are processed in order,
5571     from left to right.
5572
5573
5574File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
5575
55763.15 Specifying subprocesses and the switches to pass to them
5577=============================================================
5578
5579`gcc' is a driver program.  It performs its job by invoking a sequence
5580of other programs to do the work of compiling, assembling and linking.
5581GCC interprets its command-line parameters and uses these to deduce
5582which programs it should invoke, and which command-line options it
5583ought to place on their command lines.  This behavior is controlled by
5584"spec strings".  In most cases there is one spec string for each
5585program that GCC can invoke, but a few programs have multiple spec
5586strings to control their behavior.  The spec strings built into GCC can
5587be overridden by using the `-specs=' command-line switch to specify a
5588spec file.
5589
5590 "Spec files" are plaintext files that are used to construct spec
5591strings.  They consist of a sequence of directives separated by blank
5592lines.  The type of directive is determined by the first non-whitespace
5593character on the line and it can be one of the following:
5594
5595`%COMMAND'
5596     Issues a COMMAND to the spec file processor.  The commands that can
5597     appear here are:
5598
5599    `%include <FILE>'
5600          Search for FILE and insert its text at the current point in
5601          the specs file.
5602
5603    `%include_noerr <FILE>'
5604          Just like `%include', but do not generate an error message if
5605          the include file cannot be found.
5606
5607    `%rename OLD_NAME NEW_NAME'
5608          Rename the spec string OLD_NAME to NEW_NAME.
5609
5610
5611`*[SPEC_NAME]:'
5612     This tells the compiler to create, override or delete the named
5613     spec string.  All lines after this directive up to the next
5614     directive or blank line are considered to be the text for the spec
5615     string.  If this results in an empty string then the spec will be
5616     deleted.  (Or, if the spec did not exist, then nothing will
5617     happened.)  Otherwise, if the spec does not currently exist a new
5618     spec will be created.  If the spec does exist then its contents
5619     will be overridden by the text of this directive, unless the first
5620     character of that text is the `+' character, in which case the
5621     text will be appended to the spec.
5622
5623`[SUFFIX]:'
5624     Creates a new `[SUFFIX] spec' pair.  All lines after this directive
5625     and up to the next directive or blank line are considered to make
5626     up the spec string for the indicated suffix.  When the compiler
5627     encounters an input file with the named suffix, it will processes
5628     the spec string in order to work out how to compile that file.
5629     For example:
5630
5631          .ZZ:
5632          z-compile -input %i
5633
5634     This says that any input file whose name ends in `.ZZ' should be
5635     passed to the program `z-compile', which should be invoked with the
5636     command-line switch `-input' and with the result of performing the
5637     `%i' substitution.  (See below.)
5638
5639     As an alternative to providing a spec string, the text that
5640     follows a suffix directive can be one of the following:
5641
5642    `@LANGUAGE'
5643          This says that the suffix is an alias for a known LANGUAGE.
5644          This is similar to using the `-x' command-line switch to GCC
5645          to specify a language explicitly.  For example:
5646
5647               .ZZ:
5648               @c++
5649
5650          Says that .ZZ files are, in fact, C++ source files.
5651
5652    `#NAME'
5653          This causes an error messages saying:
5654
5655               NAME compiler not installed on this system.
5656
5657     GCC already has an extensive list of suffixes built into it.  This
5658     directive will add an entry to the end of the list of suffixes, but
5659     since the list is searched from the end backwards, it is
5660     effectively possible to override earlier entries using this
5661     technique.
5662
5663
5664 GCC has the following spec strings built into it.  Spec files can
5665override these strings or create their own.  Note that individual
5666targets can also add their own spec strings to this list.
5667
5668     asm          Options to pass to the assembler
5669     asm_final    Options to pass to the assembler post-processor
5670     cpp          Options to pass to the C preprocessor
5671     cc1          Options to pass to the C compiler
5672     cc1plus      Options to pass to the C++ compiler
5673     endfile      Object files to include at the end of the link
5674     link         Options to pass to the linker
5675     lib          Libraries to include on the command line to the linker
5676     libgcc       Decides which GCC support library to pass to the linker
5677     linker       Sets the name of the linker
5678     predefines   Defines to be passed to the C preprocessor
5679     signed_char  Defines to pass to CPP to say whether `char' is signed
5680                  by default
5681     startfile    Object files to include at the start of the link
5682
5683 Here is a small example of a spec file:
5684
5685     %rename lib                 old_lib
5686
5687     *lib:
5688     --start-group -lgcc -lc -leval1 --end-group %(old_lib)
5689
5690 This example renames the spec called `lib' to `old_lib' and then
5691overrides the previous definition of `lib' with a new one.  The new
5692definition adds in some extra command-line options before including the
5693text of the old definition.
5694
5695 "Spec strings" are a list of command-line options to be passed to their
5696corresponding program.  In addition, the spec strings can contain
5697`%'-prefixed sequences to substitute variable text or to conditionally
5698insert text into the command line.  Using these constructs it is
5699possible to generate quite complex command lines.
5700
5701 Here is a table of all defined `%'-sequences for spec strings.  Note
5702that spaces are not generated automatically around the results of
5703expanding these sequences.  Therefore you can concatenate them together
5704or combine them with constant text in a single argument.
5705
5706`%%'
5707     Substitute one `%' into the program name or argument.
5708
5709`%i'
5710     Substitute the name of the input file being processed.
5711
5712`%b'
5713     Substitute the basename of the input file being processed.  This
5714     is the substring up to (and not including) the last period and not
5715     including the directory.
5716
5717`%B'
5718     This is the same as `%b', but include the file suffix (text after
5719     the last period).
5720
5721`%d'
5722     Marks the argument containing or following the `%d' as a temporary
5723     file name, so that that file will be deleted if GCC exits
5724     successfully.  Unlike `%g', this contributes no text to the
5725     argument.
5726
5727`%gSUFFIX'
5728     Substitute a file name that has suffix SUFFIX and is chosen once
5729     per compilation, and mark the argument in the same way as `%d'.
5730     To reduce exposure to denial-of-service attacks, the file name is
5731     now chosen in a way that is hard to predict even when previously
5732     chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
5733     might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
5734     matches the regexp `[.A-Za-z]*' or the special string `%O', which
5735     is treated exactly as if `%O' had been preprocessed.  Previously,
5736     `%g' was simply substituted with a file name chosen once per
5737     compilation, without regard to any appended suffix (which was
5738     therefore treated just like ordinary text), making such attacks
5739     more likely to succeed.
5740
5741`%uSUFFIX'
5742     Like `%g', but generates a new temporary file name even if
5743     `%uSUFFIX' was already seen.
5744
5745`%USUFFIX'
5746     Substitutes the last file name generated with `%uSUFFIX',
5747     generating a new one if there is no such last file name.  In the
5748     absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
5749     they don't share the same suffix _space_, so `%g.s ... %U.s ...
5750     %g.s ... %U.s' would involve the generation of two distinct file
5751     names, one for each `%g.s' and another for each `%U.s'.
5752     Previously, `%U' was simply substituted with a file name chosen
5753     for the previous `%u', without regard to any appended suffix.
5754
5755`%jSUFFIX'
5756     Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
5757     writable, and if save-temps is off; otherwise, substitute the name
5758     of a temporary file, just like `%u'.  This temporary file is not
5759     meant for communication between processes, but rather as a junk
5760     disposal mechanism.
5761
5762`%|SUFFIX'
5763`%mSUFFIX'
5764     Like `%g', except if `-pipe' is in effect.  In that case `%|'
5765     substitutes a single dash and `%m' substitutes nothing at all.
5766     These are the two most common ways to instruct a program that it
5767     should read from standard input or write to standard output.  If
5768     you need something more elaborate you can use an `%{pipe:`X'}'
5769     construct: see for example `f/lang-specs.h'.
5770
5771`%.SUFFIX'
5772     Substitutes .SUFFIX for the suffixes of a matched switch's args
5773     when it is subsequently output with `%*'.  SUFFIX is terminated by
5774     the next space or %.
5775
5776`%w'
5777     Marks the argument containing or following the `%w' as the
5778     designated output file of this compilation.  This puts the argument
5779     into the sequence of arguments that `%o' will substitute later.
5780
5781`%o'
5782     Substitutes the names of all the output files, with spaces
5783     automatically placed around them.  You should write spaces around
5784     the `%o' as well or the results are undefined.  `%o' is for use in
5785     the specs for running the linker.  Input files whose names have no
5786     recognized suffix are not compiled at all, but they are included
5787     among the output files, so they will be linked.
5788
5789`%O'
5790     Substitutes the suffix for object files.  Note that this is
5791     handled specially when it immediately follows `%g, %u, or %U',
5792     because of the need for those to form complete file names.  The
5793     handling is such that `%O' is treated exactly as if it had already
5794     been substituted, except that `%g, %u, and %U' do not currently
5795     support additional SUFFIX characters following `%O' as they would
5796     following, for example, `.o'.
5797
5798`%p'
5799     Substitutes the standard macro predefinitions for the current
5800     target machine.  Use this when running `cpp'.
5801
5802`%P'
5803     Like `%p', but puts `__' before and after the name of each
5804     predefined macro, except for macros that start with `__' or with
5805     `_L', where L is an uppercase letter.  This is for ISO C.
5806
5807`%I'
5808     Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
5809     `-isysroot' (made from `TARGET_SYSTEM_ROOT'), and `-isystem' (made
5810     from `COMPILER_PATH' and `-B' options) as necessary.
5811
5812`%s'
5813     Current argument is the name of a library or startup file of some
5814     sort.  Search for that file in a standard list of directories and
5815     substitute the full name found.
5816
5817`%eSTR'
5818     Print STR as an error message.  STR is terminated by a newline.
5819     Use this when inconsistent options are detected.
5820
5821`%(NAME)'
5822     Substitute the contents of spec string NAME at this point.
5823
5824`%[NAME]'
5825     Like `%(...)' but put `__' around `-D' arguments.
5826
5827`%x{OPTION}'
5828     Accumulate an option for `%X'.
5829
5830`%X'
5831     Output the accumulated linker options specified by `-Wl' or a `%x'
5832     spec string.
5833
5834`%Y'
5835     Output the accumulated assembler options specified by `-Wa'.
5836
5837`%Z'
5838     Output the accumulated preprocessor options specified by `-Wp'.
5839
5840`%a'
5841     Process the `asm' spec.  This is used to compute the switches to
5842     be passed to the assembler.
5843
5844`%A'
5845     Process the `asm_final' spec.  This is a spec string for passing
5846     switches to an assembler post-processor, if such a program is
5847     needed.
5848
5849`%l'
5850     Process the `link' spec.  This is the spec for computing the
5851     command line passed to the linker.  Typically it will make use of
5852     the `%L %G %S %D and %E' sequences.
5853
5854`%D'
5855     Dump out a `-L' option for each directory that GCC believes might
5856     contain startup files.  If the target supports multilibs then the
5857     current multilib directory will be prepended to each of these
5858     paths.
5859
5860`%M'
5861     Output the multilib directory with directory separators replaced
5862     with `_'.  If multilib directories are not set, or the multilib
5863     directory is `.' then this option emits nothing.
5864
5865`%L'
5866     Process the `lib' spec.  This is a spec string for deciding which
5867     libraries should be included on the command line to the linker.
5868
5869`%G'
5870     Process the `libgcc' spec.  This is a spec string for deciding
5871     which GCC support library should be included on the command line
5872     to the linker.
5873
5874`%S'
5875     Process the `startfile' spec.  This is a spec for deciding which
5876     object files should be the first ones passed to the linker.
5877     Typically this might be a file named `crt0.o'.
5878
5879`%E'
5880     Process the `endfile' spec.  This is a spec string that specifies
5881     the last object files that will be passed to the linker.
5882
5883`%C'
5884     Process the `cpp' spec.  This is used to construct the arguments
5885     to be passed to the C preprocessor.
5886
5887`%c'
5888     Process the `signed_char' spec.  This is intended to be used to
5889     tell cpp whether a char is signed.  It typically has the
5890     definition:
5891          %{funsigned-char:-D__CHAR_UNSIGNED__}
5892
5893`%1'
5894     Process the `cc1' spec.  This is used to construct the options to
5895     be passed to the actual C compiler (`cc1').
5896
5897`%2'
5898     Process the `cc1plus' spec.  This is used to construct the options
5899     to be passed to the actual C++ compiler (`cc1plus').
5900
5901`%*'
5902     Substitute the variable part of a matched option.  See below.
5903     Note that each comma in the substituted string is replaced by a
5904     single space.
5905
5906`%<`S''
5907     Remove all occurrences of `-S' from the command line.  Note--this
5908     command is position dependent.  `%' commands in the spec string
5909     before this one will see `-S', `%' commands in the spec string
5910     after this one will not.
5911
5912`%:FUNCTION(ARGS)'
5913     Call the named function FUNCTION, passing it ARGS.  ARGS is first
5914     processed as a nested spec string, then split into an argument
5915     vector in the usual fashion.  The function returns a string which
5916     is processed as if it had appeared literally as part of the
5917     current spec.
5918
5919     The following built-in spec functions are provided:
5920
5921    ``if-exists''
5922          The `if-exists' spec function takes one argument, an absolute
5923          pathname to a file.  If the file exists, `if-exists' returns
5924          the pathname.  Here is a small example of its usage:
5925
5926               *startfile:
5927               crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
5928
5929    ``if-exists-else''
5930          The `if-exists-else' spec function is similar to the
5931          `if-exists' spec function, except that it takes two
5932          arguments.  The first argument is an absolute pathname to a
5933          file.  If the file exists, `if-exists-else' returns the
5934          pathname.  If it does not exist, it returns the second
5935          argument.  This way, `if-exists-else' can be used to select
5936          one file or another, based on the existence of the first.
5937          Here is a small example of its usage:
5938
5939               *startfile:
5940               crt0%O%s %:if-exists(crti%O%s) \
5941               %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
5942
5943`%{`S'}'
5944     Substitutes the `-S' switch, if that switch was given to GCC.  If
5945     that switch was not specified, this substitutes nothing.  Note that
5946     the leading dash is omitted when specifying this option, and it is
5947     automatically inserted if the substitution is performed.  Thus the
5948     spec string `%{foo}' would match the command-line option `-foo'
5949     and would output the command line option `-foo'.
5950
5951`%W{`S'}'
5952     Like %{`S'} but mark last argument supplied within as a file to be
5953     deleted on failure.
5954
5955`%{`S'*}'
5956     Substitutes all the switches specified to GCC whose names start
5957     with `-S', but which also take an argument.  This is used for
5958     switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
5959     being one switch whose names starts with `o'.  %{o*} would
5960     substitute this text, including the space.  Thus two arguments
5961     would be generated.
5962
5963`%{`S'*&`T'*}'
5964     Like %{`S'*}, but preserve order of `S' and `T' options (the order
5965     of `S' and `T' in the spec is not significant).  There can be any
5966     number of ampersand-separated variables; for each the wild card is
5967     optional.  Useful for CPP as `%{D*&U*&A*}'.
5968
5969`%{`S':`X'}'
5970     Substitutes `X', if the `-S' switch was given to GCC.
5971
5972`%{!`S':`X'}'
5973     Substitutes `X', if the `-S' switch was _not_ given to GCC.
5974
5975`%{`S'*:`X'}'
5976     Substitutes `X' if one or more switches whose names start with
5977     `-S' are specified to GCC.  Normally `X' is substituted only once,
5978     no matter how many such switches appeared.  However, if `%*'
5979     appears somewhere in `X', then `X' will be substituted once for
5980     each matching switch, with the `%*' replaced by the part of that
5981     switch that matched the `*'.
5982
5983`%{.`S':`X'}'
5984     Substitutes `X', if processing a file with suffix `S'.
5985
5986`%{!.`S':`X'}'
5987     Substitutes `X', if _not_ processing a file with suffix `S'.
5988
5989`%{`S'|`P':`X'}'
5990     Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
5991     be combined with `!', `.', and `*' sequences as well, although
5992     they have a stronger binding than the `|'.  If `%*' appears in
5993     `X', all of the alternatives must be starred, and only the first
5994     matching alternative is substituted.
5995
5996     For example, a spec string like this:
5997
5998          %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
5999
6000     will output the following command-line options from the following
6001     input command-line options:
6002
6003          fred.c        -foo -baz
6004          jim.d         -bar -boggle
6005          -d fred.c     -foo -baz -boggle
6006          -d jim.d      -bar -baz -boggle
6007
6008`%{S:X; T:Y; :D}'
6009     If `S' was given to GCC, substitutes `X'; else if `T' was given to
6010     GCC, substitutes `Y'; else substitutes `D'.  There can be as many
6011     clauses as you need.  This may be combined with `.', `!', `|', and
6012     `*' as needed.
6013
6014
6015 The conditional text `X' in a %{`S':`X'} or similar construct may
6016contain other nested `%' constructs or spaces, or even newlines.  They
6017are processed as usual, as described above.  Trailing white space in
6018`X' is ignored.  White space may also appear anywhere on the left side
6019of the colon in these constructs, except between `.' or `*' and the
6020corresponding word.
6021
6022 The `-O', `-f', `-m', and `-W' switches are handled specifically in
6023these constructs.  If another value of `-O' or the negated form of a
6024`-f', `-m', or `-W' switch is found later in the command line, the
6025earlier switch value is ignored, except with {`S'*} where `S' is just
6026one letter, which passes all matching options.
6027
6028 The character `|' at the beginning of the predicate text is used to
6029indicate that a command should be piped to the following command, but
6030only if `-pipe' is specified.
6031
6032 It is built into GCC which switches take arguments and which do not.
6033(You might think it would be useful to generalize this to allow each
6034compiler's spec to say which switches take arguments.  But this cannot
6035be done in a consistent fashion.  GCC cannot even decide which input
6036files have been specified without knowing which switches take arguments,
6037and it must know which input files to compile in order to tell which
6038compilers to run).
6039
6040 GCC also knows implicitly that arguments starting in `-l' are to be
6041treated as compiler output files, and passed to the linker in their
6042proper position among the other output files.
6043
6044
6045File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
6046
60473.16 Specifying Target Machine and Compiler Version
6048===================================================
6049
6050The usual way to run GCC is to run the executable called `gcc', or
6051`<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
6052run a version other than the one that was installed last.  Sometimes
6053this is inconvenient, so GCC provides options that will switch to
6054another cross-compiler or version.
6055
6056`-b MACHINE'
6057     The argument MACHINE specifies the target machine for compilation.
6058
6059     The value to use for MACHINE is the same as was specified as the
6060     machine type when configuring GCC as a cross-compiler.  For
6061     example, if a cross-compiler was configured with `configure
6062     i386v', meaning to compile for an 80386 running System V, then you
6063     would specify `-b i386v' to run that cross compiler.
6064
6065`-V VERSION'
6066     The argument VERSION specifies which version of GCC to run.  This
6067     is useful when multiple versions are installed.  For example,
6068     VERSION might be `2.0', meaning to run GCC version 2.0.
6069
6070 The `-V' and `-b' options work by running the
6071`<machine>-gcc-<version>' executable, so there's no real reason to use
6072them if you can just run that directly.
6073
6074
6075File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
6076
60773.17 Hardware Models and Configurations
6078=======================================
6079
6080Earlier we discussed the standard option `-b' which chooses among
6081different installed compilers for completely different target machines,
6082such as VAX vs. 68000 vs. 80386.
6083
6084 In addition, each of these target machine types can have its own
6085special options, starting with `-m', to choose among various hardware
6086models or configurations--for example, 68010 vs 68020, floating
6087coprocessor or none.  A single installed version of the compiler can
6088compile for any model or configuration, according to the options
6089specified.
6090
6091 Some configurations of the compiler also support additional special
6092options, usually for compatibility with other compilers on the same
6093platform.
6094
6095 These options are defined by the macro `TARGET_SWITCHES' in the
6096machine description.  The default for the options is also defined by
6097that macro, which enables you to change the defaults.
6098
6099* Menu:
6100
6101* M680x0 Options::
6102* M68hc1x Options::
6103* VAX Options::
6104* SPARC Options::
6105* ARM Options::
6106* MN10300 Options::
6107* M32R/D Options::
6108* RS/6000 and PowerPC Options::
6109* Darwin Options::
6110* MIPS Options::
6111* i386 and x86-64 Options::
6112* HPPA Options::
6113* Intel 960 Options::
6114* DEC Alpha Options::
6115* DEC Alpha/VMS Options::
6116* H8/300 Options::
6117* SH Options::
6118* System V Options::
6119* TMS320C3x/C4x Options::
6120* V850 Options::
6121* ARC Options::
6122* NS32K Options::
6123* AVR Options::
6124* MCore Options::
6125* IA-64 Options::
6126* D30V Options::
6127* S/390 and zSeries Options::
6128* CRIS Options::
6129* MMIX Options::
6130* PDP-11 Options::
6131* Xstormy16 Options::
6132* Xtensa Options::
6133* FRV Options::
6134
6135
6136File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Up: Submodel Options
6137
61383.17.1 M680x0 Options
6139---------------------
6140
6141These are the `-m' options defined for the 68000 series.  The default
6142values for these options depends on which style of 68000 was selected
6143when the compiler was configured; the defaults for the most common
6144choices are given below.
6145
6146`-m68000'
6147`-mc68000'
6148     Generate output for a 68000.  This is the default when the
6149     compiler is configured for 68000-based systems.
6150
6151     Use this option for microcontrollers with a 68000 or EC000 core,
6152     including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
6153
6154`-m68020'
6155`-mc68020'
6156     Generate output for a 68020.  This is the default when the
6157     compiler is configured for 68020-based systems.
6158
6159`-m68881'
6160     Generate output containing 68881 instructions for floating point.
6161     This is the default for most 68020 systems unless `--nfp' was
6162     specified when the compiler was configured.
6163
6164`-m68030'
6165     Generate output for a 68030.  This is the default when the
6166     compiler is configured for 68030-based systems.
6167
6168`-m68040'
6169     Generate output for a 68040.  This is the default when the
6170     compiler is configured for 68040-based systems.
6171
6172     This option inhibits the use of 68881/68882 instructions that have
6173     to be emulated by software on the 68040.  Use this option if your
6174     68040 does not have code to emulate those instructions.
6175
6176`-m68060'
6177     Generate output for a 68060.  This is the default when the
6178     compiler is configured for 68060-based systems.
6179
6180     This option inhibits the use of 68020 and 68881/68882 instructions
6181     that have to be emulated by software on the 68060.  Use this
6182     option if your 68060 does not have code to emulate those
6183     instructions.
6184
6185`-mcpu32'
6186     Generate output for a CPU32.  This is the default when the
6187     compiler is configured for CPU32-based systems.
6188
6189     Use this option for microcontrollers with a CPU32 or CPU32+ core,
6190     including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
6191     68341, 68349 and 68360.
6192
6193`-m5200'
6194     Generate output for a 520X "coldfire" family cpu.  This is the
6195     default when the compiler is configured for 520X-based systems.
6196
6197     Use this option for microcontroller with a 5200 core, including
6198     the MCF5202, MCF5203, MCF5204 and MCF5202.
6199
6200`-m68020-40'
6201     Generate output for a 68040, without using any of the new
6202     instructions.  This results in code which can run relatively
6203     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
6204     generated code does use the 68881 instructions that are emulated
6205     on the 68040.
6206
6207`-m68020-60'
6208     Generate output for a 68060, without using any of the new
6209     instructions.  This results in code which can run relatively
6210     efficiently on either a 68020/68881 or a 68030 or a 68040.  The
6211     generated code does use the 68881 instructions that are emulated
6212     on the 68060.
6213
6214`-msoft-float'
6215     Generate output containing library calls for floating point.
6216     *Warning:* the requisite libraries are not available for all m68k
6217     targets.  Normally the facilities of the machine's usual C
6218     compiler are used, but this can't be done directly in
6219     cross-compilation.  You must make your own arrangements to provide
6220     suitable library functions for cross-compilation.  The embedded
6221     targets `m68k-*-aout' and `m68k-*-coff' do provide software
6222     floating point support.
6223
6224`-mshort'
6225     Consider type `int' to be 16 bits wide, like `short int'.
6226
6227`-mnobitfield'
6228     Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
6229     and `-m5200' options imply `-mnobitfield'.
6230
6231`-mbitfield'
6232     Do use the bit-field instructions.  The `-m68020' option implies
6233     `-mbitfield'.  This is the default if you use a configuration
6234     designed for a 68020.
6235
6236`-mrtd'
6237     Use a different function-calling convention, in which functions
6238     that take a fixed number of arguments return with the `rtd'
6239     instruction, which pops their arguments while returning.  This
6240     saves one instruction in the caller since there is no need to pop
6241     the arguments there.
6242
6243     This calling convention is incompatible with the one normally used
6244     on Unix, so you cannot use it if you need to call libraries
6245     compiled with the Unix compiler.
6246
6247     Also, you must provide function prototypes for all functions that
6248     take variable numbers of arguments (including `printf'); otherwise
6249     incorrect code will be generated for calls to those functions.
6250
6251     In addition, seriously incorrect code will result if you call a
6252     function with too many arguments.  (Normally, extra arguments are
6253     harmlessly ignored.)
6254
6255     The `rtd' instruction is supported by the 68010, 68020, 68030,
6256     68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
6257
6258`-malign-int'
6259`-mno-align-int'
6260     Control whether GCC aligns `int', `long', `long long', `float',
6261     `double', and `long double' variables on a 32-bit boundary
6262     (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
6263     variables on 32-bit boundaries produces code that runs somewhat
6264     faster on processors with 32-bit busses at the expense of more
6265     memory.
6266
6267     *Warning:* if you use the `-malign-int' switch, GCC will align
6268     structures containing the above types  differently than most
6269     published application binary interface specifications for the m68k.
6270
6271`-mpcrel'
6272     Use the pc-relative addressing mode of the 68000 directly, instead
6273     of using a global offset table.  At present, this option implies
6274     `-fpic', allowing at most a 16-bit offset for pc-relative
6275     addressing.  `-fPIC' is not presently supported with `-mpcrel',
6276     though this could be supported for 68020 and higher processors.
6277
6278`-mno-strict-align'
6279`-mstrict-align'
6280     Do not (do) assume that unaligned memory references will be
6281     handled by the system.
6282
6283`-msep-data'
6284     Generate code that allows the data segment to be located in a
6285     different area of memory from the text segment.  This allows for
6286     execute in place in an environment without virtual memory
6287     management.  This option implies -fPIC.
6288
6289`-mno-sep-data'
6290     Generate code that assumes that the data segment follows the text
6291     segment.  This is the default.
6292
6293`-mid-shared-library'
6294     Generate code that supports shared libraries via the library ID
6295     method.  This allows for execute in place and shared libraries in
6296     an environment without virtual memory management.  This option
6297     implies -fPIC.
6298
6299`-mno-id-shared-library'
6300     Generate code that doesn't assume ID based shared libraries are
6301     being used.  This is the default.
6302
6303`-mshared-library-id=n'
6304     Specified the identification number of the ID based shared library
6305     being compiled.  Specifying a value of 0 will generate more
6306     compact code, specifying other values will force the allocation of
6307     that number to the current library but is no more space or time
6308     efficient than omitting this option.
6309
6310
6311
6312File: gcc.info,  Node: M68hc1x Options,  Next: VAX Options,  Prev: M680x0 Options,  Up: Submodel Options
6313
63143.17.2 M68hc1x Options
6315----------------------
6316
6317These are the `-m' options defined for the 68hc11 and 68hc12
6318microcontrollers.  The default values for these options depends on
6319which style of microcontroller was selected when the compiler was
6320configured; the defaults for the most common choices are given below.
6321
6322`-m6811'
6323`-m68hc11'
6324     Generate output for a 68HC11.  This is the default when the
6325     compiler is configured for 68HC11-based systems.
6326
6327`-m6812'
6328`-m68hc12'
6329     Generate output for a 68HC12.  This is the default when the
6330     compiler is configured for 68HC12-based systems.
6331
6332`-m68S12'
6333`-m68hcs12'
6334     Generate output for a 68HCS12.
6335
6336`-mauto-incdec'
6337     Enable the use of 68HC12 pre and post auto-increment and
6338     auto-decrement addressing modes.
6339
6340`-minmax'
6341`-nominmax'
6342     Enable the use of 68HC12 min and max instructions.
6343
6344`-mlong-calls'
6345`-mno-long-calls'
6346     Treat all calls as being far away (near).  If calls are assumed to
6347     be far away, the compiler will use the `call' instruction to call
6348     a function and the `rtc' instruction for returning.
6349
6350`-mshort'
6351     Consider type `int' to be 16 bits wide, like `short int'.
6352
6353`-msoft-reg-count=COUNT'
6354     Specify the number of pseudo-soft registers which are used for the
6355     code generation.  The maximum number is 32.  Using more pseudo-soft
6356     register may or may not result in better code depending on the
6357     program.  The default is 4 for 68HC11 and 2 for 68HC12.
6358
6359
6360
6361File: gcc.info,  Node: VAX Options,  Next: SPARC Options,  Prev: M68hc1x Options,  Up: Submodel Options
6362
63633.17.3 VAX Options
6364------------------
6365
6366These `-m' options are defined for the VAX:
6367
6368`-munix'
6369     Do not output certain jump instructions (`aobleq' and so on) that
6370     the Unix assembler for the VAX cannot handle across long ranges.
6371
6372`-mgnu'
6373     Do output those jump instructions, on the assumption that you will
6374     assemble with the GNU assembler.
6375
6376`-mg'
6377     Output code for g-format floating point numbers instead of
6378     d-format.
6379
6380
6381File: gcc.info,  Node: SPARC Options,  Next: ARM Options,  Prev: VAX Options,  Up: Submodel Options
6382
63833.17.4 SPARC Options
6384--------------------
6385
6386These `-m' options are supported on the SPARC:
6387
6388`-mno-app-regs'
6389`-mapp-regs'
6390     Specify `-mapp-regs' to generate output using the global registers
6391     2 through 4, which the SPARC SVR4 ABI reserves for applications.
6392     This is the default.
6393
6394     To be fully SVR4 ABI compliant at the cost of some performance
6395     loss, specify `-mno-app-regs'.  You should compile libraries and
6396     system software with this option.
6397
6398`-mfpu'
6399`-mhard-float'
6400     Generate output containing floating point instructions.  This is
6401     the default.
6402
6403`-mno-fpu'
6404`-msoft-float'
6405     Generate output containing library calls for floating point.
6406     *Warning:* the requisite libraries are not available for all SPARC
6407     targets.  Normally the facilities of the machine's usual C
6408     compiler are used, but this cannot be done directly in
6409     cross-compilation.  You must make your own arrangements to provide
6410     suitable library functions for cross-compilation.  The embedded
6411     targets `sparc-*-aout' and `sparclite-*-*' do provide software
6412     floating point support.
6413
6414     `-msoft-float' changes the calling convention in the output file;
6415     therefore, it is only useful if you compile _all_ of a program with
6416     this option.  In particular, you need to compile `libgcc.a', the
6417     library that comes with GCC, with `-msoft-float' in order for this
6418     to work.
6419
6420`-mhard-quad-float'
6421     Generate output containing quad-word (long double) floating point
6422     instructions.
6423
6424`-msoft-quad-float'
6425     Generate output containing library calls for quad-word (long
6426     double) floating point instructions.  The functions called are
6427     those specified in the SPARC ABI.  This is the default.
6428
6429     As of this writing, there are no SPARC implementations that have
6430     hardware support for the quad-word floating point instructions.
6431     They all invoke a trap handler for one of these instructions, and
6432     then the trap handler emulates the effect of the instruction.
6433     Because of the trap handler overhead, this is much slower than
6434     calling the ABI library routines.  Thus the `-msoft-quad-float'
6435     option is the default.
6436
6437`-mno-flat'
6438`-mflat'
6439     With `-mflat', the compiler does not generate save/restore
6440     instructions and will use a "flat" or single register window
6441     calling convention.  This model uses %i7 as the frame pointer and
6442     is compatible with the normal register window model.  Code from
6443     either may be intermixed.  The local registers and the input
6444     registers (0-5) are still treated as "call saved" registers and
6445     will be saved on the stack as necessary.
6446
6447     With `-mno-flat' (the default), the compiler emits save/restore
6448     instructions (except for leaf functions) and is the normal mode of
6449     operation.
6450
6451     These options are deprecated and will be deleted in a future GCC
6452     release.
6453
6454`-mno-unaligned-doubles'
6455`-munaligned-doubles'
6456     Assume that doubles have 8 byte alignment.  This is the default.
6457
6458     With `-munaligned-doubles', GCC assumes that doubles have 8 byte
6459     alignment only if they are contained in another type, or if they
6460     have an absolute address.  Otherwise, it assumes they have 4 byte
6461     alignment.  Specifying this option avoids some rare compatibility
6462     problems with code generated by other compilers.  It is not the
6463     default because it results in a performance loss, especially for
6464     floating point code.
6465
6466`-mno-faster-structs'
6467`-mfaster-structs'
6468     With `-mfaster-structs', the compiler assumes that structures
6469     should have 8 byte alignment.  This enables the use of pairs of
6470     `ldd' and `std' instructions for copies in structure assignment,
6471     in place of twice as many `ld' and `st' pairs.  However, the use
6472     of this changed alignment directly violates the SPARC ABI.  Thus,
6473     it's intended only for use on targets where the developer
6474     acknowledges that their resulting code will not be directly in
6475     line with the rules of the ABI.
6476
6477`-mimpure-text'
6478     `-mimpure-text', used in addition to `-shared', tells the compiler
6479     to not pass `-z text' to the linker when linking a shared object.
6480     Using this option, you can link position-dependent code into a
6481     shared object.
6482
6483     `-mimpure-text' suppresses the "relocations remain against
6484     allocatable but non-writable sections" linker error message.
6485     However, the necessary relocations will trigger copy-on-write, and
6486     the shared object is not actually shared across processes.
6487     Instead of using `-mimpure-text', you should compile all source
6488     code with `-fpic' or `-fPIC'.
6489
6490     This option is only available on SunOS and Solaris.
6491
6492`-mv8'
6493`-msparclite'
6494     These two options select variations on the SPARC architecture.
6495     These options are deprecated and will be deleted in a future GCC
6496     release.  They have been replaced with `-mcpu=xxx'.
6497
6498`-mcypress'
6499`-msupersparc'
6500`-mf930'
6501`-mf934'
6502     These four options select the processor for which the code is
6503     optimized.  These options are deprecated and will be deleted in a
6504     future GCC release.  They have been replaced with `-mcpu=xxx'.
6505
6506`-mcpu=CPU_TYPE'
6507     Set the instruction set, register set, and instruction scheduling
6508     parameters for machine type CPU_TYPE.  Supported values for
6509     CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
6510     `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
6511     `tsc701', `v9', `ultrasparc', and `ultrasparc3'.
6512
6513     Default instruction scheduling parameters are used for values that
6514     select an architecture and not an implementation.  These are `v7',
6515     `v8', `sparclite', `sparclet', `v9'.
6516
6517     Here is a list of each supported architecture and their supported
6518     implementations.
6519
6520              v7:             cypress
6521              v8:             supersparc, hypersparc
6522              sparclite:      f930, f934, sparclite86x
6523              sparclet:       tsc701
6524              v9:             ultrasparc, ultrasparc3
6525
6526     By default (unless configured otherwise), GCC generates code for
6527     the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
6528     the compiler additionally optimizes it for the Cypress CY7C602
6529     chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
6530     also appropriate for the older SPARCStation 1, 2, IPX etc.
6531
6532     With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
6533     architecture.  The only difference from V7 code is that the
6534     compiler emits the integer multiply and integer divide
6535     instructions which exist in SPARC-V8 but not in SPARC-V7.  With
6536     `-mcpu=supersparc', the compiler additionally optimizes it for the
6537     SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
6538     series.
6539
6540     With `-mcpu=sparclite', GCC generates code for the SPARClite
6541     variant of the SPARC architecture.  This adds the integer
6542     multiply, integer divide step and scan (`ffs') instructions which
6543     exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
6544     compiler additionally optimizes it for the Fujitsu MB86930 chip,
6545     which is the original SPARClite, with no FPU.  With `-mcpu=f934',
6546     the compiler additionally optimizes it for the Fujitsu MB86934
6547     chip, which is the more recent SPARClite with FPU.
6548
6549     With `-mcpu=sparclet', GCC generates code for the SPARClet variant
6550     of the SPARC architecture.  This adds the integer multiply,
6551     multiply/accumulate, integer divide step and scan (`ffs')
6552     instructions which exist in SPARClet but not in SPARC-V7.  With
6553     `-mcpu=tsc701', the compiler additionally optimizes it for the
6554     TEMIC SPARClet chip.
6555
6556     With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
6557     architecture.  This adds 64-bit integer and floating-point move
6558     instructions, 3 additional floating-point condition code registers
6559     and conditional move instructions.  With `-mcpu=ultrasparc', the
6560     compiler additionally optimizes it for the Sun UltraSPARC I/II
6561     chips.  With `-mcpu=ultrasparc3', the compiler additionally
6562     optimizes it for the Sun UltraSPARC III chip.
6563
6564`-mtune=CPU_TYPE'
6565     Set the instruction scheduling parameters for machine type
6566     CPU_TYPE, but do not set the instruction set or register set that
6567     the option `-mcpu=CPU_TYPE' would.
6568
6569     The same values for `-mcpu=CPU_TYPE' can be used for
6570     `-mtune=CPU_TYPE', but the only useful values are those that
6571     select a particular cpu implementation.  Those are `cypress',
6572     `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
6573     `tsc701', `ultrasparc', and `ultrasparc3'.
6574
6575`-mv8plus'
6576`-mno-v8plus'
6577     With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
6578     difference from the V8 ABI is that the global and out registers are
6579     considered 64-bit wide.  This is enabled by default on Solaris in
6580     32-bit mode for all SPARC-V9 processors.
6581
6582`-mvis'
6583`-mno-vis'
6584     With `-mvis', GCC generates code that takes advantage of the
6585     UltraSPARC Visual Instruction Set extensions.  The default is
6586     `-mno-vis'.
6587
6588 These `-m' options are supported in addition to the above on SPARC-V9
6589processors in 64-bit environments:
6590
6591`-mlittle-endian'
6592     Generate code for a processor running in little-endian mode. It is
6593     only available for a few configurations and most notably not on
6594     Solaris.
6595
6596`-m32'
6597`-m64'
6598     Generate code for a 32-bit or 64-bit environment.  The 32-bit
6599     environment sets int, long and pointer to 32 bits.  The 64-bit
6600     environment sets int to 32 bits and long and pointer to 64 bits.
6601
6602`-mcmodel=medlow'
6603     Generate code for the Medium/Low code model: 64-bit addresses,
6604     programs must be linked in the low 32 bits of memory.  Programs
6605     can be statically or dynamically linked.
6606
6607`-mcmodel=medmid'
6608     Generate code for the Medium/Middle code model: 64-bit addresses,
6609     programs must be linked in the low 44 bits of memory, the text and
6610     data segments must be less than 2GB in size and the data segment
6611     must be located within 2GB of the text segment.
6612
6613`-mcmodel=medany'
6614     Generate code for the Medium/Anywhere code model: 64-bit
6615     addresses, programs may be linked anywhere in memory, the text and
6616     data segments must be less than 2GB in size and the data segment
6617     must be located within 2GB of the text segment.
6618
6619`-mcmodel=embmedany'
6620     Generate code for the Medium/Anywhere code model for embedded
6621     systems: 64-bit addresses, the text and data segments must be less
6622     than 2GB in size, both starting anywhere in memory (determined at
6623     link time).  The global register %g4 points to the base of the
6624     data segment.  Programs are statically linked and PIC is not
6625     supported.
6626
6627`-mstack-bias'
6628`-mno-stack-bias'
6629     With `-mstack-bias', GCC assumes that the stack pointer, and frame
6630     pointer if present, are offset by -2047 which must be added back
6631     when making stack frame references.  This is the default in 64-bit
6632     mode.  Otherwise, assume no such offset is present.
6633
6634 These switches are supported in addition to the above on Solaris:
6635
6636`-threads'
6637     Add support for multithreading using the Solaris threads library.
6638     This option sets flags for both the preprocessor and linker.  This
6639     option does not affect the thread safety of object code produced
6640     by the compiler or that of libraries supplied with it.
6641
6642`-pthreads'
6643     Add support for multithreading using the POSIX threads library.
6644     This option sets flags for both the preprocessor and linker.  This
6645     option does not affect the thread safety of object code produced
6646     by the compiler or that of libraries supplied with it.
6647
6648
6649File: gcc.info,  Node: ARM Options,  Next: MN10300 Options,  Prev: SPARC Options,  Up: Submodel Options
6650
66513.17.5 ARM Options
6652------------------
6653
6654These `-m' options are defined for Advanced RISC Machines (ARM)
6655architectures:
6656
6657`-mapcs-frame'
6658     Generate a stack frame that is compliant with the ARM Procedure
6659     Call Standard for all functions, even if this is not strictly
6660     necessary for correct execution of the code.  Specifying
6661     `-fomit-frame-pointer' with this option will cause the stack
6662     frames not to be generated for leaf functions.  The default is
6663     `-mno-apcs-frame'.
6664
6665`-mapcs'
6666     This is a synonym for `-mapcs-frame'.
6667
6668`-mapcs-26'
6669     Generate code for a processor running with a 26-bit program
6670     counter, and conforming to the function calling standards for the
6671     APCS 26-bit option.
6672
6673     This option is deprecated.  Future releases of the GCC will only
6674     support generating code that runs in apcs-32 mode.
6675
6676`-mapcs-32'
6677     Generate code for a processor running with a 32-bit program
6678     counter, and conforming to the function calling standards for the
6679     APCS 32-bit option.
6680
6681     This flag is deprecated.  Future releases of GCC will make this
6682     flag unconditional.
6683
6684`-mthumb-interwork'
6685     Generate code which supports calling between the ARM and Thumb
6686     instruction sets.  Without this option the two instruction sets
6687     cannot be reliably used inside one program.  The default is
6688     `-mno-thumb-interwork', since slightly larger code is generated
6689     when `-mthumb-interwork' is specified.
6690
6691`-mno-sched-prolog'
6692     Prevent the reordering of instructions in the function prolog, or
6693     the merging of those instruction with the instructions in the
6694     function's body.  This means that all functions will start with a
6695     recognizable set of instructions (or in fact one of a choice from
6696     a small set of different function prologues), and this information
6697     can be used to locate the start if functions inside an executable
6698     piece of code.  The default is `-msched-prolog'.
6699
6700`-mhard-float'
6701     Generate output containing floating point instructions.  This is
6702     the default.
6703
6704`-msoft-float'
6705     Generate output containing library calls for floating point.
6706     *Warning:* the requisite libraries are not available for all ARM
6707     targets.  Normally the facilities of the machine's usual C
6708     compiler are used, but this cannot be done directly in
6709     cross-compilation.  You must make your own arrangements to provide
6710     suitable library functions for cross-compilation.
6711
6712     `-msoft-float' changes the calling convention in the output file;
6713     therefore, it is only useful if you compile _all_ of a program with
6714     this option.  In particular, you need to compile `libgcc.a', the
6715     library that comes with GCC, with `-msoft-float' in order for this
6716     to work.
6717
6718`-mlittle-endian'
6719     Generate code for a processor running in little-endian mode.  This
6720     is the default for all standard configurations.
6721
6722`-mbig-endian'
6723     Generate code for a processor running in big-endian mode; the
6724     default is to compile code for a little-endian processor.
6725
6726`-mwords-little-endian'
6727     This option only applies when generating code for big-endian
6728     processors.  Generate code for a little-endian word order but a
6729     big-endian byte order.  That is, a byte order of the form
6730     `32107654'.  Note: this option should only be used if you require
6731     compatibility with code for big-endian ARM processors generated by
6732     versions of the compiler prior to 2.8.
6733
6734`-malignment-traps'
6735     Generate code that will not trap if the MMU has alignment traps
6736     enabled.  On ARM architectures prior to ARMv4, there were no
6737     instructions to access half-word objects stored in memory.
6738     However, when reading from memory a feature of the ARM
6739     architecture allows a word load to be used, even if the address is
6740     unaligned, and the processor core will rotate the data as it is
6741     being loaded.  This option tells the compiler that such misaligned
6742     accesses will cause a MMU trap and that it should instead
6743     synthesize the access as a series of byte accesses.  The compiler
6744     can still use word accesses to load half-word data if it knows
6745     that the address is aligned to a word boundary.
6746
6747     This option has no effect when compiling for ARM architecture 4 or
6748     later, since these processors have instructions to directly access
6749     half-word objects in memory.
6750
6751`-mno-alignment-traps'
6752     Generate code that assumes that the MMU will not trap unaligned
6753     accesses.  This produces better code when the target instruction
6754     set does not have half-word memory operations (i.e.
6755     implementations prior to ARMv4).
6756
6757     Note that you cannot use this option to access unaligned word
6758     objects, since the processor will only fetch one 32-bit aligned
6759     object from memory.
6760
6761     The default setting is `-malignment-traps', since this produces
6762     code that will also run on processors implementing ARM architecture
6763     version 6 or later.
6764
6765     This option is deprecated and will be removed in the next release
6766     of GCC.
6767
6768`-mcpu=NAME'
6769     This specifies the name of the target ARM processor.  GCC uses
6770     this name to determine what kind of instructions it can emit when
6771     generating assembly code.  Permissible names are: `arm2', `arm250',
6772     `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
6773     `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
6774     `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe',
6775     `arm7tdmi', `arm8', `strongarm', `strongarm110', `strongarm1100',
6776     `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t',
6777     `arm926ejs', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
6778     `arm1026ejs', `arm1136js', `arm1136jfs' ,`xscale', `iwmmxt',
6779     `ep9312'.
6780
6781`-mtune=NAME'
6782     This option is very similar to the `-mcpu=' option, except that
6783     instead of specifying the actual target processor type, and hence
6784     restricting which instructions can be used, it specifies that GCC
6785     should tune the performance of the code as if the target were of
6786     the type specified in this option, but still choosing the
6787     instructions that it will generate based on the cpu specified by a
6788     `-mcpu=' option.  For some ARM implementations better performance
6789     can be obtained by using this option.
6790
6791`-march=NAME'
6792     This specifies the name of the target ARM architecture.  GCC uses
6793     this name to determine what kind of instructions it can emit when
6794     generating assembly code.  This option can be used in conjunction
6795     with or instead of the `-mcpu=' option.  Permissible names are:
6796     `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
6797     `armv5t', `armv5te', `armv6j', `iwmmxt', `ep9312'.
6798
6799`-mfpe=NUMBER'
6800`-mfp=NUMBER'
6801     This specifies the version of the floating point emulation
6802     available on the target.  Permissible values are 2 and 3.  `-mfp='
6803     is a synonym for `-mfpe=', for compatibility with older versions
6804     of GCC.
6805
6806`-mstructure-size-boundary=N'
6807     The size of all structures and unions will be rounded up to a
6808     multiple of the number of bits set by this option.  Permissible
6809     values are 8 and 32.  The default value varies for different
6810     toolchains.  For the COFF targeted toolchain the default value is
6811     8.  Specifying the larger number can produce faster, more
6812     efficient code, but can also increase the size of the program.
6813     The two values are potentially incompatible.  Code compiled with
6814     one value cannot necessarily expect to work with code or libraries
6815     compiled with the other value, if they exchange information using
6816     structures or unions.
6817
6818`-mabort-on-noreturn'
6819     Generate a call to the function `abort' at the end of a `noreturn'
6820     function.  It will be executed if the function tries to return.
6821
6822`-mlong-calls'
6823`-mno-long-calls'
6824     Tells the compiler to perform function calls by first loading the
6825     address of the function into a register and then performing a
6826     subroutine call on this register.  This switch is needed if the
6827     target function will lie outside of the 64 megabyte addressing
6828     range of the offset based version of subroutine call instruction.
6829
6830     Even if this switch is enabled, not all function calls will be
6831     turned into long calls.  The heuristic is that static functions,
6832     functions which have the `short-call' attribute, functions that
6833     are inside the scope of a `#pragma no_long_calls' directive and
6834     functions whose definitions have already been compiled within the
6835     current compilation unit, will not be turned into long calls.  The
6836     exception to this rule is that weak function definitions,
6837     functions with the `long-call' attribute or the `section'
6838     attribute, and functions that are within the scope of a `#pragma
6839     long_calls' directive, will always be turned into long calls.
6840
6841     This feature is not enabled by default.  Specifying
6842     `-mno-long-calls' will restore the default behavior, as will
6843     placing the function calls within the scope of a `#pragma
6844     long_calls_off' directive.  Note these switches have no effect on
6845     how the compiler generates code to handle function calls via
6846     function pointers.
6847
6848`-mnop-fun-dllimport'
6849     Disable support for the `dllimport' attribute.
6850
6851`-msingle-pic-base'
6852     Treat the register used for PIC addressing as read-only, rather
6853     than loading it in the prologue for each function.  The run-time
6854     system is responsible for initializing this register with an
6855     appropriate value before execution begins.
6856
6857`-mpic-register=REG'
6858     Specify the register to be used for PIC addressing.  The default
6859     is R10 unless stack-checking is enabled, when R9 is used.
6860
6861`-mcirrus-fix-invalid-insns'
6862     Insert NOPs into the instruction stream to in order to work around
6863     problems with invalid Maverick instruction combinations.  This
6864     option is only valid if the `-mcpu=ep9312' option has been used to
6865     enable generation of instructions for the Cirrus Maverick floating
6866     point co-processor.  This option is not enabled by default, since
6867     the problem is only present in older Maverick implementations.
6868     The default can be re-enabled by use of the
6869     `-mno-cirrus-fix-invalid-insns' switch.
6870
6871`-mpoke-function-name'
6872     Write the name of each function into the text section, directly
6873     preceding the function prologue.  The generated code is similar to
6874     this:
6875
6876               t0
6877                   .ascii "arm_poke_function_name", 0
6878                   .align
6879               t1
6880                   .word 0xff000000 + (t1 - t0)
6881               arm_poke_function_name
6882                   mov     ip, sp
6883                   stmfd   sp!, {fp, ip, lr, pc}
6884                   sub     fp, ip, #4
6885
6886     When performing a stack backtrace, code can inspect the value of
6887     `pc' stored at `fp + 0'.  If the trace function then looks at
6888     location `pc - 12' and the top 8 bits are set, then we know that
6889     there is a function name embedded immediately preceding this
6890     location and has length `((pc[-3]) & 0xff000000)'.
6891
6892`-mthumb'
6893     Generate code for the 16-bit Thumb instruction set.  The default
6894     is to use the 32-bit ARM instruction set.
6895
6896`-mtpcs-frame'
6897     Generate a stack frame that is compliant with the Thumb Procedure
6898     Call Standard for all non-leaf functions.  (A leaf function is one
6899     that does not call any other functions.)  The default is
6900     `-mno-tpcs-frame'.
6901
6902`-mtpcs-leaf-frame'
6903     Generate a stack frame that is compliant with the Thumb Procedure
6904     Call Standard for all leaf functions.  (A leaf function is one
6905     that does not call any other functions.)  The default is
6906     `-mno-apcs-leaf-frame'.
6907
6908`-mcallee-super-interworking'
6909     Gives all externally visible functions in the file being compiled
6910     an ARM instruction set header which switches to Thumb mode before
6911     executing the rest of the function.  This allows these functions
6912     to be called from non-interworking code.
6913
6914`-mcaller-super-interworking'
6915     Allows calls via function pointers (including virtual functions) to
6916     execute correctly regardless of whether the target code has been
6917     compiled for interworking or not.  There is a small overhead in
6918     the cost of executing a function pointer if this option is enabled.
6919
6920
6921
6922File: gcc.info,  Node: MN10300 Options,  Next: M32R/D Options,  Prev: ARM Options,  Up: Submodel Options
6923
69243.17.6 MN10300 Options
6925----------------------
6926
6927These `-m' options are defined for Matsushita MN10300 architectures:
6928
6929`-mmult-bug'
6930     Generate code to avoid bugs in the multiply instructions for the
6931     MN10300 processors.  This is the default.
6932
6933`-mno-mult-bug'
6934     Do not generate code to avoid bugs in the multiply instructions
6935     for the MN10300 processors.
6936
6937`-mam33'
6938     Generate code which uses features specific to the AM33 processor.
6939
6940`-mno-am33'
6941     Do not generate code which uses features specific to the AM33
6942     processor.  This is the default.
6943
6944`-mno-crt0'
6945     Do not link in the C run-time initialization object file.
6946
6947`-mrelax'
6948     Indicate to the linker that it should perform a relaxation
6949     optimization pass to shorten branches, calls and absolute memory
6950     addresses.  This option only has an effect when used on the
6951     command line for the final link step.
6952
6953     This option makes symbolic debugging impossible.
6954
6955
6956File: gcc.info,  Node: M32R/D Options,  Next: RS/6000 and PowerPC Options,  Prev: MN10300 Options,  Up: Submodel Options
6957
69583.17.7 M32R/D Options
6959---------------------
6960
6961These `-m' options are defined for Renesas M32R/D architectures:
6962
6963`-m32r2'
6964     Generate code for the M32R/2.
6965
6966`-m32rx'
6967     Generate code for the M32R/X.
6968
6969`-m32r'
6970     Generate code for the M32R.  This is the default.
6971
6972`-mmodel=small'
6973     Assume all objects live in the lower 16MB of memory (so that their
6974     addresses can be loaded with the `ld24' instruction), and assume
6975     all subroutines are reachable with the `bl' instruction.  This is
6976     the default.
6977
6978     The addressability of a particular object can be set with the
6979     `model' attribute.
6980
6981`-mmodel=medium'
6982     Assume objects may be anywhere in the 32-bit address space (the
6983     compiler will generate `seth/add3' instructions to load their
6984     addresses), and assume all subroutines are reachable with the `bl'
6985     instruction.
6986
6987`-mmodel=large'
6988     Assume objects may be anywhere in the 32-bit address space (the
6989     compiler will generate `seth/add3' instructions to load their
6990     addresses), and assume subroutines may not be reachable with the
6991     `bl' instruction (the compiler will generate the much slower
6992     `seth/add3/jl' instruction sequence).
6993
6994`-msdata=none'
6995     Disable use of the small data area.  Variables will be put into
6996     one of `.data', `bss', or `.rodata' (unless the `section'
6997     attribute has been specified).  This is the default.
6998
6999     The small data area consists of sections `.sdata' and `.sbss'.
7000     Objects may be explicitly put in the small data area with the
7001     `section' attribute using one of these sections.
7002
7003`-msdata=sdata'
7004     Put small global and static data in the small data area, but do not
7005     generate special code to reference them.
7006
7007`-msdata=use'
7008     Put small global and static data in the small data area, and
7009     generate special instructions to reference them.
7010
7011`-G NUM'
7012     Put global and static objects less than or equal to NUM bytes into
7013     the small data or bss sections instead of the normal data or bss
7014     sections.  The default value of NUM is 8.  The `-msdata' option
7015     must be set to one of `sdata' or `use' for this option to have any
7016     effect.
7017
7018     All modules should be compiled with the same `-G NUM' value.
7019     Compiling with different values of NUM may or may not work; if it
7020     doesn't the linker will give an error message--incorrect code will
7021     not be generated.
7022
7023`-mdebug'
7024     Makes the M32R specific code in the compiler display some
7025     statistics that might help in debugging programs.
7026
7027`-malign-loops'
7028     Align all loops to a 32-byte boundary.
7029
7030`-mno-align-loops'
7031     Do not enforce a 32-byte alignment for loops.  This is the default.
7032
7033`-missue-rate=NUMBER'
7034     Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
7035
7036`-mbranch-cost=NUMBER'
7037     NUMBER can only be 1 or 2.  If it is 1 then branches will be
7038     preferred over conditional code, if it is 2, then the opposite will
7039     apply.
7040
7041`-mflush-trap=NUMBER'
7042     Specifies the trap number to use to flush the cache.  The default
7043     is 12.  Valid numbers are between 0 and 15 inclusive.
7044
7045`-mno-flush-trap'
7046     Specifies that the cache cannot be flushed by using a trap.
7047
7048`-mflush-func=NAME'
7049     Specifies the name of the operating system function to call to
7050     flush the cache.  The default is __flush_cache_, but a function
7051     call will only be used if a trap is not available.
7052
7053`-mno-flush-func'
7054     Indicates that there is no OS function for flushing the cache.
7055
7056
7057
7058File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: Darwin Options,  Prev: M32R/D Options,  Up: Submodel Options
7059
70603.17.8 IBM RS/6000 and PowerPC Options
7061--------------------------------------
7062
7063These `-m' options are defined for the IBM RS/6000 and PowerPC:
7064`-mpower'
7065`-mno-power'
7066`-mpower2'
7067`-mno-power2'
7068`-mpowerpc'
7069`-mno-powerpc'
7070`-mpowerpc-gpopt'
7071`-mno-powerpc-gpopt'
7072`-mpowerpc-gfxopt'
7073`-mno-powerpc-gfxopt'
7074`-mpowerpc64'
7075`-mno-powerpc64'
7076     GCC supports two related instruction set architectures for the
7077     RS/6000 and PowerPC.  The "POWER" instruction set are those
7078     instructions supported by the `rios' chip set used in the original
7079     RS/6000 systems and the "PowerPC" instruction set is the
7080     architecture of the Motorola MPC5xx, MPC6xx, MPC8xx
7081     microprocessors, and the IBM 4xx microprocessors.
7082
7083     Neither architecture is a subset of the other.  However there is a
7084     large common subset of instructions supported by both.  An MQ
7085     register is included in processors supporting the POWER
7086     architecture.
7087
7088     You use these options to specify which instructions are available
7089     on the processor you are using.  The default value of these
7090     options is determined when configuring GCC.  Specifying the
7091     `-mcpu=CPU_TYPE' overrides the specification of these options.  We
7092     recommend you use the `-mcpu=CPU_TYPE' option rather than the
7093     options listed above.
7094
7095     The `-mpower' option allows GCC to generate instructions that are
7096     found only in the POWER architecture and to use the MQ register.
7097     Specifying `-mpower2' implies `-power' and also allows GCC to
7098     generate instructions that are present in the POWER2 architecture
7099     but not the original POWER architecture.
7100
7101     The `-mpowerpc' option allows GCC to generate instructions that
7102     are found only in the 32-bit subset of the PowerPC architecture.
7103     Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
7104     GCC to use the optional PowerPC architecture instructions in the
7105     General Purpose group, including floating-point square root.
7106     Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
7107     GCC to use the optional PowerPC architecture instructions in the
7108     Graphics group, including floating-point select.
7109
7110     The `-mpowerpc64' option allows GCC to generate the additional
7111     64-bit instructions that are found in the full PowerPC64
7112     architecture and to treat GPRs as 64-bit, doubleword quantities.
7113     GCC defaults to `-mno-powerpc64'.
7114
7115     If you specify both `-mno-power' and `-mno-powerpc', GCC will use
7116     only the instructions in the common subset of both architectures
7117     plus some special AIX common-mode calls, and will not use the MQ
7118     register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
7119     to use any instruction from either architecture and to allow use
7120     of the MQ register; specify this for the Motorola MPC601.
7121
7122`-mnew-mnemonics'
7123`-mold-mnemonics'
7124     Select which mnemonics to use in the generated assembler code.
7125     With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
7126     for the PowerPC architecture.  With `-mold-mnemonics' it uses the
7127     assembler mnemonics defined for the POWER architecture.
7128     Instructions defined in only one architecture have only one
7129     mnemonic; GCC uses that mnemonic irrespective of which of these
7130     options is specified.
7131
7132     GCC defaults to the mnemonics appropriate for the architecture in
7133     use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
7134     these option.  Unless you are building a cross-compiler, you
7135     should normally not specify either `-mnew-mnemonics' or
7136     `-mold-mnemonics', but should instead accept the default.
7137
7138`-mcpu=CPU_TYPE'
7139     Set architecture type, register usage, choice of mnemonics, and
7140     instruction scheduling parameters for machine type CPU_TYPE.
7141     Supported values for CPU_TYPE are `401', `403', `405', `405fp',
7142     `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e',
7143     `620', `630', `740', `7400', `7450', `750', `801', `821', `823',
7144     `860', `970', `common', `ec603e', `G3', `G4', `G5', `power',
7145     `power2', `power3', `power4', `power5', `powerpc', `powerpc64',
7146     `rios', `rios1', `rios2', `rsc', and `rs64a'.
7147
7148     `-mcpu=common' selects a completely generic processor.  Code
7149     generated under this option will run on any POWER or PowerPC
7150     processor.  GCC will use only the instructions in the common
7151     subset of both architectures, and will not use the MQ register.
7152     GCC assumes a generic processor model for scheduling purposes.
7153
7154     `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
7155     `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
7156     PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
7157     types, with an appropriate, generic processor model assumed for
7158     scheduling purposes.
7159
7160     The other options specify a specific processor.  Code generated
7161     under those options will run best on that processor, and may not
7162     run at all on others.
7163
7164     The `-mcpu' options automatically enable or disable the following
7165     options: `-maltivec', `-mhard-float', `-mmfcrf', `-mmultiple',
7166     `-mnew-mnemonics', `-mpower', `-mpower2', `-mpowerpc64',
7167     `-mpowerpc-gpopt', `-mpowerpc-gfxopt', `-mstring'.  The particular
7168     options set for any particular CPU will vary between compiler
7169     versions, depending on what setting seems to produce optimal code
7170     for that CPU; it doesn't necessarily reflect the actual hardware's
7171     capabilities.  If you wish to set an individual option to a
7172     particular value, you may specify it after the `-mcpu' option,
7173     like `-mcpu=970 -mno-altivec'.
7174
7175     On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
7176     or disabled by the `-mcpu' option at present, since AIX does not
7177     have full support for these options.  You may still enable or
7178     disable them individually if you're sure it'll work in your
7179     environment.
7180
7181`-mtune=CPU_TYPE'
7182     Set the instruction scheduling parameters for machine type
7183     CPU_TYPE, but do not set the architecture type, register usage, or
7184     choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
7185     for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
7186     specified, the code generated will use the architecture,
7187     registers, and mnemonics set by `-mcpu', but the scheduling
7188     parameters set by `-mtune'.
7189
7190`-maltivec'
7191`-mno-altivec'
7192     These switches enable or disable the use of built-in functions that
7193     allow access to the AltiVec instruction set.  You may also need to
7194     set `-mabi=altivec' to adjust the current ABI with AltiVec ABI
7195     enhancements.
7196
7197`-mabi=spe'
7198     Extend the current ABI with SPE ABI extensions.  This does not
7199     change the default ABI, instead it adds the SPE ABI extensions to
7200     the current ABI.
7201
7202`-mabi=no-spe'
7203     Disable Booke SPE ABI extensions for the current ABI.
7204
7205`-misel=YES/NO'
7206`-misel'
7207     This switch enables or disables the generation of ISEL
7208     instructions.
7209
7210`-mspe=YES/NO'
7211`-mspe'
7212     This switch enables or disables the generation of SPE simd
7213     instructions.
7214
7215`-mfloat-gprs=YES/NO'
7216`-mfloat-gprs'
7217     This switch enables or disables the generation of floating point
7218     operations on the general purpose registers for architectures that
7219     support it.  This option is currently only available on the
7220     MPC8540.
7221
7222`-mfull-toc'
7223`-mno-fp-in-toc'
7224`-mno-sum-in-toc'
7225`-mminimal-toc'
7226     Modify generation of the TOC (Table Of Contents), which is created
7227     for every executable file.  The `-mfull-toc' option is selected by
7228     default.  In that case, GCC will allocate at least one TOC entry
7229     for each unique non-automatic variable reference in your program.
7230     GCC will also place floating-point constants in the TOC.  However,
7231     only 16,384 entries are available in the TOC.
7232
7233     If you receive a linker error message that saying you have
7234     overflowed the available TOC space, you can reduce the amount of
7235     TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
7236     options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
7237     constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
7238     code to calculate the sum of an address and a constant at run-time
7239     instead of putting that sum into the TOC.  You may specify one or
7240     both of these options.  Each causes GCC to produce very slightly
7241     slower and larger code at the expense of conserving TOC space.
7242
7243     If you still run out of space in the TOC even when you specify
7244     both of these options, specify `-mminimal-toc' instead.  This
7245     option causes GCC to make only one TOC entry for every file.  When
7246     you specify this option, GCC will produce code that is slower and
7247     larger but which uses extremely little TOC space.  You may wish to
7248     use this option only on files that contain less frequently
7249     executed code.
7250
7251`-maix64'
7252`-maix32'
7253     Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
7254     64-bit `long' type, and the infrastructure needed to support them.
7255     Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
7256     `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
7257     GCC defaults to `-maix32'.
7258
7259`-mxl-call'
7260`-mno-xl-call'
7261     On AIX, pass floating-point arguments to prototyped functions
7262     beyond the register save area (RSA) on the stack in addition to
7263     argument FPRs.  The AIX calling convention was extended but not
7264     initially documented to handle an obscure K&R C case of calling a
7265     function that takes the address of its arguments with fewer
7266     arguments than declared.  AIX XL compilers access floating point
7267     arguments which do not fit in the RSA from the stack when a
7268     subroutine is compiled without optimization.  Because always
7269     storing floating-point arguments on the stack is inefficient and
7270     rarely needed, this option is not enabled by default and only is
7271     necessary when calling subroutines compiled by AIX XL compilers
7272     without optimization.
7273
7274`-mpe'
7275     Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
7276     application written to use message passing with special startup
7277     code to enable the application to run.  The system must have PE
7278     installed in the standard location (`/usr/lpp/ppe.poe/'), or the
7279     `specs' file must be overridden with the `-specs=' option to
7280     specify the appropriate directory location.  The Parallel
7281     Environment does not support threads, so the `-mpe' option and the
7282     `-pthread' option are incompatible.
7283
7284`-malign-natural'
7285`-malign-power'
7286     On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
7287     `-malign-natural' overrides the ABI-defined alignment of larger
7288     types, such as floating-point doubles, on their natural size-based
7289     boundary.  The option `-malign-power' instructs GCC to follow the
7290     ABI-specified alignment rules.  GCC defaults to the standard
7291     alignment defined in the ABI.
7292
7293`-msoft-float'
7294`-mhard-float'
7295     Generate code that does not use (uses) the floating-point register
7296     set.  Software floating point emulation is provided if you use the
7297     `-msoft-float' option, and pass the option to GCC when linking.
7298
7299`-mmultiple'
7300`-mno-multiple'
7301     Generate code that uses (does not use) the load multiple word
7302     instructions and the store multiple word instructions.  These
7303     instructions are generated by default on POWER systems, and not
7304     generated on PowerPC systems.  Do not use `-mmultiple' on little
7305     endian PowerPC systems, since those instructions do not work when
7306     the processor is in little endian mode.  The exceptions are PPC740
7307     and PPC750 which permit the instructions usage in little endian
7308     mode.
7309
7310`-mstring'
7311`-mno-string'
7312     Generate code that uses (does not use) the load string instructions
7313     and the store string word instructions to save multiple registers
7314     and do small block moves.  These instructions are generated by
7315     default on POWER systems, and not generated on PowerPC systems.
7316     Do not use `-mstring' on little endian PowerPC systems, since those
7317     instructions do not work when the processor is in little endian
7318     mode.  The exceptions are PPC740 and PPC750 which permit the
7319     instructions usage in little endian mode.
7320
7321`-mupdate'
7322`-mno-update'
7323     Generate code that uses (does not use) the load or store
7324     instructions that update the base register to the address of the
7325     calculated memory location.  These instructions are generated by
7326     default.  If you use `-mno-update', there is a small window
7327     between the time that the stack pointer is updated and the address
7328     of the previous frame is stored, which means code that walks the
7329     stack frame across interrupts or signals may get corrupted data.
7330
7331`-mfused-madd'
7332`-mno-fused-madd'
7333     Generate code that uses (does not use) the floating point multiply
7334     and accumulate instructions.  These instructions are generated by
7335     default if hardware floating is used.
7336
7337`-mno-bit-align'
7338`-mbit-align'
7339     On System V.4 and embedded PowerPC systems do not (do) force
7340     structures and unions that contain bit-fields to be aligned to the
7341     base type of the bit-field.
7342
7343     For example, by default a structure containing nothing but 8
7344     `unsigned' bit-fields of length 1 would be aligned to a 4 byte
7345     boundary and have a size of 4 bytes.  By using `-mno-bit-align',
7346     the structure would be aligned to a 1 byte boundary and be one
7347     byte in size.
7348
7349`-mno-strict-align'
7350`-mstrict-align'
7351     On System V.4 and embedded PowerPC systems do not (do) assume that
7352     unaligned memory references will be handled by the system.
7353
7354`-mrelocatable'
7355`-mno-relocatable'
7356     On embedded PowerPC systems generate code that allows (does not
7357     allow) the program to be relocated to a different address at
7358     runtime.  If you use `-mrelocatable' on any module, all objects
7359     linked together must be compiled with `-mrelocatable' or
7360     `-mrelocatable-lib'.
7361
7362`-mrelocatable-lib'
7363`-mno-relocatable-lib'
7364     On embedded PowerPC systems generate code that allows (does not
7365     allow) the program to be relocated to a different address at
7366     runtime.  Modules compiled with `-mrelocatable-lib' can be linked
7367     with either modules compiled without `-mrelocatable' and
7368     `-mrelocatable-lib' or with modules compiled with the
7369     `-mrelocatable' options.
7370
7371`-mno-toc'
7372`-mtoc'
7373     On System V.4 and embedded PowerPC systems do not (do) assume that
7374     register 2 contains a pointer to a global area pointing to the
7375     addresses used in the program.
7376
7377`-mlittle'
7378`-mlittle-endian'
7379     On System V.4 and embedded PowerPC systems compile code for the
7380     processor in little endian mode.  The `-mlittle-endian' option is
7381     the same as `-mlittle'.
7382
7383`-mbig'
7384`-mbig-endian'
7385     On System V.4 and embedded PowerPC systems compile code for the
7386     processor in big endian mode.  The `-mbig-endian' option is the
7387     same as `-mbig'.
7388
7389`-mdynamic-no-pic'
7390     On Darwin and Mac OS X systems, compile code so that it is not
7391     relocatable, but that its external references are relocatable.  The
7392     resulting code is suitable for applications, but not shared
7393     libraries.
7394
7395`-mprioritize-restricted-insns=PRIORITY'
7396     This option controls the priority that is assigned to
7397     dispatch-slot restricted instructions during the second scheduling
7398     pass.  The argument PRIORITY takes the value 0/1/2 to assign
7399     NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
7400     instructions.
7401
7402`-msched-costly-dep=DEPENDENCE_TYPE'
7403     This option controls which dependences are considered costly by
7404     the target during instruction scheduling.  The argument
7405     DEPENDENCE_TYPE takes one of the following values: NO: no
7406     dependence is costly, ALL: all dependences are costly,
7407     TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
7408     STORE_TO_LOAD: any dependence from store to load is costly,
7409     NUMBER: any dependence which latency >= NUMBER is costly.
7410
7411`-minsert-sched-nops=SCHEME'
7412     This option controls which nop insertion scheme will be used during
7413     the second scheduling pass. The argument SCHEME takes one of the
7414     following values: NO: Don't insert nops.  PAD: Pad with nops any
7415     dispatch group which has vacant issue slots, according to the
7416     scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
7417     dependent insns into separate groups.  Insert exactly as many nops
7418     as needed to force an insn to a new group, according to the
7419     estimated processor grouping.  NUMBER: Insert nops to force costly
7420     dependent insns into separate groups.  Insert NUMBER nops to force
7421     an insn to a new group.
7422
7423`-mcall-sysv'
7424     On System V.4 and embedded PowerPC systems compile code using
7425     calling conventions that adheres to the March 1995 draft of the
7426     System V Application Binary Interface, PowerPC processor
7427     supplement.  This is the default unless you configured GCC using
7428     `powerpc-*-eabiaix'.
7429
7430`-mcall-sysv-eabi'
7431     Specify both `-mcall-sysv' and `-meabi' options.
7432
7433`-mcall-sysv-noeabi'
7434     Specify both `-mcall-sysv' and `-mno-eabi' options.
7435
7436`-mcall-solaris'
7437     On System V.4 and embedded PowerPC systems compile code for the
7438     Solaris operating system.
7439
7440`-mcall-linux'
7441     On System V.4 and embedded PowerPC systems compile code for the
7442     Linux-based GNU system.
7443
7444`-mcall-gnu'
7445     On System V.4 and embedded PowerPC systems compile code for the
7446     Hurd-based GNU system.
7447
7448`-mcall-netbsd'
7449     On System V.4 and embedded PowerPC systems compile code for the
7450     NetBSD operating system.
7451
7452`-maix-struct-return'
7453     Return all structures in memory (as specified by the AIX ABI).
7454
7455`-msvr4-struct-return'
7456     Return structures smaller than 8 bytes in registers (as specified
7457     by the SVR4 ABI).
7458
7459`-mabi=altivec'
7460     Extend the current ABI with AltiVec ABI extensions.  This does not
7461     change the default ABI, instead it adds the AltiVec ABI extensions
7462     to the current ABI.
7463
7464`-mabi=no-altivec'
7465     Disable AltiVec ABI extensions for the current ABI.
7466
7467`-mprototype'
7468`-mno-prototype'
7469     On System V.4 and embedded PowerPC systems assume that all calls to
7470     variable argument functions are properly prototyped.  Otherwise,
7471     the compiler must insert an instruction before every non
7472     prototyped call to set or clear bit 6 of the condition code
7473     register (CR) to indicate whether floating point values were
7474     passed in the floating point registers in case the function takes
7475     a variable arguments.  With `-mprototype', only calls to
7476     prototyped variable argument functions will set or clear the bit.
7477
7478`-msim'
7479     On embedded PowerPC systems, assume that the startup module is
7480     called `sim-crt0.o' and that the standard C libraries are
7481     `libsim.a' and `libc.a'.  This is the default for
7482     `powerpc-*-eabisim'.  configurations.
7483
7484`-mmvme'
7485     On embedded PowerPC systems, assume that the startup module is
7486     called `crt0.o' and the standard C libraries are `libmvme.a' and
7487     `libc.a'.
7488
7489`-mads'
7490     On embedded PowerPC systems, assume that the startup module is
7491     called `crt0.o' and the standard C libraries are `libads.a' and
7492     `libc.a'.
7493
7494`-myellowknife'
7495     On embedded PowerPC systems, assume that the startup module is
7496     called `crt0.o' and the standard C libraries are `libyk.a' and
7497     `libc.a'.
7498
7499`-mvxworks'
7500     On System V.4 and embedded PowerPC systems, specify that you are
7501     compiling for a VxWorks system.
7502
7503`-mwindiss'
7504     Specify that you are compiling for the WindISS simulation
7505     environment.
7506
7507`-memb'
7508     On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
7509     header to indicate that `eabi' extended relocations are used.
7510
7511`-meabi'
7512`-mno-eabi'
7513     On System V.4 and embedded PowerPC systems do (do not) adhere to
7514     the Embedded Applications Binary Interface (eabi) which is a set of
7515     modifications to the System V.4 specifications.  Selecting `-meabi'
7516     means that the stack is aligned to an 8 byte boundary, a function
7517     `__eabi' is called to from `main' to set up the eabi environment,
7518     and the `-msdata' option can use both `r2' and `r13' to point to
7519     two separate small data areas.  Selecting `-mno-eabi' means that
7520     the stack is aligned to a 16 byte boundary, do not call an
7521     initialization function from `main', and the `-msdata' option will
7522     only use `r13' to point to a single small data area.  The `-meabi'
7523     option is on by default if you configured GCC using one of the
7524     `powerpc*-*-eabi*' options.
7525
7526`-msdata=eabi'
7527     On System V.4 and embedded PowerPC systems, put small initialized
7528     `const' global and static data in the `.sdata2' section, which is
7529     pointed to by register `r2'.  Put small initialized non-`const'
7530     global and static data in the `.sdata' section, which is pointed
7531     to by register `r13'.  Put small uninitialized global and static
7532     data in the `.sbss' section, which is adjacent to the `.sdata'
7533     section.  The `-msdata=eabi' option is incompatible with the
7534     `-mrelocatable' option.  The `-msdata=eabi' option also sets the
7535     `-memb' option.
7536
7537`-msdata=sysv'
7538     On System V.4 and embedded PowerPC systems, put small global and
7539     static data in the `.sdata' section, which is pointed to by
7540     register `r13'.  Put small uninitialized global and static data in
7541     the `.sbss' section, which is adjacent to the `.sdata' section.
7542     The `-msdata=sysv' option is incompatible with the `-mrelocatable'
7543     option.
7544
7545`-msdata=default'
7546`-msdata'
7547     On System V.4 and embedded PowerPC systems, if `-meabi' is used,
7548     compile code the same as `-msdata=eabi', otherwise compile code the
7549     same as `-msdata=sysv'.
7550
7551`-msdata-data'
7552     On System V.4 and embedded PowerPC systems, put small global and
7553     static data in the `.sdata' section.  Put small uninitialized
7554     global and static data in the `.sbss' section.  Do not use
7555     register `r13' to address small data however.  This is the default
7556     behavior unless other `-msdata' options are used.
7557
7558`-msdata=none'
7559`-mno-sdata'
7560     On embedded PowerPC systems, put all initialized global and static
7561     data in the `.data' section, and all uninitialized data in the
7562     `.bss' section.
7563
7564`-G NUM'
7565     On embedded PowerPC systems, put global and static items less than
7566     or equal to NUM bytes into the small data or bss sections instead
7567     of the normal data or bss section.  By default, NUM is 8.  The `-G
7568     NUM' switch is also passed to the linker.  All modules should be
7569     compiled with the same `-G NUM' value.
7570
7571`-mregnames'
7572`-mno-regnames'
7573     On System V.4 and embedded PowerPC systems do (do not) emit
7574     register names in the assembly language output using symbolic
7575     forms.
7576
7577`-mlongcall'
7578`-mno-longcall'
7579     Default to making all function calls via pointers, so that
7580     functions which reside further than 64 megabytes (67,108,864
7581     bytes) from the current location can be called.  This setting can
7582     be overridden by the `shortcall' function attribute, or by
7583     `#pragma longcall(0)'.
7584
7585     Some linkers are capable of detecting out-of-range calls and
7586     generating glue code on the fly.  On these systems, long calls are
7587     unnecessary and generate slower code.  As of this writing, the AIX
7588     linker can do this, as can the GNU linker for PowerPC/64.  It is
7589     planned to add this feature to the GNU linker for 32-bit PowerPC
7590     systems as well.
7591
7592     On Mach-O (Darwin) systems, this option directs the compiler emit
7593     to the glue for every direct call, and the Darwin linker decides
7594     whether to use or discard it.
7595
7596     In the future, we may cause GCC to ignore all longcall
7597     specifications when the linker is known to generate glue.
7598
7599`-pthread'
7600     Adds support for multithreading with the "pthreads" library.  This
7601     option sets flags for both the preprocessor and linker.
7602
7603
7604
7605File: gcc.info,  Node: Darwin Options,  Next: MIPS Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
7606
76073.17.9 Darwin Options
7608---------------------
7609
7610These options are defined for all architectures running the Darwin
7611operating system.  They are useful for compatibility with other Mac OS
7612compilers.
7613
7614`-all_load'
7615     Loads all members of static archive libraries.  See man ld(1) for
7616     more information.
7617
7618`-arch_errors_fatal'
7619     Cause the errors having to do with files that have the wrong
7620     architecture to be fatal.
7621
7622`-bind_at_load'
7623     Causes the output file to be marked such that the dynamic linker
7624     will bind all undefined references when the file is loaded or
7625     launched.
7626
7627`-bundle'
7628     Produce a Mach-o bundle format file.  See man ld(1) for more
7629     information.
7630
7631`-bundle_loader EXECUTABLE'
7632     This specifies the EXECUTABLE that will be loading the build
7633     output file being linked. See man ld(1) for more information.
7634
7635`-allowable_client  CLIENT_NAME'
7636`-arch_only'
7637`-client_name'
7638`-compatibility_version'
7639`-current_version'
7640`-dependency-file'
7641`-dylib_file'
7642`-dylinker_install_name'
7643`-dynamic'
7644`-dynamiclib'
7645`-exported_symbols_list'
7646`-filelist'
7647`-flat_namespace'
7648`-force_cpusubtype_ALL'
7649`-force_flat_namespace'
7650`-headerpad_max_install_names'
7651`-image_base'
7652`-init'
7653`-install_name'
7654`-keep_private_externs'
7655`-multi_module'
7656`-multiply_defined'
7657`-multiply_defined_unused'
7658`-noall_load'
7659`-nofixprebinding'
7660`-nomultidefs'
7661`-noprebind'
7662`-noseglinkedit'
7663`-pagezero_size'
7664`-prebind'
7665`-prebind_all_twolevel_modules'
7666`-private_bundle'
7667`-read_only_relocs'
7668`-sectalign'
7669`-sectobjectsymbols'
7670`-whyload'
7671`-seg1addr'
7672`-sectcreate'
7673`-sectobjectsymbols'
7674`-sectorder'
7675`-seg_addr_table'
7676`-seg_addr_table_filename'
7677`-seglinkedit'
7678`-segprot'
7679`-segs_read_only_addr'
7680`-segs_read_write_addr'
7681`-single_module'
7682`-static'
7683`-sub_library'
7684`-sub_umbrella'
7685`-twolevel_namespace'
7686`-umbrella'
7687`-undefined'
7688`-unexported_symbols_list'
7689`-weak_reference_mismatches'
7690`-whatsloaded'
7691     These options are available for Darwin linker. Darwin linker man
7692     page describes them in detail.
7693
7694
7695File: gcc.info,  Node: MIPS Options,  Next: i386 and x86-64 Options,  Prev: Darwin Options,  Up: Submodel Options
7696
76973.17.10 MIPS Options
7698--------------------
7699
7700`-EB'
7701     Generate big-endian code.
7702
7703`-EL'
7704     Generate little-endian code.  This is the default for `mips*el-*-*'
7705     configurations.
7706
7707`-march=ARCH'
7708     Generate code that will run on ARCH, which can be the name of a
7709     generic MIPS ISA, or the name of a particular processor.  The ISA
7710     names are: `mips1', `mips2', `mips3', `mips4', `mips32',
7711     `mips32r2', and `mips64'.  The processor names are: `4kc', `4kp',
7712     `5kc', `20kc', `m4k', `r2000', `r3000', `r3900', `r4000', `r4400',
7713     `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `orion',
7714     `sb1', `vr4100', `vr4111', `vr4120', `vr4300', `vr5000', `vr5400'
7715     and `vr5500'.  The special value `from-abi' selects the most
7716     compatible architecture for the selected ABI (that is, `mips1' for
7717     32-bit ABIs and `mips3' for 64-bit ABIs).
7718
7719     In processor names, a final `000' can be abbreviated as `k' (for
7720     example, `-march=r2k').  Prefixes are optional, and `vr' may be
7721     written `r'.
7722
7723     GCC defines two macros based on the value of this option.  The
7724     first is `_MIPS_ARCH', which gives the name of target
7725     architecture, as a string.  The second has the form
7726     `_MIPS_ARCH_FOO', where FOO is the capitalized value of
7727     `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
7728     to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
7729
7730     Note that the `_MIPS_ARCH' macro uses the processor names given
7731     above.  In other words, it will have the full prefix and will not
7732     abbreviate `000' as `k'.  In the case of `from-abi', the macro
7733     names the resolved architecture (either `"mips1"' or `"mips3"').
7734     It names the default architecture when no `-march' option is given.
7735
7736`-mtune=ARCH'
7737     Optimize for ARCH.  Among other things, this option controls the
7738     way instructions are scheduled, and the perceived cost of
7739     arithmetic operations.  The list of ARCH values is the same as for
7740     `-march'.
7741
7742     When this option is not used, GCC will optimize for the processor
7743     specified by `-march'.  By using `-march' and `-mtune' together,
7744     it is possible to generate code that will run on a family of
7745     processors, but optimize the code for one particular member of
7746     that family.
7747
7748     `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
7749     which work in the same way as the `-march' ones described above.
7750
7751`-mips1'
7752     Equivalent to `-march=mips1'.
7753
7754`-mips2'
7755     Equivalent to `-march=mips2'.
7756
7757`-mips3'
7758     Equivalent to `-march=mips3'.
7759
7760`-mips4'
7761     Equivalent to `-march=mips4'.
7762
7763`-mips32'
7764     Equivalent to `-march=mips32'.
7765
7766`-mips32r2'
7767     Equivalent to `-march=mips32r2'.
7768
7769`-mips64'
7770     Equivalent to `-march=mips64'.
7771
7772`-mips16'
7773`-mno-mips16'
7774     Use (do not use) the MIPS16 ISA.
7775
7776`-mabi=32'
7777`-mabi=o64'
7778`-mabi=n32'
7779`-mabi=64'
7780`-mabi=eabi'
7781     Generate code for the given ABI.
7782
7783     Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
7784     generates 64-bit code when you select a 64-bit architecture, but
7785     you can use `-mgp32' to get 32-bit code instead.
7786
7787`-mabicalls'
7788`-mno-abicalls'
7789     Generate (do not generate) SVR4-style position-independent code.
7790     `-mabicalls' is the default for SVR4-based systems.
7791
7792`-mxgot'
7793`-mno-xgot'
7794     Lift (do not lift) the usual restrictions on the size of the global
7795     offset table.
7796
7797     GCC normally uses a single instruction to load values from the GOT.
7798     While this is relatively efficient, it will only work if the GOT
7799     is smaller than about 64k.  Anything larger will cause the linker
7800     to report an error such as:
7801
7802          relocation truncated to fit: R_MIPS_GOT16 foobar
7803
7804     If this happens, you should recompile your code with `-mxgot'.  It
7805     should then work with very large GOTs, although it will also be
7806     less efficient, since it will take three instructions to fetch the
7807     value of a global symbol.
7808
7809     Note that some linkers can create multiple GOTs.  If you have such
7810     a linker, you should only need to use `-mxgot' when a single object
7811     file accesses more than 64k's worth of GOT entries.  Very few do.
7812
7813     These options have no effect unless GCC is generating position
7814     independent code.
7815
7816`-membedded-pic'
7817`-mno-embedded-pic'
7818     Generate (do not generate) position-independent code suitable for
7819     some embedded systems.  All calls are made using PC relative
7820     addresses, and all data is addressed using the $gp register.  No
7821     more than 65536 bytes of global data may be used.  This requires
7822     GNU as and GNU ld, which do most of the work.
7823
7824`-mgp32'
7825     Assume that general-purpose registers are 32 bits wide.
7826
7827`-mgp64'
7828     Assume that general-purpose registers are 64 bits wide.
7829
7830`-mfp32'
7831     Assume that floating-point registers are 32 bits wide.
7832
7833`-mfp64'
7834     Assume that floating-point registers are 64 bits wide.
7835
7836`-mhard-float'
7837     Use floating-point coprocessor instructions.
7838
7839`-msoft-float'
7840     Do not use floating-point coprocessor instructions.  Implement
7841     floating-point calculations using library calls instead.
7842
7843`-msingle-float'
7844     Assume that the floating-point coprocessor only supports
7845     single-precision operations.
7846
7847`-mdouble-float'
7848     Assume that the floating-point coprocessor supports
7849     double-precision operations.  This is the default.
7850
7851`-mint64'
7852     Force `int' and `long' types to be 64 bits wide.  See `-mlong32'
7853     for an explanation of the default and the way that the pointer
7854     size is determined.
7855
7856`-mlong64'
7857     Force `long' types to be 64 bits wide.  See `-mlong32' for an
7858     explanation of the default and the way that the pointer size is
7859     determined.
7860
7861`-mlong32'
7862     Force `long', `int', and pointer types to be 32 bits wide.
7863
7864     The default size of `int's, `long's and pointers depends on the
7865     ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
7866     64-bit `long's, as does the 64-bit EABI; the others use 32-bit
7867     `long's.  Pointers are the same size as `long's, or the same size
7868     as integer registers, whichever is smaller.
7869
7870`-G NUM'
7871     Put global and static items less than or equal to NUM bytes into
7872     the small data or bss section instead of the normal data or bss
7873     section.  This allows the data to be accessed using a single
7874     instruction.
7875
7876     All modules should be compiled with the same `-G NUM' value.
7877
7878`-membedded-data'
7879`-mno-embedded-data'
7880     Allocate variables to the read-only data section first if
7881     possible, then next in the small data section if possible,
7882     otherwise in data.  This gives slightly slower code than the
7883     default, but reduces the amount of RAM required when executing,
7884     and thus may be preferred for some embedded systems.
7885
7886`-muninit-const-in-rodata'
7887`-mno-uninit-const-in-rodata'
7888     Put uninitialized `const' variables in the read-only data section.
7889     This option is only meaningful in conjunction with
7890     `-membedded-data'.
7891
7892`-msplit-addresses'
7893`-mno-split-addresses'
7894     Enable (disable) use of the `%hi()' and `%lo()' assembler
7895     relocation operators.  This option has been superceded by
7896     `-mexplicit-relocs' but is retained for backwards compatibility.
7897
7898`-mexplicit-relocs'
7899`-mno-explicit-relocs'
7900     Use (do not use) assembler relocation operators when dealing with
7901     symbolic addresses.  The alternative, selected by
7902     `-mno-explicit-relocs', is to use assembler macros instead.
7903
7904     `-mexplicit-relocs' is usually the default if GCC was configured
7905     to use an assembler that supports relocation operators.  However,
7906     there are two exceptions:
7907
7908        * GCC is not yet able to generate explicit relocations for the
7909          combination of `-mabi=64' and `-mno-abicalls'.  This will be
7910          addressed in a future release.
7911
7912        * The combination of `-mabicalls' and `-fno-unit-at-a-time'
7913          implies `-mno-explicit-relocs' unless explicitly overridden.
7914          This is because, when generating abicalls, the choice of
7915          relocation depends on whether a symbol is local or global.
7916          In some rare cases, GCC will not be able to decide this until
7917          the whole compilation unit has been read.
7918
7919`-mrnames'
7920`-mno-rnames'
7921     Generate (do not generate) code that refers to registers using
7922     their software names.  The default is `-mno-rnames', which tells
7923     GCC to use hardware names like `$4' instead of software names like
7924     `a0'.  The only assembler known to support `-rnames' is the
7925     Algorithmics assembler.
7926
7927`-mcheck-zero-division'
7928`-mno-check-zero-division'
7929     Trap (do not trap) on integer division by zero.  The default is
7930     `-mcheck-zero-division'.
7931
7932`-mmemcpy'
7933`-mno-memcpy'
7934     Force (do not force) the use of `memcpy()' for non-trivial block
7935     moves.  The default is `-mno-memcpy', which allows GCC to inline
7936     most constant-sized copies.
7937
7938`-mlong-calls'
7939`-mno-long-calls'
7940     Disable (do not disable) use of the `jal' instruction.  Calling
7941     functions using `jal' is more efficient but requires the caller
7942     and callee to be in the same 256 megabyte segment.
7943
7944     This option has no effect on abicalls code.  The default is
7945     `-mno-long-calls'.
7946
7947`-mmad'
7948`-mno-mad'
7949     Enable (disable) use of the `mad', `madu' and `mul' instructions,
7950     as provided by the R4650 ISA.
7951
7952`-mfused-madd'
7953`-mno-fused-madd'
7954     Enable (disable) use of the floating point multiply-accumulate
7955     instructions, when they are available.  The default is
7956     `-mfused-madd'.
7957
7958     When multiply-accumulate instructions are used, the intermediate
7959     product is calculated to infinite precision and is not subject to
7960     the FCSR Flush to Zero bit.  This may be undesirable in some
7961     circumstances.
7962
7963`-nocpp'
7964     Tell the MIPS assembler to not run its preprocessor over user
7965     assembler files (with a `.s' suffix) when assembling them.
7966
7967`-mfix-sb1'
7968`-mno-fix-sb1'
7969     Work around certain SB-1 CPU core errata.  (This flag currently
7970     works around the SB-1 revision 2 "F1" and "F2" floating point
7971     errata.)
7972
7973`-mflush-func=FUNC'
7974`-mno-flush-func'
7975     Specifies the function to call to flush the I and D caches, or to
7976     not call any such function.  If called, the function must take the
7977     same arguments as the common `_flush_func()', that is, the address
7978     of the memory range for which the cache is being flushed, the size
7979     of the memory range, and the number 3 (to flush both caches).  The
7980     default depends on the target GCC was configured for, but commonly
7981     is either `_flush_func' or `__cpu_flush'.
7982
7983`-mbranch-likely'
7984`-mno-branch-likely'
7985     Enable or disable use of Branch Likely instructions, regardless of
7986     the default for the selected architecture.  By default, Branch
7987     Likely instructions may be generated if they are supported by the
7988     selected architecture.  An exception is for the MIPS32 and MIPS64
7989     architectures and processors which implement those architectures;
7990     for those, Branch Likely instructions will not be generated by
7991     default because the MIPS32 and MIPS64 architectures specifically
7992     deprecate their use.
7993
7994
7995File: gcc.info,  Node: i386 and x86-64 Options,  Next: HPPA Options,  Prev: MIPS Options,  Up: Submodel Options
7996
79973.17.11 Intel 386 and AMD x86-64 Options
7998----------------------------------------
7999
8000These `-m' options are defined for the i386 and x86-64 family of
8001computers:
8002
8003`-mtune=CPU-TYPE'
8004     Tune to CPU-TYPE everything applicable about the generated code,
8005     except for the ABI and the set of available instructions.  The
8006     choices for CPU-TYPE are:
8007    _i386_
8008          Original Intel's i386 CPU.
8009
8010    _i486_
8011          Intel's i486 CPU.  (No scheduling is implemented for this
8012          chip.)
8013
8014    _i586, pentium_
8015          Intel Pentium CPU with no MMX support.
8016
8017    _pentium-mmx_
8018          Intel PentiumMMX CPU based on Pentium core with MMX
8019          instruction set support.
8020
8021    _i686, pentiumpro_
8022          Intel PentiumPro CPU.
8023
8024    _pentium2_
8025          Intel Pentium2 CPU based on PentiumPro core with MMX
8026          instruction set support.
8027
8028    _pentium3, pentium3m_
8029          Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
8030          instruction set support.
8031
8032    _pentium-m_
8033          Low power version of Intel Pentium3 CPU with MMX, SSE and
8034          SSE2 instruction set support.  Used by Centrino notebooks.
8035
8036    _pentium4, pentium4m_
8037          Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
8038          support.
8039
8040    _prescott_
8041          Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
8042          and SSE3 instruction set support.
8043
8044    _nocona_
8045          Improved version of Intel Pentium4 CPU with 64-bit
8046          extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
8047
8048    _k6_
8049          AMD K6 CPU with MMX instruction set support.
8050
8051    _k6-2, k6-3_
8052          Improved versions of AMD K6 CPU with MMX and 3dNOW!
8053          instruction set support.
8054
8055    _athlon, athlon-tbird_
8056          AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
8057          prefetch instructions support.
8058
8059    _athlon-4, athlon-xp, athlon-mp_
8060          Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
8061          full SSE instruction set support.
8062
8063    _k8, opteron, athlon64, athlon-fx_
8064          AMD K8 core based CPUs with x86-64 instruction set support.
8065          (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
8066          64-bit instruction set extensions.)
8067
8068    _winchip-c6_
8069          IDT Winchip C6 CPU, dealt in same way as i486 with additional
8070          MMX instruction set support.
8071
8072    _winchip2_
8073          IDT Winchip2 CPU, dealt in same way as i486 with additional
8074          MMX and 3dNOW!  instruction set support.
8075
8076    _c3_
8077          Via C3 CPU with MMX and 3dNOW!  instruction set support.  (No
8078          scheduling is implemented for this chip.)
8079
8080    _c3-2_
8081          Via C3-2 CPU with MMX and SSE instruction set support.  (No
8082          scheduling is implemented for this chip.)
8083
8084     While picking a specific CPU-TYPE will schedule things
8085     appropriately for that particular chip, the compiler will not
8086     generate any code that does not run on the i386 without the
8087     `-march=CPU-TYPE' option being used.
8088
8089`-march=CPU-TYPE'
8090     Generate instructions for the machine type CPU-TYPE.  The choices
8091     for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
8092     `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
8093
8094`-mcpu=CPU-TYPE'
8095     A deprecated synonym for `-mtune'.
8096
8097`-m386'
8098`-m486'
8099`-mpentium'
8100`-mpentiumpro'
8101     These options are synonyms for `-mtune=i386', `-mtune=i486',
8102     `-mtune=pentium', and `-mtune=pentiumpro' respectively.  These
8103     synonyms are deprecated.
8104
8105`-mfpmath=UNIT'
8106     Generate floating point arithmetics for selected unit UNIT.  The
8107     choices for UNIT are:
8108
8109    `387'
8110          Use the standard 387 floating point coprocessor present
8111          majority of chips and emulated otherwise.  Code compiled with
8112          this option will run almost everywhere.  The temporary
8113          results are computed in 80bit precision instead of precision
8114          specified by the type resulting in slightly different results
8115          compared to most of other chips. See `-ffloat-store' for more
8116          detailed description.
8117
8118          This is the default choice for i386 compiler.
8119
8120    `sse'
8121          Use scalar floating point instructions present in the SSE
8122          instruction set.  This instruction set is supported by
8123          Pentium3 and newer chips, in the AMD line by Athlon-4,
8124          Athlon-xp and Athlon-mp chips.  The earlier version of SSE
8125          instruction set supports only single precision arithmetics,
8126          thus the double and extended precision arithmetics is still
8127          done using 387.  Later version, present only in Pentium4 and
8128          the future AMD x86-64 chips supports double precision
8129          arithmetics too.
8130
8131          For i387 you need to use `-march=CPU-TYPE', `-msse' or
8132          `-msse2' switches to enable SSE extensions and make this
8133          option effective.  For x86-64 compiler, these extensions are
8134          enabled by default.
8135
8136          The resulting code should be considerably faster in the
8137          majority of cases and avoid the numerical instability
8138          problems of 387 code, but may break some existing code that
8139          expects temporaries to be 80bit.
8140
8141          This is the default choice for the x86-64 compiler.
8142
8143    `sse,387'
8144          Attempt to utilize both instruction sets at once.  This
8145          effectively double the amount of available registers and on
8146          chips with separate execution units for 387 and SSE the
8147          execution resources too.  Use this option with care, as it is
8148          still experimental, because the GCC register allocator does
8149          not model separate functional units well resulting in
8150          instable performance.
8151
8152`-masm=DIALECT'
8153     Output asm instructions using selected DIALECT. Supported choices
8154     are `intel' or `att' (the default one).
8155
8156`-mieee-fp'
8157`-mno-ieee-fp'
8158     Control whether or not the compiler uses IEEE floating point
8159     comparisons.  These handle correctly the case where the result of a
8160     comparison is unordered.
8161
8162`-msoft-float'
8163     Generate output containing library calls for floating point.
8164     *Warning:* the requisite libraries are not part of GCC.  Normally
8165     the facilities of the machine's usual C compiler are used, but
8166     this can't be done directly in cross-compilation.  You must make
8167     your own arrangements to provide suitable library functions for
8168     cross-compilation.
8169
8170     On machines where a function returns floating point results in the
8171     80387 register stack, some floating point opcodes may be emitted
8172     even if `-msoft-float' is used.
8173
8174`-mno-fp-ret-in-387'
8175     Do not use the FPU registers for return values of functions.
8176
8177     The usual calling convention has functions return values of types
8178     `float' and `double' in an FPU register, even if there is no FPU.
8179     The idea is that the operating system should emulate an FPU.
8180
8181     The option `-mno-fp-ret-in-387' causes such values to be returned
8182     in ordinary CPU registers instead.
8183
8184`-mno-fancy-math-387'
8185     Some 387 emulators do not support the `sin', `cos' and `sqrt'
8186     instructions for the 387.  Specify this option to avoid generating
8187     those instructions.  This option is the default on FreeBSD,
8188     OpenBSD and NetBSD.  This option is overridden when `-march'
8189     indicates that the target cpu will always have an FPU and so the
8190     instruction will not need emulation.  As of revision 2.6.1, these
8191     instructions are not generated unless you also use the
8192     `-funsafe-math-optimizations' switch.
8193
8194`-malign-double'
8195`-mno-align-double'
8196     Control whether GCC aligns `double', `long double', and `long
8197     long' variables on a two word boundary or a one word boundary.
8198     Aligning `double' variables on a two word boundary will produce
8199     code that runs somewhat faster on a `Pentium' at the expense of
8200     more memory.
8201
8202     *Warning:* if you use the `-malign-double' switch, structures
8203     containing the above types will be aligned differently than the
8204     published application binary interface specifications for the 386
8205     and will not be binary compatible with structures in code compiled
8206     without that switch.
8207
8208`-m96bit-long-double'
8209`-m128bit-long-double'
8210     These switches control the size of `long double' type. The i386
8211     application binary interface specifies the size to be 96 bits, so
8212     `-m96bit-long-double' is the default in 32 bit mode.
8213
8214     Modern architectures (Pentium and newer) would prefer `long double'
8215     to be aligned to an 8 or 16 byte boundary.  In arrays or structures
8216     conforming to the ABI, this would not be possible.  So specifying a
8217     `-m128bit-long-double' will align `long double' to a 16 byte
8218     boundary by padding the `long double' with an additional 32 bit
8219     zero.
8220
8221     In the x86-64 compiler, `-m128bit-long-double' is the default
8222     choice as its ABI specifies that `long double' is to be aligned on
8223     16 byte boundary.
8224
8225     Notice that neither of these options enable any extra precision
8226     over the x87 standard of 80 bits for a `long double'.
8227
8228     *Warning:* if you override the default value for your target ABI,
8229     the structures and arrays containing `long double' variables will
8230     change their size as well as function calling convention for
8231     function taking `long double' will be modified.  Hence they will
8232     not be binary compatible with arrays or structures in code
8233     compiled without that switch.
8234
8235`-msvr3-shlib'
8236`-mno-svr3-shlib'
8237     Control whether GCC places uninitialized local variables into the
8238     `bss' or `data' segments.  `-msvr3-shlib' places them into `bss'.
8239     These options are meaningful only on System V Release 3.
8240
8241`-mrtd'
8242     Use a different function-calling convention, in which functions
8243     that take a fixed number of arguments return with the `ret' NUM
8244     instruction, which pops their arguments while returning.  This
8245     saves one instruction in the caller since there is no need to pop
8246     the arguments there.
8247
8248     You can specify that an individual function is called with this
8249     calling sequence with the function attribute `stdcall'.  You can
8250     also override the `-mrtd' option by using the function attribute
8251     `cdecl'.  *Note Function Attributes::.
8252
8253     *Warning:* this calling convention is incompatible with the one
8254     normally used on Unix, so you cannot use it if you need to call
8255     libraries compiled with the Unix compiler.
8256
8257     Also, you must provide function prototypes for all functions that
8258     take variable numbers of arguments (including `printf'); otherwise
8259     incorrect code will be generated for calls to those functions.
8260
8261     In addition, seriously incorrect code will result if you call a
8262     function with too many arguments.  (Normally, extra arguments are
8263     harmlessly ignored.)
8264
8265`-mregparm=NUM'
8266     Control how many registers are used to pass integer arguments.  By
8267     default, no registers are used to pass arguments, and at most 3
8268     registers can be used.  You can control this behavior for a
8269     specific function by using the function attribute `regparm'.
8270     *Note Function Attributes::.
8271
8272     *Warning:* if you use this switch, and NUM is nonzero, then you
8273     must build all modules with the same value, including any
8274     libraries.  This includes the system libraries and startup modules.
8275
8276`-mpreferred-stack-boundary=NUM'
8277     Attempt to keep the stack boundary aligned to a 2 raised to NUM
8278     byte boundary.  If `-mpreferred-stack-boundary' is not specified,
8279     the default is 4 (16 bytes or 128 bits), except when optimizing
8280     for code size (`-Os'), in which case the default is the minimum
8281     correct alignment (4 bytes for x86, and 8 bytes for x86-64).
8282
8283     On Pentium and PentiumPro, `double' and `long double' values
8284     should be aligned to an 8 byte boundary (see `-malign-double') or
8285     suffer significant run time performance penalties.  On Pentium
8286     III, the Streaming SIMD Extension (SSE) data type `__m128' suffers
8287     similar penalties if it is not 16 byte aligned.
8288
8289     To ensure proper alignment of this values on the stack, the stack
8290     boundary must be as aligned as that required by any value stored
8291     on the stack.  Further, every function must be generated such that
8292     it keeps the stack aligned.  Thus calling a function compiled with
8293     a higher preferred stack boundary from a function compiled with a
8294     lower preferred stack boundary will most likely misalign the
8295     stack.  It is recommended that libraries that use callbacks always
8296     use the default setting.
8297
8298     This extra alignment does consume extra stack space, and generally
8299     increases code size.  Code that is sensitive to stack space usage,
8300     such as embedded systems and operating system kernels, may want to
8301     reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
8302
8303`-mmmx'
8304`-mno-mmx'
8305
8306`-msse'
8307`-mno-sse'
8308
8309`-msse2'
8310`-mno-sse2'
8311
8312`-msse3'
8313`-mno-sse3'
8314
8315`-m3dnow'
8316`-mno-3dnow'
8317     These switches enable or disable the use of built-in functions
8318     that allow direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow
8319     extensions of the instruction set.
8320
8321     *Note X86 Built-in Functions::, for details of the functions
8322     enabled and disabled by these switches.
8323
8324     To have SSE/SSE2 instructions generated automatically from
8325     floating-point code, see `-mfpmath=sse'.
8326
8327`-mpush-args'
8328`-mno-push-args'
8329     Use PUSH operations to store outgoing parameters.  This method is
8330     shorter and usually equally fast as method using SUB/MOV
8331     operations and is enabled by default.  In some cases disabling it
8332     may improve performance because of improved scheduling and reduced
8333     dependencies.
8334
8335`-maccumulate-outgoing-args'
8336     If enabled, the maximum amount of space required for outgoing
8337     arguments will be computed in the function prologue.  This is
8338     faster on most modern CPUs because of reduced dependencies,
8339     improved scheduling and reduced stack usage when preferred stack
8340     boundary is not equal to 2.  The drawback is a notable increase in
8341     code size.  This switch implies `-mno-push-args'.
8342
8343`-mthreads'
8344     Support thread-safe exception handling on `Mingw32'.  Code that
8345     relies on thread-safe exception handling must compile and link all
8346     code with the `-mthreads' option.  When compiling, `-mthreads'
8347     defines `-D_MT'; when linking, it links in a special thread helper
8348     library `-lmingwthrd' which cleans up per thread exception
8349     handling data.
8350
8351`-mno-align-stringops'
8352     Do not align destination of inlined string operations.  This
8353     switch reduces code size and improves performance in case the
8354     destination is already aligned, but GCC doesn't know about it.
8355
8356`-minline-all-stringops'
8357     By default GCC inlines string operations only when destination is
8358     known to be aligned at least to 4 byte boundary.  This enables
8359     more inlining, increase code size, but may improve performance of
8360     code that depends on fast memcpy, strlen and memset for short
8361     lengths.
8362
8363`-momit-leaf-frame-pointer'
8364     Don't keep the frame pointer in a register for leaf functions.
8365     This avoids the instructions to save, set up and restore frame
8366     pointers and makes an extra register available in leaf functions.
8367     The option `-fomit-frame-pointer' removes the frame pointer for
8368     all functions which might make debugging harder.
8369
8370`-mtls-direct-seg-refs'
8371`-mno-tls-direct-seg-refs'
8372     Controls whether TLS variables may be accessed with offsets from
8373     the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
8374     whether the thread base pointer must be added.  Whether or not this
8375     is legal depends on the operating system, and whether it maps the
8376     segment to cover the entire TLS area.
8377
8378     For systems that use GNU libc, the default is on.
8379
8380 These `-m' switches are supported in addition to the above on AMD
8381x86-64 processors in 64-bit environments.
8382
8383`-m32'
8384`-m64'
8385     Generate code for a 32-bit or 64-bit environment.  The 32-bit
8386     environment sets int, long and pointer to 32 bits and generates
8387     code that runs on any i386 system.  The 64-bit environment sets
8388     int to 32 bits and long and pointer to 64 bits and generates code
8389     for AMD's x86-64 architecture.
8390
8391`-mno-red-zone'
8392     Do not use a so called red zone for x86-64 code.  The red zone is
8393     mandated by the x86-64 ABI, it is a 128-byte area beyond the
8394     location of the stack pointer that will not be modified by signal
8395     or interrupt handlers and therefore can be used for temporary data
8396     without adjusting the stack pointer.  The flag `-mno-red-zone'
8397     disables this red zone.
8398
8399`-mcmodel=small'
8400     Generate code for the small code model: the program and its
8401     symbols must be linked in the lower 2 GB of the address space.
8402     Pointers are 64 bits.  Programs can be statically or dynamically
8403     linked.  This is the default code model.
8404
8405`-mcmodel=kernel'
8406     Generate code for the kernel code model.  The kernel runs in the
8407     negative 2 GB of the address space.  This model has to be used for
8408     Linux kernel code.
8409
8410`-mcmodel=medium'
8411     Generate code for the medium model: The program is linked in the
8412     lower 2 GB of the address space but symbols can be located
8413     anywhere in the address space.  Programs can be statically or
8414     dynamically linked, but building of shared libraries are not
8415     supported with the medium model.
8416
8417`-mcmodel=large'
8418     Generate code for the large model: This model makes no assumptions
8419     about addresses and sizes of sections.  Currently GCC does not
8420     implement this model.
8421
8422
8423File: gcc.info,  Node: HPPA Options,  Next: Intel 960 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
8424
84253.17.12 HPPA Options
8426--------------------
8427
8428These `-m' options are defined for the HPPA family of computers:
8429
8430`-march=ARCHITECTURE-TYPE'
8431     Generate code for the specified architecture.  The choices for
8432     ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
8433     `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
8434     an HP-UX system to determine the proper architecture option for
8435     your machine.  Code compiled for lower numbered architectures will
8436     run on higher numbered architectures, but not the other way around.
8437
8438     PA 2.0 support currently requires gas snapshot 19990413 or later.
8439     The next release of binutils (current is 2.9.1) will probably
8440     contain PA 2.0 support.
8441
8442`-mpa-risc-1-0'
8443`-mpa-risc-1-1'
8444`-mpa-risc-2-0'
8445     Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
8446     respectively.
8447
8448`-mbig-switch'
8449     Generate code suitable for big switch tables.  Use this option
8450     only if the assembler/linker complain about out of range branches
8451     within a switch table.
8452
8453`-mjump-in-delay'
8454     Fill delay slots of function calls with unconditional jump
8455     instructions by modifying the return pointer for the function call
8456     to be the target of the conditional jump.
8457
8458`-mdisable-fpregs'
8459     Prevent floating point registers from being used in any manner.
8460     This is necessary for compiling kernels which perform lazy context
8461     switching of floating point registers.  If you use this option and
8462     attempt to perform floating point operations, the compiler will
8463     abort.
8464
8465`-mdisable-indexing'
8466     Prevent the compiler from using indexing address modes.  This
8467     avoids some rather obscure problems when compiling MIG generated
8468     code under MACH.
8469
8470`-mno-space-regs'
8471     Generate code that assumes the target has no space registers.
8472     This allows GCC to generate faster indirect calls and use unscaled
8473     index address modes.
8474
8475     Such code is suitable for level 0 PA systems and kernels.
8476
8477`-mfast-indirect-calls'
8478     Generate code that assumes calls never cross space boundaries.
8479     This allows GCC to emit code which performs faster indirect calls.
8480
8481     This option will not work in the presence of shared libraries or
8482     nested functions.
8483
8484`-mlong-load-store'
8485     Generate 3-instruction load and store sequences as sometimes
8486     required by the HP-UX 10 linker.  This is equivalent to the `+k'
8487     option to the HP compilers.
8488
8489`-mportable-runtime'
8490     Use the portable calling conventions proposed by HP for ELF
8491     systems.
8492
8493`-mgas'
8494     Enable the use of assembler directives only GAS understands.
8495
8496`-mschedule=CPU-TYPE'
8497     Schedule code according to the constraints for the machine type
8498     CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
8499     `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
8500     HP-UX system to determine the proper scheduling option for your
8501     machine.  The default scheduling is `8000'.
8502
8503`-mlinker-opt'
8504     Enable the optimization pass in the HP-UX linker.  Note this makes
8505     symbolic debugging impossible.  It also triggers a bug in the
8506     HP-UX 8 and HP-UX 9 linkers in which they give bogus error
8507     messages when linking some programs.
8508
8509`-msoft-float'
8510     Generate output containing library calls for floating point.
8511     *Warning:* the requisite libraries are not available for all HPPA
8512     targets.  Normally the facilities of the machine's usual C
8513     compiler are used, but this cannot be done directly in
8514     cross-compilation.  You must make your own arrangements to provide
8515     suitable library functions for cross-compilation.  The embedded
8516     target `hppa1.1-*-pro' does provide software floating point
8517     support.
8518
8519     `-msoft-float' changes the calling convention in the output file;
8520     therefore, it is only useful if you compile _all_ of a program with
8521     this option.  In particular, you need to compile `libgcc.a', the
8522     library that comes with GCC, with `-msoft-float' in order for this
8523     to work.
8524
8525`-msio'
8526     Generate the predefine, `_SIO', for server IO.  The default is
8527     `-mwsio'.  This generates the predefines, `__hp9000s700',
8528     `__hp9000s700__' and `_WSIO', for workstation IO.  These options
8529     are available under HP-UX and HI-UX.
8530
8531`-mgnu-ld'
8532     Use GNU ld specific options.  This passes `-shared' to ld when
8533     building a shared library.  It is the default when GCC is
8534     configured, explicitly or implicitly, with the GNU linker.  This
8535     option does not have any affect on which ld is called, it only
8536     changes what parameters are passed to that ld.  The ld that is
8537     called is determined by the `--with-ld' configure option, GCC's
8538     program search path, and finally by the user's `PATH'.  The linker
8539     used by GCC can be printed using `which `gcc -print-prog-name=ld`'.
8540
8541`-mhp-ld'
8542     Use HP ld specific options.  This passes `-b' to ld when building
8543     a shared library and passes `+Accept TypeMismatch' to ld on all
8544     links.  It is the default when GCC is configured, explicitly or
8545     implicitly, with the HP linker.  This option does not have any
8546     affect on which ld is called, it only changes what parameters are
8547     passed to that ld.  The ld that is called is determined by the
8548     `--with-ld' configure option, GCC's program search path, and
8549     finally by the user's `PATH'.  The linker used by GCC can be
8550     printed using `which `gcc -print-prog-name=ld`'.
8551
8552`-mlong-calls'
8553     Generate code that uses long call sequences.  This ensures that a
8554     call is always able to reach linker generated stubs.  The default
8555     is to generate long calls only when the distance from the call
8556     site to the beginning of the function or translation unit, as the
8557     case may be, exceeds a predefined limit set by the branch type
8558     being used.  The limits for normal calls are 7,600,000 and 240,000
8559     bytes, respectively for the PA 2.0 and PA 1.X architectures.
8560     Sibcalls are always limited at 240,000 bytes.
8561
8562     Distances are measured from the beginning of functions when using
8563     the `-ffunction-sections' option, or when using the `-mgas' and
8564     `-mno-portable-runtime' options together under HP-UX with the SOM
8565     linker.
8566
8567     It is normally not desirable to use this option as it will degrade
8568     performance.  However, it may be useful in large applications,
8569     particularly when partial linking is used to build the application.
8570
8571     The types of long calls used depends on the capabilities of the
8572     assembler and linker, and the type of code being generated.  The
8573     impact on systems that support long absolute calls, and long pic
8574     symbol-difference or pc-relative calls should be relatively small.
8575     However, an indirect call is used on 32-bit ELF systems in pic code
8576     and it is quite long.
8577
8578`-nolibdld'
8579     Suppress the generation of link options to search libdld.sl when
8580     the `-static' option is specified on HP-UX 10 and later.
8581
8582`-static'
8583     The HP-UX implementation of setlocale in libc has a dependency on
8584     libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
8585     when the `-static' option is specified, special link options are
8586     needed to resolve this dependency.
8587
8588     On HP-UX 10 and later, the GCC driver adds the necessary options to
8589     link with libdld.sl when the `-static' option is specified.  This
8590     causes the resulting binary to be dynamic.  On the 64-bit port,
8591     the linkers generate dynamic binaries by default in any case.  The
8592     `-nolibdld' option can be used to prevent the GCC driver from
8593     adding these link options.
8594
8595`-threads'
8596     Add support for multithreading with the "dce thread" library under
8597     HP-UX.  This option sets flags for both the preprocessor and
8598     linker.
8599
8600
8601File: gcc.info,  Node: Intel 960 Options,  Next: DEC Alpha Options,  Prev: HPPA Options,  Up: Submodel Options
8602
86033.17.13 Intel 960 Options
8604-------------------------
8605
8606These `-m' options are defined for the Intel 960 implementations:
8607
8608`-mCPU-TYPE'
8609     Assume the defaults for the machine type CPU-TYPE for some of the
8610     other options, including instruction scheduling, floating point
8611     support, and addressing modes.  The choices for CPU-TYPE are `ka',
8612     `kb', `mc', `ca', `cf', `sa', and `sb'.  The default is `kb'.
8613
8614`-mnumerics'
8615`-msoft-float'
8616     The `-mnumerics' option indicates that the processor does support
8617     floating-point instructions.  The `-msoft-float' option indicates
8618     that floating-point support should not be assumed.
8619
8620`-mleaf-procedures'
8621`-mno-leaf-procedures'
8622     Do (or do not) attempt to alter leaf procedures to be callable
8623     with the `bal' instruction as well as `call'.  This will result in
8624     more efficient code for explicit calls when the `bal' instruction
8625     can be substituted by the assembler or linker, but less efficient
8626     code in other cases, such as calls via function pointers, or using
8627     a linker that doesn't support this optimization.
8628
8629`-mtail-call'
8630`-mno-tail-call'
8631     Do (or do not) make additional attempts (beyond those of the
8632     machine-independent portions of the compiler) to optimize
8633     tail-recursive calls into branches.  You may not want to do this
8634     because the detection of cases where this is not valid is not
8635     totally complete.  The default is `-mno-tail-call'.
8636
8637`-mcomplex-addr'
8638`-mno-complex-addr'
8639     Assume (or do not assume) that the use of a complex addressing
8640     mode is a win on this implementation of the i960.  Complex
8641     addressing modes may not be worthwhile on the K-series, but they
8642     definitely are on the C-series.  The default is currently
8643     `-mcomplex-addr' for all processors except the CB and CC.
8644
8645`-mcode-align'
8646`-mno-code-align'
8647     Align code to 8-byte boundaries for faster fetching (or don't
8648     bother).  Currently turned on by default for C-series
8649     implementations only.
8650
8651`-mic-compat'
8652`-mic2.0-compat'
8653`-mic3.0-compat'
8654     Enable compatibility with iC960 v2.0 or v3.0.
8655
8656`-masm-compat'
8657`-mintel-asm'
8658     Enable compatibility with the iC960 assembler.
8659
8660`-mstrict-align'
8661`-mno-strict-align'
8662     Do not permit (do permit) unaligned accesses.
8663
8664`-mold-align'
8665     Enable structure-alignment compatibility with Intel's gcc release
8666     version 1.3 (based on gcc 1.37).  This option implies
8667     `-mstrict-align'.
8668
8669`-mlong-double-64'
8670     Implement type `long double' as 64-bit floating point numbers.
8671     Without the option `long double' is implemented by 80-bit floating
8672     point numbers.  The only reason we have it because there is no
8673     128-bit `long double' support in `fp-bit.c' yet.  So it is only
8674     useful for people using soft-float targets.  Otherwise, we should
8675     recommend against use of it.
8676
8677
8678
8679File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Intel 960 Options,  Up: Submodel Options
8680
86813.17.14 DEC Alpha Options
8682-------------------------
8683
8684These `-m' options are defined for the DEC Alpha implementations:
8685
8686`-mno-soft-float'
8687`-msoft-float'
8688     Use (do not use) the hardware floating-point instructions for
8689     floating-point operations.  When `-msoft-float' is specified,
8690     functions in `libgcc.a' will be used to perform floating-point
8691     operations.  Unless they are replaced by routines that emulate the
8692     floating-point operations, or compiled in such a way as to call
8693     such emulations routines, these routines will issue floating-point
8694     operations.   If you are compiling for an Alpha without
8695     floating-point operations, you must ensure that the library is
8696     built so as not to call them.
8697
8698     Note that Alpha implementations without floating-point operations
8699     are required to have floating-point registers.
8700
8701`-mfp-reg'
8702`-mno-fp-regs'
8703     Generate code that uses (does not use) the floating-point register
8704     set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
8705     register set is not used, floating point operands are passed in
8706     integer registers as if they were integers and floating-point
8707     results are passed in `$0' instead of `$f0'.  This is a
8708     non-standard calling sequence, so any function with a
8709     floating-point argument or return value called by code compiled
8710     with `-mno-fp-regs' must also be compiled with that option.
8711
8712     A typical use of this option is building a kernel that does not
8713     use, and hence need not save and restore, any floating-point
8714     registers.
8715
8716`-mieee'
8717     The Alpha architecture implements floating-point hardware
8718     optimized for maximum performance.  It is mostly compliant with
8719     the IEEE floating point standard.  However, for full compliance,
8720     software assistance is required.  This option generates code fully
8721     IEEE compliant code _except_ that the INEXACT-FLAG is not
8722     maintained (see below).  If this option is turned on, the
8723     preprocessor macro `_IEEE_FP' is defined during compilation.  The
8724     resulting code is less efficient but is able to correctly support
8725     denormalized numbers and exceptional IEEE values such as
8726     not-a-number and plus/minus infinity.  Other Alpha compilers call
8727     this option `-ieee_with_no_inexact'.
8728
8729`-mieee-with-inexact'
8730     This is like `-mieee' except the generated code also maintains the
8731     IEEE INEXACT-FLAG.  Turning on this option causes the generated
8732     code to implement fully-compliant IEEE math.  In addition to
8733     `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
8734     On some Alpha implementations the resulting code may execute
8735     significantly slower than the code generated by default.  Since
8736     there is very little code that depends on the INEXACT-FLAG, you
8737     should normally not specify this option.  Other Alpha compilers
8738     call this option `-ieee_with_inexact'.
8739
8740`-mfp-trap-mode=TRAP-MODE'
8741     This option controls what floating-point related traps are enabled.
8742     Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
8743     trap mode can be set to one of four values:
8744
8745    `n'
8746          This is the default (normal) setting.  The only traps that
8747          are enabled are the ones that cannot be disabled in software
8748          (e.g., division by zero trap).
8749
8750    `u'
8751          In addition to the traps enabled by `n', underflow traps are
8752          enabled as well.
8753
8754    `su'
8755          Like `su', but the instructions are marked to be safe for
8756          software completion (see Alpha architecture manual for
8757          details).
8758
8759    `sui'
8760          Like `su', but inexact traps are enabled as well.
8761
8762`-mfp-rounding-mode=ROUNDING-MODE'
8763     Selects the IEEE rounding mode.  Other Alpha compilers call this
8764     option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
8765
8766    `n'
8767          Normal IEEE rounding mode.  Floating point numbers are
8768          rounded towards the nearest machine number or towards the
8769          even machine number in case of a tie.
8770
8771    `m'
8772          Round towards minus infinity.
8773
8774    `c'
8775          Chopped rounding mode.  Floating point numbers are rounded
8776          towards zero.
8777
8778    `d'
8779          Dynamic rounding mode.  A field in the floating point control
8780          register (FPCR, see Alpha architecture reference manual)
8781          controls the rounding mode in effect.  The C library
8782          initializes this register for rounding towards plus infinity.
8783          Thus, unless your program modifies the FPCR, `d' corresponds
8784          to round towards plus infinity.
8785
8786`-mtrap-precision=TRAP-PRECISION'
8787     In the Alpha architecture, floating point traps are imprecise.
8788     This means without software assistance it is impossible to recover
8789     from a floating trap and program execution normally needs to be
8790     terminated.  GCC can generate code that can assist operating
8791     system trap handlers in determining the exact location that caused
8792     a floating point trap.  Depending on the requirements of an
8793     application, different levels of precisions can be selected:
8794
8795    `p'
8796          Program precision.  This option is the default and means a
8797          trap handler can only identify which program caused a
8798          floating point exception.
8799
8800    `f'
8801          Function precision.  The trap handler can determine the
8802          function that caused a floating point exception.
8803
8804    `i'
8805          Instruction precision.  The trap handler can determine the
8806          exact instruction that caused a floating point exception.
8807
8808     Other Alpha compilers provide the equivalent options called
8809     `-scope_safe' and `-resumption_safe'.
8810
8811`-mieee-conformant'
8812     This option marks the generated code as IEEE conformant.  You must
8813     not use this option unless you also specify `-mtrap-precision=i'
8814     and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
8815     effect is to emit the line `.eflag 48' in the function prologue of
8816     the generated assembly file.  Under DEC Unix, this has the effect
8817     that IEEE-conformant math library routines will be linked in.
8818
8819`-mbuild-constants'
8820     Normally GCC examines a 32- or 64-bit integer constant to see if
8821     it can construct it from smaller constants in two or three
8822     instructions.  If it cannot, it will output the constant as a
8823     literal and generate code to load it from the data segment at
8824     runtime.
8825
8826     Use this option to require GCC to construct _all_ integer constants
8827     using code, even if it takes more instructions (the maximum is
8828     six).
8829
8830     You would typically use this option to build a shared library
8831     dynamic loader.  Itself a shared library, it must relocate itself
8832     in memory before it can find the variables and constants in its
8833     own data segment.
8834
8835`-malpha-as'
8836`-mgas'
8837     Select whether to generate code to be assembled by the
8838     vendor-supplied assembler (`-malpha-as') or by the GNU assembler
8839     `-mgas'.
8840
8841`-mbwx'
8842`-mno-bwx'
8843`-mcix'
8844`-mno-cix'
8845`-mfix'
8846`-mno-fix'
8847`-mmax'
8848`-mno-max'
8849     Indicate whether GCC should generate code to use the optional BWX,
8850     CIX, FIX and MAX instruction sets.  The default is to use the
8851     instruction sets supported by the CPU type specified via `-mcpu='
8852     option or that of the CPU on which GCC was built if none was
8853     specified.
8854
8855`-mfloat-vax'
8856`-mfloat-ieee'
8857     Generate code that uses (does not use) VAX F and G floating point
8858     arithmetic instead of IEEE single and double precision.
8859
8860`-mexplicit-relocs'
8861`-mno-explicit-relocs'
8862     Older Alpha assemblers provided no way to generate symbol
8863     relocations except via assembler macros.  Use of these macros does
8864     not allow optimal instruction scheduling.  GNU binutils as of
8865     version 2.12 supports a new syntax that allows the compiler to
8866     explicitly mark which relocations should apply to which
8867     instructions.  This option is mostly useful for debugging, as GCC
8868     detects the capabilities of the assembler when it is built and
8869     sets the default accordingly.
8870
8871`-msmall-data'
8872`-mlarge-data'
8873     When `-mexplicit-relocs' is in effect, static data is accessed via
8874     "gp-relative" relocations.  When `-msmall-data' is used, objects 8
8875     bytes long or smaller are placed in a "small data area" (the
8876     `.sdata' and `.sbss' sections) and are accessed via 16-bit
8877     relocations off of the `$gp' register.  This limits the size of
8878     the small data area to 64KB, but allows the variables to be
8879     directly accessed via a single instruction.
8880
8881     The default is `-mlarge-data'.  With this option the data area is
8882     limited to just below 2GB.  Programs that require more than 2GB of
8883     data must use `malloc' or `mmap' to allocate the data in the heap
8884     instead of in the program's data segment.
8885
8886     When generating code for shared libraries, `-fpic' implies
8887     `-msmall-data' and `-fPIC' implies `-mlarge-data'.
8888
8889`-msmall-text'
8890`-mlarge-text'
8891     When `-msmall-text' is used, the compiler assumes that the code of
8892     the entire program (or shared library) fits in 4MB, and is thus
8893     reachable with a branch instruction.  When `-msmall-data' is used,
8894     the compiler can assume that all local symbols share the same
8895     `$gp' value, and thus reduce the number of instructions required
8896     for a function call from 4 to 1.
8897
8898     The default is `-mlarge-text'.
8899
8900`-mcpu=CPU_TYPE'
8901     Set the instruction set and instruction scheduling parameters for
8902     machine type CPU_TYPE.  You can specify either the `EV' style name
8903     or the corresponding chip number.  GCC supports scheduling
8904     parameters for the EV4, EV5 and EV6 family of processors and will
8905     choose the default values for the instruction set from the
8906     processor you specify.  If you do not specify a processor type,
8907     GCC will default to the processor on which the compiler was built.
8908
8909     Supported values for CPU_TYPE are
8910
8911    `ev4'
8912    `ev45'
8913    `21064'
8914          Schedules as an EV4 and has no instruction set extensions.
8915
8916    `ev5'
8917    `21164'
8918          Schedules as an EV5 and has no instruction set extensions.
8919
8920    `ev56'
8921    `21164a'
8922          Schedules as an EV5 and supports the BWX extension.
8923
8924    `pca56'
8925    `21164pc'
8926    `21164PC'
8927          Schedules as an EV5 and supports the BWX and MAX extensions.
8928
8929    `ev6'
8930    `21264'
8931          Schedules as an EV6 and supports the BWX, FIX, and MAX
8932          extensions.
8933
8934    `ev67'
8935    `21264a'
8936          Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8937          extensions.
8938
8939`-mtune=CPU_TYPE'
8940     Set only the instruction scheduling parameters for machine type
8941     CPU_TYPE.  The instruction set is not changed.
8942
8943`-mmemory-latency=TIME'
8944     Sets the latency the scheduler should assume for typical memory
8945     references as seen by the application.  This number is highly
8946     dependent on the memory access patterns used by the application
8947     and the size of the external cache on the machine.
8948
8949     Valid options for TIME are
8950
8951    `NUMBER'
8952          A decimal number representing clock cycles.
8953
8954    `L1'
8955    `L2'
8956    `L3'
8957    `main'
8958          The compiler contains estimates of the number of clock cycles
8959          for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8960          (also called Dcache, Scache, and Bcache), as well as to main
8961          memory.  Note that L3 is only valid for EV5.
8962
8963
8964
8965File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: H8/300 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
8966
89673.17.15 DEC Alpha/VMS Options
8968-----------------------------
8969
8970These `-m' options are defined for the DEC Alpha/VMS implementations:
8971
8972`-mvms-return-codes'
8973     Return VMS condition codes from main.  The default is to return
8974     POSIX style condition (e.g. error) codes.
8975
8976
8977File: gcc.info,  Node: H8/300 Options,  Next: SH Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
8978
89793.17.16 H8/300 Options
8980----------------------
8981
8982These `-m' options are defined for the H8/300 implementations:
8983
8984`-mrelax'
8985     Shorten some address references at link time, when possible; uses
8986     the linker option `-relax'.  *Note `ld' and the H8/300:
8987     (ld)H8/300, for a fuller description.
8988
8989`-mh'
8990     Generate code for the H8/300H.
8991
8992`-ms'
8993     Generate code for the H8S.
8994
8995`-mn'
8996     Generate code for the H8S and H8/300H in the normal mode.  This
8997     switch must be used either with -mh or -ms.
8998
8999`-ms2600'
9000     Generate code for the H8S/2600.  This switch must be used with
9001     `-ms'.
9002
9003`-mint32'
9004     Make `int' data 32 bits by default.
9005
9006`-malign-300'
9007     On the H8/300H and H8S, use the same alignment rules as for the
9008     H8/300.  The default for the H8/300H and H8S is to align longs and
9009     floats on 4 byte boundaries.  `-malign-300' causes them to be
9010     aligned on 2 byte boundaries.  This option has no effect on the
9011     H8/300.
9012
9013
9014File: gcc.info,  Node: SH Options,  Next: System V Options,  Prev: H8/300 Options,  Up: Submodel Options
9015
90163.17.17 SH Options
9017------------------
9018
9019These `-m' options are defined for the SH implementations:
9020
9021`-m1'
9022     Generate code for the SH1.
9023
9024`-m2'
9025     Generate code for the SH2.
9026
9027`-m2e'
9028     Generate code for the SH2e.
9029
9030`-m3'
9031     Generate code for the SH3.
9032
9033`-m3e'
9034     Generate code for the SH3e.
9035
9036`-m4-nofpu'
9037     Generate code for the SH4 without a floating-point unit.
9038
9039`-m4-single-only'
9040     Generate code for the SH4 with a floating-point unit that only
9041     supports single-precision arithmetic.
9042
9043`-m4-single'
9044     Generate code for the SH4 assuming the floating-point unit is in
9045     single-precision mode by default.
9046
9047`-m4'
9048     Generate code for the SH4.
9049
9050`-mb'
9051     Compile code for the processor in big endian mode.
9052
9053`-ml'
9054     Compile code for the processor in little endian mode.
9055
9056`-mdalign'
9057     Align doubles at 64-bit boundaries.  Note that this changes the
9058     calling conventions, and thus some functions from the standard C
9059     library will not work unless you recompile it first with
9060     `-mdalign'.
9061
9062`-mrelax'
9063     Shorten some address references at link time, when possible; uses
9064     the linker option `-relax'.
9065
9066`-mbigtable'
9067     Use 32-bit offsets in `switch' tables.  The default is to use
9068     16-bit offsets.
9069
9070`-mfmovd'
9071     Enable the use of the instruction `fmovd'.
9072
9073`-mhitachi'
9074     Comply with the calling conventions defined by Renesas.
9075
9076`-mnomacsave'
9077     Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
9078     given.
9079
9080`-mieee'
9081     Increase IEEE-compliance of floating-point code.
9082
9083`-misize'
9084     Dump instruction size and location in the assembly code.
9085
9086`-mpadstruct'
9087     This option is deprecated.  It pads structures to multiple of 4
9088     bytes, which is incompatible with the SH ABI.
9089
9090`-mspace'
9091     Optimize for space instead of speed.  Implied by `-Os'.
9092
9093`-mprefergot'
9094     When generating position-independent code, emit function calls
9095     using the Global Offset Table instead of the Procedure Linkage
9096     Table.
9097
9098`-musermode'
9099     Generate a library function call to invalidate instruction cache
9100     entries, after fixing up a trampoline.  This library function call
9101     doesn't assume it can write to the whole memory address space.
9102     This is the default when the target is `sh-*-linux*'.
9103
9104
9105File: gcc.info,  Node: System V Options,  Next: TMS320C3x/C4x Options,  Prev: SH Options,  Up: Submodel Options
9106
91073.17.18 Options for System V
9108----------------------------
9109
9110These additional options are available on System V Release 4 for
9111compatibility with other compilers on those systems:
9112
9113`-G'
9114     Create a shared object.  It is recommended that `-symbolic' or
9115     `-shared' be used instead.
9116
9117`-Qy'
9118     Identify the versions of each tool used by the compiler, in a
9119     `.ident' assembler directive in the output.
9120
9121`-Qn'
9122     Refrain from adding `.ident' directives to the output file (this is
9123     the default).
9124
9125`-YP,DIRS'
9126     Search the directories DIRS, and no others, for libraries
9127     specified with `-l'.
9128
9129`-Ym,DIR'
9130     Look in the directory DIR to find the M4 preprocessor.  The
9131     assembler uses this option.
9132
9133
9134File: gcc.info,  Node: TMS320C3x/C4x Options,  Next: V850 Options,  Prev: System V Options,  Up: Submodel Options
9135
91363.17.19 TMS320C3x/C4x Options
9137-----------------------------
9138
9139These `-m' options are defined for TMS320C3x/C4x implementations:
9140
9141`-mcpu=CPU_TYPE'
9142     Set the instruction set, register set, and instruction scheduling
9143     parameters for machine type CPU_TYPE.  Supported values for
9144     CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'.  The default
9145     is `c40' to generate code for the TMS320C40.
9146
9147`-mbig-memory'
9148`-mbig'
9149`-msmall-memory'
9150`-msmall'
9151     Generates code for the big or small memory model.  The small memory
9152     model assumed that all data fits into one 64K word page.  At
9153     run-time the data page (DP) register must be set to point to the
9154     64K page containing the .bss and .data program sections.  The big
9155     memory model is the default and requires reloading of the DP
9156     register for every direct memory access.
9157
9158`-mbk'
9159`-mno-bk'
9160     Allow (disallow) allocation of general integer operands into the
9161     block count register BK.
9162
9163`-mdb'
9164`-mno-db'
9165     Enable (disable) generation of code using decrement and branch,
9166     DBcond(D), instructions.  This is enabled by default for the C4x.
9167     To be on the safe side, this is disabled for the C3x, since the
9168     maximum iteration count on the C3x is 2^23 + 1 (but who iterates
9169     loops more than 2^23 times on the C3x?).  Note that GCC will try
9170     to reverse a loop so that it can utilize the decrement and branch
9171     instruction, but will give up if there is more than one memory
9172     reference in the loop.  Thus a loop where the loop counter is
9173     decremented can generate slightly more efficient code, in cases
9174     where the RPTB instruction cannot be utilized.
9175
9176`-mdp-isr-reload'
9177`-mparanoid'
9178     Force the DP register to be saved on entry to an interrupt service
9179     routine (ISR), reloaded to point to the data section, and restored
9180     on exit from the ISR.  This should not be required unless someone
9181     has violated the small memory model by modifying the DP register,
9182     say within an object library.
9183
9184`-mmpyi'
9185`-mno-mpyi'
9186     For the C3x use the 24-bit MPYI instruction for integer multiplies
9187     instead of a library call to guarantee 32-bit results.  Note that
9188     if one of the operands is a constant, then the multiplication will
9189     be performed using shifts and adds.  If the `-mmpyi' option is not
9190     specified for the C3x, then squaring operations are performed
9191     inline instead of a library call.
9192
9193`-mfast-fix'
9194`-mno-fast-fix'
9195     The C3x/C4x FIX instruction to convert a floating point value to an
9196     integer value chooses the nearest integer less than or equal to the
9197     floating point value rather than to the nearest integer.  Thus if
9198     the floating point number is negative, the result will be
9199     incorrectly truncated an additional code is necessary to detect
9200     and correct this case.  This option can be used to disable
9201     generation of the additional code required to correct the result.
9202
9203`-mrptb'
9204`-mno-rptb'
9205     Enable (disable) generation of repeat block sequences using the
9206     RPTB instruction for zero overhead looping.  The RPTB construct is
9207     only used for innermost loops that do not call functions or jump
9208     across the loop boundaries.  There is no advantage having nested
9209     RPTB loops due to the overhead required to save and restore the
9210     RC, RS, and RE registers.  This is enabled by default with `-O2'.
9211
9212`-mrpts=COUNT'
9213`-mno-rpts'
9214     Enable (disable) the use of the single instruction repeat
9215     instruction RPTS.  If a repeat block contains a single
9216     instruction, and the loop count can be guaranteed to be less than
9217     the value COUNT, GCC will emit a RPTS instruction instead of a
9218     RPTB.  If no value is specified, then a RPTS will be emitted even
9219     if the loop count cannot be determined at compile time.  Note that
9220     the repeated instruction following RPTS does not have to be
9221     reloaded from memory each iteration, thus freeing up the CPU buses
9222     for operands.  However, since interrupts are blocked by this
9223     instruction, it is disabled by default.
9224
9225`-mloop-unsigned'
9226`-mno-loop-unsigned'
9227     The maximum iteration count when using RPTS and RPTB (and DB on
9228     the C40) is 2^31 + 1 since these instructions test if the
9229     iteration count is negative to terminate the loop.  If the
9230     iteration count is unsigned there is a possibility than the 2^31 +
9231     1 maximum iteration count may be exceeded.  This switch allows an
9232     unsigned iteration count.
9233
9234`-mti'
9235     Try to emit an assembler syntax that the TI assembler (asm30) is
9236     happy with.  This also enforces compatibility with the API
9237     employed by the TI C3x C compiler.  For example, long doubles are
9238     passed as structures rather than in floating point registers.
9239
9240`-mregparm'
9241`-mmemparm'
9242     Generate code that uses registers (stack) for passing arguments to
9243     functions.  By default, arguments are passed in registers where
9244     possible rather than by pushing arguments on to the stack.
9245
9246`-mparallel-insns'
9247`-mno-parallel-insns'
9248     Allow the generation of parallel instructions.  This is enabled by
9249     default with `-O2'.
9250
9251`-mparallel-mpy'
9252`-mno-parallel-mpy'
9253     Allow the generation of MPY||ADD and MPY||SUB parallel
9254     instructions, provided `-mparallel-insns' is also specified.
9255     These instructions have tight register constraints which can
9256     pessimize the code generation of large functions.
9257
9258
9259
9260File: gcc.info,  Node: V850 Options,  Next: ARC Options,  Prev: TMS320C3x/C4x Options,  Up: Submodel Options
9261
92623.17.20 V850 Options
9263--------------------
9264
9265These `-m' options are defined for V850 implementations:
9266
9267`-mlong-calls'
9268`-mno-long-calls'
9269     Treat all calls as being far away (near).  If calls are assumed to
9270     be far away, the compiler will always load the functions address
9271     up into a register, and call indirect through the pointer.
9272
9273`-mno-ep'
9274`-mep'
9275     Do not optimize (do optimize) basic blocks that use the same index
9276     pointer 4 or more times to copy pointer into the `ep' register, and
9277     use the shorter `sld' and `sst' instructions.  The `-mep' option
9278     is on by default if you optimize.
9279
9280`-mno-prolog-function'
9281`-mprolog-function'
9282     Do not use (do use) external functions to save and restore
9283     registers at the prologue and epilogue of a function.  The
9284     external functions are slower, but use less code space if more
9285     than one function saves the same number of registers.  The
9286     `-mprolog-function' option is on by default if you optimize.
9287
9288`-mspace'
9289     Try to make the code as small as possible.  At present, this just
9290     turns on the `-mep' and `-mprolog-function' options.
9291
9292`-mtda=N'
9293     Put static or global variables whose size is N bytes or less into
9294     the tiny data area that register `ep' points to.  The tiny data
9295     area can hold up to 256 bytes in total (128 bytes for byte
9296     references).
9297
9298`-msda=N'
9299     Put static or global variables whose size is N bytes or less into
9300     the small data area that register `gp' points to.  The small data
9301     area can hold up to 64 kilobytes.
9302
9303`-mzda=N'
9304     Put static or global variables whose size is N bytes or less into
9305     the first 32 kilobytes of memory.
9306
9307`-mv850'
9308     Specify that the target processor is the V850.
9309
9310`-mbig-switch'
9311     Generate code suitable for big switch tables.  Use this option
9312     only if the assembler/linker complain about out of range branches
9313     within a switch table.
9314
9315`-mapp-regs'
9316     This option will cause r2 and r5 to be used in the code generated
9317     by the compiler.  This setting is the default.
9318
9319`-mno-app-regs'
9320     This option will cause r2 and r5 to be treated as fixed registers.
9321
9322`-mv850e1'
9323     Specify that the target processor is the V850E1.  The preprocessor
9324     constants `__v850e1__' and `__v850e__' will be defined if this
9325     option is used.
9326
9327`-mv850e'
9328     Specify that the target processor is the V850E.  The preprocessor
9329     constant `__v850e__' will be defined if this option is used.
9330
9331     If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
9332     a default target processor will be chosen and the relevant
9333     `__v850*__' preprocessor constant will be defined.
9334
9335     The preprocessor constants `__v850' and `__v851__' are always
9336     defined, regardless of which processor variant is the target.
9337
9338`-mdisable-callt'
9339     This option will suppress generation of the CALLT instruction for
9340     the v850e and v850e1 flavors of the v850 architecture.  The
9341     default is `-mno-disable-callt' which allows the CALLT instruction
9342     to be used.
9343
9344
9345
9346File: gcc.info,  Node: ARC Options,  Next: NS32K Options,  Prev: V850 Options,  Up: Submodel Options
9347
93483.17.21 ARC Options
9349-------------------
9350
9351These options are defined for ARC implementations:
9352
9353`-EL'
9354     Compile code for little endian mode.  This is the default.
9355
9356`-EB'
9357     Compile code for big endian mode.
9358
9359`-mmangle-cpu'
9360     Prepend the name of the cpu to all public symbol names.  In
9361     multiple-processor systems, there are many ARC variants with
9362     different instruction and register set characteristics.  This flag
9363     prevents code compiled for one cpu to be linked with code compiled
9364     for another.  No facility exists for handling variants that are
9365     "almost identical".  This is an all or nothing option.
9366
9367`-mcpu=CPU'
9368     Compile code for ARC variant CPU.  Which variants are supported
9369     depend on the configuration.  All variants support `-mcpu=base',
9370     this is the default.
9371
9372`-mtext=TEXT-SECTION'
9373`-mdata=DATA-SECTION'
9374`-mrodata=READONLY-DATA-SECTION'
9375     Put functions, data, and readonly data in TEXT-SECTION,
9376     DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
9377     This can be overridden with the `section' attribute.  *Note
9378     Variable Attributes::.
9379
9380
9381
9382File: gcc.info,  Node: NS32K Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
9383
93843.17.22 NS32K Options
9385---------------------
9386
9387These are the `-m' options defined for the 32000 series.  The default
9388values for these options depends on which style of 32000 was selected
9389when the compiler was configured; the defaults for the most common
9390choices are given below.
9391
9392`-m32032'
9393`-m32032'
9394     Generate output for a 32032.  This is the default when the
9395     compiler is configured for 32032 and 32016 based systems.
9396
9397`-m32332'
9398`-m32332'
9399     Generate output for a 32332.  This is the default when the
9400     compiler is configured for 32332-based systems.
9401
9402`-m32532'
9403`-m32532'
9404     Generate output for a 32532.  This is the default when the
9405     compiler is configured for 32532-based systems.
9406
9407`-m32081'
9408     Generate output containing 32081 instructions for floating point.
9409     This is the default for all systems.
9410
9411`-m32381'
9412     Generate output containing 32381 instructions for floating point.
9413     This also implies `-m32081'.  The 32381 is only compatible with
9414     the 32332 and 32532 cpus.  This is the default for the
9415     pc532-netbsd configuration.
9416
9417`-mmulti-add'
9418     Try and generate multiply-add floating point instructions `polyF'
9419     and `dotF'.  This option is only available if the `-m32381' option
9420     is in effect.  Using these instructions requires changes to
9421     register allocation which generally has a negative impact on
9422     performance.  This option should only be enabled when compiling
9423     code particularly likely to make heavy use of multiply-add
9424     instructions.
9425
9426`-mnomulti-add'
9427     Do not try and generate multiply-add floating point instructions
9428     `polyF' and `dotF'.  This is the default on all platforms.
9429
9430`-msoft-float'
9431     Generate output containing library calls for floating point.
9432     *Warning:* the requisite libraries may not be available.
9433
9434`-mieee-compare'
9435`-mno-ieee-compare'
9436     Control whether or not the compiler uses IEEE floating point
9437     comparisons.  These handle correctly the case where the result of a
9438     comparison is unordered.  *Warning:* the requisite kernel support
9439     may not be available.
9440
9441`-mnobitfield'
9442     Do not use the bit-field instructions.  On some machines it is
9443     faster to use shifting and masking operations.  This is the
9444     default for the pc532.
9445
9446`-mbitfield'
9447     Do use the bit-field instructions.  This is the default for all
9448     platforms except the pc532.
9449
9450`-mrtd'
9451     Use a different function-calling convention, in which functions
9452     that take a fixed number of arguments return pop their arguments
9453     on return with the `ret' instruction.
9454
9455     This calling convention is incompatible with the one normally used
9456     on Unix, so you cannot use it if you need to call libraries
9457     compiled with the Unix compiler.
9458
9459     Also, you must provide function prototypes for all functions that
9460     take variable numbers of arguments (including `printf'); otherwise
9461     incorrect code will be generated for calls to those functions.
9462
9463     In addition, seriously incorrect code will result if you call a
9464     function with too many arguments.  (Normally, extra arguments are
9465     harmlessly ignored.)
9466
9467     This option takes its name from the 680x0 `rtd' instruction.
9468
9469`-mregparam'
9470     Use a different function-calling convention where the first two
9471     arguments are passed in registers.
9472
9473     This calling convention is incompatible with the one normally used
9474     on Unix, so you cannot use it if you need to call libraries
9475     compiled with the Unix compiler.
9476
9477`-mnoregparam'
9478     Do not pass any arguments in registers.  This is the default for
9479     all targets.
9480
9481`-msb'
9482     It is OK to use the sb as an index register which is always loaded
9483     with zero.  This is the default for the pc532-netbsd target.
9484
9485`-mnosb'
9486     The sb register is not available for use or has not been
9487     initialized to zero by the run time system.  This is the default
9488     for all targets except the pc532-netbsd.  It is also implied
9489     whenever `-mhimem' or `-fpic' is set.
9490
9491`-mhimem'
9492     Many ns32000 series addressing modes use displacements of up to
9493     512MB.  If an address is above 512MB then displacements from zero
9494     can not be used.  This option causes code to be generated which
9495     can be loaded above 512MB.  This may be useful for operating
9496     systems or ROM code.
9497
9498`-mnohimem'
9499     Assume code will be loaded in the first 512MB of virtual address
9500     space.  This is the default for all platforms.
9501
9502
9503
9504File: gcc.info,  Node: AVR Options,  Next: MCore Options,  Prev: NS32K Options,  Up: Submodel Options
9505
95063.17.23 AVR Options
9507-------------------
9508
9509These options are defined for AVR implementations:
9510
9511`-mmcu=MCU'
9512     Specify ATMEL AVR instruction set or MCU type.
9513
9514     Instruction set avr1 is for the minimal AVR core, not supported by
9515     the C compiler, only for assembler programs (MCU types: at90s1200,
9516     attiny10, attiny11, attiny12, attiny15, attiny28).
9517
9518     Instruction set avr2 (default) is for the classic AVR core with up
9519     to 8K program memory space (MCU types: at90s2313, at90s2323,
9520     attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
9521     at90s8515, at90c8534, at90s8535).
9522
9523     Instruction set avr3 is for the classic AVR core with up to 128K
9524     program memory space (MCU types: atmega103, atmega603, at43usb320,
9525     at76c711).
9526
9527     Instruction set avr4 is for the enhanced AVR core with up to 8K
9528     program memory space (MCU types: atmega8, atmega83, atmega85).
9529
9530     Instruction set avr5 is for the enhanced AVR core with up to 128K
9531     program memory space (MCU types: atmega16, atmega161, atmega163,
9532     atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
9533
9534`-msize'
9535     Output instruction sizes to the asm file.
9536
9537`-minit-stack=N'
9538     Specify the initial stack address, which may be a symbol or
9539     numeric value, `__stack' is the default.
9540
9541`-mno-interrupts'
9542     Generated code is not compatible with hardware interrupts.  Code
9543     size will be smaller.
9544
9545`-mcall-prologues'
9546     Functions prologues/epilogues expanded as call to appropriate
9547     subroutines.  Code size will be smaller.
9548
9549`-mno-tablejump'
9550     Do not generate tablejump insns which sometimes increase code size.
9551
9552`-mtiny-stack'
9553     Change only the low 8 bits of the stack pointer.
9554
9555
9556File: gcc.info,  Node: MCore Options,  Next: IA-64 Options,  Prev: AVR Options,  Up: Submodel Options
9557
95583.17.24 MCore Options
9559---------------------
9560
9561These are the `-m' options defined for the Motorola M*Core processors.
9562
9563`-mhardlit'
9564`-mno-hardlit'
9565     Inline constants into the code stream if it can be done in two
9566     instructions or less.
9567
9568`-mdiv'
9569`-mno-div'
9570     Use the divide instruction.  (Enabled by default).
9571
9572`-mrelax-immediate'
9573`-mno-relax-immediate'
9574     Allow arbitrary sized immediates in bit operations.
9575
9576`-mwide-bitfields'
9577`-mno-wide-bitfields'
9578     Always treat bit-fields as int-sized.
9579
9580`-m4byte-functions'
9581`-mno-4byte-functions'
9582     Force all functions to be aligned to a four byte boundary.
9583
9584`-mcallgraph-data'
9585`-mno-callgraph-data'
9586     Emit callgraph information.
9587
9588`-mslow-bytes'
9589`-mno-slow-bytes'
9590     Prefer word access when reading byte quantities.
9591
9592`-mlittle-endian'
9593`-mbig-endian'
9594     Generate code for a little endian target.
9595
9596`-m210'
9597`-m340'
9598     Generate code for the 210 processor.
9599
9600
9601File: gcc.info,  Node: IA-64 Options,  Next: D30V Options,  Prev: MCore Options,  Up: Submodel Options
9602
96033.17.25 IA-64 Options
9604---------------------
9605
9606These are the `-m' options defined for the Intel IA-64 architecture.
9607
9608`-mbig-endian'
9609     Generate code for a big endian target.  This is the default for
9610     HP-UX.
9611
9612`-mlittle-endian'
9613     Generate code for a little endian target.  This is the default for
9614     AIX5 and GNU/Linux.
9615
9616`-mgnu-as'
9617`-mno-gnu-as'
9618     Generate (or don't) code for the GNU assembler.  This is the
9619     default.
9620
9621`-mgnu-ld'
9622`-mno-gnu-ld'
9623     Generate (or don't) code for the GNU linker.  This is the default.
9624
9625`-mno-pic'
9626     Generate code that does not use a global pointer register.  The
9627     result is not position independent code, and violates the IA-64
9628     ABI.
9629
9630`-mvolatile-asm-stop'
9631`-mno-volatile-asm-stop'
9632     Generate (or don't) a stop bit immediately before and after
9633     volatile asm statements.
9634
9635`-mb-step'
9636     Generate code that works around Itanium B step errata.
9637
9638`-mregister-names'
9639`-mno-register-names'
9640     Generate (or don't) `in', `loc', and `out' register names for the
9641     stacked registers.  This may make assembler output more readable.
9642
9643`-mno-sdata'
9644`-msdata'
9645     Disable (or enable) optimizations that use the small data section.
9646     This may be useful for working around optimizer bugs.
9647
9648`-mconstant-gp'
9649     Generate code that uses a single constant global pointer value.
9650     This is useful when compiling kernel code.
9651
9652`-mauto-pic'
9653     Generate code that is self-relocatable.  This implies
9654     `-mconstant-gp'.  This is useful when compiling firmware code.
9655
9656`-minline-float-divide-min-latency'
9657     Generate code for inline divides of floating point values using
9658     the minimum latency algorithm.
9659
9660`-minline-float-divide-max-throughput'
9661     Generate code for inline divides of floating point values using
9662     the maximum throughput algorithm.
9663
9664`-minline-int-divide-min-latency'
9665     Generate code for inline divides of integer values using the
9666     minimum latency algorithm.
9667
9668`-minline-int-divide-max-throughput'
9669     Generate code for inline divides of integer values using the
9670     maximum throughput algorithm.
9671
9672`-mno-dwarf2-asm'
9673`-mdwarf2-asm'
9674     Don't (or do) generate assembler code for the DWARF2 line number
9675     debugging info.  This may be useful when not using the GNU
9676     assembler.
9677
9678`-mfixed-range=REGISTER-RANGE'
9679     Generate code treating the given register range as fixed registers.
9680     A fixed register is one that the register allocator can not use.
9681     This is useful when compiling kernel code.  A register range is
9682     specified as two registers separated by a dash.  Multiple register
9683     ranges can be specified separated by a comma.
9684
9685`-mearly-stop-bits'
9686`-mno-early-stop-bits'
9687     Allow stop bits to be placed earlier than immediately preceding the
9688     instruction that triggered the stop bit.  This can improve
9689     instruction scheduling, but does not always do so.
9690
9691
9692File: gcc.info,  Node: D30V Options,  Next: S/390 and zSeries Options,  Prev: IA-64 Options,  Up: Submodel Options
9693
96943.17.26 D30V Options
9695--------------------
9696
9697These `-m' options are defined for D30V implementations:
9698
9699`-mextmem'
9700     Link the `.text', `.data', `.bss', `.strings', `.rodata',
9701     `.rodata1', `.data1' sections into external memory, which starts
9702     at location `0x80000000'.
9703
9704`-mextmemory'
9705     Same as the `-mextmem' switch.
9706
9707`-monchip'
9708     Link the `.text' section into onchip text memory, which starts at
9709     location `0x0'.  Also link `.data', `.bss', `.strings', `.rodata',
9710     `.rodata1', `.data1' sections into onchip data memory, which
9711     starts at location `0x20000000'.
9712
9713`-mno-asm-optimize'
9714`-masm-optimize'
9715     Disable (enable) passing `-O' to the assembler when optimizing.
9716     The assembler uses the `-O' option to automatically parallelize
9717     adjacent short instructions where possible.
9718
9719`-mbranch-cost=N'
9720     Increase the internal costs of branches to N.  Higher costs means
9721     that the compiler will issue more instructions to avoid doing a
9722     branch.  The default is 2.
9723
9724`-mcond-exec=N'
9725     Specify the maximum number of conditionally executed instructions
9726     that replace a branch.  The default is 4.
9727
9728
9729File: gcc.info,  Node: S/390 and zSeries Options,  Next: CRIS Options,  Prev: D30V Options,  Up: Submodel Options
9730
97313.17.27 S/390 and zSeries Options
9732---------------------------------
9733
9734These are the `-m' options defined for the S/390 and zSeries
9735architecture.
9736
9737`-mhard-float'
9738`-msoft-float'
9739     Use (do not use) the hardware floating-point instructions and
9740     registers for floating-point operations.  When `-msoft-float' is
9741     specified, functions in `libgcc.a' will be used to perform
9742     floating-point operations.  When `-mhard-float' is specified, the
9743     compiler generates IEEE floating-point instructions.  This is the
9744     default.
9745
9746`-mbackchain'
9747`-mno-backchain'
9748     Generate (or do not generate) code which maintains an explicit
9749     backchain within the stack frame that points to the caller's frame.
9750     This may be needed to allow debugging using tools that do not
9751     understand DWARF-2 call frame information.  The default is not to
9752     generate the backchain.
9753
9754`-msmall-exec'
9755`-mno-small-exec'
9756     Generate (or do not generate) code using the `bras' instruction to
9757     do subroutine calls.  This only works reliably if the total
9758     executable size does not exceed 64k.  The default is to use the
9759     `basr' instruction instead, which does not have this limitation.
9760
9761`-m64'
9762`-m31'
9763     When `-m31' is specified, generate code compliant to the GNU/Linux
9764     for S/390 ABI.  When `-m64' is specified, generate code compliant
9765     to the GNU/Linux for zSeries ABI.  This allows GCC in particular
9766     to generate 64-bit instructions.  For the `s390' targets, the
9767     default is `-m31', while the `s390x' targets default to `-m64'.
9768
9769`-mzarch'
9770`-mesa'
9771     When `-mzarch' is specified, generate code using the instructions
9772     available on z/Architecture.  When `-mesa' is specified, generate
9773     code using the instructions available on ESA/390. Note that
9774     `-mesa' is not possible with `-m64'.  When generating code
9775     compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
9776     When generating code compliant to the GNU/Linux for zSeries ABI,
9777     the default is `-mzarch'.
9778
9779`-mmvcle'
9780`-mno-mvcle'
9781     Generate (or do not generate) code using the `mvcle' instruction
9782     to perform block moves.  When `-mno-mvcle' is specified, use a
9783     `mvc' loop instead.  This is the default.
9784
9785`-mdebug'
9786`-mno-debug'
9787     Print (or do not print) additional debug information when
9788     compiling.  The default is to not print debug information.
9789
9790`-march=CPU-TYPE'
9791     Generate code that will run on CPU-TYPE, which is the name of a
9792     system representing a certain processor type. Possible values for
9793     CPU-TYPE are `g5', `g6', `z900', and `z990'.  When generating code
9794     using the instructions available on z/Architecture, the default is
9795     `-march=z900'.  Otherwise, the default is `-march=g5'.
9796
9797`-mtune=CPU-TYPE'
9798     Tune to CPU-TYPE everything applicable about the generated code,
9799     except for the ABI and the set of available instructions.  The
9800     list of CPU-TYPE values is the same as for `-march'.  The default
9801     is the value used for `-march'.
9802
9803`-mfused-madd'
9804`-mno-fused-madd'
9805     Generate code that uses (does not use) the floating point multiply
9806     and accumulate instructions.  These instructions are generated by
9807     default if hardware floating point is used.
9808
9809
9810File: gcc.info,  Node: CRIS Options,  Next: MMIX Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
9811
98123.17.28 CRIS Options
9813--------------------
9814
9815These options are defined specifically for the CRIS ports.
9816
9817`-march=ARCHITECTURE-TYPE'
9818`-mcpu=ARCHITECTURE-TYPE'
9819     Generate code for the specified architecture.  The choices for
9820     ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
9821     ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
9822     cris-axis-linux-gnu, where the default is `v10'.
9823
9824`-mtune=ARCHITECTURE-TYPE'
9825     Tune to ARCHITECTURE-TYPE everything applicable about the generated
9826     code, except for the ABI and the set of available instructions.
9827     The choices for ARCHITECTURE-TYPE are the same as for
9828     `-march=ARCHITECTURE-TYPE'.
9829
9830`-mmax-stack-frame=N'
9831     Warn when the stack frame of a function exceeds N bytes.
9832
9833`-melinux-stacksize=N'
9834     Only available with the `cris-axis-aout' target.  Arranges for
9835     indications in the program to the kernel loader that the stack of
9836     the program should be set to N bytes.
9837
9838`-metrax4'
9839`-metrax100'
9840     The options `-metrax4' and `-metrax100' are synonyms for
9841     `-march=v3' and `-march=v8' respectively.
9842
9843`-mmul-bug-workaround'
9844`-mno-mul-bug-workaround'
9845     Work around a bug in the `muls' and `mulu' instructions for CPU
9846     models where it applies.  This option is active by default.
9847
9848`-mpdebug'
9849     Enable CRIS-specific verbose debug-related information in the
9850     assembly code.  This option also has the effect to turn off the
9851     `#NO_APP' formatted-code indicator to the assembler at the
9852     beginning of the assembly file.
9853
9854`-mcc-init'
9855     Do not use condition-code results from previous instruction;
9856     always emit compare and test instructions before use of condition
9857     codes.
9858
9859`-mno-side-effects'
9860     Do not emit instructions with side-effects in addressing modes
9861     other than post-increment.
9862
9863`-mstack-align'
9864`-mno-stack-align'
9865`-mdata-align'
9866`-mno-data-align'
9867`-mconst-align'
9868`-mno-const-align'
9869     These options (no-options) arranges (eliminate arrangements) for
9870     the stack-frame, individual data and constants to be aligned for
9871     the maximum single data access size for the chosen CPU model.  The
9872     default is to arrange for 32-bit alignment.  ABI details such as
9873     structure layout are not affected by these options.
9874
9875`-m32-bit'
9876`-m16-bit'
9877`-m8-bit'
9878     Similar to the stack- data- and const-align options above, these
9879     options arrange for stack-frame, writable data and constants to
9880     all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
9881     alignment.
9882
9883`-mno-prologue-epilogue'
9884`-mprologue-epilogue'
9885     With `-mno-prologue-epilogue', the normal function prologue and
9886     epilogue that sets up the stack-frame are omitted and no return
9887     instructions or return sequences are generated in the code.  Use
9888     this option only together with visual inspection of the compiled
9889     code: no warnings or errors are generated when call-saved
9890     registers must be saved, or storage for local variable needs to be
9891     allocated.
9892
9893`-mno-gotplt'
9894`-mgotplt'
9895     With `-fpic' and `-fPIC', don't generate (do generate) instruction
9896     sequences that load addresses for functions from the PLT part of
9897     the GOT rather than (traditional on other architectures) calls to
9898     the PLT.  The default is `-mgotplt'.
9899
9900`-maout'
9901     Legacy no-op option only recognized with the cris-axis-aout target.
9902
9903`-melf'
9904     Legacy no-op option only recognized with the cris-axis-elf and
9905     cris-axis-linux-gnu targets.
9906
9907`-melinux'
9908     Only recognized with the cris-axis-aout target, where it selects a
9909     GNU/linux-like multilib, include files and instruction set for
9910     `-march=v8'.
9911
9912`-mlinux'
9913     Legacy no-op option only recognized with the cris-axis-linux-gnu
9914     target.
9915
9916`-sim'
9917     This option, recognized for the cris-axis-aout and cris-axis-elf
9918     arranges to link with input-output functions from a simulator
9919     library.  Code, initialized data and zero-initialized data are
9920     allocated consecutively.
9921
9922`-sim2'
9923     Like `-sim', but pass linker options to locate initialized data at
9924     0x40000000 and zero-initialized data at 0x80000000.
9925
9926
9927File: gcc.info,  Node: MMIX Options,  Next: PDP-11 Options,  Prev: CRIS Options,  Up: Submodel Options
9928
99293.17.29 MMIX Options
9930--------------------
9931
9932These options are defined for the MMIX:
9933
9934`-mlibfuncs'
9935`-mno-libfuncs'
9936     Specify that intrinsic library functions are being compiled,
9937     passing all values in registers, no matter the size.
9938
9939`-mepsilon'
9940`-mno-epsilon'
9941     Generate floating-point comparison instructions that compare with
9942     respect to the `rE' epsilon register.
9943
9944`-mabi=mmixware'
9945`-mabi=gnu'
9946     Generate code that passes function parameters and return values
9947     that (in the called function) are seen as registers `$0' and up,
9948     as opposed to the GNU ABI which uses global registers `$231' and
9949     up.
9950
9951`-mzero-extend'
9952`-mno-zero-extend'
9953     When reading data from memory in sizes shorter than 64 bits, use
9954     (do not use) zero-extending load instructions by default, rather
9955     than sign-extending ones.
9956
9957`-mknuthdiv'
9958`-mno-knuthdiv'
9959     Make the result of a division yielding a remainder have the same
9960     sign as the divisor.  With the default, `-mno-knuthdiv', the sign
9961     of the remainder follows the sign of the dividend.  Both methods
9962     are arithmetically valid, the latter being almost exclusively used.
9963
9964`-mtoplevel-symbols'
9965`-mno-toplevel-symbols'
9966     Prepend (do not prepend) a `:' to all global symbols, so the
9967     assembly code can be used with the `PREFIX' assembly directive.
9968
9969`-melf'
9970     Generate an executable in the ELF format, rather than the default
9971     `mmo' format used by the `mmix' simulator.
9972
9973`-mbranch-predict'
9974`-mno-branch-predict'
9975     Use (do not use) the probable-branch instructions, when static
9976     branch prediction indicates a probable branch.
9977
9978`-mbase-addresses'
9979`-mno-base-addresses'
9980     Generate (do not generate) code that uses _base addresses_.  Using
9981     a base address automatically generates a request (handled by the
9982     assembler and the linker) for a constant to be set up in a global
9983     register.  The register is used for one or more base address
9984     requests within the range 0 to 255 from the value held in the
9985     register.  The generally leads to short and fast code, but the
9986     number of different data items that can be addressed is limited.
9987     This means that a program that uses lots of static data may
9988     require `-mno-base-addresses'.
9989
9990`-msingle-exit'
9991`-mno-single-exit'
9992     Force (do not force) generated code to have a single exit point in
9993     each function.
9994
9995
9996File: gcc.info,  Node: PDP-11 Options,  Next: Xstormy16 Options,  Prev: MMIX Options,  Up: Submodel Options
9997
99983.17.30 PDP-11 Options
9999----------------------
10000
10001These options are defined for the PDP-11:
10002
10003`-mfpu'
10004     Use hardware FPP floating point.  This is the default.  (FIS
10005     floating point on the PDP-11/40 is not supported.)
10006
10007`-msoft-float'
10008     Do not use hardware floating point.
10009
10010`-mac0'
10011     Return floating-point results in ac0 (fr0 in Unix assembler
10012     syntax).
10013
10014`-mno-ac0'
10015     Return floating-point results in memory.  This is the default.
10016
10017`-m40'
10018     Generate code for a PDP-11/40.
10019
10020`-m45'
10021     Generate code for a PDP-11/45.  This is the default.
10022
10023`-m10'
10024     Generate code for a PDP-11/10.
10025
10026`-mbcopy-builtin'
10027     Use inline `movstrhi' patterns for copying memory.  This is the
10028     default.
10029
10030`-mbcopy'
10031     Do not use inline `movstrhi' patterns for copying memory.
10032
10033`-mint16'
10034`-mno-int32'
10035     Use 16-bit `int'.  This is the default.
10036
10037`-mint32'
10038`-mno-int16'
10039     Use 32-bit `int'.
10040
10041`-mfloat64'
10042`-mno-float32'
10043     Use 64-bit `float'.  This is the default.
10044
10045`-mfloat32'
10046`-mno-float64'
10047     Use 32-bit `float'.
10048
10049`-mabshi'
10050     Use `abshi2' pattern.  This is the default.
10051
10052`-mno-abshi'
10053     Do not use `abshi2' pattern.
10054
10055`-mbranch-expensive'
10056     Pretend that branches are expensive.  This is for experimenting
10057     with code generation only.
10058
10059`-mbranch-cheap'
10060     Do not pretend that branches are expensive.  This is the default.
10061
10062`-msplit'
10063     Generate code for a system with split I&D.
10064
10065`-mno-split'
10066     Generate code for a system without split I&D.  This is the default.
10067
10068`-munix-asm'
10069     Use Unix assembler syntax.  This is the default when configured for
10070     `pdp11-*-bsd'.
10071
10072`-mdec-asm'
10073     Use DEC assembler syntax.  This is the default when configured for
10074     any PDP-11 target other than `pdp11-*-bsd'.
10075
10076
10077File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: PDP-11 Options,  Up: Submodel Options
10078
100793.17.31 Xstormy16 Options
10080-------------------------
10081
10082These options are defined for Xstormy16:
10083
10084`-msim'
10085     Choose startup files and linker script suitable for the simulator.
10086
10087
10088File: gcc.info,  Node: FRV Options,  Prev: Xtensa Options,  Up: Submodel Options
10089
100903.17.32 FRV Options
10091-------------------
10092
10093`-mgpr-32'
10094     Only use the first 32 general purpose registers.
10095
10096`-mgpr-64'
10097     Use all 64 general purpose registers.
10098
10099`-mfpr-32'
10100     Use only the first 32 floating point registers.
10101
10102`-mfpr-64'
10103     Use all 64 floating point registers
10104
10105`-mhard-float'
10106     Use hardware instructions for floating point operations.
10107
10108`-msoft-float'
10109     Use library routines for floating point operations.
10110
10111`-malloc-cc'
10112     Dynamically allocate condition code registers.
10113
10114`-mfixed-cc'
10115     Do not try to dynamically allocate condition code registers, only
10116     use `icc0' and `fcc0'.
10117
10118`-mdword'
10119     Change ABI to use double word insns.
10120
10121`-mno-dword'
10122     Do not use double word instructions.
10123
10124`-mdouble'
10125     Use floating point double instructions.
10126
10127`-mno-double'
10128     Do not use floating point double instructions.
10129
10130`-mmedia'
10131     Use media instructions.
10132
10133`-mno-media'
10134     Do not use media instructions.
10135
10136`-mmuladd'
10137     Use multiply and add/subtract instructions.
10138
10139`-mno-muladd'
10140     Do not use multiply and add/subtract instructions.
10141
10142`-mlibrary-pic'
10143     Enable PIC support for building libraries
10144
10145`-macc-4'
10146     Use only the first four media accumulator registers.
10147
10148`-macc-8'
10149     Use all eight media accumulator registers.
10150
10151`-mpack'
10152     Pack VLIW instructions.
10153
10154`-mno-pack'
10155     Do not pack VLIW instructions.
10156
10157`-mno-eflags'
10158     Do not mark ABI switches in e_flags.
10159
10160`-mcond-move'
10161     Enable the use of conditional-move instructions (default).
10162
10163     This switch is mainly for debugging the compiler and will likely
10164     be removed in a future version.
10165
10166`-mno-cond-move'
10167     Disable the use of conditional-move instructions.
10168
10169     This switch is mainly for debugging the compiler and will likely
10170     be removed in a future version.
10171
10172`-mscc'
10173     Enable the use of conditional set instructions (default).
10174
10175     This switch is mainly for debugging the compiler and will likely
10176     be removed in a future version.
10177
10178`-mno-scc'
10179     Disable the use of conditional set instructions.
10180
10181     This switch is mainly for debugging the compiler and will likely
10182     be removed in a future version.
10183
10184`-mcond-exec'
10185     Enable the use of conditional execution (default).
10186
10187     This switch is mainly for debugging the compiler and will likely
10188     be removed in a future version.
10189
10190`-mno-cond-exec'
10191     Disable the use of conditional execution.
10192
10193     This switch is mainly for debugging the compiler and will likely
10194     be removed in a future version.
10195
10196`-mvliw-branch'
10197     Run a pass to pack branches into VLIW instructions (default).
10198
10199     This switch is mainly for debugging the compiler and will likely
10200     be removed in a future version.
10201
10202`-mno-vliw-branch'
10203     Do not run a pass to pack branches into VLIW instructions.
10204
10205     This switch is mainly for debugging the compiler and will likely
10206     be removed in a future version.
10207
10208`-mmulti-cond-exec'
10209     Enable optimization of `&&' and `||' in conditional execution
10210     (default).
10211
10212     This switch is mainly for debugging the compiler and will likely
10213     be removed in a future version.
10214
10215`-mno-multi-cond-exec'
10216     Disable optimization of `&&' and `||' in conditional execution.
10217
10218     This switch is mainly for debugging the compiler and will likely
10219     be removed in a future version.
10220
10221`-mnested-cond-exec'
10222     Enable nested conditional execution optimizations (default).
10223
10224     This switch is mainly for debugging the compiler and will likely
10225     be removed in a future version.
10226
10227`-mno-nested-cond-exec'
10228     Disable nested conditional execution optimizations.
10229
10230     This switch is mainly for debugging the compiler and will likely
10231     be removed in a future version.
10232
10233`-mtomcat-stats'
10234     Cause gas to print out tomcat statistics.
10235
10236`-mcpu=CPU'
10237     Select the processor type for which to generate code.  Possible
10238     values are `simple', `tomcat', `fr500', `fr400', `fr300', `frv'.
10239
10240
10241
10242File: gcc.info,  Node: Xtensa Options,  Next: FRV Options,  Prev: Xstormy16 Options,  Up: Submodel Options
10243
102443.17.33 Xtensa Options
10245----------------------
10246
10247These options are supported for Xtensa targets:
10248
10249`-mconst16'
10250`-mno-const16'
10251     Enable or disable use of `CONST16' instructions for loading
10252     constant values.  The `CONST16' instruction is currently not a
10253     standard option from Tensilica.  When enabled, `CONST16'
10254     instructions are always used in place of the standard `L32R'
10255     instructions.  The use of `CONST16' is enabled by default only if
10256     the `L32R' instruction is not available.
10257
10258`-mfused-madd'
10259`-mno-fused-madd'
10260     Enable or disable use of fused multiply/add and multiply/subtract
10261     instructions in the floating-point option.  This has no effect if
10262     the floating-point option is not also enabled.  Disabling fused
10263     multiply/add and multiply/subtract instructions forces the
10264     compiler to use separate instructions for the multiply and
10265     add/subtract operations.  This may be desirable in some cases
10266     where strict IEEE 754-compliant results are required: the fused
10267     multiply add/subtract instructions do not round the intermediate
10268     result, thereby producing results with _more_ bits of precision
10269     than specified by the IEEE standard.  Disabling fused multiply
10270     add/subtract instructions also ensures that the program output is
10271     not sensitive to the compiler's ability to combine multiply and
10272     add/subtract operations.
10273
10274`-mtext-section-literals'
10275`-mno-text-section-literals'
10276     Control the treatment of literal pools.  The default is
10277     `-mno-text-section-literals', which places literals in a separate
10278     section in the output file.  This allows the literal pool to be
10279     placed in a data RAM/ROM, and it also allows the linker to combine
10280     literal pools from separate object files to remove redundant
10281     literals and improve code size.  With `-mtext-section-literals',
10282     the literals are interspersed in the text section in order to keep
10283     them as close as possible to their references.  This may be
10284     necessary for large assembly files.
10285
10286`-mtarget-align'
10287`-mno-target-align'
10288     When this option is enabled, GCC instructs the assembler to
10289     automatically align instructions to reduce branch penalties at the
10290     expense of some code density.  The assembler attempts to widen
10291     density instructions to align branch targets and the instructions
10292     following call instructions.  If there are not enough preceding
10293     safe density instructions to align a target, no widening will be
10294     performed.  The default is `-mtarget-align'.  These options do not
10295     affect the treatment of auto-aligned instructions like `LOOP',
10296     which the assembler will always align, either by widening density
10297     instructions or by inserting no-op instructions.
10298
10299`-mlongcalls'
10300`-mno-longcalls'
10301     When this option is enabled, GCC instructs the assembler to
10302     translate direct calls to indirect calls unless it can determine
10303     that the target of a direct call is in the range allowed by the
10304     call instruction.  This translation typically occurs for calls to
10305     functions in other source files.  Specifically, the assembler
10306     translates a direct `CALL' instruction into an `L32R' followed by
10307     a `CALLX' instruction.  The default is `-mno-longcalls'.  This
10308     option should be used in programs where the call target can
10309     potentially be out of range.  This option is implemented in the
10310     assembler, not the compiler, so the assembly code generated by GCC
10311     will still show direct call instructions--look at the disassembled
10312     object code to see the actual instructions.  Note that the
10313     assembler will use an indirect call for every cross-file call, not
10314     just those that really will be out of range.
10315
10316
10317File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
10318
103193.18 Options for Code Generation Conventions
10320============================================
10321
10322These machine-independent options control the interface conventions
10323used in code generation.
10324
10325 Most of them have both positive and negative forms; the negative form
10326of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
10327forms is listed--the one which is not the default.  You can figure out
10328the other form by either removing `no-' or adding it.
10329
10330`-fbounds-check'
10331     For front-ends that support it, generate additional code to check
10332     that indices used to access arrays are within the declared range.
10333     This is currently only supported by the Java and Fortran 77
10334     front-ends, where this option defaults to true and false
10335     respectively.
10336
10337`-ftrapv'
10338     This option generates traps for signed overflow on addition,
10339     subtraction, multiplication operations.
10340
10341`-fwrapv'
10342     This option instructs the compiler to assume that signed arithmetic
10343     overflow of addition, subtraction and multiplication wraps around
10344     using twos-complement representation.  This flag enables some
10345     optimizations and disables other.  This option is enabled by
10346     default for the Java front-end, as required by the Java language
10347     specification.
10348
10349`-fexceptions'
10350     Enable exception handling.  Generates extra code needed to
10351     propagate exceptions.  For some targets, this implies GCC will
10352     generate frame unwind information for all functions, which can
10353     produce significant data size overhead, although it does not
10354     affect execution.  If you do not specify this option, GCC will
10355     enable it by default for languages like C++ which normally require
10356     exception handling, and disable it for languages like C that do
10357     not normally require it.  However, you may need to enable this
10358     option when compiling C code that needs to interoperate properly
10359     with exception handlers written in C++.  You may also wish to
10360     disable this option if you are compiling older C++ programs that
10361     don't use exception handling.
10362
10363`-fnon-call-exceptions'
10364     Generate code that allows trapping instructions to throw
10365     exceptions.  Note that this requires platform-specific runtime
10366     support that does not exist everywhere.  Moreover, it only allows
10367     _trapping_ instructions to throw exceptions, i.e. memory
10368     references or floating point instructions.  It does not allow
10369     exceptions to be thrown from arbitrary signal handlers such as
10370     `SIGALRM'.
10371
10372`-funwind-tables'
10373     Similar to `-fexceptions', except that it will just generate any
10374     needed static data, but will not affect the generated code in any
10375     other way.  You will normally not enable this option; instead, a
10376     language processor that needs this handling would enable it on
10377     your behalf.
10378
10379`-fasynchronous-unwind-tables'
10380     Generate unwind table in dwarf2 format, if supported by target
10381     machine.  The table is exact at each instruction boundary, so it
10382     can be used for stack unwinding from asynchronous events (such as
10383     debugger or garbage collector).
10384
10385`-fpcc-struct-return'
10386     Return "short" `struct' and `union' values in memory like longer
10387     ones, rather than in registers.  This convention is less
10388     efficient, but it has the advantage of allowing intercallability
10389     between GCC-compiled files and files compiled with other
10390     compilers, particularly the Portable C Compiler (pcc).
10391
10392     The precise convention for returning structures in memory depends
10393     on the target configuration macros.
10394
10395     Short structures and unions are those whose size and alignment
10396     match that of some integer type.
10397
10398     *Warning:* code compiled with the `-fpcc-struct-return' switch is
10399     not binary compatible with code compiled with the
10400     `-freg-struct-return' switch.  Use it to conform to a non-default
10401     application binary interface.
10402
10403`-freg-struct-return'
10404     Return `struct' and `union' values in registers when possible.
10405     This is more efficient for small structures than
10406     `-fpcc-struct-return'.
10407
10408     If you specify neither `-fpcc-struct-return' nor
10409     `-freg-struct-return', GCC defaults to whichever convention is
10410     standard for the target.  If there is no standard convention, GCC
10411     defaults to `-fpcc-struct-return', except on targets where GCC is
10412     the principal compiler.  In those cases, we can choose the
10413     standard, and we chose the more efficient register return
10414     alternative.
10415
10416     *Warning:* code compiled with the `-freg-struct-return' switch is
10417     not binary compatible with code compiled with the
10418     `-fpcc-struct-return' switch.  Use it to conform to a non-default
10419     application binary interface.
10420
10421`-fshort-enums'
10422     Allocate to an `enum' type only as many bytes as it needs for the
10423     declared range of possible values.  Specifically, the `enum' type
10424     will be equivalent to the smallest integer type which has enough
10425     room.
10426
10427     *Warning:* the `-fshort-enums' switch causes GCC to generate code
10428     that is not binary compatible with code generated without that
10429     switch.  Use it to conform to a non-default application binary
10430     interface.
10431
10432`-fshort-double'
10433     Use the same size for `double' as for `float'.
10434
10435     *Warning:* the `-fshort-double' switch causes GCC to generate code
10436     that is not binary compatible with code generated without that
10437     switch.  Use it to conform to a non-default application binary
10438     interface.
10439
10440`-fshort-wchar'
10441     Override the underlying type for `wchar_t' to be `short unsigned
10442     int' instead of the default for the target.  This option is useful
10443     for building programs to run under WINE.
10444
10445     *Warning:* the `-fshort-wchar' switch causes GCC to generate code
10446     that is not binary compatible with code generated without that
10447     switch.  Use it to conform to a non-default application binary
10448     interface.
10449
10450`-fshared-data'
10451     Requests that the data and non-`const' variables of this
10452     compilation be shared data rather than private data.  The
10453     distinction makes sense only on certain operating systems, where
10454     shared data is shared between processes running the same program,
10455     while private data exists in one copy per process.
10456
10457`-fno-common'
10458     In C, allocate even uninitialized global variables in the data
10459     section of the object file, rather than generating them as common
10460     blocks.  This has the effect that if the same variable is declared
10461     (without `extern') in two different compilations, you will get an
10462     error when you link them.  The only reason this might be useful is
10463     if you wish to verify that the program will work on other systems
10464     which always work this way.
10465
10466`-fno-ident'
10467     Ignore the `#ident' directive.
10468
10469`-finhibit-size-directive'
10470     Don't output a `.size' assembler directive, or anything else that
10471     would cause trouble if the function is split in the middle, and the
10472     two halves are placed at locations far apart in memory.  This
10473     option is used when compiling `crtstuff.c'; you should not need to
10474     use it for anything else.
10475
10476`-fverbose-asm'
10477     Put extra commentary information in the generated assembly code to
10478     make it more readable.  This option is generally only of use to
10479     those who actually need to read the generated assembly code
10480     (perhaps while debugging the compiler itself).
10481
10482     `-fno-verbose-asm', the default, causes the extra information to
10483     be omitted and is useful when comparing two assembler files.
10484
10485`-fpic'
10486     Generate position-independent code (PIC) suitable for use in a
10487     shared library, if supported for the target machine.  Such code
10488     accesses all constant addresses through a global offset table
10489     (GOT).  The dynamic loader resolves the GOT entries when the
10490     program starts (the dynamic loader is not part of GCC; it is part
10491     of the operating system).  If the GOT size for the linked
10492     executable exceeds a machine-specific maximum size, you get an
10493     error message from the linker indicating that `-fpic' does not
10494     work; in that case, recompile with `-fPIC' instead.  (These
10495     maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
10496     386 has no such limit.)
10497
10498     Position-independent code requires special support, and therefore
10499     works only on certain machines.  For the 386, GCC supports PIC for
10500     System V but not for the Sun 386i.  Code generated for the IBM
10501     RS/6000 is always position-independent.
10502
10503`-fPIC'
10504     If supported for the target machine, emit position-independent
10505     code, suitable for dynamic linking and avoiding any limit on the
10506     size of the global offset table.  This option makes a difference
10507     on the m68k and the SPARC.
10508
10509     Position-independent code requires special support, and therefore
10510     works only on certain machines.
10511
10512`-fpie'
10513`-fPIE'
10514     These options are similar to `-fpic' and `-fPIC', but generated
10515     position independent code can be only linked into executables.
10516     Usually these options are used when `-pie' GCC option will be used
10517     during linking.
10518
10519`-ffixed-REG'
10520     Treat the register named REG as a fixed register; generated code
10521     should never refer to it (except perhaps as a stack pointer, frame
10522     pointer or in some other fixed role).
10523
10524     REG must be the name of a register.  The register names accepted
10525     are machine-specific and are defined in the `REGISTER_NAMES' macro
10526     in the machine description macro file.
10527
10528     This flag does not have a negative form, because it specifies a
10529     three-way choice.
10530
10531`-fcall-used-REG'
10532     Treat the register named REG as an allocable register that is
10533     clobbered by function calls.  It may be allocated for temporaries
10534     or variables that do not live across a call.  Functions compiled
10535     this way will not save and restore the register REG.
10536
10537     It is an error to used this flag with the frame pointer or stack
10538     pointer.  Use of this flag for other registers that have fixed
10539     pervasive roles in the machine's execution model will produce
10540     disastrous results.
10541
10542     This flag does not have a negative form, because it specifies a
10543     three-way choice.
10544
10545`-fcall-saved-REG'
10546     Treat the register named REG as an allocable register saved by
10547     functions.  It may be allocated even for temporaries or variables
10548     that live across a call.  Functions compiled this way will save
10549     and restore the register REG if they use it.
10550
10551     It is an error to used this flag with the frame pointer or stack
10552     pointer.  Use of this flag for other registers that have fixed
10553     pervasive roles in the machine's execution model will produce
10554     disastrous results.
10555
10556     A different sort of disaster will result from the use of this flag
10557     for a register in which function values may be returned.
10558
10559     This flag does not have a negative form, because it specifies a
10560     three-way choice.
10561
10562`-fpack-struct'
10563     Pack all structure members together without holes.
10564
10565     *Warning:* the `-fpack-struct' switch causes GCC to generate code
10566     that is not binary compatible with code generated without that
10567     switch.  Additionally, it makes the code suboptimal.  Use it to
10568     conform to a non-default application binary interface.
10569
10570`-finstrument-functions'
10571     Generate instrumentation calls for entry and exit to functions.
10572     Just after function entry and just before function exit, the
10573     following profiling functions will be called with the address of
10574     the current function and its call site.  (On some platforms,
10575     `__builtin_return_address' does not work beyond the current
10576     function, so the call site information may not be available to the
10577     profiling functions otherwise.)
10578
10579          void __cyg_profile_func_enter (void *this_fn,
10580                                         void *call_site);
10581          void __cyg_profile_func_exit  (void *this_fn,
10582                                         void *call_site);
10583
10584     The first argument is the address of the start of the current
10585     function, which may be looked up exactly in the symbol table.
10586
10587     This currently disables function inlining.  This restriction is
10588     expected to be removed in future releases.
10589
10590     A function may be given the attribute `no_instrument_function', in
10591     which case this instrumentation will not be done.  This can be
10592     used, for example, for the profiling functions listed above,
10593     high-priority interrupt routines, and any functions from which the
10594     profiling functions cannot safely be called (perhaps signal
10595     handlers, if the profiling routines generate output or allocate
10596     memory).
10597
10598`-fstack-check'
10599     Generate code to verify that you do not go beyond the boundary of
10600     the stack.  You should specify this flag if you are running in an
10601     environment with multiple threads, but only rarely need to specify
10602     it in a single-threaded environment since stack overflow is
10603     automatically detected on nearly all systems if there is only one
10604     stack.
10605
10606     Note that this switch does not actually cause checking to be done;
10607     the operating system must do that.  The switch causes generation
10608     of code to ensure that the operating system sees the stack being
10609     extended.
10610
10611`-fstack-limit-register=REG'
10612`-fstack-limit-symbol=SYM'
10613`-fno-stack-limit'
10614     Generate code to ensure that the stack does not grow beyond a
10615     certain value, either the value of a register or the address of a
10616     symbol.  If the stack would grow beyond the value, a signal is
10617     raised.  For most targets, the signal is raised before the stack
10618     overruns the boundary, so it is possible to catch the signal
10619     without taking special precautions.
10620
10621     For instance, if the stack starts at absolute address `0x80000000'
10622     and grows downwards, you can use the flags
10623     `-fstack-limit-symbol=__stack_limit' and
10624     `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
10625     of 128KB.  Note that this may only work with the GNU linker.
10626
10627`-fargument-alias'
10628`-fargument-noalias'
10629`-fargument-noalias-global'
10630     Specify the possible relationships among parameters and between
10631     parameters and global data.
10632
10633     `-fargument-alias' specifies that arguments (parameters) may alias
10634     each other and may alias global storage.
10635     `-fargument-noalias' specifies that arguments do not alias each
10636     other, but may alias global storage.
10637     `-fargument-noalias-global' specifies that arguments do not alias
10638     each other and do not alias global storage.
10639
10640     Each language will automatically use whatever option is required by
10641     the language standard.  You should not need to use these options
10642     yourself.
10643
10644`-fleading-underscore'
10645     This option and its counterpart, `-fno-leading-underscore',
10646     forcibly change the way C symbols are represented in the object
10647     file.  One use is to help link with legacy assembly code.
10648
10649     *Warning:* the `-fleading-underscore' switch causes GCC to
10650     generate code that is not binary compatible with code generated
10651     without that switch.  Use it to conform to a non-default
10652     application binary interface.  Not all targets provide complete
10653     support for this switch.
10654
10655`-ftls-model=MODEL'
10656     Alter the thread-local storage model to be used (*note
10657     Thread-Local::).  The MODEL argument should be one of
10658     `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
10659
10660     The default without `-fpic' is `initial-exec'; with `-fpic' the
10661     default is `global-dynamic'.
10662
10663
10664File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
10665
106663.19 Environment Variables Affecting GCC
10667========================================
10668
10669This section describes several environment variables that affect how GCC
10670operates.  Some of them work by specifying directories or prefixes to
10671use when searching for various kinds of files.  Some are used to
10672specify other aspects of the compilation environment.
10673
10674 Note that you can also specify places to search using options such as
10675`-B', `-I' and `-L' (*note Directory Options::).  These take precedence
10676over places specified using environment variables, which in turn take
10677precedence over those specified by the configuration of GCC.  *Note
10678Controlling the Compilation Driver `gcc': (gccint)Driver.
10679
10680`LANG'
10681`LC_CTYPE'
10682`LC_MESSAGES'
10683`LC_ALL'
10684     These environment variables control the way that GCC uses
10685     localization information that allow GCC to work with different
10686     national conventions.  GCC inspects the locale categories
10687     `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
10688     These locale categories can be set to any value supported by your
10689     installation.  A typical value is `en_UK' for English in the United
10690     Kingdom.
10691
10692     The `LC_CTYPE' environment variable specifies character
10693     classification.  GCC uses it to determine the character boundaries
10694     in a string; this is needed for some multibyte encodings that
10695     contain quote and escape characters that would otherwise be
10696     interpreted as a string end or escape.
10697
10698     The `LC_MESSAGES' environment variable specifies the language to
10699     use in diagnostic messages.
10700
10701     If the `LC_ALL' environment variable is set, it overrides the value
10702     of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
10703     `LC_MESSAGES' default to the value of the `LANG' environment
10704     variable.  If none of these variables are set, GCC defaults to
10705     traditional C English behavior.
10706
10707`TMPDIR'
10708     If `TMPDIR' is set, it specifies the directory to use for temporary
10709     files.  GCC uses temporary files to hold the output of one stage of
10710     compilation which is to be used as input to the next stage: for
10711     example, the output of the preprocessor, which is the input to the
10712     compiler proper.
10713
10714`GCC_EXEC_PREFIX'
10715     If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
10716     names of the subprograms executed by the compiler.  No slash is
10717     added when this prefix is combined with the name of a subprogram,
10718     but you can specify a prefix that ends with a slash if you wish.
10719
10720     If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
10721     appropriate prefix to use based on the pathname it was invoked
10722     with.
10723
10724     If GCC cannot find the subprogram using the specified prefix, it
10725     tries looking in the usual places for the subprogram.
10726
10727     The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
10728     PREFIX is the value of `prefix' when you ran the `configure'
10729     script.
10730
10731     Other prefixes specified with `-B' take precedence over this
10732     prefix.
10733
10734     This prefix is also used for finding files such as `crt0.o' that
10735     are used for linking.
10736
10737     In addition, the prefix is used in an unusual way in finding the
10738     directories to search for header files.  For each of the standard
10739     directories whose name normally begins with `/usr/local/lib/gcc'
10740     (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
10741     replacing that beginning with the specified prefix to produce an
10742     alternate directory name.  Thus, with `-Bfoo/', GCC will search
10743     `foo/bar' where it would normally search `/usr/local/lib/bar'.
10744     These alternate directories are searched first; the standard
10745     directories come next.
10746
10747`COMPILER_PATH'
10748     The value of `COMPILER_PATH' is a colon-separated list of
10749     directories, much like `PATH'.  GCC tries the directories thus
10750     specified when searching for subprograms, if it can't find the
10751     subprograms using `GCC_EXEC_PREFIX'.
10752
10753`LIBRARY_PATH'
10754     The value of `LIBRARY_PATH' is a colon-separated list of
10755     directories, much like `PATH'.  When configured as a native
10756     compiler, GCC tries the directories thus specified when searching
10757     for special linker files, if it can't find them using
10758     `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
10759     when searching for ordinary libraries for the `-l' option (but
10760     directories specified with `-L' come first).
10761
10762`LANG'
10763     This variable is used to pass locale information to the compiler.
10764     One way in which this information is used is to determine the
10765     character set to be used when character literals, string literals
10766     and comments are parsed in C and C++.  When the compiler is
10767     configured to allow multibyte characters, the following values for
10768     `LANG' are recognized:
10769
10770    `C-JIS'
10771          Recognize JIS characters.
10772
10773    `C-SJIS'
10774          Recognize SJIS characters.
10775
10776    `C-EUCJP'
10777          Recognize EUCJP characters.
10778
10779     If `LANG' is not defined, or if it has some other value, then the
10780     compiler will use mblen and mbtowc as defined by the default
10781     locale to recognize and translate multibyte characters.
10782
10783Some additional environments variables affect the behavior of the
10784preprocessor.
10785
10786`CPATH'
10787`C_INCLUDE_PATH'
10788`CPLUS_INCLUDE_PATH'
10789`OBJC_INCLUDE_PATH'
10790     Each variable's value is a list of directories separated by a
10791     special character, much like `PATH', in which to look for header
10792     files.  The special character, `PATH_SEPARATOR', is
10793     target-dependent and determined at GCC build time.  For Microsoft
10794     Windows-based targets it is a semicolon, and for almost all other
10795     targets it is a colon.
10796
10797     `CPATH' specifies a list of directories to be searched as if
10798     specified with `-I', but after any paths given with `-I' options
10799     on the command line.  This environment variable is used regardless
10800     of which language is being preprocessed.
10801
10802     The remaining environment variables apply only when preprocessing
10803     the particular language indicated.  Each specifies a list of
10804     directories to be searched as if specified with `-isystem', but
10805     after any paths given with `-isystem' options on the command line.
10806
10807     In all these variables, an empty element instructs the compiler to
10808     search its current working directory.  Empty elements can appear
10809     at the beginning or end of a path.  For instance, if the value of
10810     `CPATH' is `:/special/include', that has the same effect as
10811     `-I. -I/special/include'.
10812
10813`DEPENDENCIES_OUTPUT'
10814     If this variable is set, its value specifies how to output
10815     dependencies for Make based on the non-system header files
10816     processed by the compiler.  System header files are ignored in the
10817     dependency output.
10818
10819     The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
10820     which case the Make rules are written to that file, guessing the
10821     target name from the source file name.  Or the value can have the
10822     form `FILE TARGET', in which case the rules are written to file
10823     FILE using TARGET as the target name.
10824
10825     In other words, this environment variable is equivalent to
10826     combining the options `-MM' and `-MF' (*note Preprocessor
10827     Options::), with an optional `-MT' switch too.
10828
10829`SUNPRO_DEPENDENCIES'
10830     This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
10831     except that system header files are not ignored, so it implies
10832     `-M' rather than `-MM'.  However, the dependence on the main input
10833     file is omitted.  *Note Preprocessor Options::.
10834
10835
10836File: gcc.info,  Node: Precompiled Headers,  Next: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
10837
108383.20 Using Precompiled Headers
10839==============================
10840
10841Often large projects have many header files that are included in every
10842source file.  The time the compiler takes to process these header files
10843over and over again can account for nearly all of the time required to
10844build the project.  To make builds faster, GCC allows users to
10845`precompile' a header file; then, if builds can use the precompiled
10846header file they will be much faster.
10847
10848 *Caution:* There are a few known situations where GCC will crash when
10849trying to use a precompiled header.  If you have trouble with a
10850precompiled header, you should remove the precompiled header and
10851compile without it.  In addition, please use GCC's on-line
10852defect-tracking system to report any problems you encounter with
10853precompiled headers.  *Note Bugs::.
10854
10855 To create a precompiled header file, simply compile it as you would any
10856other file, if necessary using the `-x' option to make the driver treat
10857it as a C or C++ header file.  You will probably want to use a tool
10858like `make' to keep the precompiled header up-to-date when the headers
10859it contains change.
10860
10861 A precompiled header file will be searched for when `#include' is seen
10862in the compilation.  As it searches for the included file (*note Search
10863Path: (cpp)Search Path.) the compiler looks for a precompiled header in
10864each directory just before it looks for the include file in that
10865directory.  The name searched for is the name specified in the
10866`#include' with `.gch' appended.  If the precompiled header file can't
10867be used, it is ignored.
10868
10869 For instance, if you have `#include "all.h"', and you have `all.h.gch'
10870in the same directory as `all.h', then the precompiled header file will
10871be used if possible, and the original header will be used otherwise.
10872
10873 Alternatively, you might decide to put the precompiled header file in a
10874directory and use `-I' to ensure that directory is searched before (or
10875instead of) the directory containing the original header.  Then, if you
10876want to check that the precompiled header file is always used, you can
10877put a file of the same name as the original header in this directory
10878containing an `#error' command.
10879
10880 This also works with `-include'.  So yet another way to use
10881precompiled headers, good for projects not designed with precompiled
10882header files in mind, is to simply take most of the header files used by
10883a project, include them from another header file, precompile that header
10884file, and `-include' the precompiled header.  If the header files have
10885guards against multiple inclusion, they will be skipped because they've
10886already been included (in the precompiled header).
10887
10888 If you need to precompile the same header file for different
10889languages, targets, or compiler options, you can instead make a
10890_directory_ named like `all.h.gch', and put each precompiled header in
10891the directory.  (It doesn't matter what you call the files in the
10892directory, every precompiled header in the directory will be
10893considered.)  The first precompiled header encountered in the directory
10894that is valid for this compilation will be used; they're searched in no
10895particular order.
10896
10897 There are many other possibilities, limited only by your imagination,
10898good sense, and the constraints of your build system.
10899
10900 A precompiled header file can be used only when these conditions apply:
10901
10902   * Only one precompiled header can be used in a particular
10903     compilation.
10904
10905   * A precompiled header can't be used once the first C token is seen.
10906     You can have preprocessor directives before a precompiled header;
10907     you can even include a precompiled header from inside another
10908     header, so long as there are no C tokens before the `#include'.
10909
10910   * The precompiled header file must be produced for the same language
10911     as the current compilation.  You can't use a C precompiled header
10912     for a C++ compilation.
10913
10914   * The precompiled header file must be produced by the same compiler
10915     version and configuration as the current compilation is using.
10916     The easiest way to guarantee this is to use the same compiler
10917     binary for creating and using precompiled headers.
10918
10919   * Any macros defined before the precompiled header (including with
10920     `-D') must either be defined in the same way as when the
10921     precompiled header was generated, or must not affect the
10922     precompiled header, which usually means that the they don't appear
10923     in the precompiled header at all.
10924
10925   * Certain command-line options must be defined in the same way as
10926     when the precompiled header was generated.  At present, it's not
10927     clear which options are safe to change and which are not; the
10928     safest choice is to use exactly the same options when generating
10929     and using the precompiled header.
10930
10931 For all of these but the last, the compiler will automatically ignore
10932the precompiled header if the conditions aren't met.  For the last item,
10933some option changes will cause the precompiled header to be rejected,
10934but not all incompatible option combinations have yet been found.  If
10935you find a new incompatible combination, please consider filing a bug
10936report, see *Note Bugs::.
10937
10938
10939File: gcc.info,  Node: Running Protoize,  Prev: Precompiled Headers,  Up: Invoking GCC
10940
109413.21 Running Protoize
10942=====================
10943
10944The program `protoize' is an optional part of GCC.  You can use it to
10945add prototypes to a program, thus converting the program to ISO C in
10946one respect.  The companion program `unprotoize' does the reverse: it
10947removes argument types from any prototypes that are found.
10948
10949 When you run these programs, you must specify a set of source files as
10950command line arguments.  The conversion programs start out by compiling
10951these files to see what functions they define.  The information gathered
10952about a file FOO is saved in a file named `FOO.X'.
10953
10954 After scanning comes actual conversion.  The specified files are all
10955eligible to be converted; any files they include (whether sources or
10956just headers) are eligible as well.
10957
10958 But not all the eligible files are converted.  By default, `protoize'
10959and `unprotoize' convert only source and header files in the current
10960directory.  You can specify additional directories whose files should
10961be converted with the `-d DIRECTORY' option.  You can also specify
10962particular files to exclude with the `-x FILE' option.  A file is
10963converted if it is eligible, its directory name matches one of the
10964specified directory names, and its name within the directory has not
10965been excluded.
10966
10967 Basic conversion with `protoize' consists of rewriting most function
10968definitions and function declarations to specify the types of the
10969arguments.  The only ones not rewritten are those for varargs functions.
10970
10971 `protoize' optionally inserts prototype declarations at the beginning
10972of the source file, to make them available for any calls that precede
10973the function's definition.  Or it can insert prototype declarations
10974with block scope in the blocks where undeclared functions are called.
10975
10976 Basic conversion with `unprotoize' consists of rewriting most function
10977declarations to remove any argument types, and rewriting function
10978definitions to the old-style pre-ISO form.
10979
10980 Both conversion programs print a warning for any function declaration
10981or definition that they can't convert.  You can suppress these warnings
10982with `-q'.
10983
10984 The output from `protoize' or `unprotoize' replaces the original
10985source file.  The original file is renamed to a name ending with
10986`.save' (for DOS, the saved filename ends in `.sav' without the
10987original `.c' suffix).  If the `.save' (`.sav' for DOS) file already
10988exists, then the source file is simply discarded.
10989
10990 `protoize' and `unprotoize' both depend on GCC itself to scan the
10991program and collect information about the functions it uses.  So
10992neither of these programs will work until GCC is installed.
10993
10994 Here is a table of the options you can use with `protoize' and
10995`unprotoize'.  Each option works with both programs unless otherwise
10996stated.
10997
10998`-B DIRECTORY'
10999     Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
11000     usual directory (normally `/usr/local/lib').  This file contains
11001     prototype information about standard system functions.  This option
11002     applies only to `protoize'.
11003
11004`-c COMPILATION-OPTIONS'
11005     Use COMPILATION-OPTIONS as the options when running `gcc' to
11006     produce the `.X' files.  The special option `-aux-info' is always
11007     passed in addition, to tell `gcc' to write a `.X' file.
11008
11009     Note that the compilation options must be given as a single
11010     argument to `protoize' or `unprotoize'.  If you want to specify
11011     several `gcc' options, you must quote the entire set of
11012     compilation options to make them a single word in the shell.
11013
11014     There are certain `gcc' arguments that you cannot use, because they
11015     would produce the wrong kind of output.  These include `-g', `-O',
11016     `-c', `-S', and `-o' If you include these in the
11017     COMPILATION-OPTIONS, they are ignored.
11018
11019`-C'
11020     Rename files to end in `.C' (`.cc' for DOS-based file systems)
11021     instead of `.c'.  This is convenient if you are converting a C
11022     program to C++.  This option applies only to `protoize'.
11023
11024`-g'
11025     Add explicit global declarations.  This means inserting explicit
11026     declarations at the beginning of each source file for each function
11027     that is called in the file and was not declared.  These
11028     declarations precede the first function definition that contains a
11029     call to an undeclared function.  This option applies only to
11030     `protoize'.
11031
11032`-i STRING'
11033     Indent old-style parameter declarations with the string STRING.
11034     This option applies only to `protoize'.
11035
11036     `unprotoize' converts prototyped function definitions to old-style
11037     function definitions, where the arguments are declared between the
11038     argument list and the initial `{'.  By default, `unprotoize' uses
11039     five spaces as the indentation.  If you want to indent with just
11040     one space instead, use `-i " "'.
11041
11042`-k'
11043     Keep the `.X' files.  Normally, they are deleted after conversion
11044     is finished.
11045
11046`-l'
11047     Add explicit local declarations.  `protoize' with `-l' inserts a
11048     prototype declaration for each function in each block which calls
11049     the function without any declaration.  This option applies only to
11050     `protoize'.
11051
11052`-n'
11053     Make no real changes.  This mode just prints information about the
11054     conversions that would have been done without `-n'.
11055
11056`-N'
11057     Make no `.save' files.  The original files are simply deleted.
11058     Use this option with caution.
11059
11060`-p PROGRAM'
11061     Use the program PROGRAM as the compiler.  Normally, the name `gcc'
11062     is used.
11063
11064`-q'
11065     Work quietly.  Most warnings are suppressed.
11066
11067`-v'
11068     Print the version number, just like `-v' for `gcc'.
11069
11070 If you need special compiler options to compile one of your program's
11071source files, then you should generate that file's `.X' file specially,
11072by running `gcc' on that source file with the appropriate options and
11073the option `-aux-info'.  Then run `protoize' on the entire set of
11074files.  `protoize' will use the existing `.X' file because it is newer
11075than the source file.  For example:
11076
11077     gcc -Dfoo=bar file1.c -aux-info file1.X
11078     protoize *.c
11079
11080You need to include the special files along with the rest in the
11081`protoize' command, even though their `.X' files already exist, because
11082otherwise they won't get converted.
11083
11084 *Note Protoize Caveats::, for more information on how to use
11085`protoize' successfully.
11086
11087
11088File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
11089
110904 C Implementation-defined behavior
11091***********************************
11092
11093A conforming implementation of ISO C is required to document its choice
11094of behavior in each of the areas that are designated "implementation
11095defined."  The following lists all such areas, along with the section
11096number from the ISO/IEC 9899:1999 standard.
11097
11098* Menu:
11099
11100* Translation implementation::
11101* Environment implementation::
11102* Identifiers implementation::
11103* Characters implementation::
11104* Integers implementation::
11105* Floating point implementation::
11106* Arrays and pointers implementation::
11107* Hints implementation::
11108* Structures unions enumerations and bit-fields implementation::
11109* Qualifiers implementation::
11110* Preprocessing directives implementation::
11111* Library functions implementation::
11112* Architecture implementation::
11113* Locale-specific behavior implementation::
11114
11115
11116File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
11117
111184.1 Translation
11119===============
11120
11121   * `How a diagnostic is identified (3.10, 5.1.1.3).'
11122
11123     Diagnostics consist of all the output sent to stderr by GCC.
11124
11125   * `Whether each nonempty sequence of white-space characters other
11126     than new-line is retained or replaced by one space character in
11127     translation phase 3 (5.1.1.2).'
11128
11129
11130File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
11131
111324.2 Environment
11133===============
11134
11135The behavior of these points are dependent on the implementation of the
11136C library, and are not defined by GCC itself.
11137
11138
11139File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
11140
111414.3 Identifiers
11142===============
11143
11144   * `Which additional multibyte characters may appear in identifiers
11145     and their correspondence to universal character names (6.4.2).'
11146
11147   * `The number of significant initial characters in an identifier
11148     (5.2.4.1, 6.4.2).'
11149
11150     For internal names, all characters are significant.  For external
11151     names, the number of significant characters are defined by the
11152     linker; for almost all targets, all characters are significant.
11153
11154
11155
11156File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
11157
111584.4 Characters
11159==============
11160
11161   * `The number of bits in a byte (3.6).'
11162
11163   * `The values of the members of the execution character set (5.2.1).'
11164
11165   * `The unique value of the member of the execution character set
11166     produced for each of the standard alphabetic escape sequences
11167     (5.2.2).'
11168
11169   * `The value of a `char' object into which has been stored any
11170     character other than a member of the basic execution character set
11171     (6.2.5).'
11172
11173   * `Which of `signed char' or `unsigned char' has the same range,
11174     representation, and behavior as "plain" `char' (6.2.5, 6.3.1.1).'
11175
11176   * `The mapping of members of the source character set (in character
11177     constants and string literals) to members of the execution
11178     character set (6.4.4.4, 5.1.1.2).'
11179
11180   * `The value of an integer character constant containing more than
11181     one character or containing a character or escape sequence that
11182     does not map to a single-byte execution character (6.4.4.4).'
11183
11184   * `The value of a wide character constant containing more than one
11185     multibyte character, or containing a multibyte character or escape
11186     sequence not represented in the extended execution character set
11187     (6.4.4.4).'
11188
11189   * `The current locale used to convert a wide character constant
11190     consisting of a single multibyte character that maps to a member
11191     of the extended execution character set into a corresponding wide
11192     character code (6.4.4.4).'
11193
11194   * `The current locale used to convert a wide string literal into
11195     corresponding wide character codes (6.4.5).'
11196
11197   * `The value of a string literal containing a multibyte character or
11198     escape sequence not represented in the execution character set
11199     (6.4.5).'
11200
11201
11202File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
11203
112044.5 Integers
11205============
11206
11207   * `Any extended integer types that exist in the implementation
11208     (6.2.5).'
11209
11210   * `Whether signed integer types are represented using sign and
11211     magnitude, two's complement, or one's complement, and whether the
11212     extraordinary value is a trap representation or an ordinary value
11213     (6.2.6.2).'
11214
11215     GCC supports only two's complement integer types, and all bit
11216     patterns are ordinary values.
11217
11218   * `The rank of any extended integer type relative to another extended
11219     integer type with the same precision (6.3.1.1).'
11220
11221   * `The result of, or the signal raised by, converting an integer to a
11222     signed integer type when the value cannot be represented in an
11223     object of that type (6.3.1.3).'
11224
11225   * `The results of some bitwise operations on signed integers (6.5).'
11226
11227
11228File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
11229
112304.6 Floating point
11231==================
11232
11233   * `The accuracy of the floating-point operations and of the library
11234     functions in `<math.h>' and `<complex.h>' that return
11235     floating-point results (5.2.4.2.2).'
11236
11237   * `The rounding behaviors characterized by non-standard values of
11238     `FLT_ROUNDS'  (5.2.4.2.2).'
11239
11240   * `The evaluation methods characterized by non-standard negative
11241     values of `FLT_EVAL_METHOD' (5.2.4.2.2).'
11242
11243   * `The direction of rounding when an integer is converted to a
11244     floating-point number that cannot exactly represent the original
11245     value (6.3.1.4).'
11246
11247   * `The direction of rounding when a floating-point number is
11248     converted to a narrower floating-point number (6.3.1.5).'
11249
11250   * `How the nearest representable value or the larger or smaller
11251     representable value immediately adjacent to the nearest
11252     representable value is chosen for certain floating constants
11253     (6.4.4.2).'
11254
11255   * `Whether and how floating expressions are contracted when not
11256     disallowed by the `FP_CONTRACT' pragma (6.5).'
11257
11258   * `The default state for the `FENV_ACCESS' pragma (7.6.1).'
11259
11260   * `Additional floating-point exceptions, rounding modes,
11261     environments, and classifications, and their macro names (7.6,
11262     7.12).'
11263
11264   * `The default state for the `FP_CONTRACT' pragma (7.12.2).'
11265
11266   * `Whether the "inexact" floating-point exception can be raised when
11267     the rounded result actually does equal the mathematical result in
11268     an IEC 60559 conformant implementation (F.9).'
11269
11270   * `Whether the "underflow" (and "inexact") floating-point exception
11271     can be raised when a result is tiny but not inexact in an IEC
11272     60559 conformant implementation (F.9).'
11273
11274
11275
11276File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
11277
112784.7 Arrays and pointers
11279=======================
11280
11281   * `The result of converting a pointer to an integer or vice versa
11282     (6.3.2.3).'
11283
11284     A cast from pointer to integer discards most-significant bits if
11285     the pointer representation is larger than the integer type,
11286     sign-extends(1) if the pointer representation is smaller than the
11287     integer type, otherwise the bits are unchanged.
11288
11289     A cast from integer to pointer discards most-significant bits if
11290     the pointer representation is smaller than the integer type,
11291     extends according to the signedness of the integer type if the
11292     pointer representation is larger than the integer type, otherwise
11293     the bits are unchanged.
11294
11295     When casting from pointer to integer and back again, the resulting
11296     pointer must reference the same object as the original pointer,
11297     otherwise the behavior is undefined.  That is, one may not use
11298     integer arithmetic to avoid the undefined behavior of pointer
11299     arithmetic as proscribed in 6.5.6/8.
11300
11301   * `The size of the result of subtracting two pointers to elements of
11302     the same array (6.5.6).'
11303
11304
11305 ---------- Footnotes ----------
11306
11307 (1) Future versions of GCC may zero-extend, or use a target-defined
11308`ptr_extend' pattern.  Do not rely on sign extension.
11309
11310
11311File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
11312
113134.8 Hints
11314=========
11315
11316   * `The extent to which suggestions made by using the `register'
11317     storage-class specifier are effective (6.7.1).'
11318
11319     The `register' specifier affects code generation only in these
11320     ways:
11321
11322        * When used as part of the register variable extension, see
11323          *Note Explicit Reg Vars::.
11324
11325        * When `-O0' is in use, the compiler allocates distinct stack
11326          memory for all variables that do not have the `register'
11327          storage-class specifier; if `register' is specified, the
11328          variable may have a shorter lifespan than the code would
11329          indicate and may never be placed in memory.
11330
11331        * On some rare x86 targets, `setjmp' doesn't save the registers
11332          in all circumstances.  In those cases, GCC doesn't allocate
11333          any variables in registers unless they are marked `register'.
11334
11335
11336   * `The extent to which suggestions made by using the inline function
11337     specifier are effective (6.7.4).'
11338
11339     GCC will not inline any functions if the `-fno-inline' option is
11340     used or if `-O0' is used.  Otherwise, GCC may still be unable to
11341     inline a function for many reasons; the `-Winline' option may be
11342     used to determine if a function has not been inlined and why not.
11343
11344
11345
11346File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
11347
113484.9 Structures, unions, enumerations, and bit-fields
11349====================================================
11350
11351   * `Whether a "plain" int bit-field is treated as a `signed int'
11352     bit-field or as an `unsigned int' bit-field (6.7.2, 6.7.2.1).'
11353
11354   * `Allowable bit-field types other than `_Bool', `signed int', and
11355     `unsigned int' (6.7.2.1).'
11356
11357   * `Whether a bit-field can straddle a storage-unit boundary
11358     (6.7.2.1).'
11359
11360   * `The order of allocation of bit-fields within a unit (6.7.2.1).'
11361
11362   * `The alignment of non-bit-field members of structures (6.7.2.1).'
11363
11364   * `The integer type compatible with each enumerated type (6.7.2.2).'
11365
11366
11367
11368File: gcc.info,  Node: Qualifiers implementation,  Next: Preprocessing directives implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
11369
113704.10 Qualifiers
11371===============
11372
11373   * `What constitutes an access to an object that has
11374     volatile-qualified type (6.7.3).'
11375
11376
11377
11378File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Qualifiers implementation,  Up: C Implementation
11379
113804.11 Preprocessing directives
11381=============================
11382
11383   * `How sequences in both forms of header names are mapped to headers
11384     or external source file names (6.4.7).'
11385
11386   * `Whether the value of a character constant in a constant expression
11387     that controls conditional inclusion matches the value of the same
11388     character constant in the execution character set (6.10.1).'
11389
11390   * `Whether the value of a single-character character constant in a
11391     constant expression that controls conditional inclusion may have a
11392     negative value (6.10.1).'
11393
11394   * `The places that are searched for an included `<>' delimited
11395     header, and how the places are specified or the header is
11396     identified (6.10.2).'
11397
11398   * `How the named source file is searched for in an included `""'
11399     delimited header (6.10.2).'
11400
11401   * `The method by which preprocessing tokens (possibly resulting from
11402     macro expansion) in a `#include' directive are combined into a
11403     header name (6.10.2).'
11404
11405   * `The nesting limit for `#include' processing (6.10.2).'
11406
11407     GCC imposes a limit of 200 nested `#include's.
11408
11409   * `Whether the `#' operator inserts a `\' character before the `\'
11410     character that begins a universal character name in a character
11411     constant or string literal (6.10.3.2).'
11412
11413   * `The behavior on each recognized non-`STDC #pragma' directive
11414     (6.10.6).'
11415
11416   * `The definitions for `__DATE__' and `__TIME__' when respectively,
11417     the date and time of translation are not available (6.10.8).'
11418
11419     If the date and time are not available, `__DATE__' expands to
11420     `"??? ?? ????"' and `__TIME__' expands to `"??:??:??"'.
11421
11422
11423
11424File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
11425
114264.12 Library functions
11427======================
11428
11429The behavior of these points are dependent on the implementation of the
11430C library, and are not defined by GCC itself.
11431
11432
11433File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
11434
114354.13 Architecture
11436=================
11437
11438   * `The values or expressions assigned to the macros specified in the
11439     headers `<float.h>', `<limits.h>', and `<stdint.h>' (5.2.4.2,
11440     7.18.2, 7.18.3).'
11441
11442   * `The number, order, and encoding of bytes in any object (when not
11443     explicitly specified in this International Standard) (6.2.6.1).'
11444
11445   * `The value of the result of the sizeof operator (6.5.3.4).'
11446
11447
11448
11449File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
11450
114514.14 Locale-specific behavior
11452=============================
11453
11454The behavior of these points are dependent on the implementation of the
11455C library, and are not defined by GCC itself.
11456
11457
11458File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C Implementation,  Up: Top
11459
114605 Extensions to the C Language Family
11461*************************************
11462
11463GNU C provides several language features not found in ISO standard C.
11464(The `-pedantic' option directs GCC to print a warning message if any
11465of these features is used.)  To test for the availability of these
11466features in conditional compilation, check for a predefined macro
11467`__GNUC__', which is always defined under GCC.
11468
11469 These extensions are available in C and Objective-C.  Most of them are
11470also available in C++.  *Note Extensions to the C++ Language: C++
11471Extensions, for extensions that apply _only_ to C++.
11472
11473 Some features that are in ISO C99 but not C89 or C++ are also, as
11474extensions, accepted by GCC in C89 mode and in C++.
11475
11476* Menu:
11477
11478* Statement Exprs::     Putting statements and declarations inside expressions.
11479* Local Labels::        Labels local to a block.
11480* Labels as Values::    Getting pointers to labels, and computed gotos.
11481* Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
11482* Constructing Calls::	Dispatching a call to another function.
11483* Typeof::              `typeof': referring to the type of an expression.
11484* Lvalues::             Using `?:', `,' and casts in lvalues.
11485* Conditionals::        Omitting the middle operand of a `?:' expression.
11486* Long Long::		Double-word integers---`long long int'.
11487* Complex::             Data types for complex numbers.
11488* Hex Floats::          Hexadecimal floating-point constants.
11489* Zero Length::         Zero-length arrays.
11490* Variable Length::     Arrays whose length is computed at run time.
11491* Empty Structures::    Structures with no members.
11492* Variadic Macros::	Macros with a variable number of arguments.
11493* Escaped Newlines::    Slightly looser rules for escaped newlines.
11494* Subscripting::        Any array can be subscripted, even if not an lvalue.
11495* Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
11496* Initializers::        Non-constant initializers.
11497* Compound Literals::   Compound literals give structures, unions
11498                         or arrays as values.
11499* Designated Inits::	Labeling elements of initializers.
11500* Cast to Union::       Casting to union type from any member of the union.
11501* Case Ranges::		`case 1 ... 9' and such.
11502* Mixed Declarations::	Mixing declarations and code.
11503* Function Attributes:: Declaring that functions have no side effects,
11504                         or that they can never return.
11505* Attribute Syntax::    Formal syntax for attributes.
11506* Function Prototypes:: Prototype declarations and old-style definitions.
11507* C++ Comments::        C++ comments are recognized.
11508* Dollar Signs::        Dollar sign is allowed in identifiers.
11509* Character Escapes::   `\e' stands for the character <ESC>.
11510* Variable Attributes::	Specifying attributes of variables.
11511* Type Attributes::	Specifying attributes of types.
11512* Alignment::           Inquiring about the alignment of a type or variable.
11513* Inline::              Defining inline functions (as fast as macros).
11514* Extended Asm::        Assembler instructions with C expressions as operands.
11515                         (With them you can define ``built-in'' functions.)
11516* Constraints::         Constraints for asm operands
11517* Asm Labels::          Specifying the assembler name to use for a C symbol.
11518* Explicit Reg Vars::   Defining variables residing in specified registers.
11519* Alternate Keywords::  `__const__', `__asm__', etc., for header files.
11520* Incomplete Enums::    `enum foo;', with details to follow.
11521* Function Names::	Printable strings which are the name of the current
11522			 function.
11523* Return Address::      Getting the return or frame address of a function.
11524* Vector Extensions::   Using vector instructions through built-in functions.
11525* Other Builtins::      Other built-in functions.
11526* Target Builtins::     Built-in functions specific to particular targets.
11527* Pragmas::             Pragmas accepted by GCC.
11528* Unnamed Fields::      Unnamed struct/union fields within structs/unions.
11529* Thread-Local::        Per-thread variables.
11530
11531
11532File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
11533
115345.1 Statements and Declarations in Expressions
11535==============================================
11536
11537A compound statement enclosed in parentheses may appear as an expression
11538in GNU C.  This allows you to use loops, switches, and local variables
11539within an expression.
11540
11541 Recall that a compound statement is a sequence of statements surrounded
11542by braces; in this construct, parentheses go around the braces.  For
11543example:
11544
11545     ({ int y = foo (); int z;
11546        if (y > 0) z = y;
11547        else z = - y;
11548        z; })
11549
11550is a valid (though slightly more complex than necessary) expression for
11551the absolute value of `foo ()'.
11552
11553 The last thing in the compound statement should be an expression
11554followed by a semicolon; the value of this subexpression serves as the
11555value of the entire construct.  (If you use some other kind of statement
11556last within the braces, the construct has type `void', and thus
11557effectively no value.)
11558
11559 This feature is especially useful in making macro definitions "safe"
11560(so that they evaluate each operand exactly once).  For example, the
11561"maximum" function is commonly defined as a macro in standard C as
11562follows:
11563
11564     #define max(a,b) ((a) > (b) ? (a) : (b))
11565
11566But this definition computes either A or B twice, with bad results if
11567the operand has side effects.  In GNU C, if you know the type of the
11568operands (here taken as `int'), you can define the macro safely as
11569follows:
11570
11571     #define maxint(a,b) \
11572       ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
11573
11574 Embedded statements are not allowed in constant expressions, such as
11575the value of an enumeration constant, the width of a bit-field, or the
11576initial value of a static variable.
11577
11578 If you don't know the type of the operand, you can still do this, but
11579you must use `typeof' (*note Typeof::).
11580
11581 In G++, the result value of a statement expression undergoes array and
11582function pointer decay, and is returned by value to the enclosing
11583expression. For instance, if `A' is a class, then
11584
11585             A a;
11586
11587             ({a;}).Foo ()
11588
11589will construct a temporary `A' object to hold the result of the
11590statement expression, and that will be used to invoke `Foo'.  Therefore
11591the `this' pointer observed by `Foo' will not be the address of `a'.
11592
11593 Any temporaries created within a statement within a statement
11594expression will be destroyed at the statement's end.  This makes
11595statement expressions inside macros slightly different from function
11596calls.  In the latter case temporaries introduced during argument
11597evaluation will be destroyed at the end of the statement that includes
11598the function call.  In the statement expression case they will be
11599destroyed during the statement expression.  For instance,
11600
11601     #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
11602     template<typename T> T function(T a) { T b = a; return b + 3; }
11603
11604     void foo ()
11605     {
11606       macro (X ());
11607       function (X ());
11608     }
11609
11610will have different places where temporaries are destroyed.  For the
11611`macro' case, the temporary `X' will be destroyed just after the
11612initialization of `b'.  In the `function' case that temporary will be
11613destroyed when the function returns.
11614
11615 These considerations mean that it is probably a bad idea to use
11616statement-expressions of this form in header files that are designed to
11617work with C++.  (Note that some versions of the GNU C Library contained
11618header files using statement-expression that lead to precisely this
11619bug.)
11620
11621
11622File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
11623
116245.2 Locally Declared Labels
11625===========================
11626
11627GCC allows you to declare "local labels" in any nested block scope. A
11628local label is just like an ordinary label, but you can only reference
11629it (with a `goto' statement, or by taking its address) within the block
11630in which it was declared.
11631
11632 A local label declaration looks like this:
11633
11634     __label__ LABEL;
11635
11636or
11637
11638     __label__ LABEL1, LABEL2, /* ... */;
11639
11640 Local label declarations must come at the beginning of the block,
11641before any ordinary declarations or statements.
11642
11643 The label declaration defines the label _name_, but does not define
11644the label itself.  You must do this in the usual way, with `LABEL:',
11645within the statements of the statement expression.
11646
11647 The local label feature is useful for complex macros.  If a macro
11648contains nested loops, a `goto' can be useful for breaking out of them.
11649However, an ordinary label whose scope is the whole function cannot be
11650used: if the macro can be expanded several times in one function, the
11651label will be multiply defined in that function.  A local label avoids
11652this problem.  For example:
11653
11654     #define SEARCH(value, array, target)              \
11655     do {                                              \
11656       __label__ found;                                \
11657       typeof (target) _SEARCH_target = (target);      \
11658       typeof (*(array)) *_SEARCH_array = (array);     \
11659       int i, j;                                       \
11660       int value;                                      \
11661       for (i = 0; i < max; i++)                       \
11662         for (j = 0; j < max; j++)                     \
11663           if (_SEARCH_array[i][j] == _SEARCH_target)  \
11664             { (value) = i; goto found; }              \
11665       (value) = -1;                                   \
11666      found:;                                          \
11667     } while (0)
11668
11669 This could also be written using a statement-expression:
11670
11671     #define SEARCH(array, target)                     \
11672     ({                                                \
11673       __label__ found;                                \
11674       typeof (target) _SEARCH_target = (target);      \
11675       typeof (*(array)) *_SEARCH_array = (array);     \
11676       int i, j;                                       \
11677       int value;                                      \
11678       for (i = 0; i < max; i++)                       \
11679         for (j = 0; j < max; j++)                     \
11680           if (_SEARCH_array[i][j] == _SEARCH_target)  \
11681             { value = i; goto found; }                \
11682       value = -1;                                     \
11683      found:                                           \
11684       value;                                          \
11685     })
11686
11687 Local label declarations also make the labels they declare visible to
11688nested functions, if there are any.  *Note Nested Functions::, for
11689details.
11690
11691
11692File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
11693
116945.3 Labels as Values
11695====================
11696
11697You can get the address of a label defined in the current function (or
11698a containing function) with the unary operator `&&'.  The value has
11699type `void *'.  This value is a constant and can be used wherever a
11700constant of that type is valid.  For example:
11701
11702     void *ptr;
11703     /* ... */
11704     ptr = &&foo;
11705
11706 To use these values, you need to be able to jump to one.  This is done
11707with the computed goto statement(1), `goto *EXP;'.  For example,
11708
11709     goto *ptr;
11710
11711Any expression of type `void *' is allowed.
11712
11713 One way of using these constants is in initializing a static array that
11714will serve as a jump table:
11715
11716     static void *array[] = { &&foo, &&bar, &&hack };
11717
11718 Then you can select a label with indexing, like this:
11719
11720     goto *array[i];
11721
11722Note that this does not check whether the subscript is in bounds--array
11723indexing in C never does that.
11724
11725 Such an array of label values serves a purpose much like that of the
11726`switch' statement.  The `switch' statement is cleaner, so use that
11727rather than an array unless the problem does not fit a `switch'
11728statement very well.
11729
11730 Another use of label values is in an interpreter for threaded code.
11731The labels within the interpreter function can be stored in the
11732threaded code for super-fast dispatching.
11733
11734 You may not use this mechanism to jump to code in a different function.
11735If you do that, totally unpredictable things will happen.  The best way
11736to avoid this is to store the label address only in automatic variables
11737and never pass it as an argument.
11738
11739 An alternate way to write the above example is
11740
11741     static const int array[] = { &&foo - &&foo, &&bar - &&foo,
11742                                  &&hack - &&foo };
11743     goto *(&&foo + array[i]);
11744
11745This is more friendly to code living in shared libraries, as it reduces
11746the number of dynamic relocations that are needed, and by consequence,
11747allows the data to be read-only.
11748
11749 ---------- Footnotes ----------
11750
11751 (1) The analogous feature in Fortran is called an assigned goto, but
11752that name seems inappropriate in C, where one can do more than simply
11753store label addresses in label variables.
11754
11755
11756File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
11757
117585.4 Nested Functions
11759====================
11760
11761A "nested function" is a function defined inside another function.
11762(Nested functions are not supported for GNU C++.)  The nested function's
11763name is local to the block where it is defined.  For example, here we
11764define a nested function named `square', and call it twice:
11765
11766     foo (double a, double b)
11767     {
11768       double square (double z) { return z * z; }
11769
11770       return square (a) + square (b);
11771     }
11772
11773 The nested function can access all the variables of the containing
11774function that are visible at the point of its definition.  This is
11775called "lexical scoping".  For example, here we show a nested function
11776which uses an inherited variable named `offset':
11777
11778     bar (int *array, int offset, int size)
11779     {
11780       int access (int *array, int index)
11781         { return array[index + offset]; }
11782       int i;
11783       /* ... */
11784       for (i = 0; i < size; i++)
11785         /* ... */ access (array, i) /* ... */
11786     }
11787
11788 Nested function definitions are permitted within functions in the
11789places where variable definitions are allowed; that is, in any block,
11790before the first statement in the block.
11791
11792 It is possible to call the nested function from outside the scope of
11793its name by storing its address or passing the address to another
11794function:
11795
11796     hack (int *array, int size)
11797     {
11798       void store (int index, int value)
11799         { array[index] = value; }
11800
11801       intermediate (store, size);
11802     }
11803
11804 Here, the function `intermediate' receives the address of `store' as
11805an argument.  If `intermediate' calls `store', the arguments given to
11806`store' are used to store into `array'.  But this technique works only
11807so long as the containing function (`hack', in this example) does not
11808exit.
11809
11810 If you try to call the nested function through its address after the
11811containing function has exited, all hell will break loose.  If you try
11812to call it after a containing scope level has exited, and if it refers
11813to some of the variables that are no longer in scope, you may be lucky,
11814but it's not wise to take the risk.  If, however, the nested function
11815does not refer to anything that has gone out of scope, you should be
11816safe.
11817
11818 GCC implements taking the address of a nested function using a
11819technique called "trampolines".  A paper describing them is available as
11820
11821`http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
11822
11823 A nested function can jump to a label inherited from a containing
11824function, provided the label was explicitly declared in the containing
11825function (*note Local Labels::).  Such a jump returns instantly to the
11826containing function, exiting the nested function which did the `goto'
11827and any intermediate functions as well.  Here is an example:
11828
11829     bar (int *array, int offset, int size)
11830     {
11831       __label__ failure;
11832       int access (int *array, int index)
11833         {
11834           if (index > size)
11835             goto failure;
11836           return array[index + offset];
11837         }
11838       int i;
11839       /* ... */
11840       for (i = 0; i < size; i++)
11841         /* ... */ access (array, i) /* ... */
11842       /* ... */
11843       return 0;
11844
11845      /* Control comes here from `access'
11846         if it detects an error.  */
11847      failure:
11848       return -1;
11849     }
11850
11851 A nested function always has internal linkage.  Declaring one with
11852`extern' is erroneous.  If you need to declare the nested function
11853before its definition, use `auto' (which is otherwise meaningless for
11854function declarations).
11855
11856     bar (int *array, int offset, int size)
11857     {
11858       __label__ failure;
11859       auto int access (int *, int);
11860       /* ... */
11861       int access (int *array, int index)
11862         {
11863           if (index > size)
11864             goto failure;
11865           return array[index + offset];
11866         }
11867       /* ... */
11868     }
11869
11870
11871File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
11872
118735.5 Constructing Function Calls
11874===============================
11875
11876Using the built-in functions described below, you can record the
11877arguments a function received, and call another function with the same
11878arguments, without knowing the number or types of the arguments.
11879
11880 You can also record the return value of that function call, and later
11881return that value, without knowing what data type the function tried to
11882return (as long as your caller expects that data type).
11883
11884 However, these built-in functions may interact badly with some
11885sophisticated features or other extensions of the language.  It is,
11886therefore, not recommended to use them outside very simple functions
11887acting as mere forwarders for their arguments.
11888
11889 -- Built-in Function: void * __builtin_apply_args ()
11890     This built-in function returns a pointer to data describing how to
11891     perform a call with the same arguments as were passed to the
11892     current function.
11893
11894     The function saves the arg pointer register, structure value
11895     address, and all registers that might be used to pass arguments to
11896     a function into a block of memory allocated on the stack.  Then it
11897     returns the address of that block.
11898
11899 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
11900          *ARGUMENTS, size_t SIZE)
11901     This built-in function invokes FUNCTION with a copy of the
11902     parameters described by ARGUMENTS and SIZE.
11903
11904     The value of ARGUMENTS should be the value returned by
11905     `__builtin_apply_args'.  The argument SIZE specifies the size of
11906     the stack argument data, in bytes.
11907
11908     This function returns a pointer to data describing how to return
11909     whatever value was returned by FUNCTION.  The data is saved in a
11910     block of memory allocated on the stack.
11911
11912     It is not always simple to compute the proper value for SIZE.  The
11913     value is used by `__builtin_apply' to compute the amount of data
11914     that should be pushed on the stack and copied from the incoming
11915     argument area.
11916
11917 -- Built-in Function: void __builtin_return (void *RESULT)
11918     This built-in function returns the value described by RESULT from
11919     the containing function.  You should specify, for RESULT, a value
11920     returned by `__builtin_apply'.
11921
11922
11923File: gcc.info,  Node: Typeof,  Next: Lvalues,  Prev: Constructing Calls,  Up: C Extensions
11924
119255.6 Referring to a Type with `typeof'
11926=====================================
11927
11928Another way to refer to the type of an expression is with `typeof'.
11929The syntax of using of this keyword looks like `sizeof', but the
11930construct acts semantically like a type name defined with `typedef'.
11931
11932 There are two ways of writing the argument to `typeof': with an
11933expression or with a type.  Here is an example with an expression:
11934
11935     typeof (x[0](1))
11936
11937This assumes that `x' is an array of pointers to functions; the type
11938described is that of the values of the functions.
11939
11940 Here is an example with a typename as the argument:
11941
11942     typeof (int *)
11943
11944Here the type described is that of pointers to `int'.
11945
11946 If you are writing a header file that must work when included in ISO C
11947programs, write `__typeof__' instead of `typeof'.  *Note Alternate
11948Keywords::.
11949
11950 A `typeof'-construct can be used anywhere a typedef name could be
11951used.  For example, you can use it in a declaration, in a cast, or
11952inside of `sizeof' or `typeof'.
11953
11954 `typeof' is often useful in conjunction with the
11955statements-within-expressions feature.  Here is how the two together can
11956be used to define a safe "maximum" macro that operates on any
11957arithmetic type and evaluates each of its arguments exactly once:
11958
11959     #define max(a,b) \
11960       ({ typeof (a) _a = (a); \
11961           typeof (b) _b = (b); \
11962         _a > _b ? _a : _b; })
11963
11964 The reason for using names that start with underscores for the local
11965variables is to avoid conflicts with variable names that occur within
11966the expressions that are substituted for `a' and `b'.  Eventually we
11967hope to design a new form of declaration syntax that allows you to
11968declare variables whose scopes start only after their initializers;
11969this will be a more reliable way to prevent such conflicts.
11970
11971Some more examples of the use of `typeof':
11972
11973   * This declares `y' with the type of what `x' points to.
11974
11975          typeof (*x) y;
11976
11977   * This declares `y' as an array of such values.
11978
11979          typeof (*x) y[4];
11980
11981   * This declares `y' as an array of pointers to characters:
11982
11983          typeof (typeof (char *)[4]) y;
11984
11985     It is equivalent to the following traditional C declaration:
11986
11987          char *y[4];
11988
11989     To see the meaning of the declaration using `typeof', and why it
11990     might be a useful way to write, rewrite it with these macros:
11991
11992          #define pointer(T)  typeof(T *)
11993          #define array(T, N) typeof(T [N])
11994
11995     Now the declaration can be rewritten this way:
11996
11997          array (pointer (char), 4) y;
11998
11999     Thus, `array (pointer (char), 4)' is the type of arrays of 4
12000     pointers to `char'.
12001
12002 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
12003limited extension which permitted one to write
12004
12005     typedef T = EXPR;
12006
12007with the effect of declaring T to have the type of the expression EXPR.
12008This extension does not work with GCC 3 (versions between 3.0 and 3.2
12009will crash; 3.2.1 and later give an error).  Code which relies on it
12010should be rewritten to use `typeof':
12011
12012     typedef typeof(EXPR) T;
12013
12014This will work with all versions of GCC.
12015
12016
12017File: gcc.info,  Node: Lvalues,  Next: Conditionals,  Prev: Typeof,  Up: C Extensions
12018
120195.7 Generalized Lvalues
12020=======================
12021
12022Compound expressions, conditional expressions and casts are allowed as
12023lvalues provided their operands are lvalues.  This means that you can
12024take their addresses or store values into them.  All these extensions
12025are deprecated.
12026
12027 Standard C++ allows compound expressions and conditional expressions
12028as lvalues, and permits casts to reference type, so use of this
12029extension is not supported for C++ code.
12030
12031 For example, a compound expression can be assigned, provided the last
12032expression in the sequence is an lvalue.  These two expressions are
12033equivalent:
12034
12035     (a, b) += 5
12036     a, (b += 5)
12037
12038 Similarly, the address of the compound expression can be taken.  These
12039two expressions are equivalent:
12040
12041     &(a, b)
12042     a, &b
12043
12044 A conditional expression is a valid lvalue if its type is not void and
12045the true and false branches are both valid lvalues.  For example, these
12046two expressions are equivalent:
12047
12048     (a ? b : c) = 5
12049     (a ? b = 5 : (c = 5))
12050
12051 A cast is a valid lvalue if its operand is an lvalue.  This extension
12052is deprecated.  A simple assignment whose left-hand side is a cast
12053works by converting the right-hand side first to the specified type,
12054then to the type of the inner left-hand side expression.  After this is
12055stored, the value is converted back to the specified type to become the
12056value of the assignment.  Thus, if `a' has type `char *', the following
12057two expressions are equivalent:
12058
12059     (int)a = 5
12060     (int)(a = (char *)(int)5)
12061
12062 An assignment-with-arithmetic operation such as `+=' applied to a cast
12063performs the arithmetic using the type resulting from the cast, and then
12064continues as in the previous case.  Therefore, these two expressions are
12065equivalent:
12066
12067     (int)a += 5
12068     (int)(a = (char *)(int) ((int)a + 5))
12069
12070 You cannot take the address of an lvalue cast, because the use of its
12071address would not work out coherently.  Suppose that `&(int)f' were
12072permitted, where `f' has type `float'.  Then the following statement
12073would try to store an integer bit-pattern where a floating point number
12074belongs:
12075
12076     *&(int)f = 1;
12077
12078 This is quite different from what `(int)f = 1' would do--that would
12079convert 1 to floating point and store it.  Rather than cause this
12080inconsistency, we think it is better to prohibit use of `&' on a cast.
12081
12082 If you really do want an `int *' pointer with the address of `f', you
12083can simply write `(int *)&f'.
12084
12085
12086File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Lvalues,  Up: C Extensions
12087
120885.8 Conditionals with Omitted Operands
12089======================================
12090
12091The middle operand in a conditional expression may be omitted.  Then if
12092the first operand is nonzero, its value is the value of the conditional
12093expression.
12094
12095 Therefore, the expression
12096
12097     x ? : y
12098
12099has the value of `x' if that is nonzero; otherwise, the value of `y'.
12100
12101 This example is perfectly equivalent to
12102
12103     x ? x : y
12104
12105In this simple case, the ability to omit the middle operand is not
12106especially useful.  When it becomes useful is when the first operand
12107does, or may (if it is a macro argument), contain a side effect.  Then
12108repeating the operand in the middle would perform the side effect
12109twice.  Omitting the middle operand uses the value already computed
12110without the undesirable effects of recomputing it.
12111
12112
12113File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
12114
121155.9 Double-Word Integers
12116========================
12117
12118ISO C99 supports data types for integers that are at least 64 bits wide,
12119and as an extension GCC supports them in C89 mode and in C++.  Simply
12120write `long long int' for a signed integer, or `unsigned long long int'
12121for an unsigned integer.  To make an integer constant of type `long
12122long int', add the suffix `LL' to the integer.  To make an integer
12123constant of type `unsigned long long int', add the suffix `ULL' to the
12124integer.
12125
12126 You can use these types in arithmetic like any other integer types.
12127Addition, subtraction, and bitwise boolean operations on these types
12128are open-coded on all types of machines.  Multiplication is open-coded
12129if the machine supports fullword-to-doubleword a widening multiply
12130instruction.  Division and shifts are open-coded only on machines that
12131provide special support.  The operations that are not open-coded use
12132special library routines that come with GCC.
12133
12134 There may be pitfalls when you use `long long' types for function
12135arguments, unless you declare function prototypes.  If a function
12136expects type `int' for its argument, and you pass a value of type `long
12137long int', confusion will result because the caller and the subroutine
12138will disagree about the number of bytes for the argument.  Likewise, if
12139the function expects `long long int' and you pass `int'.  The best way
12140to avoid such problems is to use prototypes.
12141
12142
12143File: gcc.info,  Node: Complex,  Next: Hex Floats,  Prev: Long Long,  Up: C Extensions
12144
121455.10 Complex Numbers
12146====================
12147
12148ISO C99 supports complex floating data types, and as an extension GCC
12149supports them in C89 mode and in C++, and supports complex integer data
12150types which are not part of ISO C99.  You can declare complex types
12151using the keyword `_Complex'.  As an extension, the older GNU keyword
12152`__complex__' is also supported.
12153
12154 For example, `_Complex double x;' declares `x' as a variable whose
12155real part and imaginary part are both of type `double'.  `_Complex
12156short int y;' declares `y' to have real and imaginary parts of type
12157`short int'; this is not likely to be useful, but it shows that the set
12158of complex types is complete.
12159
12160 To write a constant with a complex data type, use the suffix `i' or
12161`j' (either one; they are equivalent).  For example, `2.5fi' has type
12162`_Complex float' and `3i' has type `_Complex int'.  Such a constant
12163always has a pure imaginary value, but you can form any complex value
12164you like by adding one to a real constant.  This is a GNU extension; if
12165you have an ISO C99 conforming C library (such as GNU libc), and want
12166to construct complex constants of floating type, you should include
12167`<complex.h>' and use the macros `I' or `_Complex_I' instead.
12168
12169 To extract the real part of a complex-valued expression EXP, write
12170`__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
12171part.  This is a GNU extension; for values of floating type, you should
12172use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
12173`cimag' and `cimagl', declared in `<complex.h>' and also provided as
12174built-in functions by GCC.
12175
12176 The operator `~' performs complex conjugation when used on a value
12177with a complex type.  This is a GNU extension; for values of floating
12178type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
12179declared in `<complex.h>' and also provided as built-in functions by
12180GCC.
12181
12182 GCC can allocate complex automatic variables in a noncontiguous
12183fashion; it's even possible for the real part to be in a register while
12184the imaginary part is on the stack (or vice-versa).  Only the DWARF2
12185debug info format can represent this, so use of DWARF2 is recommended.
12186If you are using the stabs debug info format, GCC describes a
12187noncontiguous complex variable as if it were two separate variables of
12188noncomplex type.  If the variable's actual name is `foo', the two
12189fictitious variables are named `foo$real' and `foo$imag'.  You can
12190examine and set these two fictitious variables with your debugger.
12191
12192
12193File: gcc.info,  Node: Hex Floats,  Next: Zero Length,  Prev: Complex,  Up: C Extensions
12194
121955.11 Hex Floats
12196===============
12197
12198ISO C99 supports floating-point numbers written not only in the usual
12199decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
12200written in hexadecimal format.  As a GNU extension, GCC supports this
12201in C89 mode (except in some cases when strictly conforming) and in C++.
12202In that format the `0x' hex introducer and the `p' or `P' exponent
12203field are mandatory.  The exponent is a decimal number that indicates
12204the power of 2 by which the significant part will be multiplied.  Thus
12205`0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
12206is the same as `1.55e1'.
12207
12208 Unlike for floating-point numbers in the decimal notation the exponent
12209is always required in the hexadecimal notation.  Otherwise the compiler
12210would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
12211could mean `1.0f' or `1.9375' since `f' is also the extension for
12212floating-point constants of type `float'.
12213
12214
12215File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Hex Floats,  Up: C Extensions
12216
122175.12 Arrays of Length Zero
12218==========================
12219
12220Zero-length arrays are allowed in GNU C.  They are very useful as the
12221last element of a structure which is really a header for a
12222variable-length object:
12223
12224     struct line {
12225       int length;
12226       char contents[0];
12227     };
12228
12229     struct line *thisline = (struct line *)
12230       malloc (sizeof (struct line) + this_length);
12231     thisline->length = this_length;
12232
12233 In ISO C90, you would have to give `contents' a length of 1, which
12234means either you waste space or complicate the argument to `malloc'.
12235
12236 In ISO C99, you would use a "flexible array member", which is slightly
12237different in syntax and semantics:
12238
12239   * Flexible array members are written as `contents[]' without the `0'.
12240
12241   * Flexible array members have incomplete type, and so the `sizeof'
12242     operator may not be applied.  As a quirk of the original
12243     implementation of zero-length arrays, `sizeof' evaluates to zero.
12244
12245   * Flexible array members may only appear as the last member of a
12246     `struct' that is otherwise non-empty.
12247
12248   * A structure containing a flexible array member, or a union
12249     containing such a structure (possibly recursively), may not be a
12250     member of a structure or an element of an array.  (However, these
12251     uses are permitted by GCC as extensions.)
12252
12253 GCC versions before 3.0 allowed zero-length arrays to be statically
12254initialized, as if they were flexible arrays.  In addition to those
12255cases that were useful, it also allowed initializations in situations
12256that would corrupt later data.  Non-empty initialization of zero-length
12257arrays is now treated like any case where there are more initializer
12258elements than the array holds, in that a suitable warning about "excess
12259elements in array" is given, and the excess elements (all of them, in
12260this case) are ignored.
12261
12262 Instead GCC allows static initialization of flexible array members.
12263This is equivalent to defining a new structure containing the original
12264structure followed by an array of sufficient size to contain the data.
12265I.e. in the following, `f1' is constructed as if it were declared like
12266`f2'.
12267
12268     struct f1 {
12269       int x; int y[];
12270     } f1 = { 1, { 2, 3, 4 } };
12271
12272     struct f2 {
12273       struct f1 f1; int data[3];
12274     } f2 = { { 1 }, { 2, 3, 4 } };
12275
12276The convenience of this extension is that `f1' has the desired type,
12277eliminating the need to consistently refer to `f2.f1'.
12278
12279 This has symmetry with normal static arrays, in that an array of
12280unknown size is also written with `[]'.
12281
12282 Of course, this extension only makes sense if the extra data comes at
12283the end of a top-level object, as otherwise we would be overwriting
12284data at subsequent offsets.  To avoid undue complication and confusion
12285with initialization of deeply nested arrays, we simply disallow any
12286non-empty initialization except when the structure is the top-level
12287object.  For example:
12288
12289     struct foo { int x; int y[]; };
12290     struct bar { struct foo z; };
12291
12292     struct foo a = { 1, { 2, 3, 4 } };        // Valid.
12293     struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
12294     struct bar c = { { 1, { } } };            // Valid.
12295     struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
12296
12297
12298File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
12299
123005.13 Structures With No Members
12301===============================
12302
12303GCC permits a C structure to have no members:
12304
12305     struct empty {
12306     };
12307
12308 The structure will have size zero.  In C++, empty structures are part
12309of the language.  G++ treats empty structures as if they had a single
12310member of type `char'.
12311
12312
12313File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
12314
123155.14 Arrays of Variable Length
12316==============================
12317
12318Variable-length automatic arrays are allowed in ISO C99, and as an
12319extension GCC accepts them in C89 mode and in C++.  (However, GCC's
12320implementation of variable-length arrays does not yet conform in detail
12321to the ISO C99 standard.)  These arrays are declared like any other
12322automatic arrays, but with a length that is not a constant expression.
12323The storage is allocated at the point of declaration and deallocated
12324when the brace-level is exited.  For example:
12325
12326     FILE *
12327     concat_fopen (char *s1, char *s2, char *mode)
12328     {
12329       char str[strlen (s1) + strlen (s2) + 1];
12330       strcpy (str, s1);
12331       strcat (str, s2);
12332       return fopen (str, mode);
12333     }
12334
12335 Jumping or breaking out of the scope of the array name deallocates the
12336storage.  Jumping into the scope is not allowed; you get an error
12337message for it.
12338
12339 You can use the function `alloca' to get an effect much like
12340variable-length arrays.  The function `alloca' is available in many
12341other C implementations (but not in all).  On the other hand,
12342variable-length arrays are more elegant.
12343
12344 There are other differences between these two methods.  Space allocated
12345with `alloca' exists until the containing _function_ returns.  The
12346space for a variable-length array is deallocated as soon as the array
12347name's scope ends.  (If you use both variable-length arrays and
12348`alloca' in the same function, deallocation of a variable-length array
12349will also deallocate anything more recently allocated with `alloca'.)
12350
12351 You can also use variable-length arrays as arguments to functions:
12352
12353     struct entry
12354     tester (int len, char data[len][len])
12355     {
12356       /* ... */
12357     }
12358
12359 The length of an array is computed once when the storage is allocated
12360and is remembered for the scope of the array in case you access it with
12361`sizeof'.
12362
12363 If you want to pass the array first and the length afterward, you can
12364use a forward declaration in the parameter list--another GNU extension.
12365
12366     struct entry
12367     tester (int len; char data[len][len], int len)
12368     {
12369       /* ... */
12370     }
12371
12372 The `int len' before the semicolon is a "parameter forward
12373declaration", and it serves the purpose of making the name `len' known
12374when the declaration of `data' is parsed.
12375
12376 You can write any number of such parameter forward declarations in the
12377parameter list.  They can be separated by commas or semicolons, but the
12378last one must end with a semicolon, which is followed by the "real"
12379parameter declarations.  Each forward declaration must match a "real"
12380declaration in parameter name and data type.  ISO C99 does not support
12381parameter forward declarations.
12382
12383
12384File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
12385
123865.15 Macros with a Variable Number of Arguments.
12387================================================
12388
12389In the ISO C standard of 1999, a macro can be declared to accept a
12390variable number of arguments much as a function can.  The syntax for
12391defining the macro is similar to that of a function.  Here is an
12392example:
12393
12394     #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
12395
12396 Here `...' is a "variable argument".  In the invocation of such a
12397macro, it represents the zero or more tokens until the closing
12398parenthesis that ends the invocation, including any commas.  This set of
12399tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
12400it appears.  See the CPP manual for more information.
12401
12402 GCC has long supported variadic macros, and used a different syntax
12403that allowed you to give a name to the variable arguments just like any
12404other argument.  Here is an example:
12405
12406     #define debug(format, args...) fprintf (stderr, format, args)
12407
12408 This is in all ways equivalent to the ISO C example above, but arguably
12409more readable and descriptive.
12410
12411 GNU CPP has two further variadic macro extensions, and permits them to
12412be used with either of the above forms of macro definition.
12413
12414 In standard C, you are not allowed to leave the variable argument out
12415entirely; but you are allowed to pass an empty argument.  For example,
12416this invocation is invalid in ISO C, because there is no comma after
12417the string:
12418
12419     debug ("A message")
12420
12421 GNU CPP permits you to completely omit the variable arguments in this
12422way.  In the above examples, the compiler would complain, though since
12423the expansion of the macro still has the extra comma after the format
12424string.
12425
12426 To help solve this problem, CPP behaves specially for variable
12427arguments used with the token paste operator, `##'.  If instead you
12428write
12429
12430     #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
12431
12432 and if the variable arguments are omitted or empty, the `##' operator
12433causes the preprocessor to remove the comma before it.  If you do
12434provide some variable arguments in your macro invocation, GNU CPP does
12435not complain about the paste operation and instead places the variable
12436arguments after the comma.  Just like any other pasted macro argument,
12437these arguments are not macro expanded.
12438
12439
12440File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
12441
124425.16 Slightly Looser Rules for Escaped Newlines
12443===============================================
12444
12445Recently, the preprocessor has relaxed its treatment of escaped
12446newlines.  Previously, the newline had to immediately follow a
12447backslash.  The current implementation allows whitespace in the form of
12448spaces, horizontal and vertical tabs, and form feeds between the
12449backslash and the subsequent newline.  The preprocessor issues a
12450warning, but treats it as a valid escaped newline and combines the two
12451lines to form a single logical line.  This works within comments and
12452tokens, as well as between tokens.  Comments are _not_ treated as
12453whitespace for the purposes of this relaxation, since they have not yet
12454been replaced with spaces.
12455
12456
12457File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
12458
124595.17 Non-Lvalue Arrays May Have Subscripts
12460==========================================
12461
12462In ISO C99, arrays that are not lvalues still decay to pointers, and
12463may be subscripted, although they may not be modified or used after the
12464next sequence point and the unary `&' operator may not be applied to
12465them.  As an extension, GCC allows such arrays to be subscripted in C89
12466mode, though otherwise they do not decay to pointers outside C99 mode.
12467For example, this is valid in GNU C though not valid in C89:
12468
12469     struct foo {int a[4];};
12470
12471     struct foo f();
12472
12473     bar (int index)
12474     {
12475       return f().a[index];
12476     }
12477
12478
12479File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
12480
124815.18 Arithmetic on `void'- and Function-Pointers
12482================================================
12483
12484In GNU C, addition and subtraction operations are supported on pointers
12485to `void' and on pointers to functions.  This is done by treating the
12486size of a `void' or of a function as 1.
12487
12488 A consequence of this is that `sizeof' is also allowed on `void' and
12489on function types, and returns 1.
12490
12491 The option `-Wpointer-arith' requests a warning if these extensions
12492are used.
12493
12494
12495File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
12496
124975.19 Non-Constant Initializers
12498==============================
12499
12500As in standard C++ and ISO C99, the elements of an aggregate
12501initializer for an automatic variable are not required to be constant
12502expressions in GNU C.  Here is an example of an initializer with
12503run-time varying elements:
12504
12505     foo (float f, float g)
12506     {
12507       float beat_freqs[2] = { f-g, f+g };
12508       /* ... */
12509     }
12510
12511
12512File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
12513
125145.20 Compound Literals
12515======================
12516
12517ISO C99 supports compound literals.  A compound literal looks like a
12518cast containing an initializer.  Its value is an object of the type
12519specified in the cast, containing the elements specified in the
12520initializer; it is an lvalue.  As an extension, GCC supports compound
12521literals in C89 mode and in C++.
12522
12523 Usually, the specified type is a structure.  Assume that `struct foo'
12524and `structure' are declared as shown:
12525
12526     struct foo {int a; char b[2];} structure;
12527
12528Here is an example of constructing a `struct foo' with a compound
12529literal:
12530
12531     structure = ((struct foo) {x + y, 'a', 0});
12532
12533This is equivalent to writing the following:
12534
12535     {
12536       struct foo temp = {x + y, 'a', 0};
12537       structure = temp;
12538     }
12539
12540 You can also construct an array.  If all the elements of the compound
12541literal are (made up of) simple constant expressions, suitable for use
12542in initializers of objects of static storage duration, then the compound
12543literal can be coerced to a pointer to its first element and used in
12544such an initializer, as shown here:
12545
12546     char **foo = (char *[]) { "x", "y", "z" };
12547
12548 Compound literals for scalar types and union types are is also
12549allowed, but then the compound literal is equivalent to a cast.
12550
12551 As a GNU extension, GCC allows initialization of objects with static
12552storage duration by compound literals (which is not possible in ISO
12553C99, because the initializer is not a constant).  It is handled as if
12554the object was initialized only with the bracket enclosed list if
12555compound literal's and object types match.  The initializer list of the
12556compound literal must be constant.  If the object being initialized has
12557array type of unknown size, the size is determined by compound literal
12558size.
12559
12560     static struct foo x = (struct foo) {1, 'a', 'b'};
12561     static int y[] = (int []) {1, 2, 3};
12562     static int z[] = (int [3]) {1};
12563
12564The above lines are equivalent to the following:
12565     static struct foo x = {1, 'a', 'b'};
12566     static int y[] = {1, 2, 3};
12567     static int z[] = {1, 0, 0};
12568
12569
12570File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
12571
125725.21 Designated Initializers
12573============================
12574
12575Standard C89 requires the elements of an initializer to appear in a
12576fixed order, the same as the order of the elements in the array or
12577structure being initialized.
12578
12579 In ISO C99 you can give the elements in any order, specifying the array
12580indices or structure field names they apply to, and GNU C allows this as
12581an extension in C89 mode as well.  This extension is not implemented in
12582GNU C++.
12583
12584 To specify an array index, write `[INDEX] =' before the element value.
12585For example,
12586
12587     int a[6] = { [4] = 29, [2] = 15 };
12588
12589is equivalent to
12590
12591     int a[6] = { 0, 0, 15, 0, 29, 0 };
12592
12593The index values must be constant expressions, even if the array being
12594initialized is automatic.
12595
12596 An alternative syntax for this which has been obsolete since GCC 2.5
12597but GCC still accepts is to write `[INDEX]' before the element value,
12598with no `='.
12599
12600 To initialize a range of elements to the same value, write `[FIRST ...
12601LAST] = VALUE'.  This is a GNU extension.  For example,
12602
12603     int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
12604
12605If the value in it has side-effects, the side-effects will happen only
12606once, not for each initialized field by the range initializer.
12607
12608Note that the length of the array is the highest value specified plus
12609one.
12610
12611 In a structure initializer, specify the name of a field to initialize
12612with `.FIELDNAME =' before the element value.  For example, given the
12613following structure,
12614
12615     struct point { int x, y; };
12616
12617the following initialization
12618
12619     struct point p = { .y = yvalue, .x = xvalue };
12620
12621is equivalent to
12622
12623     struct point p = { xvalue, yvalue };
12624
12625 Another syntax which has the same meaning, obsolete since GCC 2.5, is
12626`FIELDNAME:', as shown here:
12627
12628     struct point p = { y: yvalue, x: xvalue };
12629
12630 The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
12631also use a designator (or the obsolete colon syntax) when initializing
12632a union, to specify which element of the union should be used.  For
12633example,
12634
12635     union foo { int i; double d; };
12636
12637     union foo f = { .d = 4 };
12638
12639will convert 4 to a `double' to store it in the union using the second
12640element.  By contrast, casting 4 to type `union foo' would store it
12641into the union as the integer `i', since it is an integer.  (*Note Cast
12642to Union::.)
12643
12644 You can combine this technique of naming elements with ordinary C
12645initialization of successive elements.  Each initializer element that
12646does not have a designator applies to the next consecutive element of
12647the array or structure.  For example,
12648
12649     int a[6] = { [1] = v1, v2, [4] = v4 };
12650
12651is equivalent to
12652
12653     int a[6] = { 0, v1, v2, 0, v4, 0 };
12654
12655 Labeling the elements of an array initializer is especially useful
12656when the indices are characters or belong to an `enum' type.  For
12657example:
12658
12659     int whitespace[256]
12660       = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
12661           ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
12662
12663 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
12664before an `=' to specify a nested subobject to initialize; the list is
12665taken relative to the subobject corresponding to the closest
12666surrounding brace pair.  For example, with the `struct point'
12667declaration above:
12668
12669     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
12670
12671If the same field is initialized multiple times, it will have value from
12672the last initialization.  If any such overridden initialization has
12673side-effect, it is unspecified whether the side-effect happens or not.
12674Currently, GCC will discard them and issue a warning.
12675
12676
12677File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
12678
126795.22 Case Ranges
12680================
12681
12682You can specify a range of consecutive values in a single `case' label,
12683like this:
12684
12685     case LOW ... HIGH:
12686
12687This has the same effect as the proper number of individual `case'
12688labels, one for each integer value from LOW to HIGH, inclusive.
12689
12690 This feature is especially useful for ranges of ASCII character codes:
12691
12692     case 'A' ... 'Z':
12693
12694 *Be careful:* Write spaces around the `...', for otherwise it may be
12695parsed wrong when you use it with integer values.  For example, write
12696this:
12697
12698     case 1 ... 5:
12699
12700rather than this:
12701
12702     case 1...5:
12703
12704
12705File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
12706
127075.23 Cast to a Union Type
12708=========================
12709
12710A cast to union type is similar to other casts, except that the type
12711specified is a union type.  You can specify the type either with `union
12712TAG' or with a typedef name.  A cast to union is actually a constructor
12713though, not a cast, and hence does not yield an lvalue like normal
12714casts.  (*Note Compound Literals::.)
12715
12716 The types that may be cast to the union type are those of the members
12717of the union.  Thus, given the following union and variables:
12718
12719     union foo { int i; double d; };
12720     int x;
12721     double y;
12722
12723both `x' and `y' can be cast to type `union foo'.
12724
12725 Using the cast as the right-hand side of an assignment to a variable of
12726union type is equivalent to storing in a member of the union:
12727
12728     union foo u;
12729     /* ... */
12730     u = (union foo) x  ==  u.i = x
12731     u = (union foo) y  ==  u.d = y
12732
12733 You can also use the union cast as a function argument:
12734
12735     void hack (union foo);
12736     /* ... */
12737     hack ((union foo) x);
12738
12739
12740File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
12741
127425.24 Mixed Declarations and Code
12743================================
12744
12745ISO C99 and ISO C++ allow declarations and code to be freely mixed
12746within compound statements.  As an extension, GCC also allows this in
12747C89 mode.  For example, you could do:
12748
12749     int i;
12750     /* ... */
12751     i++;
12752     int j = i + 2;
12753
12754 Each identifier is visible from where it is declared until the end of
12755the enclosing block.
12756
12757
12758File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
12759
127605.25 Declaring Attributes of Functions
12761======================================
12762
12763In GNU C, you declare certain things about functions called in your
12764program which help the compiler optimize function calls and check your
12765code more carefully.
12766
12767 The keyword `__attribute__' allows you to specify special attributes
12768when making a declaration.  This keyword is followed by an attribute
12769specification inside double parentheses.  The following attributes are
12770currently defined for functions on all targets: `noreturn', `noinline',
12771`always_inline', `pure', `const', `nothrow', `format', `format_arg',
12772`no_instrument_function', `section', `constructor', `destructor',
12773`used', `unused', `deprecated', `weak', `malloc', `alias',
12774`warn_unused_result' and `nonnull'.  Several other attributes are
12775defined for functions on particular target systems.  Other attributes,
12776including `section' are supported for variables declarations (*note
12777Variable Attributes::) and for types (*note Type Attributes::).
12778
12779 You may also specify attributes with `__' preceding and following each
12780keyword.  This allows you to use them in header files without being
12781concerned about a possible macro of the same name.  For example, you
12782may use `__noreturn__' instead of `noreturn'.
12783
12784 *Note Attribute Syntax::, for details of the exact syntax for using
12785attributes.
12786
12787`noreturn'
12788     A few standard library functions, such as `abort' and `exit',
12789     cannot return.  GCC knows this automatically.  Some programs define
12790     their own functions that never return.  You can declare them
12791     `noreturn' to tell the compiler this fact.  For example,
12792
12793          void fatal () __attribute__ ((noreturn));
12794
12795          void
12796          fatal (/* ... */)
12797          {
12798            /* ... */ /* Print error message. */ /* ... */
12799            exit (1);
12800          }
12801
12802     The `noreturn' keyword tells the compiler to assume that `fatal'
12803     cannot return.  It can then optimize without regard to what would
12804     happen if `fatal' ever did return.  This makes slightly better
12805     code.  More importantly, it helps avoid spurious warnings of
12806     uninitialized variables.
12807
12808     The `noreturn' keyword does not affect the exceptional path when
12809     that applies: a `noreturn'-marked function may still return to the
12810     caller by throwing an exception.
12811
12812     Do not assume that registers saved by the calling function are
12813     restored before calling the `noreturn' function.
12814
12815     It does not make sense for a `noreturn' function to have a return
12816     type other than `void'.
12817
12818     The attribute `noreturn' is not implemented in GCC versions
12819     earlier than 2.5.  An alternative way to declare that a function
12820     does not return, which works in the current version and in some
12821     older versions, is as follows:
12822
12823          typedef void voidfn ();
12824
12825          volatile voidfn fatal;
12826
12827`noinline'
12828     This function attribute prevents a function from being considered
12829     for inlining.
12830
12831`always_inline'
12832     Generally, functions are not inlined unless optimization is
12833     specified.  For functions declared inline, this attribute inlines
12834     the function even if no optimization level was specified.
12835
12836`pure'
12837     Many functions have no effects except the return value and their
12838     return value depends only on the parameters and/or global
12839     variables.  Such a function can be subject to common subexpression
12840     elimination and loop optimization just as an arithmetic operator
12841     would be.  These functions should be declared with the attribute
12842     `pure'.  For example,
12843
12844          int square (int) __attribute__ ((pure));
12845
12846     says that the hypothetical function `square' is safe to call fewer
12847     times than the program says.
12848
12849     Some of common examples of pure functions are `strlen' or `memcmp'.
12850     Interesting non-pure functions are functions with infinite loops
12851     or those depending on volatile memory or other system resource,
12852     that may change between two consecutive calls (such as `feof' in a
12853     multithreading environment).
12854
12855     The attribute `pure' is not implemented in GCC versions earlier
12856     than 2.96.
12857
12858`const'
12859     Many functions do not examine any values except their arguments,
12860     and have no effects except the return value.  Basically this is
12861     just slightly more strict class than the `pure' attribute above,
12862     since function is not allowed to read global memory.
12863
12864     Note that a function that has pointer arguments and examines the
12865     data pointed to must _not_ be declared `const'.  Likewise, a
12866     function that calls a non-`const' function usually must not be
12867     `const'.  It does not make sense for a `const' function to return
12868     `void'.
12869
12870     The attribute `const' is not implemented in GCC versions earlier
12871     than 2.5.  An alternative way to declare that a function has no
12872     side effects, which works in the current version and in some older
12873     versions, is as follows:
12874
12875          typedef int intfn ();
12876
12877          extern const intfn square;
12878
12879     This approach does not work in GNU C++ from 2.6.0 on, since the
12880     language specifies that the `const' must be attached to the return
12881     value.
12882
12883`nothrow'
12884     The `nothrow' attribute is used to inform the compiler that a
12885     function cannot throw an exception.  For example, most functions in
12886     the standard C library can be guaranteed not to throw an exception
12887     with the notable exceptions of `qsort' and `bsearch' that take
12888     function pointer arguments.  The `nothrow' attribute is not
12889     implemented in GCC versions earlier than 3.2.
12890
12891`format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
12892     The `format' attribute specifies that a function takes `printf',
12893     `scanf', `strftime' or `strfmon' style arguments which should be
12894     type-checked against a format string.  For example, the
12895     declaration:
12896
12897          extern int
12898          my_printf (void *my_object, const char *my_format, ...)
12899                __attribute__ ((format (printf, 2, 3)));
12900
12901     causes the compiler to check the arguments in calls to `my_printf'
12902     for consistency with the `printf' style format string argument
12903     `my_format'.
12904
12905     The parameter ARCHETYPE determines how the format string is
12906     interpreted, and should be `printf', `scanf', `strftime' or
12907     `strfmon'.  (You can also use `__printf__', `__scanf__',
12908     `__strftime__' or `__strfmon__'.)  The parameter STRING-INDEX
12909     specifies which argument is the format string argument (starting
12910     from 1), while FIRST-TO-CHECK is the number of the first argument
12911     to check against the format string.  For functions where the
12912     arguments are not available to be checked (such as `vprintf'),
12913     specify the third parameter as zero.  In this case the compiler
12914     only checks the format string for consistency.  For `strftime'
12915     formats, the third parameter is required to be zero.  Since
12916     non-static C++ methods have an implicit `this' argument, the
12917     arguments of such methods should be counted from two, not one, when
12918     giving values for STRING-INDEX and FIRST-TO-CHECK.
12919
12920     In the example above, the format string (`my_format') is the second
12921     argument of the function `my_print', and the arguments to check
12922     start with the third argument, so the correct parameters for the
12923     format attribute are 2 and 3.
12924
12925     The `format' attribute allows you to identify your own functions
12926     which take format strings as arguments, so that GCC can check the
12927     calls to these functions for errors.  The compiler always (unless
12928     `-ffreestanding' is used) checks formats for the standard library
12929     functions `printf', `fprintf', `sprintf', `scanf', `fscanf',
12930     `sscanf', `strftime', `vprintf', `vfprintf' and `vsprintf'
12931     whenever such warnings are requested (using `-Wformat'), so there
12932     is no need to modify the header file `stdio.h'.  In C99 mode, the
12933     functions `snprintf', `vsnprintf', `vscanf', `vfscanf' and
12934     `vsscanf' are also checked.  Except in strictly conforming C
12935     standard modes, the X/Open function `strfmon' is also checked as
12936     are `printf_unlocked' and `fprintf_unlocked'.  *Note Options
12937     Controlling C Dialect: C Dialect Options.
12938
12939`format_arg (STRING-INDEX)'
12940     The `format_arg' attribute specifies that a function takes a format
12941     string for a `printf', `scanf', `strftime' or `strfmon' style
12942     function and modifies it (for example, to translate it into
12943     another language), so the result can be passed to a `printf',
12944     `scanf', `strftime' or `strfmon' style function (with the
12945     remaining arguments to the format function the same as they would
12946     have been for the unmodified string).  For example, the
12947     declaration:
12948
12949          extern char *
12950          my_dgettext (char *my_domain, const char *my_format)
12951                __attribute__ ((format_arg (2)));
12952
12953     causes the compiler to check the arguments in calls to a `printf',
12954     `scanf', `strftime' or `strfmon' type function, whose format
12955     string argument is a call to the `my_dgettext' function, for
12956     consistency with the format string argument `my_format'.  If the
12957     `format_arg' attribute had not been specified, all the compiler
12958     could tell in such calls to format functions would be that the
12959     format string argument is not constant; this would generate a
12960     warning when `-Wformat-nonliteral' is used, but the calls could
12961     not be checked without the attribute.
12962
12963     The parameter STRING-INDEX specifies which argument is the format
12964     string argument (starting from one).  Since non-static C++ methods
12965     have an implicit `this' argument, the arguments of such methods
12966     should be counted from two.
12967
12968     The `format-arg' attribute allows you to identify your own
12969     functions which modify format strings, so that GCC can check the
12970     calls to `printf', `scanf', `strftime' or `strfmon' type function
12971     whose operands are a call to one of your own function.  The
12972     compiler always treats `gettext', `dgettext', and `dcgettext' in
12973     this manner except when strict ISO C support is requested by
12974     `-ansi' or an appropriate `-std' option, or `-ffreestanding' is
12975     used.  *Note Options Controlling C Dialect: C Dialect Options.
12976
12977`nonnull (ARG-INDEX, ...)'
12978     The `nonnull' attribute specifies that some function parameters
12979     should be non-null pointers.  For instance, the declaration:
12980
12981          extern void *
12982          my_memcpy (void *dest, const void *src, size_t len)
12983          	__attribute__((nonnull (1, 2)));
12984
12985     causes the compiler to check that, in calls to `my_memcpy',
12986     arguments DEST and SRC are non-null.  If the compiler determines
12987     that a null pointer is passed in an argument slot marked as
12988     non-null, and the `-Wnonnull' option is enabled, a warning is
12989     issued.  The compiler may also choose to make optimizations based
12990     on the knowledge that certain function arguments will not be null.
12991
12992     If no argument index list is given to the `nonnull' attribute, all
12993     pointer arguments are marked as non-null.  To illustrate, the
12994     following declaration is equivalent to the previous example:
12995
12996          extern void *
12997          my_memcpy (void *dest, const void *src, size_t len)
12998          	__attribute__((nonnull));
12999
13000`no_instrument_function'
13001     If `-finstrument-functions' is given, profiling function calls will
13002     be generated at entry and exit of most user-compiled functions.
13003     Functions with this attribute will not be so instrumented.
13004
13005`section ("SECTION-NAME")'
13006     Normally, the compiler places the code it generates in the `text'
13007     section.  Sometimes, however, you need additional sections, or you
13008     need certain particular functions to appear in special sections.
13009     The `section' attribute specifies that a function lives in a
13010     particular section.  For example, the declaration:
13011
13012          extern void foobar (void) __attribute__ ((section ("bar")));
13013
13014     puts the function `foobar' in the `bar' section.
13015
13016     Some file formats do not support arbitrary sections so the
13017     `section' attribute is not available on all platforms.  If you
13018     need to map the entire contents of a module to a particular
13019     section, consider using the facilities of the linker instead.
13020
13021`constructor'
13022`destructor'
13023     The `constructor' attribute causes the function to be called
13024     automatically before execution enters `main ()'.  Similarly, the
13025     `destructor' attribute causes the function to be called
13026     automatically after `main ()' has completed or `exit ()' has been
13027     called.  Functions with these attributes are useful for
13028     initializing data that will be used implicitly during the
13029     execution of the program.
13030
13031     These attributes are not currently implemented for Objective-C.
13032
13033`unused'
13034     This attribute, attached to a function, means that the function is
13035     meant to be possibly unused.  GCC will not produce a warning for
13036     this function.
13037
13038`used'
13039     This attribute, attached to a function, means that code must be
13040     emitted for the function even if it appears that the function is
13041     not referenced.  This is useful, for example, when the function is
13042     referenced only in inline assembly.
13043
13044`deprecated'
13045     The `deprecated' attribute results in a warning if the function is
13046     used anywhere in the source file.  This is useful when identifying
13047     functions that are expected to be removed in a future version of a
13048     program.  The warning also includes the location of the declaration
13049     of the deprecated function, to enable users to easily find further
13050     information about why the function is deprecated, or what they
13051     should do instead.  Note that the warnings only occurs for uses:
13052
13053          int old_fn () __attribute__ ((deprecated));
13054          int old_fn ();
13055          int (*fn_ptr)() = old_fn;
13056
13057     results in a warning on line 3 but not line 2.
13058
13059     The `deprecated' attribute can also be used for variables and
13060     types (*note Variable Attributes::, *note Type Attributes::.)
13061
13062`warn_unused_result'
13063     The `warn_unused_result' attribute causes a warning to be emitted
13064     if a caller of the function with this attribute does not use its
13065     return value.  This is useful for functions where not checking the
13066     result is either a security problem or always a bug, such as
13067     `realloc'.
13068
13069          int fn () __attribute__ ((warn_unused_result));
13070          int foo ()
13071          {
13072            if (fn () < 0) return -1;
13073            fn ();
13074            return 0;
13075          }
13076
13077     results in warning on line 5.
13078
13079`weak'
13080     The `weak' attribute causes the declaration to be emitted as a weak
13081     symbol rather than a global.  This is primarily useful in defining
13082     library functions which can be overridden in user code, though it
13083     can also be used with non-function declarations.  Weak symbols are
13084     supported for ELF targets, and also for a.out targets when using
13085     the GNU assembler and linker.
13086
13087`malloc'
13088     The `malloc' attribute is used to tell the compiler that a function
13089     may be treated as if any non-`NULL' pointer it returns cannot
13090     alias any other pointer valid when the function returns.  This
13091     will often improve optimization.  Standard functions with this
13092     property include `malloc' and `calloc'.  `realloc'-like functions
13093     have this property as long as the old pointer is never referred to
13094     (including comparing it to the new pointer) after the function
13095     returns a non-`NULL' value.
13096
13097`alias ("TARGET")'
13098     The `alias' attribute causes the declaration to be emitted as an
13099     alias for another symbol, which must be specified.  For instance,
13100
13101          void __f () { /* Do something. */; }
13102          void f () __attribute__ ((weak, alias ("__f")));
13103
13104     declares `f' to be a weak alias for `__f'.  In C++, the mangled
13105     name for the target must be used.
13106
13107     Not all target machines support this attribute.
13108
13109`visibility ("VISIBILITY_TYPE")'
13110     The `visibility' attribute on ELF targets causes the declaration
13111     to be emitted with default, hidden, protected or internal
13112     visibility.
13113
13114          void __attribute__ ((visibility ("protected")))
13115          f () { /* Do something. */; }
13116          int i __attribute__ ((visibility ("hidden")));
13117
13118     See the ELF gABI for complete details, but the short story is:
13119
13120    "default"
13121          Default visibility is the normal case for ELF.  This value is
13122          available for the visibility attribute to override other
13123          options that may change the assumed visibility of symbols.
13124
13125    "hidden"
13126          Hidden visibility indicates that the symbol will not be
13127          placed into the dynamic symbol table, so no other "module"
13128          (executable or shared library) can reference it directly.
13129
13130    "protected"
13131          Protected visibility indicates that the symbol will be placed
13132          in the dynamic symbol table, but that references within the
13133          defining module will bind to the local symbol.  That is, the
13134          symbol cannot be overridden by another module.
13135
13136    "internal"
13137          Internal visibility is like hidden visibility, but with
13138          additional processor specific semantics.  Unless otherwise
13139          specified by the psABI, GCC defines internal visibility to
13140          mean that the function is _never_ called from another module.
13141          Note that hidden symbols, while they cannot be referenced
13142          directly by other modules, can be referenced indirectly via
13143          function pointers.  By indicating that a symbol cannot be
13144          called from outside the module, GCC may for instance omit the
13145          load of a PIC register since it is known that the calling
13146          function loaded the correct value.
13147
13148     Not all ELF targets support this attribute.
13149
13150`regparm (NUMBER)'
13151     On the Intel 386, the `regparm' attribute causes the compiler to
13152     pass up to NUMBER integer arguments in registers EAX, EDX, and ECX
13153     instead of on the stack.  Functions that take a variable number of
13154     arguments will continue to be passed all of their arguments on the
13155     stack.
13156
13157     Beware that on some ELF systems this attribute is unsuitable for
13158     global functions in shared libraries with lazy binding (which is
13159     the default).  Lazy binding will send the first call via resolving
13160     code in the loader, which might assume EAX, EDX and ECX can be
13161     clobbered, as per the standard calling conventions.  Solaris 8 is
13162     affected by this.  GNU systems with GLIBC 2.1 or higher, and
13163     FreeBSD, are believed to be safe since the loaders there save all
13164     registers.  (Lazy binding can be disabled with the linker or the
13165     loader if desired, to avoid the problem.)
13166
13167`stdcall'
13168     On the Intel 386, the `stdcall' attribute causes the compiler to
13169     assume that the called function will pop off the stack space used
13170     to pass arguments, unless it takes a variable number of arguments.
13171
13172`fastcall'
13173     On the Intel 386, the `fastcall' attribute causes the compiler to
13174     pass the first two arguments in the registers ECX and EDX.
13175     Subsequent arguments are passed on the stack. The called function
13176     will pop the arguments off the stack. If the number of arguments
13177     is variable all arguments are pushed on the stack.
13178
13179`cdecl'
13180     On the Intel 386, the `cdecl' attribute causes the compiler to
13181     assume that the calling function will pop off the stack space used
13182     to pass arguments.  This is useful to override the effects of the
13183     `-mrtd' switch.
13184
13185`longcall/shortcall'
13186     On the RS/6000 and PowerPC, the `longcall' attribute causes the
13187     compiler to always call this function via a pointer, just as it
13188     would if the `-mlongcall' option had been specified.  The
13189     `shortcall' attribute causes the compiler not to do this.  These
13190     attributes override both the `-mlongcall' switch and the `#pragma
13191     longcall' setting.
13192
13193     *Note RS/6000 and PowerPC Options::, for more information on
13194     whether long calls are necessary.
13195
13196`long_call/short_call'
13197     This attribute specifies how a particular function is called on
13198     ARM.  Both attributes override the `-mlong-calls' (*note ARM
13199     Options::) command line switch and `#pragma long_calls' settings.
13200     The `long_call' attribute causes the compiler to always call the
13201     function by first loading its address into a register and then
13202     using the contents of that register.   The `short_call' attribute
13203     always places the offset to the function from the call site into
13204     the `BL' instruction directly.
13205
13206`function_vector'
13207     Use this attribute on the H8/300, H8/300H, and H8S to indicate
13208     that the specified function should be called through the function
13209     vector.  Calling a function through the function vector will
13210     reduce code size, however; the function vector has a limited size
13211     (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
13212     and H8S) and shares space with the interrupt vector.
13213
13214     You must use GAS and GLD from GNU binutils version 2.7 or later for
13215     this attribute to work correctly.
13216
13217`interrupt'
13218     Use this attribute on the ARM, AVR, C4x, M32R/D and Xstormy16
13219     ports to indicate that the specified function is an interrupt
13220     handler.  The compiler will generate function entry and exit
13221     sequences suitable for use in an interrupt handler when this
13222     attribute is present.
13223
13224     Note, interrupt handlers for the m68k, H8/300, H8/300H, H8S, and
13225     SH processors can be specified via the `interrupt_handler'
13226     attribute.
13227
13228     Note, on the AVR, interrupts will be enabled inside the function.
13229
13230     Note, for the ARM, you can specify the kind of interrupt to be
13231     handled by adding an optional parameter to the interrupt attribute
13232     like this:
13233
13234          void f () __attribute__ ((interrupt ("IRQ")));
13235
13236     Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
13237     and UNDEF.
13238
13239`interrupt_handler'
13240     Use this attribute on the m68k, H8/300, H8/300H, H8S, and SH to
13241     indicate that the specified function is an interrupt handler.  The
13242     compiler will generate function entry and exit sequences suitable
13243     for use in an interrupt handler when this attribute is present.
13244
13245`sp_switch'
13246     Use this attribute on the SH to indicate an `interrupt_handler'
13247     function should switch to an alternate stack.  It expects a string
13248     argument that names a global variable holding the address of the
13249     alternate stack.
13250
13251          void *alt_stack;
13252          void f () __attribute__ ((interrupt_handler,
13253                                    sp_switch ("alt_stack")));
13254
13255`trap_exit'
13256     Use this attribute on the SH for an `interrupt_handler' to return
13257     using `trapa' instead of `rte'.  This attribute expects an integer
13258     argument specifying the trap number to be used.
13259
13260`eightbit_data'
13261     Use this attribute on the H8/300, H8/300H, and H8S to indicate
13262     that the specified variable should be placed into the eight bit
13263     data section.  The compiler will generate more efficient code for
13264     certain operations on data in the eight bit data area.  Note the
13265     eight bit data area is limited to 256 bytes of data.
13266
13267     You must use GAS and GLD from GNU binutils version 2.7 or later for
13268     this attribute to work correctly.
13269
13270`tiny_data'
13271     Use this attribute on the H8/300H and H8S to indicate that the
13272     specified variable should be placed into the tiny data section.
13273     The compiler will generate more efficient code for loads and stores
13274     on data in the tiny data section.  Note the tiny data area is
13275     limited to slightly under 32kbytes of data.
13276
13277`saveall'
13278     Use this attribute on the H8/300, H8/300H, and H8S to indicate that
13279     all registers except the stack pointer should be saved in the
13280     prologue regardless of whether they are used or not.
13281
13282`signal'
13283     Use this attribute on the AVR to indicate that the specified
13284     function is a signal handler.  The compiler will generate function
13285     entry and exit sequences suitable for use in a signal handler when
13286     this attribute is present.  Interrupts will be disabled inside the
13287     function.
13288
13289`naked'
13290     Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
13291     that the specified function does not need prologue/epilogue
13292     sequences generated by the compiler.  It is up to the programmer
13293     to provide these sequences.
13294
13295`model (MODEL-NAME)'
13296     On the M32R/D, use this attribute to set the addressability of an
13297     object, and of the code generated for a function.  The identifier
13298     MODEL-NAME is one of `small', `medium', or `large', representing
13299     each of the code models.
13300
13301     Small model objects live in the lower 16MB of memory (so that their
13302     addresses can be loaded with the `ld24' instruction), and are
13303     callable with the `bl' instruction.
13304
13305     Medium model objects may live anywhere in the 32-bit address space
13306     (the compiler will generate `seth/add3' instructions to load their
13307     addresses), and are callable with the `bl' instruction.
13308
13309     Large model objects may live anywhere in the 32-bit address space
13310     (the compiler will generate `seth/add3' instructions to load their
13311     addresses), and may not be reachable with the `bl' instruction
13312     (the compiler will generate the much slower `seth/add3/jl'
13313     instruction sequence).
13314
13315     On IA-64, use this attribute to set the addressability of an
13316     object.  At present, the only supported identifier for MODEL-NAME
13317     is `small', indicating addressability via "small" (22-bit)
13318     addresses (so that their addresses can be loaded with the `addl'
13319     instruction).  Caveat: such addressing is by definition not
13320     position independent and hence this attribute must not be used for
13321     objects defined by shared libraries.
13322
13323`far'
13324     On 68HC11 and 68HC12 the `far' attribute causes the compiler to
13325     use a calling convention that takes care of switching memory banks
13326     when entering and leaving a function.  This calling convention is
13327     also the default when using the `-mlong-calls' option.
13328
13329     On 68HC12 the compiler will use the `call' and `rtc' instructions
13330     to call and return from a function.
13331
13332     On 68HC11 the compiler will generate a sequence of instructions to
13333     invoke a board-specific routine to switch the memory bank and call
13334     the real function. The board-specific routine simulates a `call'.
13335     At the end of a function, it will jump to a board-specific routine
13336     instead of using `rts'. The board-specific return routine simulates
13337     the `rtc'.
13338
13339`near'
13340     On 68HC11 and 68HC12 the `near' attribute causes the compiler to
13341     use the normal calling convention based on `jsr' and `rts'.  This
13342     attribute can be used to cancel the effect of the `-mlong-calls'
13343     option.
13344
13345`dllimport'
13346     On Microsoft Windows targets, the `dllimport' attribute causes the
13347     compiler to reference a function or variable via a global pointer
13348     to a pointer that is set up by the Microsoft Windows dll library.
13349     The pointer name is formed by combining `_imp__' and the function
13350     or variable name. The attribute implies `extern' storage.
13351
13352     Currently, the attribute is ignored for inlined functions. If the
13353     attribute is applied to a symbol _definition_, an error is
13354     reported.  If a symbol previously declared `dllimport' is later
13355     defined, the attribute is ignored in subsequent references, and a
13356     warning is emitted.  The attribute is also overridden by a
13357     subsequent declaration as `dllexport'.
13358
13359     When applied to C++ classes, the attribute marks non-inlined
13360     member functions and static data members as imports.  However, the
13361     attribute is ignored for virtual methods to allow creation of
13362     vtables using thunks.
13363
13364     On cygwin, mingw and arm-pe targets, `__declspec(dllimport)' is
13365     recognized as a synonym for `__attribute__ ((dllimport))' for
13366     compatibility with other Microsoft Windows compilers.
13367
13368     The use of the `dllimport' attribute on functions is not necessary,
13369     but provides a small performance benefit by eliminating a thunk in
13370     the dll. The use of the `dllimport' attribute on imported
13371     variables was required on older versions of GNU ld, but can now be
13372     avoided by passing the `--enable-auto-import' switch to ld. As
13373     with functions, using the attribute for a variable eliminates a
13374     thunk in the dll.
13375
13376     One drawback to using this attribute is that a pointer to a
13377     function or variable marked as dllimport cannot be used as a
13378     constant address. The attribute can be disabled for functions by
13379     setting the `-mnop-fun-dllimport' flag.
13380
13381`dllexport'
13382     On Microsoft Windows targets the `dllexport' attribute causes the
13383     compiler to provide a global pointer to a pointer in a dll, so
13384     that it can be referenced with the `dllimport' attribute. The
13385     pointer name is formed by combining `_imp__' and the function or
13386     variable name.
13387
13388     Currently, the `dllexport'attribute is ignored for inlined
13389     functions, but export can be forced by using the
13390     `-fkeep-inline-functions' flag. The attribute is also ignored for
13391     undefined symbols.
13392
13393     When applied to C++ classes. the attribute marks defined
13394     non-inlined member functions and static data members as exports.
13395     Static consts initialized in-class are not marked unless they are
13396     also defined out-of-class.
13397
13398     On cygwin, mingw and arm-pe targets, `__declspec(dllexport)' is
13399     recognized as a synonym for `__attribute__ ((dllexport))' for
13400     compatibility with other Microsoft Windows compilers.
13401
13402     Alternative methods for including the symbol in the dll's export
13403     table are to use a .def file with an `EXPORTS' section or, with
13404     GNU ld, using the `--export-all' linker flag.
13405
13406
13407 You can specify multiple attributes in a declaration by separating them
13408by commas within the double parentheses or by immediately following an
13409attribute declaration with another attribute declaration.
13410
13411 Some people object to the `__attribute__' feature, suggesting that ISO
13412C's `#pragma' should be used instead.  At the time `__attribute__' was
13413designed, there were two reasons for not doing this.
13414
13415  1. It is impossible to generate `#pragma' commands from a macro.
13416
13417  2. There is no telling what the same `#pragma' might mean in another
13418     compiler.
13419
13420 These two reasons applied to almost any application that might have
13421been proposed for `#pragma'.  It was basically a mistake to use
13422`#pragma' for _anything_.
13423
13424 The ISO C99 standard includes `_Pragma', which now allows pragmas to
13425be generated from macros.  In addition, a `#pragma GCC' namespace is
13426now in use for GCC-specific pragmas.  However, it has been found
13427convenient to use `__attribute__' to achieve a natural attachment of
13428attributes to their corresponding declarations, whereas `#pragma GCC'
13429is of use for constructs that do not naturally form part of the
13430grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
13431Directives.
13432
13433
13434File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
13435
134365.26 Attribute Syntax
13437=====================
13438
13439This section describes the syntax with which `__attribute__' may be
13440used, and the constructs to which attribute specifiers bind, for the C
13441language.  Some details may vary for C++ and Objective-C.  Because of
13442infelicities in the grammar for attributes, some forms described here
13443may not be successfully parsed in all cases.
13444
13445 There are some problems with the semantics of attributes in C++.  For
13446example, there are no manglings for attributes, although they may affect
13447code generation, so problems may arise when attributed types are used in
13448conjunction with templates or overloading.  Similarly, `typeid' does
13449not distinguish between types with different attributes.  Support for
13450attributes in C++ may be restricted in future to attributes on
13451declarations only, but not on nested declarators.
13452
13453 *Note Function Attributes::, for details of the semantics of attributes
13454applying to functions.  *Note Variable Attributes::, for details of the
13455semantics of attributes applying to variables.  *Note Type Attributes::,
13456for details of the semantics of attributes applying to structure, union
13457and enumerated types.
13458
13459 An "attribute specifier" is of the form `__attribute__
13460((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
13461comma-separated sequence of "attributes", where each attribute is one
13462of the following:
13463
13464   * Empty.  Empty attributes are ignored.
13465
13466   * A word (which may be an identifier such as `unused', or a reserved
13467     word such as `const').
13468
13469   * A word, followed by, in parentheses, parameters for the attribute.
13470     These parameters take one of the following forms:
13471
13472        * An identifier.  For example, `mode' attributes use this form.
13473
13474        * An identifier followed by a comma and a non-empty
13475          comma-separated list of expressions.  For example, `format'
13476          attributes use this form.
13477
13478        * A possibly empty comma-separated list of expressions.  For
13479          example, `format_arg' attributes use this form with the list
13480          being a single integer constant expression, and `alias'
13481          attributes use this form with the list being a single string
13482          constant.
13483
13484 An "attribute specifier list" is a sequence of one or more attribute
13485specifiers, not separated by any other tokens.
13486
13487 In GNU C, an attribute specifier list may appear after the colon
13488following a label, other than a `case' or `default' label.  The only
13489attribute it makes sense to use after a label is `unused'.  This
13490feature is intended for code generated by programs which contains labels
13491that may be unused but which is compiled with `-Wall'.  It would not
13492normally be appropriate to use in it human-written code, though it
13493could be useful in cases where the code that jumps to the label is
13494contained within an `#ifdef' conditional. GNU C++ does not permit such
13495placement of attribute lists, as it is permissible for a declaration,
13496which could begin with an attribute list, to be labelled in C++.
13497Declarations cannot be labelled in C90 or C99, so the ambiguity does
13498not arise there.
13499
13500 An attribute specifier list may appear as part of a `struct', `union'
13501or `enum' specifier.  It may go either immediately after the `struct',
13502`union' or `enum' keyword, or after the closing brace.  It is ignored
13503if the content of the structure, union or enumerated type is not
13504defined in the specifier in which the attribute specifier list is
13505used--that is, in usages such as `struct __attribute__((foo)) bar' with
13506no following opening brace.  Where attribute specifiers follow the
13507closing brace, they are considered to relate to the structure, union or
13508enumerated type defined, not to any enclosing declaration the type
13509specifier appears in, and the type defined is not complete until after
13510the attribute specifiers.
13511
13512 Otherwise, an attribute specifier appears as part of a declaration,
13513counting declarations of unnamed parameters and type names, and relates
13514to that declaration (which may be nested in another declaration, for
13515example in the case of a parameter declaration), or to a particular
13516declarator within a declaration.  Where an attribute specifier is
13517applied to a parameter declared as a function or an array, it should
13518apply to the function or array rather than the pointer to which the
13519parameter is implicitly converted, but this is not yet correctly
13520implemented.
13521
13522 Any list of specifiers and qualifiers at the start of a declaration may
13523contain attribute specifiers, whether or not such a list may in that
13524context contain storage class specifiers.  (Some attributes, however,
13525are essentially in the nature of storage class specifiers, and only make
13526sense where storage class specifiers may be used; for example,
13527`section'.)  There is one necessary limitation to this syntax: the
13528first old-style parameter declaration in a function definition cannot
13529begin with an attribute specifier, because such an attribute applies to
13530the function instead by syntax described below (which, however, is not
13531yet implemented in this case).  In some other cases, attribute
13532specifiers are permitted by this grammar but not yet supported by the
13533compiler.  All attribute specifiers in this place relate to the
13534declaration as a whole.  In the obsolescent usage where a type of `int'
13535is implied by the absence of type specifiers, such a list of specifiers
13536and qualifiers may be an attribute specifier list with no other
13537specifiers or qualifiers.
13538
13539 An attribute specifier list may appear immediately before a declarator
13540(other than the first) in a comma-separated list of declarators in a
13541declaration of more than one identifier using a single list of
13542specifiers and qualifiers.  Such attribute specifiers apply only to the
13543identifier before whose declarator they appear.  For example, in
13544
13545     __attribute__((noreturn)) void d0 (void),
13546         __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
13547          d2 (void)
13548
13549the `noreturn' attribute applies to all the functions declared; the
13550`format' attribute only applies to `d1'.
13551
13552 An attribute specifier list may appear immediately before the comma,
13553`=' or semicolon terminating the declaration of an identifier other
13554than a function definition.  At present, such attribute specifiers apply
13555to the declared object or function, but in future they may attach to the
13556outermost adjacent declarator.  In simple cases there is no difference,
13557but, for example, in
13558
13559     void (****f)(void) __attribute__((noreturn));
13560
13561at present the `noreturn' attribute applies to `f', which causes a
13562warning since `f' is not a function, but in future it may apply to the
13563function `****f'.  The precise semantics of what attributes in such
13564cases will apply to are not yet specified.  Where an assembler name for
13565an object or function is specified (*note Asm Labels::), at present the
13566attribute must follow the `asm' specification; in future, attributes
13567before the `asm' specification may apply to the adjacent declarator,
13568and those after it to the declared object or function.
13569
13570 An attribute specifier list may, in future, be permitted to appear
13571after the declarator in a function definition (before any old-style
13572parameter declarations or the function body).
13573
13574 Attribute specifiers may be mixed with type qualifiers appearing inside
13575the `[]' of a parameter array declarator, in the C99 construct by which
13576such qualifiers are applied to the pointer to which the array is
13577implicitly converted.  Such attribute specifiers apply to the pointer,
13578not to the array, but at present this is not implemented and they are
13579ignored.
13580
13581 An attribute specifier list may appear at the start of a nested
13582declarator.  At present, there are some limitations in this usage: the
13583attributes correctly apply to the declarator, but for most individual
13584attributes the semantics this implies are not implemented.  When
13585attribute specifiers follow the `*' of a pointer declarator, they may
13586be mixed with any type qualifiers present.  The following describes the
13587formal semantics of this syntax.  It will make the most sense if you
13588are familiar with the formal specification of declarators in the ISO C
13589standard.
13590
13591 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
13592where `T' contains declaration specifiers that specify a type TYPE
13593(such as `int') and `D1' is a declarator that contains an identifier
13594IDENT.  The type specified for IDENT for derived declarators whose type
13595does not include an attribute specifier is as in the ISO C standard.
13596
13597 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
13598declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
13599TYPE" for IDENT, then `T D1' specifies the type
13600"DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
13601
13602 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
13603D', and the declaration `T D' specifies the type
13604"DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
13605the type "DERIVED-DECLARATOR-TYPE-LIST
13606TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
13607
13608 For example,
13609
13610     void (__attribute__((noreturn)) ****f) (void);
13611
13612specifies the type "pointer to pointer to pointer to pointer to
13613non-returning function returning `void'".  As another example,
13614
13615     char *__attribute__((aligned(8))) *f;
13616
13617specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
13618again that this does not work with most attributes; for example, the
13619usage of `aligned' and `noreturn' attributes given above is not yet
13620supported.
13621
13622 For compatibility with existing code written for compiler versions that
13623did not implement attributes on nested declarators, some laxity is
13624allowed in the placing of attributes.  If an attribute that only applies
13625to types is applied to a declaration, it will be treated as applying to
13626the type of that declaration.  If an attribute that only applies to
13627declarations is applied to the type of a declaration, it will be treated
13628as applying to that declaration; and, for compatibility with code
13629placing the attributes immediately before the identifier declared, such
13630an attribute applied to a function return type will be treated as
13631applying to the function type, and such an attribute applied to an array
13632element type will be treated as applying to the array type.  If an
13633attribute that only applies to function types is applied to a
13634pointer-to-function type, it will be treated as applying to the pointer
13635target type; if such an attribute is applied to a function return type
13636that is not a pointer-to-function type, it will be treated as applying
13637to the function type.
13638
13639
13640File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
13641
136425.27 Prototypes and Old-Style Function Definitions
13643==================================================
13644
13645GNU C extends ISO C to allow a function prototype to override a later
13646old-style non-prototype definition.  Consider the following example:
13647
13648     /* Use prototypes unless the compiler is old-fashioned.  */
13649     #ifdef __STDC__
13650     #define P(x) x
13651     #else
13652     #define P(x) ()
13653     #endif
13654
13655     /* Prototype function declaration.  */
13656     int isroot P((uid_t));
13657
13658     /* Old-style function definition.  */
13659     int
13660     isroot (x)   /* ??? lossage here ??? */
13661          uid_t x;
13662     {
13663       return x == 0;
13664     }
13665
13666 Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
13667this example, because subword arguments in old-style non-prototype
13668definitions are promoted.  Therefore in this example the function
13669definition's argument is really an `int', which does not match the
13670prototype argument type of `short'.
13671
13672 This restriction of ISO C makes it hard to write code that is portable
13673to traditional C compilers, because the programmer does not know
13674whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
13675cases like these GNU C allows a prototype to override a later old-style
13676definition.  More precisely, in GNU C, a function prototype argument
13677type overrides the argument type specified by a later old-style
13678definition if the former type is the same as the latter type before
13679promotion.  Thus in GNU C the above example is equivalent to the
13680following:
13681
13682     int isroot (uid_t);
13683
13684     int
13685     isroot (uid_t x)
13686     {
13687       return x == 0;
13688     }
13689
13690GNU C++ does not support old-style function definitions, so this
13691extension is irrelevant.
13692
13693
13694File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
13695
136965.28 C++ Style Comments
13697=======================
13698
13699In GNU C, you may use C++ style comments, which start with `//' and
13700continue until the end of the line.  Many other C implementations allow
13701such comments, and they are included in the 1999 C standard.  However,
13702C++ style comments are not recognized if you specify an `-std' option
13703specifying a version of ISO C before C99, or `-ansi' (equivalent to
13704`-std=c89').
13705
13706
13707File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
13708
137095.29 Dollar Signs in Identifier Names
13710=====================================
13711
13712In GNU C, you may normally use dollar signs in identifier names.  This
13713is because many traditional C implementations allow such identifiers.
13714However, dollar signs in identifiers are not supported on a few target
13715machines, typically because the target assembler does not allow them.
13716
13717
13718File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
13719
137205.30 The Character <ESC> in Constants
13721=====================================
13722
13723You can use the sequence `\e' in a string or character constant to
13724stand for the ASCII character <ESC>.
13725
13726
13727File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
13728
137295.31 Inquiring on Alignment of Types or Variables
13730=================================================
13731
13732The keyword `__alignof__' allows you to inquire about how an object is
13733aligned, or the minimum alignment usually required by a type.  Its
13734syntax is just like `sizeof'.
13735
13736 For example, if the target machine requires a `double' value to be
13737aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
13738is true on many RISC machines.  On more traditional machine designs,
13739`__alignof__ (double)' is 4 or even 2.
13740
13741 Some machines never actually require alignment; they allow reference
13742to any data type even at an odd address.  For these machines,
13743`__alignof__' reports the _recommended_ alignment of a type.
13744
13745 If the operand of `__alignof__' is an lvalue rather than a type, its
13746value is the required alignment for its type, taking into account any
13747minimum alignment specified with GCC's `__attribute__' extension (*note
13748Variable Attributes::).  For example, after this declaration:
13749
13750     struct foo { int x; char y; } foo1;
13751
13752the value of `__alignof__ (foo1.y)' is 1, even though its actual
13753alignment is probably 2 or 4, the same as `__alignof__ (int)'.
13754
13755 It is an error to ask for the alignment of an incomplete type.
13756
13757
13758File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
13759
137605.32 Specifying Attributes of Variables
13761=======================================
13762
13763The keyword `__attribute__' allows you to specify special attributes of
13764variables or structure fields.  This keyword is followed by an
13765attribute specification inside double parentheses.  Some attributes are
13766currently defined generically for variables.  Other attributes are
13767defined for variables on particular target systems.  Other attributes
13768are available for functions (*note Function Attributes::) and for types
13769(*note Type Attributes::).  Other front ends might define more
13770attributes (*note Extensions to the C++ Language: C++ Extensions.).
13771
13772 You may also specify attributes with `__' preceding and following each
13773keyword.  This allows you to use them in header files without being
13774concerned about a possible macro of the same name.  For example, you
13775may use `__aligned__' instead of `aligned'.
13776
13777 *Note Attribute Syntax::, for details of the exact syntax for using
13778attributes.
13779
13780`aligned (ALIGNMENT)'
13781     This attribute specifies a minimum alignment for the variable or
13782     structure field, measured in bytes.  For example, the declaration:
13783
13784          int x __attribute__ ((aligned (16))) = 0;
13785
13786     causes the compiler to allocate the global variable `x' on a
13787     16-byte boundary.  On a 68040, this could be used in conjunction
13788     with an `asm' expression to access the `move16' instruction which
13789     requires 16-byte aligned operands.
13790
13791     You can also specify the alignment of structure fields.  For
13792     example, to create a double-word aligned `int' pair, you could
13793     write:
13794
13795          struct foo { int x[2] __attribute__ ((aligned (8))); };
13796
13797     This is an alternative to creating a union with a `double' member
13798     that forces the union to be double-word aligned.
13799
13800     As in the preceding examples, you can explicitly specify the
13801     alignment (in bytes) that you wish the compiler to use for a given
13802     variable or structure field.  Alternatively, you can leave out the
13803     alignment factor and just ask the compiler to align a variable or
13804     field to the maximum useful alignment for the target machine you
13805     are compiling for.  For example, you could write:
13806
13807          short array[3] __attribute__ ((aligned));
13808
13809     Whenever you leave out the alignment factor in an `aligned'
13810     attribute specification, the compiler automatically sets the
13811     alignment for the declared variable or field to the largest
13812     alignment which is ever used for any data type on the target
13813     machine you are compiling for.  Doing this can often make copy
13814     operations more efficient, because the compiler can use whatever
13815     instructions copy the biggest chunks of memory when performing
13816     copies to or from the variables or fields that you have aligned
13817     this way.
13818
13819     The `aligned' attribute can only increase the alignment; but you
13820     can decrease it by specifying `packed' as well.  See below.
13821
13822     Note that the effectiveness of `aligned' attributes may be limited
13823     by inherent limitations in your linker.  On many systems, the
13824     linker is only able to arrange for variables to be aligned up to a
13825     certain maximum alignment.  (For some linkers, the maximum
13826     supported alignment may be very very small.)  If your linker is
13827     only able to align variables up to a maximum of 8 byte alignment,
13828     then specifying `aligned(16)' in an `__attribute__' will still
13829     only provide you with 8 byte alignment.  See your linker
13830     documentation for further information.
13831
13832`cleanup (CLEANUP_FUNCTION)'
13833     The `cleanup' attribute runs a function when the variable goes out
13834     of scope.  This attribute can only be applied to auto function
13835     scope variables; it may not be applied to parameters or variables
13836     with static storage duration.  The function must take one
13837     parameter, a pointer to a type compatible with the variable.  The
13838     return value of the function (if any) is ignored.
13839
13840     If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
13841     during the stack unwinding that happens during the processing of
13842     the exception.  Note that the `cleanup' attribute does not allow
13843     the exception to be caught, only to perform an action.  It is
13844     undefined what happens if CLEANUP_FUNCTION does not return
13845     normally.
13846
13847`common'
13848`nocommon'
13849     The `common' attribute requests GCC to place a variable in
13850     "common" storage.  The `nocommon' attribute requests the opposite
13851     - to allocate space for it directly.
13852
13853     These attributes override the default chosen by the `-fno-common'
13854     and `-fcommon' flags respectively.
13855
13856`deprecated'
13857     The `deprecated' attribute results in a warning if the variable is
13858     used anywhere in the source file.  This is useful when identifying
13859     variables that are expected to be removed in a future version of a
13860     program.  The warning also includes the location of the declaration
13861     of the deprecated variable, to enable users to easily find further
13862     information about why the variable is deprecated, or what they
13863     should do instead.  Note that the warning only occurs for uses:
13864
13865          extern int old_var __attribute__ ((deprecated));
13866          extern int old_var;
13867          int new_fn () { return old_var; }
13868
13869     results in a warning on line 3 but not line 2.
13870
13871     The `deprecated' attribute can also be used for functions and
13872     types (*note Function Attributes::, *note Type Attributes::.)
13873
13874`mode (MODE)'
13875     This attribute specifies the data type for the
13876     declaration--whichever type corresponds to the mode MODE.  This in
13877     effect lets you request an integer or floating point type
13878     according to its width.
13879
13880     You may also specify a mode of `byte' or `__byte__' to indicate
13881     the mode corresponding to a one-byte integer, `word' or `__word__'
13882     for the mode of a one-word integer, and `pointer' or `__pointer__'
13883     for the mode used to represent pointers.
13884
13885`packed'
13886     The `packed' attribute specifies that a variable or structure field
13887     should have the smallest possible alignment--one byte for a
13888     variable, and one bit for a field, unless you specify a larger
13889     value with the `aligned' attribute.
13890
13891     Here is a structure in which the field `x' is packed, so that it
13892     immediately follows `a':
13893
13894          struct foo
13895          {
13896            char a;
13897            int x[2] __attribute__ ((packed));
13898          };
13899
13900`section ("SECTION-NAME")'
13901     Normally, the compiler places the objects it generates in sections
13902     like `data' and `bss'.  Sometimes, however, you need additional
13903     sections, or you need certain particular variables to appear in
13904     special sections, for example to map to special hardware.  The
13905     `section' attribute specifies that a variable (or function) lives
13906     in a particular section.  For example, this small program uses
13907     several specific section names:
13908
13909          struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
13910          struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
13911          char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
13912          int init_data __attribute__ ((section ("INITDATA"))) = 0;
13913
13914          main()
13915          {
13916            /* Initialize stack pointer */
13917            init_sp (stack + sizeof (stack));
13918
13919            /* Initialize initialized data */
13920            memcpy (&init_data, &data, &edata - &data);
13921
13922            /* Turn on the serial ports */
13923            init_duart (&a);
13924            init_duart (&b);
13925          }
13926
13927     Use the `section' attribute with an _initialized_ definition of a
13928     _global_ variable, as shown in the example.  GCC issues a warning
13929     and otherwise ignores the `section' attribute in uninitialized
13930     variable declarations.
13931
13932     You may only use the `section' attribute with a fully initialized
13933     global definition because of the way linkers work.  The linker
13934     requires each object be defined once, with the exception that
13935     uninitialized variables tentatively go in the `common' (or `bss')
13936     section and can be multiply "defined".  You can force a variable
13937     to be initialized with the `-fno-common' flag or the `nocommon'
13938     attribute.
13939
13940     Some file formats do not support arbitrary sections so the
13941     `section' attribute is not available on all platforms.  If you
13942     need to map the entire contents of a module to a particular
13943     section, consider using the facilities of the linker instead.
13944
13945`shared'
13946     On Microsoft Windows, in addition to putting variable definitions
13947     in a named section, the section can also be shared among all
13948     running copies of an executable or DLL.  For example, this small
13949     program defines shared data by putting it in a named section
13950     `shared' and marking the section shareable:
13951
13952          int foo __attribute__((section ("shared"), shared)) = 0;
13953
13954          int
13955          main()
13956          {
13957            /* Read and write foo.  All running
13958               copies see the same value.  */
13959            return 0;
13960          }
13961
13962     You may only use the `shared' attribute along with `section'
13963     attribute with a fully initialized global definition because of
13964     the way linkers work.  See `section' attribute for more
13965     information.
13966
13967     The `shared' attribute is only available on Microsoft Windows.
13968
13969`tls_model ("TLS_MODEL")'
13970     The `tls_model' attribute sets thread-local storage model (*note
13971     Thread-Local::) of a particular `__thread' variable, overriding
13972     `-ftls-model=' command line switch on a per-variable basis.  The
13973     TLS_MODEL argument should be one of `global-dynamic',
13974     `local-dynamic', `initial-exec' or `local-exec'.
13975
13976     Not all targets support this attribute.
13977
13978`transparent_union'
13979     This attribute, attached to a function parameter which is a union,
13980     means that the corresponding argument may have the type of any
13981     union member, but the argument is passed as if its type were that
13982     of the first union member.  For more details see *Note Type
13983     Attributes::.  You can also use this attribute on a `typedef' for
13984     a union data type; then it applies to all function parameters with
13985     that type.
13986
13987`unused'
13988     This attribute, attached to a variable, means that the variable is
13989     meant to be possibly unused.  GCC will not produce a warning for
13990     this variable.
13991
13992`vector_size (BYTES)'
13993     This attribute specifies the vector size for the variable,
13994     measured in bytes.  For example, the declaration:
13995
13996          int foo __attribute__ ((vector_size (16)));
13997
13998     causes the compiler to set the mode for `foo', to be 16 bytes,
13999     divided into `int' sized units.  Assuming a 32-bit int (a vector of
14000     4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
14001
14002     This attribute is only applicable to integral and float scalars,
14003     although arrays, pointers, and function return values are allowed
14004     in conjunction with this construct.
14005
14006     Aggregates with this attribute are invalid, even if they are of
14007     the same size as a corresponding scalar.  For example, the
14008     declaration:
14009
14010          struct S { int a; };
14011          struct S  __attribute__ ((vector_size (16))) foo;
14012
14013     is invalid even if the size of the structure is the same as the
14014     size of the `int'.
14015
14016`weak'
14017     The `weak' attribute is described in *Note Function Attributes::.
14018
14019`dllimport'
14020     The `dllimport' attribute is described in *Note Function
14021     Attributes::.
14022
14023`dlexport'
14024     The `dllexport' attribute is described in *Note Function
14025     Attributes::.
14026
14027
140285.32.1 M32R/D Variable Attributes
14029---------------------------------
14030
14031One attribute is currently defined for the M32R/D.
14032
14033`model (MODEL-NAME)'
14034     Use this attribute on the M32R/D to set the addressability of an
14035     object.  The identifier MODEL-NAME is one of `small', `medium', or
14036     `large', representing each of the code models.
14037
14038     Small model objects live in the lower 16MB of memory (so that their
14039     addresses can be loaded with the `ld24' instruction).
14040
14041     Medium and large model objects may live anywhere in the 32-bit
14042     address space (the compiler will generate `seth/add3' instructions
14043     to load their addresses).
14044
140455.32.2 i386 Variable Attributes
14046-------------------------------
14047
14048Two attributes are currently defined for i386 configurations:
14049`ms_struct' and `gcc_struct'
14050
14051`ms_struct'
14052`gcc_struct'
14053     If `packed' is used on a structure, or if bit-fields are used it
14054     may be that the Microsoft ABI packs them differently than GCC
14055     would normally pack them.  Particularly when moving packed data
14056     between functions compiled with GCC and the native Microsoft
14057     compiler (either via function call or as data in a file), it may
14058     be necessary to access either format.
14059
14060     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
14061     Windows X86 compilers to match the native Microsoft compiler.
14062
14063
14064File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
14065
140665.33 Specifying Attributes of Types
14067===================================
14068
14069The keyword `__attribute__' allows you to specify special attributes of
14070`struct' and `union' types when you define such types.  This keyword is
14071followed by an attribute specification inside double parentheses.  Six
14072attributes are currently defined for types: `aligned', `packed',
14073`transparent_union', `unused', `deprecated' and `may_alias'.  Other
14074attributes are defined for functions (*note Function Attributes::) and
14075for variables (*note Variable Attributes::).
14076
14077 You may also specify any one of these attributes with `__' preceding
14078and following its keyword.  This allows you to use these attributes in
14079header files without being concerned about a possible macro of the same
14080name.  For example, you may use `__aligned__' instead of `aligned'.
14081
14082 You may specify the `aligned' and `transparent_union' attributes
14083either in a `typedef' declaration or just past the closing curly brace
14084of a complete enum, struct or union type _definition_ and the `packed'
14085attribute only past the closing brace of a definition.
14086
14087 You may also specify attributes between the enum, struct or union tag
14088and the name of the type rather than after the closing brace.
14089
14090 *Note Attribute Syntax::, for details of the exact syntax for using
14091attributes.
14092
14093`aligned (ALIGNMENT)'
14094     This attribute specifies a minimum alignment (in bytes) for
14095     variables of the specified type.  For example, the declarations:
14096
14097          struct S { short f[3]; } __attribute__ ((aligned (8)));
14098          typedef int more_aligned_int __attribute__ ((aligned (8)));
14099
14100     force the compiler to insure (as far as it can) that each variable
14101     whose type is `struct S' or `more_aligned_int' will be allocated
14102     and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
14103     all variables of type `struct S' aligned to 8-byte boundaries
14104     allows the compiler to use the `ldd' and `std' (doubleword load and
14105     store) instructions when copying one variable of type `struct S' to
14106     another, thus improving run-time efficiency.
14107
14108     Note that the alignment of any given `struct' or `union' type is
14109     required by the ISO C standard to be at least a perfect multiple of
14110     the lowest common multiple of the alignments of all of the members
14111     of the `struct' or `union' in question.  This means that you _can_
14112     effectively adjust the alignment of a `struct' or `union' type by
14113     attaching an `aligned' attribute to any one of the members of such
14114     a type, but the notation illustrated in the example above is a
14115     more obvious, intuitive, and readable way to request the compiler
14116     to adjust the alignment of an entire `struct' or `union' type.
14117
14118     As in the preceding example, you can explicitly specify the
14119     alignment (in bytes) that you wish the compiler to use for a given
14120     `struct' or `union' type.  Alternatively, you can leave out the
14121     alignment factor and just ask the compiler to align a type to the
14122     maximum useful alignment for the target machine you are compiling
14123     for.  For example, you could write:
14124
14125          struct S { short f[3]; } __attribute__ ((aligned));
14126
14127     Whenever you leave out the alignment factor in an `aligned'
14128     attribute specification, the compiler automatically sets the
14129     alignment for the type to the largest alignment which is ever used
14130     for any data type on the target machine you are compiling for.
14131     Doing this can often make copy operations more efficient, because
14132     the compiler can use whatever instructions copy the biggest chunks
14133     of memory when performing copies to or from the variables which
14134     have types that you have aligned this way.
14135
14136     In the example above, if the size of each `short' is 2 bytes, then
14137     the size of the entire `struct S' type is 6 bytes.  The smallest
14138     power of two which is greater than or equal to that is 8, so the
14139     compiler sets the alignment for the entire `struct S' type to 8
14140     bytes.
14141
14142     Note that although you can ask the compiler to select a
14143     time-efficient alignment for a given type and then declare only
14144     individual stand-alone objects of that type, the compiler's
14145     ability to select a time-efficient alignment is primarily useful
14146     only when you plan to create arrays of variables having the
14147     relevant (efficiently aligned) type.  If you declare or use arrays
14148     of variables of an efficiently-aligned type, then it is likely
14149     that your program will also be doing pointer arithmetic (or
14150     subscripting, which amounts to the same thing) on pointers to the
14151     relevant type, and the code that the compiler generates for these
14152     pointer arithmetic operations will often be more efficient for
14153     efficiently-aligned types than for other types.
14154
14155     The `aligned' attribute can only increase the alignment; but you
14156     can decrease it by specifying `packed' as well.  See below.
14157
14158     Note that the effectiveness of `aligned' attributes may be limited
14159     by inherent limitations in your linker.  On many systems, the
14160     linker is only able to arrange for variables to be aligned up to a
14161     certain maximum alignment.  (For some linkers, the maximum
14162     supported alignment may be very very small.)  If your linker is
14163     only able to align variables up to a maximum of 8 byte alignment,
14164     then specifying `aligned(16)' in an `__attribute__' will still
14165     only provide you with 8 byte alignment.  See your linker
14166     documentation for further information.
14167
14168`packed'
14169     This attribute, attached to `struct' or `union' type definition,
14170     specifies that each member of the structure or union is placed to
14171     minimize the memory required. When attached to an `enum'
14172     definition, it indicates that the smallest integral type should be
14173     used.
14174
14175     Specifying this attribute for `struct' and `union' types is
14176     equivalent to specifying the `packed' attribute on each of the
14177     structure or union members.  Specifying the `-fshort-enums' flag
14178     on the line is equivalent to specifying the `packed' attribute on
14179     all `enum' definitions.
14180
14181     In the following example `struct my_packed_struct''s members are
14182     packed closely together, but the internal layout of its `s' member
14183     is not packed - to do that, `struct my_unpacked_struct' would need
14184     to be packed too.
14185
14186          struct my_unpacked_struct
14187           {
14188              char c;
14189              int i;
14190           };
14191
14192          struct my_packed_struct __attribute__ ((__packed__))
14193            {
14194               char c;
14195               int  i;
14196               struct my_unpacked_struct s;
14197            };
14198
14199     You may only specify this attribute on the definition of a `enum',
14200     `struct' or `union', not on a `typedef' which does not also define
14201     the enumerated type, structure or union.
14202
14203`transparent_union'
14204     This attribute, attached to a `union' type definition, indicates
14205     that any function parameter having that union type causes calls to
14206     that function to be treated in a special way.
14207
14208     First, the argument corresponding to a transparent union type can
14209     be of any type in the union; no cast is required.  Also, if the
14210     union contains a pointer type, the corresponding argument can be a
14211     null pointer constant or a void pointer expression; and if the
14212     union contains a void pointer type, the corresponding argument can
14213     be any pointer expression.  If the union member type is a pointer,
14214     qualifiers like `const' on the referenced type must be respected,
14215     just as with normal pointer conversions.
14216
14217     Second, the argument is passed to the function using the calling
14218     conventions of the first member of the transparent union, not the
14219     calling conventions of the union itself.  All members of the union
14220     must have the same machine representation; this is necessary for
14221     this argument passing to work properly.
14222
14223     Transparent unions are designed for library functions that have
14224     multiple interfaces for compatibility reasons.  For example,
14225     suppose the `wait' function must accept either a value of type
14226     `int *' to comply with Posix, or a value of type `union wait *' to
14227     comply with the 4.1BSD interface.  If `wait''s parameter were
14228     `void *', `wait' would accept both kinds of arguments, but it
14229     would also accept any other pointer type and this would make
14230     argument type checking less useful.  Instead, `<sys/wait.h>' might
14231     define the interface as follows:
14232
14233          typedef union
14234            {
14235              int *__ip;
14236              union wait *__up;
14237            } wait_status_ptr_t __attribute__ ((__transparent_union__));
14238
14239          pid_t wait (wait_status_ptr_t);
14240
14241     This interface allows either `int *' or `union wait *' arguments
14242     to be passed, using the `int *' calling convention.  The program
14243     can call `wait' with arguments of either type:
14244
14245          int w1 () { int w; return wait (&w); }
14246          int w2 () { union wait w; return wait (&w); }
14247
14248     With this interface, `wait''s implementation might look like this:
14249
14250          pid_t wait (wait_status_ptr_t p)
14251          {
14252            return waitpid (-1, p.__ip, 0);
14253          }
14254
14255`unused'
14256     When attached to a type (including a `union' or a `struct'), this
14257     attribute means that variables of that type are meant to appear
14258     possibly unused.  GCC will not produce a warning for any variables
14259     of that type, even if the variable appears to do nothing.  This is
14260     often the case with lock or thread classes, which are usually
14261     defined and then not referenced, but contain constructors and
14262     destructors that have nontrivial bookkeeping functions.
14263
14264`deprecated'
14265     The `deprecated' attribute results in a warning if the type is
14266     used anywhere in the source file.  This is useful when identifying
14267     types that are expected to be removed in a future version of a
14268     program.  If possible, the warning also includes the location of
14269     the declaration of the deprecated type, to enable users to easily
14270     find further information about why the type is deprecated, or what
14271     they should do instead.  Note that the warnings only occur for
14272     uses and then only if the type is being applied to an identifier
14273     that itself is not being declared as deprecated.
14274
14275          typedef int T1 __attribute__ ((deprecated));
14276          T1 x;
14277          typedef T1 T2;
14278          T2 y;
14279          typedef T1 T3 __attribute__ ((deprecated));
14280          T3 z __attribute__ ((deprecated));
14281
14282     results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
14283     warning is issued for line 4 because T2 is not explicitly
14284     deprecated.  Line 5 has no warning because T3 is explicitly
14285     deprecated.  Similarly for line 6.
14286
14287     The `deprecated' attribute can also be used for functions and
14288     variables (*note Function Attributes::, *note Variable
14289     Attributes::.)
14290
14291`may_alias'
14292     Accesses to objects with types with this attribute are not
14293     subjected to type-based alias analysis, but are instead assumed to
14294     be able to alias any other type of objects, just like the `char'
14295     type.  See `-fstrict-aliasing' for more information on aliasing
14296     issues.
14297
14298     Example of use:
14299
14300          typedef short __attribute__((__may_alias__)) short_a;
14301
14302          int
14303          main (void)
14304          {
14305            int a = 0x12345678;
14306            short_a *b = (short_a *) &a;
14307
14308            b[1] = 0;
14309
14310            if (a == 0x12345678)
14311              abort();
14312
14313            exit(0);
14314          }
14315
14316     If you replaced `short_a' with `short' in the variable
14317     declaration, the above program would abort when compiled with
14318     `-fstrict-aliasing', which is on by default at `-O2' or above in
14319     recent GCC versions.
14320
143215.33.1 i386 Type Attributes
14322---------------------------
14323
14324     Two attributes are currently defined for i386 configurations:
14325`ms_struct' and `gcc_struct'
14326
14327`ms_struct'
14328`gcc_struct'
14329     If `packed' is used on a structure, or if bit-fields are used it
14330     may be that the Microsoft ABI packs them differently than GCC
14331     would normally pack them.  Particularly when moving packed data
14332     between functions compiled with GCC and the native Microsoft
14333     compiler (either via function call or as data in a file), it may
14334     be necessary to access either format.
14335
14336     Currently `-m[no-]ms-bitfields' is provided for the Microsoft
14337     Windows X86 compilers to match the native Microsoft compiler.
14338
14339 To specify multiple attributes, separate them by commas within the
14340double parentheses: for example, `__attribute__ ((aligned (16),
14341packed))'.
14342
14343
14344File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
14345
143465.34 An Inline Function is As Fast As a Macro
14347=============================================
14348
14349By declaring a function `inline', you can direct GCC to integrate that
14350function's code into the code for its callers.  This makes execution
14351faster by eliminating the function-call overhead; in addition, if any
14352of the actual argument values are constant, their known values may
14353permit simplifications at compile time so that not all of the inline
14354function's code needs to be included.  The effect on code size is less
14355predictable; object code may be larger or smaller with function
14356inlining, depending on the particular case.  Inlining of functions is an
14357optimization and it really "works" only in optimizing compilation.  If
14358you don't use `-O', no function is really inline.
14359
14360 Inline functions are included in the ISO C99 standard, but there are
14361currently substantial differences between what GCC implements and what
14362the ISO C99 standard requires.
14363
14364 To declare a function inline, use the `inline' keyword in its
14365declaration, like this:
14366
14367     inline int
14368     inc (int *a)
14369     {
14370       (*a)++;
14371     }
14372
14373 (If you are writing a header file to be included in ISO C programs,
14374write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
14375You can also make all "simple enough" functions inline with the option
14376`-finline-functions'.
14377
14378 Note that certain usages in a function definition can make it
14379unsuitable for inline substitution.  Among these usages are: use of
14380varargs, use of alloca, use of variable sized data types (*note
14381Variable Length::), use of computed goto (*note Labels as Values::),
14382use of nonlocal goto, and nested functions (*note Nested Functions::).
14383Using `-Winline' will warn when a function marked `inline' could not be
14384substituted, and will give the reason for the failure.
14385
14386 Note that in C and Objective-C, unlike C++, the `inline' keyword does
14387not affect the linkage of the function.
14388
14389 GCC automatically inlines member functions defined within the class
14390body of C++ programs even if they are not explicitly declared `inline'.
14391(You can override this with `-fno-default-inline'; *note Options
14392Controlling C++ Dialect: C++ Dialect Options.)
14393
14394 When a function is both inline and `static', if all calls to the
14395function are integrated into the caller, and the function's address is
14396never used, then the function's own assembler code is never referenced.
14397In this case, GCC does not actually output assembler code for the
14398function, unless you specify the option `-fkeep-inline-functions'.
14399Some calls cannot be integrated for various reasons (in particular,
14400calls that precede the function's definition cannot be integrated, and
14401neither can recursive calls within the definition).  If there is a
14402nonintegrated call, then the function is compiled to assembler code as
14403usual.  The function must also be compiled as usual if the program
14404refers to its address, because that can't be inlined.
14405
14406 When an inline function is not `static', then the compiler must assume
14407that there may be calls from other source files; since a global symbol
14408can be defined only once in any program, the function must not be
14409defined in the other source files, so the calls therein cannot be
14410integrated.  Therefore, a non-`static' inline function is always
14411compiled on its own in the usual fashion.
14412
14413 If you specify both `inline' and `extern' in the function definition,
14414then the definition is used only for inlining.  In no case is the
14415function compiled on its own, not even if you refer to its address
14416explicitly.  Such an address becomes an external reference, as if you
14417had only declared the function, and had not defined it.
14418
14419 This combination of `inline' and `extern' has almost the effect of a
14420macro.  The way to use it is to put a function definition in a header
14421file with these keywords, and put another copy of the definition
14422(lacking `inline' and `extern') in a library file.  The definition in
14423the header file will cause most calls to the function to be inlined.
14424If any uses of the function remain, they will refer to the single copy
14425in the library.
14426
14427 Since GCC eventually will implement ISO C99 semantics for inline
14428functions, it is best to use `static inline' only to guarantee
14429compatibility.  (The existing semantics will remain available when
14430`-std=gnu89' is specified, but eventually the default will be
14431`-std=gnu99' and that will implement the C99 semantics, though it does
14432not do so yet.)
14433
14434 GCC does not inline any functions when not optimizing unless you
14435specify the `always_inline' attribute for the function, like this:
14436
14437     /* Prototype.  */
14438     inline void foo (const char) __attribute__((always_inline));
14439
14440
14441File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
14442
144435.35 Assembler Instructions with C Expression Operands
14444======================================================
14445
14446In an assembler instruction using `asm', you can specify the operands
14447of the instruction using C expressions.  This means you need not guess
14448which registers or memory locations will contain the data you want to
14449use.
14450
14451 You must specify an assembler instruction template much like what
14452appears in a machine description, plus an operand constraint string for
14453each operand.
14454
14455 For example, here is how to use the 68881's `fsinx' instruction:
14456
14457     asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
14458
14459Here `angle' is the C expression for the input operand while `result'
14460is that of the output operand.  Each has `"f"' as its operand
14461constraint, saying that a floating point register is required.  The `='
14462in `=f' indicates that the operand is an output; all output operands'
14463constraints must use `='.  The constraints use the same language used
14464in the machine description (*note Constraints::).
14465
14466 Each operand is described by an operand-constraint string followed by
14467the C expression in parentheses.  A colon separates the assembler
14468template from the first output operand and another separates the last
14469output operand from the first input, if any.  Commas separate the
14470operands within each group.  The total number of operands is currently
14471limited to 30; this limitation may be lifted in some future version of
14472GCC.
14473
14474 If there are no output operands but there are input operands, you must
14475place two consecutive colons surrounding the place where the output
14476operands would go.
14477
14478 As of GCC version 3.1, it is also possible to specify input and output
14479operands using symbolic names which can be referenced within the
14480assembler code.  These names are specified inside square brackets
14481preceding the constraint string, and can be referenced inside the
14482assembler code using `%[NAME]' instead of a percentage sign followed by
14483the operand number.  Using named operands the above example could look
14484like:
14485
14486     asm ("fsinx %[angle],%[output]"
14487          : [output] "=f" (result)
14488          : [angle] "f" (angle));
14489
14490Note that the symbolic operand names have no relation whatsoever to
14491other C identifiers.  You may use any name you like, even those of
14492existing C symbols, but you must ensure that no two operands within the
14493same assembler construct use the same symbolic name.
14494
14495 Output operand expressions must be lvalues; the compiler can check
14496this.  The input operands need not be lvalues.  The compiler cannot
14497check whether the operands have data types that are reasonable for the
14498instruction being executed.  It does not parse the assembler instruction
14499template and does not know what it means or even whether it is valid
14500assembler input.  The extended `asm' feature is most often used for
14501machine instructions the compiler itself does not know exist.  If the
14502output expression cannot be directly addressed (for example, it is a
14503bit-field), your constraint must allow a register.  In that case, GCC
14504will use the register as the output of the `asm', and then store that
14505register into the output.
14506
14507 The ordinary output operands must be write-only; GCC will assume that
14508the values in these operands before the instruction are dead and need
14509not be generated.  Extended asm supports input-output or read-write
14510operands.  Use the constraint character `+' to indicate such an operand
14511and list it with the output operands.  You should only use read-write
14512operands when the constraints for the operand (or the operand in which
14513only some of the bits are to be changed) allow a register.
14514
14515 You may, as an alternative, logically split its function into two
14516separate operands, one input operand and one write-only output operand.
14517The connection between them is expressed by constraints which say they
14518need to be in the same location when the instruction executes.  You can
14519use the same C expression for both operands, or different expressions.
14520For example, here we write the (fictitious) `combine' instruction with
14521`bar' as its read-only source operand and `foo' as its read-write
14522destination:
14523
14524     asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
14525
14526The constraint `"0"' for operand 1 says that it must occupy the same
14527location as operand 0.  A number in constraint is allowed only in an
14528input operand and it must refer to an output operand.
14529
14530 Only a number in the constraint can guarantee that one operand will be
14531in the same place as another.  The mere fact that `foo' is the value of
14532both operands is not enough to guarantee that they will be in the same
14533place in the generated assembler code.  The following would not work
14534reliably:
14535
14536     asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
14537
14538 Various optimizations or reloading could cause operands 0 and 1 to be
14539in different registers; GCC knows no reason not to do so.  For example,
14540the compiler might find a copy of the value of `foo' in one register and
14541use it for operand 1, but generate the output operand 0 in a different
14542register (copying it afterward to `foo''s own address).  Of course,
14543since the register for operand 1 is not even mentioned in the assembler
14544code, the result will not work, but GCC can't tell that.
14545
14546 As of GCC version 3.1, one may write `[NAME]' instead of the operand
14547number for a matching constraint.  For example:
14548
14549     asm ("cmoveq %1,%2,%[result]"
14550          : [result] "=r"(result)
14551          : "r" (test), "r"(new), "[result]"(old));
14552
14553 Some instructions clobber specific hard registers.  To describe this,
14554write a third colon after the input operands, followed by the names of
14555the clobbered hard registers (given as strings).  Here is a realistic
14556example for the VAX:
14557
14558     asm volatile ("movc3 %0,%1,%2"
14559                   : /* no outputs */
14560                   : "g" (from), "g" (to), "g" (count)
14561                   : "r0", "r1", "r2", "r3", "r4", "r5");
14562
14563 You may not write a clobber description in a way that overlaps with an
14564input or output operand.  For example, you may not have an operand
14565describing a register class with one member if you mention that register
14566in the clobber list.  Variables declared to live in specific registers
14567(*note Explicit Reg Vars::), and used as asm input or output operands
14568must have no part mentioned in the clobber description.  There is no
14569way for you to specify that an input operand is modified without also
14570specifying it as an output operand.  Note that if all the output
14571operands you specify are for this purpose (and hence unused), you will
14572then also need to specify `volatile' for the `asm' construct, as
14573described below, to prevent GCC from deleting the `asm' statement as
14574unused.
14575
14576 If you refer to a particular hardware register from the assembler code,
14577you will probably have to list the register after the third colon to
14578tell the compiler the register's value is modified.  In some assemblers,
14579the register names begin with `%'; to produce one `%' in the assembler
14580code, you must write `%%' in the input.
14581
14582 If your assembler instruction can alter the condition code register,
14583add `cc' to the list of clobbered registers.  GCC on some machines
14584represents the condition codes as a specific hardware register; `cc'
14585serves to name this register.  On other machines, the condition code is
14586handled differently, and specifying `cc' has no effect.  But it is
14587valid no matter what the machine.
14588
14589 If your assembler instructions access memory in an unpredictable
14590fashion, add `memory' to the list of clobbered registers.  This will
14591cause GCC to not keep memory values cached in registers across the
14592assembler instruction and not optimize stores or loads to that memory.
14593You will also want to add the `volatile' keyword if the memory affected
14594is not listed in the inputs or outputs of the `asm', as the `memory'
14595clobber does not count as a side-effect of the `asm'.  If you know how
14596large the accessed memory is, you can add it as input or output but if
14597this is not known, you should add `memory'.  As an example, if you
14598access ten bytes of a string, you can use a memory input like:
14599
14600     {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
14601
14602 Note that in the following example the memory input is necessary,
14603otherwise GCC might optimize the store to `x' away:
14604     int foo ()
14605     {
14606       int x = 42;
14607       int *y = &x;
14608       int result;
14609       asm ("magic stuff accessing an 'int' pointed to by '%1'"
14610             "=&d" (r) : "a" (y), "m" (*y));
14611       return result;
14612     }
14613
14614 You can put multiple assembler instructions together in a single `asm'
14615template, separated by the characters normally used in assembly code
14616for the system.  A combination that works in most places is a newline
14617to break the line, plus a tab character to move to the instruction field
14618(written as `\n\t').  Sometimes semicolons can be used, if the
14619assembler allows semicolons as a line-breaking character.  Note that
14620some assembler dialects use semicolons to start a comment.  The input
14621operands are guaranteed not to use any of the clobbered registers, and
14622neither will the output operands' addresses, so you can read and write
14623the clobbered registers as many times as you like.  Here is an example
14624of multiple instructions in a template; it assumes the subroutine
14625`_foo' accepts arguments in registers 9 and 10:
14626
14627     asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
14628          : /* no outputs */
14629          : "g" (from), "g" (to)
14630          : "r9", "r10");
14631
14632 Unless an output operand has the `&' constraint modifier, GCC may
14633allocate it in the same register as an unrelated input operand, on the
14634assumption the inputs are consumed before the outputs are produced.
14635This assumption may be false if the assembler code actually consists of
14636more than one instruction.  In such a case, use `&' for each output
14637operand that may not overlap an input.  *Note Modifiers::.
14638
14639 If you want to test the condition code produced by an assembler
14640instruction, you must include a branch and a label in the `asm'
14641construct, as follows:
14642
14643     asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
14644          : "g" (result)
14645          : "g" (input));
14646
14647This assumes your assembler supports local labels, as the GNU assembler
14648and most Unix assemblers do.
14649
14650 Speaking of labels, jumps from one `asm' to another are not supported.
14651The compiler's optimizers do not know about these jumps, and therefore
14652they cannot take account of them when deciding how to optimize.
14653
14654 Usually the most convenient way to use these `asm' instructions is to
14655encapsulate them in macros that look like functions.  For example,
14656
14657     #define sin(x)       \
14658     ({ double __value, __arg = (x);   \
14659        asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
14660        __value; })
14661
14662Here the variable `__arg' is used to make sure that the instruction
14663operates on a proper `double' value, and to accept only those arguments
14664`x' which can convert automatically to a `double'.
14665
14666 Another way to make sure the instruction operates on the correct data
14667type is to use a cast in the `asm'.  This is different from using a
14668variable `__arg' in that it converts more different types.  For
14669example, if the desired type were `int', casting the argument to `int'
14670would accept a pointer with no complaint, while assigning the argument
14671to an `int' variable named `__arg' would warn about using a pointer
14672unless the caller explicitly casts it.
14673
14674 If an `asm' has output operands, GCC assumes for optimization purposes
14675the instruction has no side effects except to change the output
14676operands.  This does not mean instructions with a side effect cannot be
14677used, but you must be careful, because the compiler may eliminate them
14678if the output operands aren't used, or move them out of loops, or
14679replace two with one if they constitute a common subexpression.  Also,
14680if your instruction does have a side effect on a variable that otherwise
14681appears not to change, the old value of the variable may be reused later
14682if it happens to be found in a register.
14683
14684 You can prevent an `asm' instruction from being deleted, moved
14685significantly, or combined, by writing the keyword `volatile' after the
14686`asm'.  For example:
14687
14688     #define get_and_set_priority(new)              \
14689     ({ int __old;                                  \
14690        asm volatile ("get_and_set_priority %0, %1" \
14691                      : "=g" (__old) : "g" (new));  \
14692        __old; })
14693
14694If you write an `asm' instruction with no outputs, GCC will know the
14695instruction has side-effects and will not delete the instruction or
14696move it outside of loops.
14697
14698 The `volatile' keyword indicates that the instruction has important
14699side-effects.  GCC will not delete a volatile `asm' if it is reachable.
14700(The instruction can still be deleted if GCC can prove that
14701control-flow will never reach the location of the instruction.)  In
14702addition, GCC will not reschedule instructions across a volatile `asm'
14703instruction.  For example:
14704
14705     *(volatile int *)addr = foo;
14706     asm volatile ("eieio" : : );
14707
14708Assume `addr' contains the address of a memory mapped device register.
14709The PowerPC `eieio' instruction (Enforce In-order Execution of I/O)
14710tells the CPU to make sure that the store to that device register
14711happens before it issues any other I/O.
14712
14713 Note that even a volatile `asm' instruction can be moved in ways that
14714appear insignificant to the compiler, such as across jump instructions.
14715You can't expect a sequence of volatile `asm' instructions to remain
14716perfectly consecutive.  If you want consecutive output, use a single
14717`asm'.  Also, GCC will perform some optimizations across a volatile
14718`asm' instruction; GCC does not "forget everything" when it encounters
14719a volatile `asm' instruction the way some other compilers do.
14720
14721 An `asm' instruction without any operands or clobbers (an "old style"
14722`asm') will be treated identically to a volatile `asm' instruction.
14723
14724 It is a natural idea to look for a way to give access to the condition
14725code left by the assembler instruction.  However, when we attempted to
14726implement this, we found no way to make it work reliably.  The problem
14727is that output operands might need reloading, which would result in
14728additional following "store" instructions.  On most machines, these
14729instructions would alter the condition code before there was time to
14730test it.  This problem doesn't arise for ordinary "test" and "compare"
14731instructions because they don't have any output operands.
14732
14733 For reasons similar to those described above, it is not possible to
14734give an assembler instruction access to the condition code left by
14735previous instructions.
14736
14737 If you are writing a header file that should be includable in ISO C
14738programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
14739
147405.35.1 Size of an `asm'
14741-----------------------
14742
14743Some targets require that GCC track the size of each instruction used in
14744order to generate correct code.  Because the final length of an `asm'
14745is only known by the assembler, GCC must make an estimate as to how big
14746it will be.  The estimate is formed by counting the number of
14747statements in the pattern of the `asm' and multiplying that by the
14748length of the longest instruction on that processor.  Statements in the
14749`asm' are identified by newline characters and whatever statement
14750separator characters are supported by the assembler; on most processors
14751this is the ``;'' character.
14752
14753 Normally, GCC's estimate is perfectly adequate to ensure that correct
14754code is generated, but it is possible to confuse the compiler if you use
14755pseudo instructions or assembler macros that expand into multiple real
14756instructions or if you use assembler directives that expand to more
14757space in the object file than would be needed for a single instruction.
14758If this happens then the assembler will produce a diagnostic saying that
14759a label is unreachable.
14760
147615.35.2 i386 floating point asm operands
14762---------------------------------------
14763
14764There are several rules on the usage of stack-like regs in asm_operands
14765insns.  These rules apply only to the operands that are stack-like regs:
14766
14767  1. Given a set of input regs that die in an asm_operands, it is
14768     necessary to know which are implicitly popped by the asm, and
14769     which must be explicitly popped by gcc.
14770
14771     An input reg that is implicitly popped by the asm must be
14772     explicitly clobbered, unless it is constrained to match an output
14773     operand.
14774
14775  2. For any input reg that is implicitly popped by an asm, it is
14776     necessary to know how to adjust the stack to compensate for the
14777     pop.  If any non-popped input is closer to the top of the
14778     reg-stack than the implicitly popped reg, it would not be possible
14779     to know what the stack looked like--it's not clear how the rest of
14780     the stack "slides up".
14781
14782     All implicitly popped input regs must be closer to the top of the
14783     reg-stack than any input that is not implicitly popped.
14784
14785     It is possible that if an input dies in an insn, reload might use
14786     the input reg for an output reload.  Consider this example:
14787
14788          asm ("foo" : "=t" (a) : "f" (b));
14789
14790     This asm says that input B is not popped by the asm, and that the
14791     asm pushes a result onto the reg-stack, i.e., the stack is one
14792     deeper after the asm than it was before.  But, it is possible that
14793     reload will think that it can use the same reg for both the input
14794     and the output, if input B dies in this insn.
14795
14796     If any input operand uses the `f' constraint, all output reg
14797     constraints must use the `&' earlyclobber.
14798
14799     The asm above would be written as
14800
14801          asm ("foo" : "=&t" (a) : "f" (b));
14802
14803  3. Some operands need to be in particular places on the stack.  All
14804     output operands fall in this category--there is no other way to
14805     know which regs the outputs appear in unless the user indicates
14806     this in the constraints.
14807
14808     Output operands must specifically indicate which reg an output
14809     appears in after an asm.  `=f' is not allowed: the operand
14810     constraints must select a class with a single reg.
14811
14812  4. Output operands may not be "inserted" between existing stack regs.
14813     Since no 387 opcode uses a read/write operand, all output operands
14814     are dead before the asm_operands, and are pushed by the
14815     asm_operands.  It makes no sense to push anywhere but the top of
14816     the reg-stack.
14817
14818     Output operands must start at the top of the reg-stack: output
14819     operands may not "skip" a reg.
14820
14821  5. Some asm statements may need extra stack space for internal
14822     calculations.  This can be guaranteed by clobbering stack registers
14823     unrelated to the inputs and outputs.
14824
14825
14826 Here are a couple of reasonable asms to want to write.  This asm takes
14827one input, which is internally popped, and produces two outputs.
14828
14829     asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
14830
14831 This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
14832and replaces them with one output.  The user must code the `st(1)'
14833clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
14834
14835     asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
14836
14837
14838File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
14839
148405.36 Constraints for `asm' Operands
14841===================================
14842
14843Here are specific details on what constraint letters you can use with
14844`asm' operands.  Constraints can say whether an operand may be in a
14845register, and which kinds of register; whether the operand can be a
14846memory reference, and which kinds of address; whether the operand may
14847be an immediate constant, and which possible values it may have.
14848Constraints can also require two operands to match.
14849
14850* Menu:
14851
14852* Simple Constraints::  Basic use of constraints.
14853* Multi-Alternative::   When an insn has two alternative constraint-patterns.
14854* Modifiers::           More precise control over effects of constraints.
14855* Machine Constraints:: Special constraints for some particular machines.
14856
14857
14858File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
14859
148605.36.1 Simple Constraints
14861-------------------------
14862
14863The simplest kind of constraint is a string full of letters, each of
14864which describes one kind of operand that is permitted.  Here are the
14865letters that are allowed:
14866
14867whitespace
14868     Whitespace characters are ignored and can be inserted at any
14869     position except the first.  This enables each alternative for
14870     different operands to be visually aligned in the machine
14871     description even if they have different number of constraints and
14872     modifiers.
14873
14874`m'
14875     A memory operand is allowed, with any kind of address that the
14876     machine supports in general.
14877
14878`o'
14879     A memory operand is allowed, but only if the address is
14880     "offsettable".  This means that adding a small integer (actually,
14881     the width in bytes of the operand, as determined by its machine
14882     mode) may be added to the address and the result is also a valid
14883     memory address.
14884
14885     For example, an address which is constant is offsettable; so is an
14886     address that is the sum of a register and a constant (as long as a
14887     slightly larger constant is also within the range of
14888     address-offsets supported by the machine); but an autoincrement or
14889     autodecrement address is not offsettable.  More complicated
14890     indirect/indexed addresses may or may not be offsettable depending
14891     on the other addressing modes that the machine supports.
14892
14893     Note that in an output operand which can be matched by another
14894     operand, the constraint letter `o' is valid only when accompanied
14895     by both `<' (if the target machine has predecrement addressing)
14896     and `>' (if the target machine has preincrement addressing).
14897
14898`V'
14899     A memory operand that is not offsettable.  In other words,
14900     anything that would fit the `m' constraint but not the `o'
14901     constraint.
14902
14903`<'
14904     A memory operand with autodecrement addressing (either
14905     predecrement or postdecrement) is allowed.
14906
14907`>'
14908     A memory operand with autoincrement addressing (either
14909     preincrement or postincrement) is allowed.
14910
14911`r'
14912     A register operand is allowed provided that it is in a general
14913     register.
14914
14915`i'
14916     An immediate integer operand (one with constant value) is allowed.
14917     This includes symbolic constants whose values will be known only at
14918     assembly time.
14919
14920`n'
14921     An immediate integer operand with a known numeric value is allowed.
14922     Many systems cannot support assembly-time constants for operands
14923     less than a word wide.  Constraints for these operands should use
14924     `n' rather than `i'.
14925
14926`I', `J', `K', ... `P'
14927     Other letters in the range `I' through `P' may be defined in a
14928     machine-dependent fashion to permit immediate integer operands with
14929     explicit integer values in specified ranges.  For example, on the
14930     68000, `I' is defined to stand for the range of values 1 to 8.
14931     This is the range permitted as a shift count in the shift
14932     instructions.
14933
14934`E'
14935     An immediate floating operand (expression code `const_double') is
14936     allowed, but only if the target floating point format is the same
14937     as that of the host machine (on which the compiler is running).
14938
14939`F'
14940     An immediate floating operand (expression code `const_double' or
14941     `const_vector') is allowed.
14942
14943`G', `H'
14944     `G' and `H' may be defined in a machine-dependent fashion to
14945     permit immediate floating operands in particular ranges of values.
14946
14947`s'
14948     An immediate integer operand whose value is not an explicit
14949     integer is allowed.
14950
14951     This might appear strange; if an insn allows a constant operand
14952     with a value not known at compile time, it certainly must allow
14953     any known value.  So why use `s' instead of `i'?  Sometimes it
14954     allows better code to be generated.
14955
14956     For example, on the 68000 in a fullword instruction it is possible
14957     to use an immediate operand; but if the immediate value is between
14958     -128 and 127, better code results from loading the value into a
14959     register and using the register.  This is because the load into
14960     the register can be done with a `moveq' instruction.  We arrange
14961     for this to happen by defining the letter `K' to mean "any integer
14962     outside the range -128 to 127", and then specifying `Ks' in the
14963     operand constraints.
14964
14965`g'
14966     Any register, memory or immediate integer operand is allowed,
14967     except for registers that are not general registers.
14968
14969`X'
14970     Any operand whatsoever is allowed.
14971
14972`0', `1', `2', ... `9'
14973     An operand that matches the specified operand number is allowed.
14974     If a digit is used together with letters within the same
14975     alternative, the digit should come last.
14976
14977     This number is allowed to be more than a single digit.  If multiple
14978     digits are encountered consecutively, they are interpreted as a
14979     single decimal integer.  There is scant chance for ambiguity,
14980     since to-date it has never been desirable that `10' be interpreted
14981     as matching either operand 1 _or_ operand 0.  Should this be
14982     desired, one can use multiple alternatives instead.
14983
14984     This is called a "matching constraint" and what it really means is
14985     that the assembler has only a single operand that fills two roles
14986     which `asm' distinguishes.  For example, an add instruction uses
14987     two input operands and an output operand, but on most CISC
14988     machines an add instruction really has only two operands, one of
14989     them an input-output operand:
14990
14991          addl #35,r12
14992
14993     Matching constraints are used in these circumstances.  More
14994     precisely, the two operands that match must include one input-only
14995     operand and one output-only operand.  Moreover, the digit must be a
14996     smaller number than the number of the operand that uses it in the
14997     constraint.
14998
14999`p'
15000     An operand that is a valid memory address is allowed.  This is for
15001     "load address" and "push address" instructions.
15002
15003     `p' in the constraint must be accompanied by `address_operand' as
15004     the predicate in the `match_operand'.  This predicate interprets
15005     the mode specified in the `match_operand' as the mode of the memory
15006     reference for which the address would be valid.
15007
15008OTHER-LETTERS
15009     Other letters can be defined in machine-dependent fashion to stand
15010     for particular classes of registers or other arbitrary operand
15011     types.  `d', `a' and `f' are defined on the 68000/68020 to stand
15012     for data, address and floating point registers.
15013
15014
15015
15016File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
15017
150185.36.2 Multiple Alternative Constraints
15019---------------------------------------
15020
15021Sometimes a single instruction has multiple alternative sets of possible
15022operands.  For example, on the 68000, a logical-or instruction can
15023combine register or an immediate value into memory, or it can combine
15024any kind of operand into a register; but it cannot combine one memory
15025location into another.
15026
15027 These constraints are represented as multiple alternatives.  An
15028alternative can be described by a series of letters for each operand.
15029The overall constraint for an operand is made from the letters for this
15030operand from the first alternative, a comma, the letters for this
15031operand from the second alternative, a comma, and so on until the last
15032alternative.
15033
15034 If all the operands fit any one alternative, the instruction is valid.
15035Otherwise, for each alternative, the compiler counts how many
15036instructions must be added to copy the operands so that that
15037alternative applies.  The alternative requiring the least copying is
15038chosen.  If two alternatives need the same amount of copying, the one
15039that comes first is chosen.  These choices can be altered with the `?'
15040and `!' characters:
15041
15042`?'
15043     Disparage slightly the alternative that the `?' appears in, as a
15044     choice when no alternative applies exactly.  The compiler regards
15045     this alternative as one unit more costly for each `?' that appears
15046     in it.
15047
15048`!'
15049     Disparage severely the alternative that the `!' appears in.  This
15050     alternative can still be used if it fits without reloading, but if
15051     reloading is needed, some other alternative will be used.
15052
15053
15054File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
15055
150565.36.3 Constraint Modifier Characters
15057-------------------------------------
15058
15059Here are constraint modifier characters.
15060
15061`='
15062     Means that this operand is write-only for this instruction: the
15063     previous value is discarded and replaced by output data.
15064
15065`+'
15066     Means that this operand is both read and written by the
15067     instruction.
15068
15069     When the compiler fixes up the operands to satisfy the constraints,
15070     it needs to know which operands are inputs to the instruction and
15071     which are outputs from it.  `=' identifies an output; `+'
15072     identifies an operand that is both input and output; all other
15073     operands are assumed to be input only.
15074
15075     If you specify `=' or `+' in a constraint, you put it in the first
15076     character of the constraint string.
15077
15078`&'
15079     Means (in a particular alternative) that this operand is an
15080     "earlyclobber" operand, which is modified before the instruction is
15081     finished using the input operands.  Therefore, this operand may
15082     not lie in a register that is used as an input operand or as part
15083     of any memory address.
15084
15085     `&' applies only to the alternative in which it is written.  In
15086     constraints with multiple alternatives, sometimes one alternative
15087     requires `&' while others do not.  See, for example, the `movdf'
15088     insn of the 68000.
15089
15090     An input operand can be tied to an earlyclobber operand if its only
15091     use as an input occurs before the early result is written.  Adding
15092     alternatives of this form often allows GCC to produce better code
15093     when only some of the inputs can be affected by the earlyclobber.
15094     See, for example, the `mulsi3' insn of the ARM.
15095
15096     `&' does not obviate the need to write `='.
15097
15098`%'
15099     Declares the instruction to be commutative for this operand and the
15100     following operand.  This means that the compiler may interchange
15101     the two operands if that is the cheapest way to make all operands
15102     fit the constraints.  GCC can only handle one commutative pair in
15103     an asm; if you use more, the compiler may fail.
15104
15105`#'
15106     Says that all following characters, up to the next comma, are to be
15107     ignored as a constraint.  They are significant only for choosing
15108     register preferences.
15109
15110`*'
15111     Says that the following character should be ignored when choosing
15112     register preferences.  `*' has no effect on the meaning of the
15113     constraint as a constraint, and no effect on reloading.
15114
15115
15116
15117File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
15118
151195.36.4 Constraints for Particular Machines
15120------------------------------------------
15121
15122Whenever possible, you should use the general-purpose constraint letters
15123in `asm' arguments, since they will convey meaning more readily to
15124people reading your code.  Failing that, use the constraint letters
15125that usually have very similar meanings across architectures.  The most
15126commonly used constraints are `m' and `r' (for memory and
15127general-purpose registers respectively; *note Simple Constraints::), and
15128`I', usually the letter indicating the most common immediate-constant
15129format.
15130
15131 For each machine architecture, the `config/MACHINE/MACHINE.h' file
15132defines additional constraints.  These constraints are used by the
15133compiler itself for instruction generation, as well as for `asm'
15134statements; therefore, some of the constraints are not particularly
15135interesting for `asm'.  The constraints are defined through these
15136macros:
15137
15138`REG_CLASS_FROM_LETTER'
15139     Register class constraints (usually lowercase).
15140
15141`CONST_OK_FOR_LETTER_P'
15142     Immediate constant constraints, for non-floating point constants of
15143     word size or smaller precision (usually uppercase).
15144
15145`CONST_DOUBLE_OK_FOR_LETTER_P'
15146     Immediate constant constraints, for all floating point constants
15147     and for constants of greater than word size precision (usually
15148     uppercase).
15149
15150`EXTRA_CONSTRAINT'
15151     Special cases of registers or memory.  This macro is not required,
15152     and is only defined for some machines.
15153
15154 Inspecting these macro definitions in the compiler source for your
15155machine is the best way to be certain you have the right constraints.
15156However, here is a summary of the machine-dependent constraints
15157available on some particular machines.
15158
15159_ARM family--`arm.h'_
15160
15161    `f'
15162          Floating-point register
15163
15164    `F'
15165          One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
15166          4.0, 5.0 or 10.0
15167
15168    `G'
15169          Floating-point constant that would satisfy the constraint `F'
15170          if it were negated
15171
15172    `I'
15173          Integer that is valid as an immediate operand in a data
15174          processing instruction.  That is, an integer in the range 0
15175          to 255 rotated by a multiple of 2
15176
15177    `J'
15178          Integer in the range -4095 to 4095
15179
15180    `K'
15181          Integer that satisfies constraint `I' when inverted (ones
15182          complement)
15183
15184    `L'
15185          Integer that satisfies constraint `I' when negated (twos
15186          complement)
15187
15188    `M'
15189          Integer in the range 0 to 32
15190
15191    `Q'
15192          A memory reference where the exact address is in a single
15193          register (``m'' is preferable for `asm' statements)
15194
15195    `R'
15196          An item in the constant pool
15197
15198    `S'
15199          A symbol in the text segment of the current file
15200
15201_AVR family--`avr.h'_
15202
15203    `l'
15204          Registers from r0 to r15
15205
15206    `a'
15207          Registers from r16 to r23
15208
15209    `d'
15210          Registers from r16 to r31
15211
15212    `w'
15213          Registers from r24 to r31.  These registers can be used in
15214          `adiw' command
15215
15216    `e'
15217          Pointer register (r26-r31)
15218
15219    `b'
15220          Base pointer register (r28-r31)
15221
15222    `q'
15223          Stack pointer register (SPH:SPL)
15224
15225    `t'
15226          Temporary register r0
15227
15228    `x'
15229          Register pair X (r27:r26)
15230
15231    `y'
15232          Register pair Y (r29:r28)
15233
15234    `z'
15235          Register pair Z (r31:r30)
15236
15237    `I'
15238          Constant greater than -1, less than 64
15239
15240    `J'
15241          Constant greater than -64, less than 1
15242
15243    `K'
15244          Constant integer 2
15245
15246    `L'
15247          Constant integer 0
15248
15249    `M'
15250          Constant that fits in 8 bits
15251
15252    `N'
15253          Constant integer -1
15254
15255    `O'
15256          Constant integer 8, 16, or 24
15257
15258    `P'
15259          Constant integer 1
15260
15261    `G'
15262          A floating point constant 0.0
15263
15264_PowerPC and IBM RS6000--`rs6000.h'_
15265
15266    `b'
15267          Address base register
15268
15269    `f'
15270          Floating point register
15271
15272    `v'
15273          Vector register
15274
15275    `h'
15276          `MQ', `CTR', or `LINK' register
15277
15278    `q'
15279          `MQ' register
15280
15281    `c'
15282          `CTR' register
15283
15284    `l'
15285          `LINK' register
15286
15287    `x'
15288          `CR' register (condition register) number 0
15289
15290    `y'
15291          `CR' register (condition register)
15292
15293    `z'
15294          `FPMEM' stack memory for FPR-GPR transfers
15295
15296    `I'
15297          Signed 16-bit constant
15298
15299    `J'
15300          Unsigned 16-bit constant shifted left 16 bits (use `L'
15301          instead for `SImode' constants)
15302
15303    `K'
15304          Unsigned 16-bit constant
15305
15306    `L'
15307          Signed 16-bit constant shifted left 16 bits
15308
15309    `M'
15310          Constant larger than 31
15311
15312    `N'
15313          Exact power of 2
15314
15315    `O'
15316          Zero
15317
15318    `P'
15319          Constant whose negation is a signed 16-bit constant
15320
15321    `G'
15322          Floating point constant that can be loaded into a register
15323          with one instruction per word
15324
15325    `Q'
15326          Memory operand that is an offset from a register (`m' is
15327          preferable for `asm' statements)
15328
15329    `R'
15330          AIX TOC entry
15331
15332    `S'
15333          Constant suitable as a 64-bit mask operand
15334
15335    `T'
15336          Constant suitable as a 32-bit mask operand
15337
15338    `U'
15339          System V Release 4 small data area reference
15340
15341_Intel 386--`i386.h'_
15342
15343    `q'
15344          `a', `b', `c', or `d' register for the i386.  For x86-64 it
15345          is equivalent to `r' class. (for 8-bit instructions that do
15346          not use upper halves)
15347
15348    `Q'
15349          `a', `b', `c', or `d' register. (for 8-bit instructions, that
15350          do use upper halves)
15351
15352    `R'
15353          Legacy register--equivalent to `r' class in i386 mode.  (for
15354          non-8-bit registers used together with 8-bit upper halves in
15355          a single instruction)
15356
15357    `A'
15358          Specifies the `a' or `d' registers.  This is primarily useful
15359          for 64-bit integer values (when in 32-bit mode) intended to
15360          be returned with the `d' register holding the most
15361          significant bits and the `a' register holding the least
15362          significant bits.
15363
15364    `f'
15365          Floating point register
15366
15367    `t'
15368          First (top of stack) floating point register
15369
15370    `u'
15371          Second floating point register
15372
15373    `a'
15374          `a' register
15375
15376    `b'
15377          `b' register
15378
15379    `c'
15380          `c' register
15381
15382    `C'
15383          Specifies constant that can be easily constructed in SSE
15384          register without loading it from memory.
15385
15386    `d'
15387          `d' register
15388
15389    `D'
15390          `di' register
15391
15392    `S'
15393          `si' register
15394
15395    `x'
15396          `xmm' SSE register
15397
15398    `y'
15399          MMX register
15400
15401    `I'
15402          Constant in range 0 to 31 (for 32-bit shifts)
15403
15404    `J'
15405          Constant in range 0 to 63 (for 64-bit shifts)
15406
15407    `K'
15408          `0xff'
15409
15410    `L'
15411          `0xffff'
15412
15413    `M'
15414          0, 1, 2, or 3 (shifts for `lea' instruction)
15415
15416    `N'
15417          Constant in range 0 to 255 (for `out' instruction)
15418
15419    `Z'
15420          Constant in range 0 to `0xffffffff' or symbolic reference
15421          known to fit specified range.  (for using immediates in zero
15422          extending 32-bit to 64-bit x86-64 instructions)
15423
15424    `e'
15425          Constant in range -2147483648 to 2147483647 or symbolic
15426          reference known to fit specified range.  (for using
15427          immediates in 64-bit x86-64 instructions)
15428
15429    `G'
15430          Standard 80387 floating point constant
15431
15432_Intel 960--`i960.h'_
15433
15434    `f'
15435          Floating point register (`fp0' to `fp3')
15436
15437    `l'
15438          Local register (`r0' to `r15')
15439
15440    `b'
15441          Global register (`g0' to `g15')
15442
15443    `d'
15444          Any local or global register
15445
15446    `I'
15447          Integers from 0 to 31
15448
15449    `J'
15450          0
15451
15452    `K'
15453          Integers from -31 to 0
15454
15455    `G'
15456          Floating point 0
15457
15458    `H'
15459          Floating point 1
15460
15461_Intel IA-64--`ia64.h'_
15462
15463    `a'
15464          General register `r0' to `r3' for `addl' instruction
15465
15466    `b'
15467          Branch register
15468
15469    `c'
15470          Predicate register (`c' as in "conditional")
15471
15472    `d'
15473          Application register residing in M-unit
15474
15475    `e'
15476          Application register residing in I-unit
15477
15478    `f'
15479          Floating-point register
15480
15481    `m'
15482          Memory operand.  Remember that `m' allows postincrement and
15483          postdecrement which require printing with `%Pn' on IA-64.
15484          Use `S' to disallow postincrement and postdecrement.
15485
15486    `G'
15487          Floating-point constant 0.0 or 1.0
15488
15489    `I'
15490          14-bit signed integer constant
15491
15492    `J'
15493          22-bit signed integer constant
15494
15495    `K'
15496          8-bit signed integer constant for logical instructions
15497
15498    `L'
15499          8-bit adjusted signed integer constant for compare pseudo-ops
15500
15501    `M'
15502          6-bit unsigned integer constant for shift counts
15503
15504    `N'
15505          9-bit signed integer constant for load and store
15506          postincrements
15507
15508    `O'
15509          The constant zero
15510
15511    `P'
15512          0 or -1 for `dep' instruction
15513
15514    `Q'
15515          Non-volatile memory for floating-point loads and stores
15516
15517    `R'
15518          Integer constant in the range 1 to 4 for `shladd' instruction
15519
15520    `S'
15521          Memory operand except postincrement and postdecrement
15522
15523_FRV--`frv.h'_
15524
15525    `a'
15526          Register in the class `ACC_REGS' (`acc0' to `acc7').
15527
15528    `b'
15529          Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
15530
15531    `c'
15532          Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
15533          to `icc3').
15534
15535    `d'
15536          Register in the class `GPR_REGS' (`gr0' to `gr63').
15537
15538    `e'
15539          Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
15540          registers are excluded not in the class but through the use
15541          of a machine mode larger than 4 bytes.
15542
15543    `f'
15544          Register in the class `FPR_REGS' (`fr0' to `fr63').
15545
15546    `h'
15547          Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
15548          registers are excluded not in the class but through the use
15549          of a machine mode larger than 4 bytes.
15550
15551    `l'
15552          Register in the class `LR_REG' (the `lr' register).
15553
15554    `q'
15555          Register in the class `QUAD_REGS' (`gr2' to `gr63').
15556          Register numbers not divisible by 4 are excluded not in the
15557          class but through the use of a machine mode larger than 8
15558          bytes.
15559
15560    `t'
15561          Register in the class `ICC_REGS' (`icc0' to `icc3').
15562
15563    `u'
15564          Register in the class `FCC_REGS' (`fcc0' to `fcc3').
15565
15566    `v'
15567          Register in the class `ICR_REGS' (`cc4' to `cc7').
15568
15569    `w'
15570          Register in the class `FCR_REGS' (`cc0' to `cc3').
15571
15572    `x'
15573          Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
15574          Register numbers not divisible by 4 are excluded not in the
15575          class but through the use of a machine mode larger than 8
15576          bytes.
15577
15578    `z'
15579          Register in the class `SPR_REGS' (`lcr' and `lr').
15580
15581    `A'
15582          Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
15583
15584    `B'
15585          Register in the class `ACCG_REGS' (`accg0' to `accg7').
15586
15587    `C'
15588          Register in the class `CR_REGS' (`cc0' to `cc7').
15589
15590    `G'
15591          Floating point constant zero
15592
15593    `I'
15594          6-bit signed integer constant
15595
15596    `J'
15597          10-bit signed integer constant
15598
15599    `L'
15600          16-bit signed integer constant
15601
15602    `M'
15603          16-bit unsigned integer constant
15604
15605    `N'
15606          12-bit signed integer constant that is negative--i.e. in the
15607          range of -2048 to -1
15608
15609    `O'
15610          Constant zero
15611
15612    `P'
15613          12-bit signed integer constant that is greater than
15614          zero--i.e. in the range of 1 to 2047.
15615
15616
15617_IP2K--`ip2k.h'_
15618
15619    `a'
15620          `DP' or `IP' registers (general address)
15621
15622    `f'
15623          `IP' register
15624
15625    `j'
15626          `IPL' register
15627
15628    `k'
15629          `IPH' register
15630
15631    `b'
15632          `DP' register
15633
15634    `y'
15635          `DPH' register
15636
15637    `z'
15638          `DPL' register
15639
15640    `q'
15641          `SP' register
15642
15643    `c'
15644          `DP' or `SP' registers (offsettable address)
15645
15646    `d'
15647          Non-pointer registers (not `SP', `DP', `IP')
15648
15649    `u'
15650          Non-SP registers (everything except `SP')
15651
15652    `R'
15653          Indirect through `IP' - Avoid this except for `QImode', since
15654          we can't access extra bytes
15655
15656    `S'
15657          Indirect through `SP' or `DP' with short displacement (0..127)
15658
15659    `T'
15660          Data-section immediate value
15661
15662    `I'
15663          Integers from -255 to -1
15664
15665    `J'
15666          Integers from 0 to 7--valid bit number in a register
15667
15668    `K'
15669          Integers from 0 to 127--valid displacement for addressing mode
15670
15671    `L'
15672          Integers from 1 to 127
15673
15674    `M'
15675          Integer -1
15676
15677    `N'
15678          Integer 1
15679
15680    `O'
15681          Zero
15682
15683    `P'
15684          Integers from 0 to 255
15685
15686_MIPS--`mips.h'_
15687
15688    `d'
15689          General-purpose integer register
15690
15691    `f'
15692          Floating-point register (if available)
15693
15694    `h'
15695          `Hi' register
15696
15697    `l'
15698          `Lo' register
15699
15700    `x'
15701          `Hi' or `Lo' register
15702
15703    `y'
15704          General-purpose integer register
15705
15706    `z'
15707          Floating-point status register
15708
15709    `I'
15710          Signed 16-bit constant (for arithmetic instructions)
15711
15712    `J'
15713          Zero
15714
15715    `K'
15716          Zero-extended 16-bit constant (for logic instructions)
15717
15718    `L'
15719          Constant with low 16 bits zero (can be loaded with `lui')
15720
15721    `M'
15722          32-bit constant which requires two instructions to load (a
15723          constant which is not `I', `K', or `L')
15724
15725    `N'
15726          Negative 16-bit constant
15727
15728    `O'
15729          Exact power of two
15730
15731    `P'
15732          Positive 16-bit constant
15733
15734    `G'
15735          Floating point zero
15736
15737    `Q'
15738          Memory reference that can be loaded with more than one
15739          instruction (`m' is preferable for `asm' statements)
15740
15741    `R'
15742          Memory reference that can be loaded with one instruction (`m'
15743          is preferable for `asm' statements)
15744
15745    `S'
15746          Memory reference in external OSF/rose PIC format (`m' is
15747          preferable for `asm' statements)
15748
15749_Motorola 680x0--`m68k.h'_
15750
15751    `a'
15752          Address register
15753
15754    `d'
15755          Data register
15756
15757    `f'
15758          68881 floating-point register, if available
15759
15760    `I'
15761          Integer in the range 1 to 8
15762
15763    `J'
15764          16-bit signed number
15765
15766    `K'
15767          Signed number whose magnitude is greater than 0x80
15768
15769    `L'
15770          Integer in the range -8 to -1
15771
15772    `M'
15773          Signed number whose magnitude is greater than 0x100
15774
15775    `G'
15776          Floating point constant that is not a 68881 constant
15777
15778_Motorola 68HC11 & 68HC12 families--`m68hc11.h'_
15779
15780    `a'
15781          Register 'a'
15782
15783    `b'
15784          Register 'b'
15785
15786    `d'
15787          Register 'd'
15788
15789    `q'
15790          An 8-bit register
15791
15792    `t'
15793          Temporary soft register _.tmp
15794
15795    `u'
15796          A soft register _.d1 to _.d31
15797
15798    `w'
15799          Stack pointer register
15800
15801    `x'
15802          Register 'x'
15803
15804    `y'
15805          Register 'y'
15806
15807    `z'
15808          Pseudo register 'z' (replaced by 'x' or 'y' at the end)
15809
15810    `A'
15811          An address register: x, y or z
15812
15813    `B'
15814          An address register: x or y
15815
15816    `D'
15817          Register pair (x:d) to form a 32-bit value
15818
15819    `L'
15820          Constants in the range -65536 to 65535
15821
15822    `M'
15823          Constants whose 16-bit low part is zero
15824
15825    `N'
15826          Constant integer 1 or -1
15827
15828    `O'
15829          Constant integer 16
15830
15831    `P'
15832          Constants in the range -8 to 2
15833
15834
15835_SPARC--`sparc.h'_
15836
15837    `f'
15838          Floating-point register on the SPARC-V8 architecture and
15839          lower floating-point register on the SPARC-V9 architecture.
15840
15841    `e'
15842          Floating-point register. It is equivalent to `f' on the
15843          SPARC-V8 architecture and contains both lower and upper
15844          floating-point registers on the SPARC-V9 architecture.
15845
15846    `c'
15847          Floating-point condition code register.
15848
15849    `d'
15850          Lower floating-point register. It is only valid on the
15851          SPARC-V9 architecture when the Visual Instruction Set is
15852          available.
15853
15854    `b'
15855          Floating-point register. It is only valid on the SPARC-V9
15856          architecture when the Visual Instruction Set is available.
15857
15858    `h'
15859          64-bit global or out register for the SPARC-V8+ architecture.
15860
15861    `I'
15862          Signed 13-bit constant
15863
15864    `J'
15865          Zero
15866
15867    `K'
15868          32-bit constant with the low 12 bits clear (a constant that
15869          can be loaded with the `sethi' instruction)
15870
15871    `L'
15872          A constant in the range supported by `movcc' instructions
15873
15874    `M'
15875          A constant in the range supported by `movrcc' instructions
15876
15877    `N'
15878          Same as `K', except that it verifies that bits that are not
15879          in the lower 32-bit range are all zero.  Must be used instead
15880          of `K' for modes wider than `SImode'
15881
15882    `O'
15883          The constant 4096
15884
15885    `G'
15886          Floating-point zero
15887
15888    `H'
15889          Signed 13-bit constant, sign-extended to 32 or 64 bits
15890
15891    `Q'
15892          Floating-point constant whose integral representation can be
15893          moved into an integer register using a single sethi
15894          instruction
15895
15896    `R'
15897          Floating-point constant whose integral representation can be
15898          moved into an integer register using a single mov instruction
15899
15900    `S'
15901          Floating-point constant whose integral representation can be
15902          moved into an integer register using a high/lo_sum
15903          instruction sequence
15904
15905    `T'
15906          Memory address aligned to an 8-byte boundary
15907
15908    `U'
15909          Even register
15910
15911    `W'
15912          Memory address for `e' constraint registers.
15913
15914
15915_TMS320C3x/C4x--`c4x.h'_
15916
15917    `a'
15918          Auxiliary (address) register (ar0-ar7)
15919
15920    `b'
15921          Stack pointer register (sp)
15922
15923    `c'
15924          Standard (32-bit) precision integer register
15925
15926    `f'
15927          Extended (40-bit) precision register (r0-r11)
15928
15929    `k'
15930          Block count register (bk)
15931
15932    `q'
15933          Extended (40-bit) precision low register (r0-r7)
15934
15935    `t'
15936          Extended (40-bit) precision register (r0-r1)
15937
15938    `u'
15939          Extended (40-bit) precision register (r2-r3)
15940
15941    `v'
15942          Repeat count register (rc)
15943
15944    `x'
15945          Index register (ir0-ir1)
15946
15947    `y'
15948          Status (condition code) register (st)
15949
15950    `z'
15951          Data page register (dp)
15952
15953    `G'
15954          Floating-point zero
15955
15956    `H'
15957          Immediate 16-bit floating-point constant
15958
15959    `I'
15960          Signed 16-bit constant
15961
15962    `J'
15963          Signed 8-bit constant
15964
15965    `K'
15966          Signed 5-bit constant
15967
15968    `L'
15969          Unsigned 16-bit constant
15970
15971    `M'
15972          Unsigned 8-bit constant
15973
15974    `N'
15975          Ones complement of unsigned 16-bit constant
15976
15977    `O'
15978          High 16-bit constant (32-bit constant with 16 LSBs zero)
15979
15980    `Q'
15981          Indirect memory reference with signed 8-bit or index register
15982          displacement
15983
15984    `R'
15985          Indirect memory reference with unsigned 5-bit displacement
15986
15987    `S'
15988          Indirect memory reference with 1 bit or index register
15989          displacement
15990
15991    `T'
15992          Direct memory reference
15993
15994    `U'
15995          Symbolic address
15996
15997
15998_S/390 and zSeries--`s390.h'_
15999
16000    `a'
16001          Address register (general purpose register except r0)
16002
16003    `d'
16004          Data register (arbitrary general purpose register)
16005
16006    `f'
16007          Floating-point register
16008
16009    `I'
16010          Unsigned 8-bit constant (0-255)
16011
16012    `J'
16013          Unsigned 12-bit constant (0-4095)
16014
16015    `K'
16016          Signed 16-bit constant (-32768-32767)
16017
16018    `L'
16019          Value appropriate as displacement.
16020         `(0..4095)'
16021               for short displacement
16022
16023         `(-524288..524287)'
16024               for long displacement
16025
16026    `M'
16027          Constant integer with a value of 0x7fffffff.
16028
16029    `N'
16030          Multiple letter constraint followed by 4 parameter letters.
16031         `0..9:'
16032               number of the part counting from most to least
16033               significant
16034
16035         `H,Q:'
16036               mode of the part
16037
16038         `D,S,H:'
16039               mode of the containing operand
16040
16041         `0,F:'
16042               value of the other parts (F - all bits set)
16043          The constraint matches if the specified part of a constant
16044          has a value different from it's other parts.
16045
16046    `Q'
16047          Memory reference without index register and with short
16048          displacement.
16049
16050    `R'
16051          Memory reference with index register and short displacement.
16052
16053    `S'
16054          Memory reference without index register but with long
16055          displacement.
16056
16057    `T'
16058          Memory reference with index register and long displacement.
16059
16060    `U'
16061          Pointer with short displacement.
16062
16063    `W'
16064          Pointer with long displacement.
16065
16066    `Y'
16067          Shift count operand.
16068
16069
16070_Xstormy16--`stormy16.h'_
16071
16072    `a'
16073          Register r0.
16074
16075    `b'
16076          Register r1.
16077
16078    `c'
16079          Register r2.
16080
16081    `d'
16082          Register r8.
16083
16084    `e'
16085          Registers r0 through r7.
16086
16087    `t'
16088          Registers r0 and r1.
16089
16090    `y'
16091          The carry register.
16092
16093    `z'
16094          Registers r8 and r9.
16095
16096    `I'
16097          A constant between 0 and 3 inclusive.
16098
16099    `J'
16100          A constant that has exactly one bit set.
16101
16102    `K'
16103          A constant that has exactly one bit clear.
16104
16105    `L'
16106          A constant between 0 and 255 inclusive.
16107
16108    `M'
16109          A constant between -255 and 0 inclusive.
16110
16111    `N'
16112          A constant between -3 and 0 inclusive.
16113
16114    `O'
16115          A constant between 1 and 4 inclusive.
16116
16117    `P'
16118          A constant between -4 and -1 inclusive.
16119
16120    `Q'
16121          A memory reference that is a stack push.
16122
16123    `R'
16124          A memory reference that is a stack pop.
16125
16126    `S'
16127          A memory reference that refers to a constant address of known
16128          value.
16129
16130    `T'
16131          The register indicated by Rx (not implemented yet).
16132
16133    `U'
16134          A constant that is not between 2 and 15 inclusive.
16135
16136    `Z'
16137          The constant 0.
16138
16139
16140_Xtensa--`xtensa.h'_
16141
16142    `a'
16143          General-purpose 32-bit register
16144
16145    `b'
16146          One-bit boolean register
16147
16148    `A'
16149          MAC16 40-bit accumulator register
16150
16151    `I'
16152          Signed 12-bit integer constant, for use in MOVI instructions
16153
16154    `J'
16155          Signed 8-bit integer constant, for use in ADDI instructions
16156
16157    `K'
16158          Integer constant valid for BccI instructions
16159
16160    `L'
16161          Unsigned constant valid for BccUI instructions
16162
16163
16164
16165
16166File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
16167
161685.37 Controlling Names Used in Assembler Code
16169=============================================
16170
16171You can specify the name to be used in the assembler code for a C
16172function or variable by writing the `asm' (or `__asm__') keyword after
16173the declarator as follows:
16174
16175     int foo asm ("myfoo") = 2;
16176
16177This specifies that the name to be used for the variable `foo' in the
16178assembler code should be `myfoo' rather than the usual `_foo'.
16179
16180 On systems where an underscore is normally prepended to the name of a C
16181function or variable, this feature allows you to define names for the
16182linker that do not start with an underscore.
16183
16184 It does not make sense to use this feature with a non-static local
16185variable since such variables do not have assembler names.  If you are
16186trying to put the variable in a particular register, see *Note Explicit
16187Reg Vars::.  GCC presently accepts such code with a warning, but will
16188probably be changed to issue an error, rather than a warning, in the
16189future.
16190
16191 You cannot use `asm' in this way in a function _definition_; but you
16192can get the same effect by writing a declaration for the function
16193before its definition and putting `asm' there, like this:
16194
16195     extern func () asm ("FUNC");
16196
16197     func (x, y)
16198          int x, y;
16199     /* ... */
16200
16201 It is up to you to make sure that the assembler names you choose do not
16202conflict with any other assembler symbols.  Also, you must not use a
16203register name; that would produce completely invalid assembler code.
16204GCC does not as yet have the ability to store static variables in
16205registers.  Perhaps that will be added.
16206
16207
16208File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
16209
162105.38 Variables in Specified Registers
16211=====================================
16212
16213GNU C allows you to put a few global variables into specified hardware
16214registers.  You can also specify the register in which an ordinary
16215register variable should be allocated.
16216
16217   * Global register variables reserve registers throughout the program.
16218     This may be useful in programs such as programming language
16219     interpreters which have a couple of global variables that are
16220     accessed very often.
16221
16222   * Local register variables in specific registers do not reserve the
16223     registers.  The compiler's data flow analysis is capable of
16224     determining where the specified registers contain live values, and
16225     where they are available for other uses.  Stores into local
16226     register variables may be deleted when they appear to be dead
16227     according to dataflow analysis.  References to local register
16228     variables may be deleted or moved or simplified.
16229
16230     These local variables are sometimes convenient for use with the
16231     extended `asm' feature (*note Extended Asm::), if you want to
16232     write one output of the assembler instruction directly into a
16233     particular register.  (This will work provided the register you
16234     specify fits the constraints specified for that operand in the
16235     `asm'.)
16236
16237* Menu:
16238
16239* Global Reg Vars::
16240* Local Reg Vars::
16241
16242
16243File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
16244
162455.38.1 Defining Global Register Variables
16246-----------------------------------------
16247
16248You can define a global register variable in GNU C like this:
16249
16250     register int *foo asm ("a5");
16251
16252Here `a5' is the name of the register which should be used.  Choose a
16253register which is normally saved and restored by function calls on your
16254machine, so that library routines will not clobber it.
16255
16256 Naturally the register name is cpu-dependent, so you would need to
16257conditionalize your program according to cpu type.  The register `a5'
16258would be a good choice on a 68000 for a variable of pointer type.  On
16259machines with register windows, be sure to choose a "global" register
16260that is not affected magically by the function call mechanism.
16261
16262 In addition, operating systems on one type of cpu may differ in how
16263they name the registers; then you would need additional conditionals.
16264For example, some 68000 operating systems call this register `%a5'.
16265
16266 Eventually there may be a way of asking the compiler to choose a
16267register automatically, but first we need to figure out how it should
16268choose and how to enable you to guide the choice.  No solution is
16269evident.
16270
16271 Defining a global register variable in a certain register reserves that
16272register entirely for this use, at least within the current compilation.
16273The register will not be allocated for any other purpose in the
16274functions in the current compilation.  The register will not be saved
16275and restored by these functions.  Stores into this register are never
16276deleted even if they would appear to be dead, but references may be
16277deleted or moved or simplified.
16278
16279 It is not safe to access the global register variables from signal
16280handlers, or from more than one thread of control, because the system
16281library routines may temporarily use the register for other things
16282(unless you recompile them specially for the task at hand).
16283
16284 It is not safe for one function that uses a global register variable to
16285call another such function `foo' by way of a third function `lose' that
16286was compiled without knowledge of this variable (i.e. in a different
16287source file in which the variable wasn't declared).  This is because
16288`lose' might save the register and put some other value there.  For
16289example, you can't expect a global register variable to be available in
16290the comparison-function that you pass to `qsort', since `qsort' might
16291have put something else in that register.  (If you are prepared to
16292recompile `qsort' with the same global register variable, you can solve
16293this problem.)
16294
16295 If you want to recompile `qsort' or other source files which do not
16296actually use your global register variable, so that they will not use
16297that register for any other purpose, then it suffices to specify the
16298compiler option `-ffixed-REG'.  You need not actually add a global
16299register declaration to their source code.
16300
16301 A function which can alter the value of a global register variable
16302cannot safely be called from a function compiled without this variable,
16303because it could clobber the value the caller expects to find there on
16304return.  Therefore, the function which is the entry point into the part
16305of the program that uses the global register variable must explicitly
16306save and restore the value which belongs to its caller.
16307
16308 On most machines, `longjmp' will restore to each global register
16309variable the value it had at the time of the `setjmp'.  On some
16310machines, however, `longjmp' will not change the value of global
16311register variables.  To be portable, the function that called `setjmp'
16312should make other arrangements to save the values of the global register
16313variables, and to restore them in a `longjmp'.  This way, the same
16314thing will happen regardless of what `longjmp' does.
16315
16316 All global register variable declarations must precede all function
16317definitions.  If such a declaration could appear after function
16318definitions, the declaration would be too late to prevent the register
16319from being used for other purposes in the preceding functions.
16320
16321 Global register variables may not have initial values, because an
16322executable file has no means to supply initial contents for a register.
16323
16324 On the SPARC, there are reports that g3 ... g7 are suitable registers,
16325but certain library functions, such as `getwd', as well as the
16326subroutines for division and remainder, modify g3 and g4.  g1 and g2
16327are local temporaries.
16328
16329 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
16330course, it will not do to use more than a few of those.
16331
16332
16333File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
16334
163355.38.2 Specifying Registers for Local Variables
16336-----------------------------------------------
16337
16338You can define a local register variable with a specified register like
16339this:
16340
16341     register int *foo asm ("a5");
16342
16343Here `a5' is the name of the register which should be used.  Note that
16344this is the same syntax used for defining global register variables,
16345but for a local variable it would appear within a function.
16346
16347 Naturally the register name is cpu-dependent, but this is not a
16348problem, since specific registers are most often useful with explicit
16349assembler instructions (*note Extended Asm::).  Both of these things
16350generally require that you conditionalize your program according to cpu
16351type.
16352
16353 In addition, operating systems on one type of cpu may differ in how
16354they name the registers; then you would need additional conditionals.
16355For example, some 68000 operating systems call this register `%a5'.
16356
16357 Defining such a register variable does not reserve the register; it
16358remains available for other uses in places where flow control determines
16359the variable's value is not live.  However, these registers are made
16360unavailable for use in the reload pass; excessive use of this feature
16361leaves the compiler too few available registers to compile certain
16362functions.
16363
16364 This option does not guarantee that GCC will generate code that has
16365this variable in the register you specify at all times.  You may not
16366code an explicit reference to this register in an `asm' statement and
16367assume it will always refer to this variable.
16368
16369 Stores into local register variables may be deleted when they appear
16370to be dead according to dataflow analysis.  References to local
16371register variables may be deleted or moved or simplified.
16372
16373
16374File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
16375
163765.39 Alternate Keywords
16377=======================
16378
16379`-ansi' and the various `-std' options disable certain keywords.  This
16380causes trouble when you want to use GNU C extensions, or a
16381general-purpose header file that should be usable by all programs,
16382including ISO C programs.  The keywords `asm', `typeof' and `inline'
16383are not available in programs compiled with `-ansi' or `-std' (although
16384`inline' can be used in a program compiled with `-std=c99').  The ISO
16385C99 keyword `restrict' is only available when `-std=gnu99' (which will
16386eventually be the default) or `-std=c99' (or the equivalent
16387`-std=iso9899:1999') is used.
16388
16389 The way to solve these problems is to put `__' at the beginning and
16390end of each problematical keyword.  For example, use `__asm__' instead
16391of `asm', and `__inline__' instead of `inline'.
16392
16393 Other C compilers won't accept these alternative keywords; if you want
16394to compile with another compiler, you can define the alternate keywords
16395as macros to replace them with the customary keywords.  It looks like
16396this:
16397
16398     #ifndef __GNUC__
16399     #define __asm__ asm
16400     #endif
16401
16402 `-pedantic' and other options cause warnings for many GNU C extensions.
16403You can prevent such warnings within one expression by writing
16404`__extension__' before the expression.  `__extension__' has no effect
16405aside from this.
16406
16407
16408File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
16409
164105.40 Incomplete `enum' Types
16411============================
16412
16413You can define an `enum' tag without specifying its possible values.
16414This results in an incomplete type, much like what you get if you write
16415`struct foo' without describing the elements.  A later declaration
16416which does specify the possible values completes the type.
16417
16418 You can't allocate variables or storage using the type while it is
16419incomplete.  However, you can work with pointers to that type.
16420
16421 This extension may not be very useful, but it makes the handling of
16422`enum' more consistent with the way `struct' and `union' are handled.
16423
16424 This extension is not supported by GNU C++.
16425
16426
16427File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
16428
164295.41 Function Names as Strings
16430==============================
16431
16432GCC provides three magic variables which hold the name of the current
16433function, as a string.  The first of these is `__func__', which is part
16434of the C99 standard:
16435
16436     The identifier `__func__' is implicitly declared by the translator
16437     as if, immediately following the opening brace of each function
16438     definition, the declaration
16439          static const char __func__[] = "function-name";
16440
16441     appeared, where function-name is the name of the lexically-enclosing
16442     function.  This name is the unadorned name of the function.
16443
16444 `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
16445recognize only this name.  However, it is not standardized.  For
16446maximum portability, we recommend you use `__func__', but provide a
16447fallback definition with the preprocessor:
16448
16449     #if __STDC_VERSION__ < 199901L
16450     # if __GNUC__ >= 2
16451     #  define __func__ __FUNCTION__
16452     # else
16453     #  define __func__ "<unknown>"
16454     # endif
16455     #endif
16456
16457 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
16458However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
16459the function as well as its bare name.  For example, this program:
16460
16461     extern "C" {
16462     extern int printf (char *, ...);
16463     }
16464
16465     class a {
16466      public:
16467       void sub (int i)
16468         {
16469           printf ("__FUNCTION__ = %s\n", __FUNCTION__);
16470           printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
16471         }
16472     };
16473
16474     int
16475     main (void)
16476     {
16477       a ax;
16478       ax.sub (0);
16479       return 0;
16480     }
16481
16482gives this output:
16483
16484     __FUNCTION__ = sub
16485     __PRETTY_FUNCTION__ = void a::sub(int)
16486
16487 These identifiers are not preprocessor macros.  In GCC 3.3 and
16488earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
16489treated as string literals; they could be used to initialize `char'
16490arrays, and they could be concatenated with other string literals.  GCC
164913.4 and later treat them as variables, like `__func__'.  In C++,
16492`__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
16493
16494
16495File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
16496
164975.42 Getting the Return or Frame Address of a Function
16498======================================================
16499
16500These functions may be used to get information about the callers of a
16501function.
16502
16503 -- Built-in Function: void * __builtin_return_address (unsigned int
16504          LEVEL)
16505     This function returns the return address of the current function,
16506     or of one of its callers.  The LEVEL argument is number of frames
16507     to scan up the call stack.  A value of `0' yields the return
16508     address of the current function, a value of `1' yields the return
16509     address of the caller of the current function, and so forth. When
16510     inlining the expected behavior is that the function will return
16511     the address of the function that will be returned to.  To work
16512     around this behavior use the `noinline' function attribute.
16513
16514     The LEVEL argument must be a constant integer.
16515
16516     On some machines it may be impossible to determine the return
16517     address of any function other than the current one; in such cases,
16518     or when the top of the stack has been reached, this function will
16519     return `0' or a random value. In addition,
16520     `__builtin_frame_address' may be used to determine if the top of
16521     the stack has been reached.
16522
16523     This function should only be used with a nonzero argument for
16524     debugging purposes.
16525
16526 -- Built-in Function: void * __builtin_frame_address (unsigned int
16527          LEVEL)
16528     This function is similar to `__builtin_return_address', but it
16529     returns the address of the function frame rather than the return
16530     address of the function.  Calling `__builtin_frame_address' with a
16531     value of `0' yields the frame address of the current function, a
16532     value of `1' yields the frame address of the caller of the current
16533     function, and so forth.
16534
16535     The frame is the area on the stack which holds local variables and
16536     saved registers.  The frame address is normally the address of the
16537     first word pushed on to the stack by the function.  However, the
16538     exact definition depends upon the processor and the calling
16539     convention.  If the processor has a dedicated frame pointer
16540     register, and the function has a frame, then
16541     `__builtin_frame_address' will return the value of the frame
16542     pointer register.
16543
16544     On some machines it may be impossible to determine the frame
16545     address of any function other than the current one; in such cases,
16546     or when the top of the stack has been reached, this function will
16547     return `0' if the first frame pointer is properly initialized by
16548     the startup code.
16549
16550     This function should only be used with a nonzero argument for
16551     debugging purposes.
16552
16553
16554File: gcc.info,  Node: Vector Extensions,  Next: Other Builtins,  Prev: Return Address,  Up: C Extensions
16555
165565.43 Using vector instructions through built-in functions
16557=========================================================
16558
16559On some targets, the instruction set contains SIMD vector instructions
16560that operate on multiple values contained in one large register at the
16561same time.  For example, on the i386 the MMX, 3Dnow! and SSE extensions
16562can be used this way.
16563
16564 The first step in using these extensions is to provide the necessary
16565data types.  This should be done using an appropriate `typedef':
16566
16567     typedef int v4si __attribute__ ((mode(V4SI)));
16568
16569 The base type `int' is effectively ignored by the compiler, the actual
16570properties of the new type `v4si' are defined by the `__attribute__'.
16571It defines the machine mode to be used; for vector types these have the
16572form `VNB'; N should be the number of elements in the vector, and B
16573should be the base mode of the individual elements.  The following can
16574be used as base modes:
16575
16576`QI'
16577     An integer that is as wide as the smallest addressable unit,
16578     usually 8 bits.
16579
16580`HI'
16581     An integer, twice as wide as a QI mode integer, usually 16 bits.
16582
16583`SI'
16584     An integer, four times as wide as a QI mode integer, usually 32
16585     bits.
16586
16587`DI'
16588     An integer, eight times as wide as a QI mode integer, usually 64
16589     bits.
16590
16591`SF'
16592     A floating point value, as wide as a SI mode integer, usually 32
16593     bits.
16594
16595`DF'
16596     A floating point value, as wide as a DI mode integer, usually 64
16597     bits.
16598
16599 Specifying a combination that is not valid for the current architecture
16600will cause GCC to synthesize the instructions using a narrower mode.
16601For example, if you specify a variable of type `V4SI' and your
16602architecture does not allow for this specific SIMD type, GCC will
16603produce code that uses 4 `SIs'.
16604
16605 The types defined in this manner can be used with a subset of normal C
16606operations.  Currently, GCC will allow using the following operators on
16607these types: `+, -, *, /, unary minus, ^, |, &, ~'.
16608
16609 The operations behave like C++ `valarrays'.  Addition is defined as
16610the addition of the corresponding elements of the operands.  For
16611example, in the code below, each of the 4 elements in A will be added
16612to the corresponding 4 elements in B and the resulting vector will be
16613stored in C.
16614
16615     typedef int v4si __attribute__ ((mode(V4SI)));
16616
16617     v4si a, b, c;
16618
16619     c = a + b;
16620
16621 Subtraction, multiplication, division, and the logical operations
16622operate in a similar manner.  Likewise, the result of using the unary
16623minus or complement operators on a vector type is a vector whose
16624elements are the negative or complemented values of the corresponding
16625elements in the operand.
16626
16627 You can declare variables and use them in function calls and returns,
16628as well as in assignments and some casts.  You can specify a vector
16629type as a return type for a function.  Vector types can also be used as
16630function arguments.  It is possible to cast from one vector type to
16631another, provided they are of the same size (in fact, you can also cast
16632vectors to and from other datatypes of the same size).
16633
16634 You cannot operate between vectors of different lengths or different
16635signedness without a cast.
16636
16637 A port that supports hardware vector operations, usually provides a set
16638of built-in functions that can be used to operate on vectors.  For
16639example, a function to add two vectors and multiply the result by a
16640third could look like this:
16641
16642     v4si f (v4si a, v4si b, v4si c)
16643     {
16644       v4si tmp = __builtin_addv4si (a, b);
16645       return __builtin_mulv4si (tmp, c);
16646     }
16647
16648
16649File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Vector Extensions,  Up: C Extensions
16650
166515.44 Other built-in functions provided by GCC
16652=============================================
16653
16654GCC provides a large number of built-in functions other than the ones
16655mentioned above.  Some of these are for internal use in the processing
16656of exceptions or variable-length argument lists and will not be
16657documented here because they may change from time to time; we do not
16658recommend general use of these functions.
16659
16660 The remaining functions are provided for optimization purposes.
16661
16662 GCC includes built-in versions of many of the functions in the standard
16663C library.  The versions prefixed with `__builtin_' will always be
16664treated as having the same meaning as the C library function even if you
16665specify the `-fno-builtin' option. (*note C Dialect Options::) Many of
16666these functions are only optimized in certain cases; if they are not
16667optimized in a particular case, a call to the library function will be
16668emitted.
16669
16670 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
16671functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
16672`dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
16673`ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
16674`gamma', `gettext', `index', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
16675`jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10',
16676`printf_unlocked', `rindex', `scalbf', `scalbl', `scalb',
16677`significandf', `significandl', `significand', `sincosf', `sincosl',
16678`sincos', `stpcpy', `strdup', `strfmon', `y0f', `y0l', `y0', `y1f',
16679`y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in functions.
16680All these functions have corresponding versions prefixed with
16681`__builtin_', which may be used even in strict C89 mode.
16682
16683 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
16684`asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
16685`cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
16686`cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
16687`casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
16688`catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
16689`ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
16690`cimag', `conjf', `conjl', `conj', `copysignf', `copysignl',
16691`copysign', `cpowf', `cpowl', `cpow', `cprojf', `cprojl', `cproj',
16692`crealf', `creall', `creal', `csinf', `csinhf', `csinhl', `csinh',
16693`csinl', `csin', `csqrtf', `csqrtl', `csqrt', `ctanf', `ctanhf',
16694`ctanhl', `ctanh', `ctanl', `ctan', `erfcf', `erfcl', `erfc', `erff',
16695`erfl', `erf', `exp2f', `exp2l', `exp2', `expm1f', `expm1l', `expm1',
16696`fdimf', `fdiml', `fdim', `fmaf', `fmal', `fmaxf', `fmaxl', `fmax',
16697`fma', `fminf', `fminl', `fmin', `hypotf', `hypotl', `hypot', `ilogbf',
16698`ilogbl', `ilogb', `imaxabs', `lgammaf', `lgammal', `lgamma', `llabs',
16699`llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
16700`log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', `logbl',
16701`logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', `lround',
16702`nearbyintf', `nearbyintl', `nearbyint', `nextafterf', `nextafterl',
16703`nextafter', `nexttowardf', `nexttowardl', `nexttoward', `remainderf',
16704`remainderl', `remainder', `remquof', `remquol', `remquo', `rintf',
16705`rintl', `rint', `roundf', `roundl', `round', `scalblnf', `scalblnl',
16706`scalbln', `scalbnf', `scalbnl', `scalbn', `snprintf', `tgammaf',
16707`tgammal', `tgamma', `truncf', `truncl', `trunc', `vfscanf', `vscanf',
16708`vsnprintf' and `vsscanf' are handled as built-in functions except in
16709strict ISO C90 mode (`-ansi' or `-std=c89').
16710
16711 There are also built-in versions of the ISO C99 functions `acosf',
16712`acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
16713`ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
16714`fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
16715`frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
16716`modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
16717`sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
16718recognized in any mode since ISO C90 reserves these names for the
16719purpose to which ISO C99 puts them.  All these functions have
16720corresponding versions prefixed with `__builtin_'.
16721
16722 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
16723`calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
16724`fprintf', `fputs', `frexp', `fscanf', `labs', `ldexp', `log10', `log',
16725`malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf',
16726`putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf',
16727`sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn',
16728`strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr',
16729`strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf'
16730are all recognized as built-in functions unless `-fno-builtin' is
16731specified (or `-fno-builtin-FUNCTION' is specified for an individual
16732function).  All of these functions have corresponding versions prefixed
16733with `__builtin_'.
16734
16735 GCC provides built-in versions of the ISO C99 floating point comparison
16736macros that avoid raising exceptions for unordered operands.  They have
16737the same names as the standard macros ( `isgreater', `isgreaterequal',
16738`isless', `islessequal', `islessgreater', and `isunordered') , with
16739`__builtin_' prefixed.  We intend for a library implementor to be able
16740to simply `#define' each standard macro to its built-in equivalent.
16741
16742 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
16743     You can use the built-in function `__builtin_types_compatible_p' to
16744     determine whether two types are the same.
16745
16746     This built-in function returns 1 if the unqualified versions of the
16747     types TYPE1 and TYPE2 (which are types, not expressions) are
16748     compatible, 0 otherwise.  The result of this built-in function can
16749     be used in integer constant expressions.
16750
16751     This built-in function ignores top level qualifiers (e.g., `const',
16752     `volatile').  For example, `int' is equivalent to `const int'.
16753
16754     The type `int[]' and `int[5]' are compatible.  On the other hand,
16755     `int' and `char *' are not compatible, even if the size of their
16756     types, on the particular architecture are the same.  Also, the
16757     amount of pointer indirection is taken into account when
16758     determining similarity.  Consequently, `short *' is not similar to
16759     `short **'.  Furthermore, two types that are typedefed are
16760     considered compatible if their underlying types are compatible.
16761
16762     An `enum' type is not considered to be compatible with another
16763     `enum' type even if both are compatible with the same integer
16764     type; this is what the C standard specifies.  For example, `enum
16765     {foo, bar}' is not similar to `enum {hot, dog}'.
16766
16767     You would typically use this function in code whose execution
16768     varies depending on the arguments' types.  For example:
16769
16770          #define foo(x)                                                  \
16771            ({                                                           \
16772              typeof (x) tmp;                                             \
16773              if (__builtin_types_compatible_p (typeof (x), long double)) \
16774                tmp = foo_long_double (tmp);                              \
16775              else if (__builtin_types_compatible_p (typeof (x), double)) \
16776                tmp = foo_double (tmp);                                   \
16777              else if (__builtin_types_compatible_p (typeof (x), float))  \
16778                tmp = foo_float (tmp);                                    \
16779              else                                                        \
16780                abort ();                                                 \
16781              tmp;                                                        \
16782            })
16783
16784     _Note:_ This construct is only available for C.
16785
16786
16787 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
16788          EXP2)
16789     You can use the built-in function `__builtin_choose_expr' to
16790     evaluate code depending on the value of a constant expression.
16791     This built-in function returns EXP1 if CONST_EXP, which is a
16792     constant expression that must be able to be determined at compile
16793     time, is nonzero.  Otherwise it returns 0.
16794
16795     This built-in function is analogous to the `? :' operator in C,
16796     except that the expression returned has its type unaltered by
16797     promotion rules.  Also, the built-in function does not evaluate
16798     the expression that was not chosen.  For example, if CONST_EXP
16799     evaluates to true, EXP2 is not evaluated even if it has
16800     side-effects.
16801
16802     This built-in function can return an lvalue if the chosen argument
16803     is an lvalue.
16804
16805     If EXP1 is returned, the return type is the same as EXP1's type.
16806     Similarly, if EXP2 is returned, its return type is the same as
16807     EXP2.
16808
16809     Example:
16810
16811          #define foo(x)                                                    \
16812            __builtin_choose_expr (                                         \
16813              __builtin_types_compatible_p (typeof (x), double),            \
16814              foo_double (x),                                               \
16815              __builtin_choose_expr (                                       \
16816                __builtin_types_compatible_p (typeof (x), float),           \
16817                foo_float (x),                                              \
16818                /* The void expression results in a compile-time error  \
16819                   when assigning the result to something.  */          \
16820                (void)0))
16821
16822     _Note:_ This construct is only available for C.  Furthermore, the
16823     unused expression (EXP1 or EXP2 depending on the value of
16824     CONST_EXP) may still generate syntax errors.  This may change in
16825     future revisions.
16826
16827
16828 -- Built-in Function: int __builtin_constant_p (EXP)
16829     You can use the built-in function `__builtin_constant_p' to
16830     determine if a value is known to be constant at compile-time and
16831     hence that GCC can perform constant-folding on expressions
16832     involving that value.  The argument of the function is the value
16833     to test.  The function returns the integer 1 if the argument is
16834     known to be a compile-time constant and 0 if it is not known to be
16835     a compile-time constant.  A return of 0 does not indicate that the
16836     value is _not_ a constant, but merely that GCC cannot prove it is
16837     a constant with the specified value of the `-O' option.
16838
16839     You would typically use this function in an embedded application
16840     where memory was a critical resource.  If you have some complex
16841     calculation, you may want it to be folded if it involves
16842     constants, but need to call a function if it does not.  For
16843     example:
16844
16845          #define Scale_Value(X)      \
16846            (__builtin_constant_p (X) \
16847            ? ((X) * SCALE + OFFSET) : Scale (X))
16848
16849     You may use this built-in function in either a macro or an inline
16850     function.  However, if you use it in an inlined function and pass
16851     an argument of the function as the argument to the built-in, GCC
16852     will never return 1 when you call the inline function with a
16853     string constant or compound literal (*note Compound Literals::)
16854     and will not return 1 when you pass a constant numeric value to
16855     the inline function unless you specify the `-O' option.
16856
16857     You may also use `__builtin_constant_p' in initializers for static
16858     data.  For instance, you can write
16859
16860          static const int table[] = {
16861             __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
16862             /* ... */
16863          };
16864
16865     This is an acceptable initializer even if EXPRESSION is not a
16866     constant expression.  GCC must be more conservative about
16867     evaluating the built-in in this case, because it has no
16868     opportunity to perform optimization.
16869
16870     Previous versions of GCC did not accept this built-in in data
16871     initializers.  The earliest version where it is completely safe is
16872     3.0.1.
16873
16874 -- Built-in Function: long __builtin_expect (long EXP, long C)
16875     You may use `__builtin_expect' to provide the compiler with branch
16876     prediction information.  In general, you should prefer to use
16877     actual profile feedback for this (`-fprofile-arcs'), as
16878     programmers are notoriously bad at predicting how their programs
16879     actually perform.  However, there are applications in which this
16880     data is hard to collect.
16881
16882     The return value is the value of EXP, which should be an integral
16883     expression.  The value of C must be a compile-time constant.  The
16884     semantics of the built-in are that it is expected that EXP == C.
16885     For example:
16886
16887          if (__builtin_expect (x, 0))
16888            foo ();
16889
16890     would indicate that we do not expect to call `foo', since we
16891     expect `x' to be zero.  Since you are limited to integral
16892     expressions for EXP, you should use constructions such as
16893
16894          if (__builtin_expect (ptr != NULL, 1))
16895            error ();
16896
16897     when testing pointer or floating-point values.
16898
16899 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
16900     This function is used to minimize cache-miss latency by moving
16901     data into a cache before it is accessed.  You can insert calls to
16902     `__builtin_prefetch' into code for which you know addresses of
16903     data in memory that is likely to be accessed soon.  If the target
16904     supports them, data prefetch instructions will be generated.  If
16905     the prefetch is done early enough before the access then the data
16906     will be in the cache by the time it is accessed.
16907
16908     The value of ADDR is the address of the memory to prefetch.  There
16909     are two optional arguments, RW and LOCALITY.  The value of RW is a
16910     compile-time constant one or zero; one means that the prefetch is
16911     preparing for a write to the memory address and zero, the default,
16912     means that the prefetch is preparing for a read.  The value
16913     LOCALITY must be a compile-time constant integer between zero and
16914     three.  A value of zero means that the data has no temporal
16915     locality, so it need not be left in the cache after the access.  A
16916     value of three means that the data has a high degree of temporal
16917     locality and should be left in all levels of cache possible.
16918     Values of one and two mean, respectively, a low or moderate degree
16919     of temporal locality.  The default is three.
16920
16921          for (i = 0; i < n; i++)
16922            {
16923              a[i] = a[i] + b[i];
16924              __builtin_prefetch (&a[i+j], 1, 1);
16925              __builtin_prefetch (&b[i+j], 0, 1);
16926              /* ... */
16927            }
16928
16929     Data prefetch does not generate faults if ADDR is invalid, but the
16930     address expression itself must be valid.  For example, a prefetch
16931     of `p->next' will not fault if `p->next' is not a valid address,
16932     but evaluation will fault if `p' is not a valid address.
16933
16934     If the target does not support data prefetch, the address
16935     expression is evaluated if it includes side effects but no other
16936     code is generated and GCC does not issue a warning.
16937
16938 -- Built-in Function: double __builtin_huge_val (void)
16939     Returns a positive infinity, if supported by the floating-point
16940     format, else `DBL_MAX'.  This function is suitable for
16941     implementing the ISO C macro `HUGE_VAL'.
16942
16943 -- Built-in Function: float __builtin_huge_valf (void)
16944     Similar to `__builtin_huge_val', except the return type is `float'.
16945
16946 -- Built-in Function: long double __builtin_huge_vall (void)
16947     Similar to `__builtin_huge_val', except the return type is `long
16948     double'.
16949
16950 -- Built-in Function: double __builtin_inf (void)
16951     Similar to `__builtin_huge_val', except a warning is generated if
16952     the target floating-point format does not support infinities.
16953     This function is suitable for implementing the ISO C99 macro
16954     `INFINITY'.
16955
16956 -- Built-in Function: float __builtin_inff (void)
16957     Similar to `__builtin_inf', except the return type is `float'.
16958
16959 -- Built-in Function: long double __builtin_infl (void)
16960     Similar to `__builtin_inf', except the return type is `long
16961     double'.
16962
16963 -- Built-in Function: double __builtin_nan (const char *str)
16964     This is an implementation of the ISO C99 function `nan'.
16965
16966     Since ISO C99 defines this function in terms of `strtod', which we
16967     do not implement, a description of the parsing is in order.  The
16968     string is parsed as by `strtol'; that is, the base is recognized by
16969     leading `0' or `0x' prefixes.  The number parsed is placed in the
16970     significand such that the least significant bit of the number is
16971     at the least significant bit of the significand.  The number is
16972     truncated to fit the significand field provided.  The significand
16973     is forced to be a quiet NaN.
16974
16975     This function, if given a string literal, is evaluated early enough
16976     that it is considered a compile-time constant.
16977
16978 -- Built-in Function: float __builtin_nanf (const char *str)
16979     Similar to `__builtin_nan', except the return type is `float'.
16980
16981 -- Built-in Function: long double __builtin_nanl (const char *str)
16982     Similar to `__builtin_nan', except the return type is `long
16983     double'.
16984
16985 -- Built-in Function: double __builtin_nans (const char *str)
16986     Similar to `__builtin_nan', except the significand is forced to be
16987     a signaling NaN.  The `nans' function is proposed by WG14 N965.
16988
16989 -- Built-in Function: float __builtin_nansf (const char *str)
16990     Similar to `__builtin_nans', except the return type is `float'.
16991
16992 -- Built-in Function: long double __builtin_nansl (const char *str)
16993     Similar to `__builtin_nans', except the return type is `long
16994     double'.
16995
16996 -- Built-in Function: int __builtin_ffs (unsigned int x)
16997     Returns one plus the index of the least significant 1-bit of X, or
16998     if X is zero, returns zero.
16999
17000 -- Built-in Function: int __builtin_clz (unsigned int x)
17001     Returns the number of leading 0-bits in X, starting at the most
17002     significant bit position.  If X is 0, the result is undefined.
17003
17004 -- Built-in Function: int __builtin_ctz (unsigned int x)
17005     Returns the number of trailing 0-bits in X, starting at the least
17006     significant bit position.  If X is 0, the result is undefined.
17007
17008 -- Built-in Function: int __builtin_popcount (unsigned int x)
17009     Returns the number of 1-bits in X.
17010
17011 -- Built-in Function: int __builtin_parity (unsigned int x)
17012     Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
17013
17014 -- Built-in Function: int __builtin_ffsl (unsigned long)
17015     Similar to `__builtin_ffs', except the argument type is `unsigned
17016     long'.
17017
17018 -- Built-in Function: int __builtin_clzl (unsigned long)
17019     Similar to `__builtin_clz', except the argument type is `unsigned
17020     long'.
17021
17022 -- Built-in Function: int __builtin_ctzl (unsigned long)
17023     Similar to `__builtin_ctz', except the argument type is `unsigned
17024     long'.
17025
17026 -- Built-in Function: int __builtin_popcountl (unsigned long)
17027     Similar to `__builtin_popcount', except the argument type is
17028     `unsigned long'.
17029
17030 -- Built-in Function: int __builtin_parityl (unsigned long)
17031     Similar to `__builtin_parity', except the argument type is
17032     `unsigned long'.
17033
17034 -- Built-in Function: int __builtin_ffsll (unsigned long long)
17035     Similar to `__builtin_ffs', except the argument type is `unsigned
17036     long long'.
17037
17038 -- Built-in Function: int __builtin_clzll (unsigned long long)
17039     Similar to `__builtin_clz', except the argument type is `unsigned
17040     long long'.
17041
17042 -- Built-in Function: int __builtin_ctzll (unsigned long long)
17043     Similar to `__builtin_ctz', except the argument type is `unsigned
17044     long long'.
17045
17046 -- Built-in Function: int __builtin_popcountll (unsigned long long)
17047     Similar to `__builtin_popcount', except the argument type is
17048     `unsigned long long'.
17049
17050 -- Built-in Function: int __builtin_parityll (unsigned long long)
17051     Similar to `__builtin_parity', except the argument type is
17052     `unsigned long long'.
17053
17054
17055File: gcc.info,  Node: Target Builtins,  Next: Pragmas,  Prev: Other Builtins,  Up: C Extensions
17056
170575.45 Built-in Functions Specific to Particular Target Machines
17058==============================================================
17059
17060On some target machines, GCC supports many built-in functions specific
17061to those machines.  Generally these generate calls to specific machine
17062instructions, but allow the compiler to schedule those calls.
17063
17064* Menu:
17065
17066* Alpha Built-in Functions::
17067* ARM Built-in Functions::
17068* X86 Built-in Functions::
17069* PowerPC AltiVec Built-in Functions::
17070
17071
17072File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM Built-in Functions,  Up: Target Builtins
17073
170745.45.1 Alpha Built-in Functions
17075-------------------------------
17076
17077These built-in functions are available for the Alpha family of
17078processors, depending on the command-line switches used.
17079
17080 The following built-in functions are always available.  They all
17081generate the machine instruction that is part of the name.
17082
17083     long __builtin_alpha_implver (void)
17084     long __builtin_alpha_rpcc (void)
17085     long __builtin_alpha_amask (long)
17086     long __builtin_alpha_cmpbge (long, long)
17087     long __builtin_alpha_extbl (long, long)
17088     long __builtin_alpha_extwl (long, long)
17089     long __builtin_alpha_extll (long, long)
17090     long __builtin_alpha_extql (long, long)
17091     long __builtin_alpha_extwh (long, long)
17092     long __builtin_alpha_extlh (long, long)
17093     long __builtin_alpha_extqh (long, long)
17094     long __builtin_alpha_insbl (long, long)
17095     long __builtin_alpha_inswl (long, long)
17096     long __builtin_alpha_insll (long, long)
17097     long __builtin_alpha_insql (long, long)
17098     long __builtin_alpha_inswh (long, long)
17099     long __builtin_alpha_inslh (long, long)
17100     long __builtin_alpha_insqh (long, long)
17101     long __builtin_alpha_mskbl (long, long)
17102     long __builtin_alpha_mskwl (long, long)
17103     long __builtin_alpha_mskll (long, long)
17104     long __builtin_alpha_mskql (long, long)
17105     long __builtin_alpha_mskwh (long, long)
17106     long __builtin_alpha_msklh (long, long)
17107     long __builtin_alpha_mskqh (long, long)
17108     long __builtin_alpha_umulh (long, long)
17109     long __builtin_alpha_zap (long, long)
17110     long __builtin_alpha_zapnot (long, long)
17111
17112 The following built-in functions are always with `-mmax' or
17113`-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
17114machine instruction that is part of the name.
17115
17116     long __builtin_alpha_pklb (long)
17117     long __builtin_alpha_pkwb (long)
17118     long __builtin_alpha_unpkbl (long)
17119     long __builtin_alpha_unpkbw (long)
17120     long __builtin_alpha_minub8 (long, long)
17121     long __builtin_alpha_minsb8 (long, long)
17122     long __builtin_alpha_minuw4 (long, long)
17123     long __builtin_alpha_minsw4 (long, long)
17124     long __builtin_alpha_maxub8 (long, long)
17125     long __builtin_alpha_maxsb8 (long, long)
17126     long __builtin_alpha_maxuw4 (long, long)
17127     long __builtin_alpha_maxsw4 (long, long)
17128     long __builtin_alpha_perr (long, long)
17129
17130 The following built-in functions are always with `-mcix' or
17131`-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
17132machine instruction that is part of the name.
17133
17134     long __builtin_alpha_cttz (long)
17135     long __builtin_alpha_ctlz (long)
17136     long __builtin_alpha_ctpop (long)
17137
17138 The following builtins are available on systems that use the OSF/1
17139PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
17140when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
17141
17142     void *__builtin_thread_pointer (void)
17143     void __builtin_set_thread_pointer (void *)
17144
17145
17146File: gcc.info,  Node: ARM Built-in Functions,  Next: X86 Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
17147
171485.45.2 ARM Built-in Functions
17149-----------------------------
17150
17151These built-in functions are available for the ARM family of
17152processors, when the `-mcpu=iwmmxt' switch is used:
17153
17154     typedef int v2si __attribute__ ((vector_size (8)));
17155     typedef short v4hi __attribute__ ((vector_size (8)));
17156     typedef char v8qi __attribute__ ((vector_size (8)));
17157
17158     int __builtin_arm_getwcx (int)
17159     void __builtin_arm_setwcx (int, int)
17160     int __builtin_arm_textrmsb (v8qi, int)
17161     int __builtin_arm_textrmsh (v4hi, int)
17162     int __builtin_arm_textrmsw (v2si, int)
17163     int __builtin_arm_textrmub (v8qi, int)
17164     int __builtin_arm_textrmuh (v4hi, int)
17165     int __builtin_arm_textrmuw (v2si, int)
17166     v8qi __builtin_arm_tinsrb (v8qi, int)
17167     v4hi __builtin_arm_tinsrh (v4hi, int)
17168     v2si __builtin_arm_tinsrw (v2si, int)
17169     long long __builtin_arm_tmia (long long, int, int)
17170     long long __builtin_arm_tmiabb (long long, int, int)
17171     long long __builtin_arm_tmiabt (long long, int, int)
17172     long long __builtin_arm_tmiaph (long long, int, int)
17173     long long __builtin_arm_tmiatb (long long, int, int)
17174     long long __builtin_arm_tmiatt (long long, int, int)
17175     int __builtin_arm_tmovmskb (v8qi)
17176     int __builtin_arm_tmovmskh (v4hi)
17177     int __builtin_arm_tmovmskw (v2si)
17178     long long __builtin_arm_waccb (v8qi)
17179     long long __builtin_arm_wacch (v4hi)
17180     long long __builtin_arm_waccw (v2si)
17181     v8qi __builtin_arm_waddb (v8qi, v8qi)
17182     v8qi __builtin_arm_waddbss (v8qi, v8qi)
17183     v8qi __builtin_arm_waddbus (v8qi, v8qi)
17184     v4hi __builtin_arm_waddh (v4hi, v4hi)
17185     v4hi __builtin_arm_waddhss (v4hi, v4hi)
17186     v4hi __builtin_arm_waddhus (v4hi, v4hi)
17187     v2si __builtin_arm_waddw (v2si, v2si)
17188     v2si __builtin_arm_waddwss (v2si, v2si)
17189     v2si __builtin_arm_waddwus (v2si, v2si)
17190     v8qi __builtin_arm_walign (v8qi, v8qi, int)
17191     long long __builtin_arm_wand(long long, long long)
17192     long long __builtin_arm_wandn (long long, long long)
17193     v8qi __builtin_arm_wavg2b (v8qi, v8qi)
17194     v8qi __builtin_arm_wavg2br (v8qi, v8qi)
17195     v4hi __builtin_arm_wavg2h (v4hi, v4hi)
17196     v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
17197     v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
17198     v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
17199     v2si __builtin_arm_wcmpeqw (v2si, v2si)
17200     v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
17201     v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
17202     v2si __builtin_arm_wcmpgtsw (v2si, v2si)
17203     v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
17204     v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
17205     v2si __builtin_arm_wcmpgtuw (v2si, v2si)
17206     long long __builtin_arm_wmacs (long long, v4hi, v4hi)
17207     long long __builtin_arm_wmacsz (v4hi, v4hi)
17208     long long __builtin_arm_wmacu (long long, v4hi, v4hi)
17209     long long __builtin_arm_wmacuz (v4hi, v4hi)
17210     v4hi __builtin_arm_wmadds (v4hi, v4hi)
17211     v4hi __builtin_arm_wmaddu (v4hi, v4hi)
17212     v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
17213     v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
17214     v2si __builtin_arm_wmaxsw (v2si, v2si)
17215     v8qi __builtin_arm_wmaxub (v8qi, v8qi)
17216     v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
17217     v2si __builtin_arm_wmaxuw (v2si, v2si)
17218     v8qi __builtin_arm_wminsb (v8qi, v8qi)
17219     v4hi __builtin_arm_wminsh (v4hi, v4hi)
17220     v2si __builtin_arm_wminsw (v2si, v2si)
17221     v8qi __builtin_arm_wminub (v8qi, v8qi)
17222     v4hi __builtin_arm_wminuh (v4hi, v4hi)
17223     v2si __builtin_arm_wminuw (v2si, v2si)
17224     v4hi __builtin_arm_wmulsm (v4hi, v4hi)
17225     v4hi __builtin_arm_wmulul (v4hi, v4hi)
17226     v4hi __builtin_arm_wmulum (v4hi, v4hi)
17227     long long __builtin_arm_wor (long long, long long)
17228     v2si __builtin_arm_wpackdss (long long, long long)
17229     v2si __builtin_arm_wpackdus (long long, long long)
17230     v8qi __builtin_arm_wpackhss (v4hi, v4hi)
17231     v8qi __builtin_arm_wpackhus (v4hi, v4hi)
17232     v4hi __builtin_arm_wpackwss (v2si, v2si)
17233     v4hi __builtin_arm_wpackwus (v2si, v2si)
17234     long long __builtin_arm_wrord (long long, long long)
17235     long long __builtin_arm_wrordi (long long, int)
17236     v4hi __builtin_arm_wrorh (v4hi, long long)
17237     v4hi __builtin_arm_wrorhi (v4hi, int)
17238     v2si __builtin_arm_wrorw (v2si, long long)
17239     v2si __builtin_arm_wrorwi (v2si, int)
17240     v2si __builtin_arm_wsadb (v8qi, v8qi)
17241     v2si __builtin_arm_wsadbz (v8qi, v8qi)
17242     v2si __builtin_arm_wsadh (v4hi, v4hi)
17243     v2si __builtin_arm_wsadhz (v4hi, v4hi)
17244     v4hi __builtin_arm_wshufh (v4hi, int)
17245     long long __builtin_arm_wslld (long long, long long)
17246     long long __builtin_arm_wslldi (long long, int)
17247     v4hi __builtin_arm_wsllh (v4hi, long long)
17248     v4hi __builtin_arm_wsllhi (v4hi, int)
17249     v2si __builtin_arm_wsllw (v2si, long long)
17250     v2si __builtin_arm_wsllwi (v2si, int)
17251     long long __builtin_arm_wsrad (long long, long long)
17252     long long __builtin_arm_wsradi (long long, int)
17253     v4hi __builtin_arm_wsrah (v4hi, long long)
17254     v4hi __builtin_arm_wsrahi (v4hi, int)
17255     v2si __builtin_arm_wsraw (v2si, long long)
17256     v2si __builtin_arm_wsrawi (v2si, int)
17257     long long __builtin_arm_wsrld (long long, long long)
17258     long long __builtin_arm_wsrldi (long long, int)
17259     v4hi __builtin_arm_wsrlh (v4hi, long long)
17260     v4hi __builtin_arm_wsrlhi (v4hi, int)
17261     v2si __builtin_arm_wsrlw (v2si, long long)
17262     v2si __builtin_arm_wsrlwi (v2si, int)
17263     v8qi __builtin_arm_wsubb (v8qi, v8qi)
17264     v8qi __builtin_arm_wsubbss (v8qi, v8qi)
17265     v8qi __builtin_arm_wsubbus (v8qi, v8qi)
17266     v4hi __builtin_arm_wsubh (v4hi, v4hi)
17267     v4hi __builtin_arm_wsubhss (v4hi, v4hi)
17268     v4hi __builtin_arm_wsubhus (v4hi, v4hi)
17269     v2si __builtin_arm_wsubw (v2si, v2si)
17270     v2si __builtin_arm_wsubwss (v2si, v2si)
17271     v2si __builtin_arm_wsubwus (v2si, v2si)
17272     v4hi __builtin_arm_wunpckehsb (v8qi)
17273     v2si __builtin_arm_wunpckehsh (v4hi)
17274     long long __builtin_arm_wunpckehsw (v2si)
17275     v4hi __builtin_arm_wunpckehub (v8qi)
17276     v2si __builtin_arm_wunpckehuh (v4hi)
17277     long long __builtin_arm_wunpckehuw (v2si)
17278     v4hi __builtin_arm_wunpckelsb (v8qi)
17279     v2si __builtin_arm_wunpckelsh (v4hi)
17280     long long __builtin_arm_wunpckelsw (v2si)
17281     v4hi __builtin_arm_wunpckelub (v8qi)
17282     v2si __builtin_arm_wunpckeluh (v4hi)
17283     long long __builtin_arm_wunpckeluw (v2si)
17284     v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
17285     v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
17286     v2si __builtin_arm_wunpckihw (v2si, v2si)
17287     v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
17288     v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
17289     v2si __builtin_arm_wunpckilw (v2si, v2si)
17290     long long __builtin_arm_wxor (long long, long long)
17291     long long __builtin_arm_wzero ()
17292
17293
17294File: gcc.info,  Node: X86 Built-in Functions,  Next: PowerPC AltiVec Built-in Functions,  Prev: ARM Built-in Functions,  Up: Target Builtins
17295
172965.45.3 X86 Built-in Functions
17297-----------------------------
17298
17299These built-in functions are available for the i386 and x86-64 family
17300of computers, depending on the command-line switches used.
17301
17302 The following machine modes are available for use with MMX built-in
17303functions (*note Vector Extensions::): `V2SI' for a vector of two
1730432-bit integers, `V4HI' for a vector of four 16-bit integers, and
17305`V8QI' for a vector of eight 8-bit integers.  Some of the built-in
17306functions operate on MMX registers as a whole 64-bit entity, these use
17307`DI' as their mode.
17308
17309 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
17310of two 32-bit floating point values.
17311
17312 If SSE extensions are enabled, `V4SF' is used for a vector of four
1731332-bit floating point values.  Some instructions use a vector of four
1731432-bit integers, these use `V4SI'.  Finally, some instructions operate
17315on an entire vector register, interpreting it as a 128-bit integer,
17316these use mode `TI'.
17317
17318 The following built-in functions are made available by `-mmmx'.  All
17319of them generate the machine instruction that is part of the name.
17320
17321     v8qi __builtin_ia32_paddb (v8qi, v8qi)
17322     v4hi __builtin_ia32_paddw (v4hi, v4hi)
17323     v2si __builtin_ia32_paddd (v2si, v2si)
17324     v8qi __builtin_ia32_psubb (v8qi, v8qi)
17325     v4hi __builtin_ia32_psubw (v4hi, v4hi)
17326     v2si __builtin_ia32_psubd (v2si, v2si)
17327     v8qi __builtin_ia32_paddsb (v8qi, v8qi)
17328     v4hi __builtin_ia32_paddsw (v4hi, v4hi)
17329     v8qi __builtin_ia32_psubsb (v8qi, v8qi)
17330     v4hi __builtin_ia32_psubsw (v4hi, v4hi)
17331     v8qi __builtin_ia32_paddusb (v8qi, v8qi)
17332     v4hi __builtin_ia32_paddusw (v4hi, v4hi)
17333     v8qi __builtin_ia32_psubusb (v8qi, v8qi)
17334     v4hi __builtin_ia32_psubusw (v4hi, v4hi)
17335     v4hi __builtin_ia32_pmullw (v4hi, v4hi)
17336     v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
17337     di __builtin_ia32_pand (di, di)
17338     di __builtin_ia32_pandn (di,di)
17339     di __builtin_ia32_por (di, di)
17340     di __builtin_ia32_pxor (di, di)
17341     v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
17342     v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
17343     v2si __builtin_ia32_pcmpeqd (v2si, v2si)
17344     v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
17345     v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
17346     v2si __builtin_ia32_pcmpgtd (v2si, v2si)
17347     v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
17348     v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
17349     v2si __builtin_ia32_punpckhdq (v2si, v2si)
17350     v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
17351     v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
17352     v2si __builtin_ia32_punpckldq (v2si, v2si)
17353     v8qi __builtin_ia32_packsswb (v4hi, v4hi)
17354     v4hi __builtin_ia32_packssdw (v2si, v2si)
17355     v8qi __builtin_ia32_packuswb (v4hi, v4hi)
17356
17357 The following built-in functions are made available either with
17358`-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
17359of them generate the machine instruction that is part of the name.
17360
17361     v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
17362     v8qi __builtin_ia32_pavgb (v8qi, v8qi)
17363     v4hi __builtin_ia32_pavgw (v4hi, v4hi)
17364     v4hi __builtin_ia32_psadbw (v8qi, v8qi)
17365     v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
17366     v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
17367     v8qi __builtin_ia32_pminub (v8qi, v8qi)
17368     v4hi __builtin_ia32_pminsw (v4hi, v4hi)
17369     int __builtin_ia32_pextrw (v4hi, int)
17370     v4hi __builtin_ia32_pinsrw (v4hi, int, int)
17371     int __builtin_ia32_pmovmskb (v8qi)
17372     void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
17373     void __builtin_ia32_movntq (di *, di)
17374     void __builtin_ia32_sfence (void)
17375
17376 The following built-in functions are available when `-msse' is used.
17377All of them generate the machine instruction that is part of the name.
17378
17379     int __builtin_ia32_comieq (v4sf, v4sf)
17380     int __builtin_ia32_comineq (v4sf, v4sf)
17381     int __builtin_ia32_comilt (v4sf, v4sf)
17382     int __builtin_ia32_comile (v4sf, v4sf)
17383     int __builtin_ia32_comigt (v4sf, v4sf)
17384     int __builtin_ia32_comige (v4sf, v4sf)
17385     int __builtin_ia32_ucomieq (v4sf, v4sf)
17386     int __builtin_ia32_ucomineq (v4sf, v4sf)
17387     int __builtin_ia32_ucomilt (v4sf, v4sf)
17388     int __builtin_ia32_ucomile (v4sf, v4sf)
17389     int __builtin_ia32_ucomigt (v4sf, v4sf)
17390     int __builtin_ia32_ucomige (v4sf, v4sf)
17391     v4sf __builtin_ia32_addps (v4sf, v4sf)
17392     v4sf __builtin_ia32_subps (v4sf, v4sf)
17393     v4sf __builtin_ia32_mulps (v4sf, v4sf)
17394     v4sf __builtin_ia32_divps (v4sf, v4sf)
17395     v4sf __builtin_ia32_addss (v4sf, v4sf)
17396     v4sf __builtin_ia32_subss (v4sf, v4sf)
17397     v4sf __builtin_ia32_mulss (v4sf, v4sf)
17398     v4sf __builtin_ia32_divss (v4sf, v4sf)
17399     v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
17400     v4si __builtin_ia32_cmpltps (v4sf, v4sf)
17401     v4si __builtin_ia32_cmpleps (v4sf, v4sf)
17402     v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
17403     v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
17404     v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
17405     v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
17406     v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
17407     v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
17408     v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
17409     v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
17410     v4si __builtin_ia32_cmpordps (v4sf, v4sf)
17411     v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
17412     v4si __builtin_ia32_cmpltss (v4sf, v4sf)
17413     v4si __builtin_ia32_cmpless (v4sf, v4sf)
17414     v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
17415     v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
17416     v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
17417     v4si __builtin_ia32_cmpnless (v4sf, v4sf)
17418     v4si __builtin_ia32_cmpordss (v4sf, v4sf)
17419     v4sf __builtin_ia32_maxps (v4sf, v4sf)
17420     v4sf __builtin_ia32_maxss (v4sf, v4sf)
17421     v4sf __builtin_ia32_minps (v4sf, v4sf)
17422     v4sf __builtin_ia32_minss (v4sf, v4sf)
17423     v4sf __builtin_ia32_andps (v4sf, v4sf)
17424     v4sf __builtin_ia32_andnps (v4sf, v4sf)
17425     v4sf __builtin_ia32_orps (v4sf, v4sf)
17426     v4sf __builtin_ia32_xorps (v4sf, v4sf)
17427     v4sf __builtin_ia32_movss (v4sf, v4sf)
17428     v4sf __builtin_ia32_movhlps (v4sf, v4sf)
17429     v4sf __builtin_ia32_movlhps (v4sf, v4sf)
17430     v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
17431     v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
17432     v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
17433     v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
17434     v2si __builtin_ia32_cvtps2pi (v4sf)
17435     int __builtin_ia32_cvtss2si (v4sf)
17436     v2si __builtin_ia32_cvttps2pi (v4sf)
17437     int __builtin_ia32_cvttss2si (v4sf)
17438     v4sf __builtin_ia32_rcpps (v4sf)
17439     v4sf __builtin_ia32_rsqrtps (v4sf)
17440     v4sf __builtin_ia32_sqrtps (v4sf)
17441     v4sf __builtin_ia32_rcpss (v4sf)
17442     v4sf __builtin_ia32_rsqrtss (v4sf)
17443     v4sf __builtin_ia32_sqrtss (v4sf)
17444     v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
17445     void __builtin_ia32_movntps (float *, v4sf)
17446     int __builtin_ia32_movmskps (v4sf)
17447
17448 The following built-in functions are available when `-msse' is used.
17449
17450`v4sf __builtin_ia32_loadaps (float *)'
17451     Generates the `movaps' machine instruction as a load from memory.
17452
17453`void __builtin_ia32_storeaps (float *, v4sf)'
17454     Generates the `movaps' machine instruction as a store to memory.
17455
17456`v4sf __builtin_ia32_loadups (float *)'
17457     Generates the `movups' machine instruction as a load from memory.
17458
17459`void __builtin_ia32_storeups (float *, v4sf)'
17460     Generates the `movups' machine instruction as a store to memory.
17461
17462`v4sf __builtin_ia32_loadsss (float *)'
17463     Generates the `movss' machine instruction as a load from memory.
17464
17465`void __builtin_ia32_storess (float *, v4sf)'
17466     Generates the `movss' machine instruction as a store to memory.
17467
17468`v4sf __builtin_ia32_loadhps (v4sf, v2si *)'
17469     Generates the `movhps' machine instruction as a load from memory.
17470
17471`v4sf __builtin_ia32_loadlps (v4sf, v2si *)'
17472     Generates the `movlps' machine instruction as a load from memory
17473
17474`void __builtin_ia32_storehps (v4sf, v2si *)'
17475     Generates the `movhps' machine instruction as a store to memory.
17476
17477`void __builtin_ia32_storelps (v4sf, v2si *)'
17478     Generates the `movlps' machine instruction as a store to memory.
17479
17480 The following built-in functions are available when `-msse3' is used.
17481All of them generate the machine instruction that is part of the name.
17482
17483     v2df __builtin_ia32_addsubpd (v2df, v2df)
17484     v2df __builtin_ia32_addsubps (v2df, v2df)
17485     v2df __builtin_ia32_haddpd (v2df, v2df)
17486     v2df __builtin_ia32_haddps (v2df, v2df)
17487     v2df __builtin_ia32_hsubpd (v2df, v2df)
17488     v2df __builtin_ia32_hsubps (v2df, v2df)
17489     v16qi __builtin_ia32_lddqu (char const *)
17490     void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
17491     v2df __builtin_ia32_movddup (v2df)
17492     v4sf __builtin_ia32_movshdup (v4sf)
17493     v4sf __builtin_ia32_movsldup (v4sf)
17494     void __builtin_ia32_mwait (unsigned int, unsigned int)
17495
17496 The following built-in functions are available when `-msse3' is used.
17497
17498`v2df __builtin_ia32_loadddup (double const *)'
17499     Generates the `movddup' machine instruction as a load from memory.
17500
17501 The following built-in functions are available when `-m3dnow' is used.
17502All of them generate the machine instruction that is part of the name.
17503
17504     void __builtin_ia32_femms (void)
17505     v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
17506     v2si __builtin_ia32_pf2id (v2sf)
17507     v2sf __builtin_ia32_pfacc (v2sf, v2sf)
17508     v2sf __builtin_ia32_pfadd (v2sf, v2sf)
17509     v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
17510     v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
17511     v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
17512     v2sf __builtin_ia32_pfmax (v2sf, v2sf)
17513     v2sf __builtin_ia32_pfmin (v2sf, v2sf)
17514     v2sf __builtin_ia32_pfmul (v2sf, v2sf)
17515     v2sf __builtin_ia32_pfrcp (v2sf)
17516     v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
17517     v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
17518     v2sf __builtin_ia32_pfrsqrt (v2sf)
17519     v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
17520     v2sf __builtin_ia32_pfsub (v2sf, v2sf)
17521     v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
17522     v2sf __builtin_ia32_pi2fd (v2si)
17523     v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
17524
17525 The following built-in functions are available when both `-m3dnow' and
17526`-march=athlon' are used.  All of them generate the machine instruction
17527that is part of the name.
17528
17529     v2si __builtin_ia32_pf2iw (v2sf)
17530     v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
17531     v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
17532     v2sf __builtin_ia32_pi2fw (v2si)
17533     v2sf __builtin_ia32_pswapdsf (v2sf)
17534     v2si __builtin_ia32_pswapdsi (v2si)
17535
17536
17537File: gcc.info,  Node: PowerPC AltiVec Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
17538
175395.45.4 PowerPC AltiVec Built-in Functions
17540-----------------------------------------
17541
17542GCC provides an interface for the PowerPC family of processors to access
17543the AltiVec operations described in Motorola's AltiVec Programming
17544Interface Manual.  The interface is made available by including
17545`<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The interface
17546supports the following vector types.
17547
17548     vector unsigned char
17549     vector signed char
17550     vector bool char
17551
17552     vector unsigned short
17553     vector signed short
17554     vector bool short
17555     vector pixel
17556
17557     vector unsigned int
17558     vector signed int
17559     vector bool int
17560     vector float
17561
17562 GCC's implementation of the high-level language interface available
17563from C and C++ code differs from Motorola's documentation in several
17564ways.
17565
17566   * A vector constant is a list of constant expressions within curly
17567     braces.
17568
17569   * A vector initializer requires no cast if the vector constant is of
17570     the same type as the variable it is initializing.
17571
17572   * If `signed' or `unsigned' is omitted, the vector type defaults to
17573     `signed' for `vector int' or `vector short' and to `unsigned' for
17574     `vector char'.
17575
17576   * Compiling with `-maltivec' adds keywords `__vector', `__pixel',
17577     and `__bool'.  Macros `vector', `pixel', and `bool' are defined in
17578     `<altivec.h>' and can be undefined.
17579
17580   * GCC allows using a `typedef' name as the type specifier for a
17581     vector type.
17582
17583   * For C, overloaded functions are implemented with macros so the
17584     following does not work:
17585
17586            vec_add ((vector signed int){1, 2, 3, 4}, foo);
17587
17588     Since `vec_add' is a macro, the vector constant in the example is
17589     treated as four separate arguments.  Wrap the entire argument in
17590     parentheses for this to work.
17591
17592 _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
17593GCC uses built-in functions to achieve the functionality in the
17594aforementioned header file, but they are not supported and are subject
17595to change without notice.
17596
17597 The following interfaces are supported for the generic and specific
17598AltiVec operations and the AltiVec predicates.  In cases where there is
17599a direct mapping between generic and specific operations, only the
17600generic names are shown here, although the specific operations can also
17601be used.
17602
17603 Arguments that are documented as `const int' require literal integral
17604values within the range required for that operation.
17605
17606     vector signed char vec_abs (vector signed char);
17607     vector signed short vec_abs (vector signed short);
17608     vector signed int vec_abs (vector signed int);
17609     vector float vec_abs (vector float);
17610
17611     vector signed char vec_abss (vector signed char);
17612     vector signed short vec_abss (vector signed short);
17613     vector signed int vec_abss (vector signed int);
17614
17615     vector signed char vec_add (vector bool char, vector signed char);
17616     vector signed char vec_add (vector signed char, vector bool char);
17617     vector signed char vec_add (vector signed char, vector signed char);
17618     vector unsigned char vec_add (vector bool char, vector unsigned char);
17619     vector unsigned char vec_add (vector unsigned char, vector bool char);
17620     vector unsigned char vec_add (vector unsigned char,
17621                                   vector unsigned char);
17622     vector signed short vec_add (vector bool short, vector signed short);
17623     vector signed short vec_add (vector signed short, vector bool short);
17624     vector signed short vec_add (vector signed short, vector signed short);
17625     vector unsigned short vec_add (vector bool short,
17626                                    vector unsigned short);
17627     vector unsigned short vec_add (vector unsigned short,
17628                                    vector bool short);
17629     vector unsigned short vec_add (vector unsigned short,
17630                                    vector unsigned short);
17631     vector signed int vec_add (vector bool int, vector signed int);
17632     vector signed int vec_add (vector signed int, vector bool int);
17633     vector signed int vec_add (vector signed int, vector signed int);
17634     vector unsigned int vec_add (vector bool int, vector unsigned int);
17635     vector unsigned int vec_add (vector unsigned int, vector bool int);
17636     vector unsigned int vec_add (vector unsigned int, vector unsigned int);
17637     vector float vec_add (vector float, vector float);
17638
17639     vector float vec_vaddfp (vector float, vector float);
17640
17641     vector signed int vec_vadduwm (vector bool int, vector signed int);
17642     vector signed int vec_vadduwm (vector signed int, vector bool int);
17643     vector signed int vec_vadduwm (vector signed int, vector signed int);
17644     vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
17645     vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
17646     vector unsigned int vec_vadduwm (vector unsigned int,
17647                                      vector unsigned int);
17648
17649     vector signed short vec_vadduhm (vector bool short,
17650                                      vector signed short);
17651     vector signed short vec_vadduhm (vector signed short,
17652                                      vector bool short);
17653     vector signed short vec_vadduhm (vector signed short,
17654                                      vector signed short);
17655     vector unsigned short vec_vadduhm (vector bool short,
17656                                        vector unsigned short);
17657     vector unsigned short vec_vadduhm (vector unsigned short,
17658                                        vector bool short);
17659     vector unsigned short vec_vadduhm (vector unsigned short,
17660                                        vector unsigned short);
17661
17662     vector signed char vec_vaddubm (vector bool char, vector signed char);
17663     vector signed char vec_vaddubm (vector signed char, vector bool char);
17664     vector signed char vec_vaddubm (vector signed char, vector signed char);
17665     vector unsigned char vec_vaddubm (vector bool char,
17666                                       vector unsigned char);
17667     vector unsigned char vec_vaddubm (vector unsigned char,
17668                                       vector bool char);
17669     vector unsigned char vec_vaddubm (vector unsigned char,
17670                                       vector unsigned char);
17671
17672     vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
17673
17674     vector unsigned char vec_adds (vector bool char, vector unsigned char);
17675     vector unsigned char vec_adds (vector unsigned char, vector bool char);
17676     vector unsigned char vec_adds (vector unsigned char,
17677                                    vector unsigned char);
17678     vector signed char vec_adds (vector bool char, vector signed char);
17679     vector signed char vec_adds (vector signed char, vector bool char);
17680     vector signed char vec_adds (vector signed char, vector signed char);
17681     vector unsigned short vec_adds (vector bool short,
17682                                     vector unsigned short);
17683     vector unsigned short vec_adds (vector unsigned short,
17684                                     vector bool short);
17685     vector unsigned short vec_adds (vector unsigned short,
17686                                     vector unsigned short);
17687     vector signed short vec_adds (vector bool short, vector signed short);
17688     vector signed short vec_adds (vector signed short, vector bool short);
17689     vector signed short vec_adds (vector signed short, vector signed short);
17690     vector unsigned int vec_adds (vector bool int, vector unsigned int);
17691     vector unsigned int vec_adds (vector unsigned int, vector bool int);
17692     vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
17693     vector signed int vec_adds (vector bool int, vector signed int);
17694     vector signed int vec_adds (vector signed int, vector bool int);
17695     vector signed int vec_adds (vector signed int, vector signed int);
17696
17697     vector signed int vec_vaddsws (vector bool int, vector signed int);
17698     vector signed int vec_vaddsws (vector signed int, vector bool int);
17699     vector signed int vec_vaddsws (vector signed int, vector signed int);
17700
17701     vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
17702     vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
17703     vector unsigned int vec_vadduws (vector unsigned int,
17704                                      vector unsigned int);
17705
17706     vector signed short vec_vaddshs (vector bool short,
17707                                      vector signed short);
17708     vector signed short vec_vaddshs (vector signed short,
17709                                      vector bool short);
17710     vector signed short vec_vaddshs (vector signed short,
17711                                      vector signed short);
17712
17713     vector unsigned short vec_vadduhs (vector bool short,
17714                                        vector unsigned short);
17715     vector unsigned short vec_vadduhs (vector unsigned short,
17716                                        vector bool short);
17717     vector unsigned short vec_vadduhs (vector unsigned short,
17718                                        vector unsigned short);
17719
17720     vector signed char vec_vaddsbs (vector bool char, vector signed char);
17721     vector signed char vec_vaddsbs (vector signed char, vector bool char);
17722     vector signed char vec_vaddsbs (vector signed char, vector signed char);
17723
17724     vector unsigned char vec_vaddubs (vector bool char,
17725                                       vector unsigned char);
17726     vector unsigned char vec_vaddubs (vector unsigned char,
17727                                       vector bool char);
17728     vector unsigned char vec_vaddubs (vector unsigned char,
17729                                       vector unsigned char);
17730
17731     vector float vec_and (vector float, vector float);
17732     vector float vec_and (vector float, vector bool int);
17733     vector float vec_and (vector bool int, vector float);
17734     vector bool int vec_and (vector bool int, vector bool int);
17735     vector signed int vec_and (vector bool int, vector signed int);
17736     vector signed int vec_and (vector signed int, vector bool int);
17737     vector signed int vec_and (vector signed int, vector signed int);
17738     vector unsigned int vec_and (vector bool int, vector unsigned int);
17739     vector unsigned int vec_and (vector unsigned int, vector bool int);
17740     vector unsigned int vec_and (vector unsigned int, vector unsigned int);
17741     vector bool short vec_and (vector bool short, vector bool short);
17742     vector signed short vec_and (vector bool short, vector signed short);
17743     vector signed short vec_and (vector signed short, vector bool short);
17744     vector signed short vec_and (vector signed short, vector signed short);
17745     vector unsigned short vec_and (vector bool short,
17746                                    vector unsigned short);
17747     vector unsigned short vec_and (vector unsigned short,
17748                                    vector bool short);
17749     vector unsigned short vec_and (vector unsigned short,
17750                                    vector unsigned short);
17751     vector signed char vec_and (vector bool char, vector signed char);
17752     vector bool char vec_and (vector bool char, vector bool char);
17753     vector signed char vec_and (vector signed char, vector bool char);
17754     vector signed char vec_and (vector signed char, vector signed char);
17755     vector unsigned char vec_and (vector bool char, vector unsigned char);
17756     vector unsigned char vec_and (vector unsigned char, vector bool char);
17757     vector unsigned char vec_and (vector unsigned char,
17758                                   vector unsigned char);
17759
17760     vector float vec_andc (vector float, vector float);
17761     vector float vec_andc (vector float, vector bool int);
17762     vector float vec_andc (vector bool int, vector float);
17763     vector bool int vec_andc (vector bool int, vector bool int);
17764     vector signed int vec_andc (vector bool int, vector signed int);
17765     vector signed int vec_andc (vector signed int, vector bool int);
17766     vector signed int vec_andc (vector signed int, vector signed int);
17767     vector unsigned int vec_andc (vector bool int, vector unsigned int);
17768     vector unsigned int vec_andc (vector unsigned int, vector bool int);
17769     vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
17770     vector bool short vec_andc (vector bool short, vector bool short);
17771     vector signed short vec_andc (vector bool short, vector signed short);
17772     vector signed short vec_andc (vector signed short, vector bool short);
17773     vector signed short vec_andc (vector signed short, vector signed short);
17774     vector unsigned short vec_andc (vector bool short,
17775                                     vector unsigned short);
17776     vector unsigned short vec_andc (vector unsigned short,
17777                                     vector bool short);
17778     vector unsigned short vec_andc (vector unsigned short,
17779                                     vector unsigned short);
17780     vector signed char vec_andc (vector bool char, vector signed char);
17781     vector bool char vec_andc (vector bool char, vector bool char);
17782     vector signed char vec_andc (vector signed char, vector bool char);
17783     vector signed char vec_andc (vector signed char, vector signed char);
17784     vector unsigned char vec_andc (vector bool char, vector unsigned char);
17785     vector unsigned char vec_andc (vector unsigned char, vector bool char);
17786     vector unsigned char vec_andc (vector unsigned char,
17787                                    vector unsigned char);
17788
17789     vector unsigned char vec_avg (vector unsigned char,
17790                                   vector unsigned char);
17791     vector signed char vec_avg (vector signed char, vector signed char);
17792     vector unsigned short vec_avg (vector unsigned short,
17793                                    vector unsigned short);
17794     vector signed short vec_avg (vector signed short, vector signed short);
17795     vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
17796     vector signed int vec_avg (vector signed int, vector signed int);
17797
17798     vector signed int vec_vavgsw (vector signed int, vector signed int);
17799
17800     vector unsigned int vec_vavguw (vector unsigned int,
17801                                     vector unsigned int);
17802
17803     vector signed short vec_vavgsh (vector signed short,
17804                                     vector signed short);
17805
17806     vector unsigned short vec_vavguh (vector unsigned short,
17807                                       vector unsigned short);
17808
17809     vector signed char vec_vavgsb (vector signed char, vector signed char);
17810
17811     vector unsigned char vec_vavgub (vector unsigned char,
17812                                      vector unsigned char);
17813
17814     vector float vec_ceil (vector float);
17815
17816     vector signed int vec_cmpb (vector float, vector float);
17817
17818     vector bool char vec_cmpeq (vector signed char, vector signed char);
17819     vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
17820     vector bool short vec_cmpeq (vector signed short, vector signed short);
17821     vector bool short vec_cmpeq (vector unsigned short,
17822                                  vector unsigned short);
17823     vector bool int vec_cmpeq (vector signed int, vector signed int);
17824     vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
17825     vector bool int vec_cmpeq (vector float, vector float);
17826
17827     vector bool int vec_vcmpeqfp (vector float, vector float);
17828
17829     vector bool int vec_vcmpequw (vector signed int, vector signed int);
17830     vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
17831
17832     vector bool short vec_vcmpequh (vector signed short,
17833                                     vector signed short);
17834     vector bool short vec_vcmpequh (vector unsigned short,
17835                                     vector unsigned short);
17836
17837     vector bool char vec_vcmpequb (vector signed char, vector signed char);
17838     vector bool char vec_vcmpequb (vector unsigned char,
17839                                    vector unsigned char);
17840
17841     vector bool int vec_cmpge (vector float, vector float);
17842
17843     vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
17844     vector bool char vec_cmpgt (vector signed char, vector signed char);
17845     vector bool short vec_cmpgt (vector unsigned short,
17846                                  vector unsigned short);
17847     vector bool short vec_cmpgt (vector signed short, vector signed short);
17848     vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
17849     vector bool int vec_cmpgt (vector signed int, vector signed int);
17850     vector bool int vec_cmpgt (vector float, vector float);
17851
17852     vector bool int vec_vcmpgtfp (vector float, vector float);
17853
17854     vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
17855
17856     vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
17857
17858     vector bool short vec_vcmpgtsh (vector signed short,
17859                                     vector signed short);
17860
17861     vector bool short vec_vcmpgtuh (vector unsigned short,
17862                                     vector unsigned short);
17863
17864     vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
17865
17866     vector bool char vec_vcmpgtub (vector unsigned char,
17867                                    vector unsigned char);
17868
17869     vector bool int vec_cmple (vector float, vector float);
17870
17871     vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
17872     vector bool char vec_cmplt (vector signed char, vector signed char);
17873     vector bool short vec_cmplt (vector unsigned short,
17874                                  vector unsigned short);
17875     vector bool short vec_cmplt (vector signed short, vector signed short);
17876     vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
17877     vector bool int vec_cmplt (vector signed int, vector signed int);
17878     vector bool int vec_cmplt (vector float, vector float);
17879
17880     vector float vec_ctf (vector unsigned int, const int);
17881     vector float vec_ctf (vector signed int, const int);
17882
17883     vector float vec_vcfsx (vector signed int, const int);
17884
17885     vector float vec_vcfux (vector unsigned int, const int);
17886
17887     vector signed int vec_cts (vector float, const int);
17888
17889     vector unsigned int vec_ctu (vector float, const int);
17890
17891     void vec_dss (const int);
17892
17893     void vec_dssall (void);
17894
17895     void vec_dst (const vector unsigned char *, int, const int);
17896     void vec_dst (const vector signed char *, int, const int);
17897     void vec_dst (const vector bool char *, int, const int);
17898     void vec_dst (const vector unsigned short *, int, const int);
17899     void vec_dst (const vector signed short *, int, const int);
17900     void vec_dst (const vector bool short *, int, const int);
17901     void vec_dst (const vector pixel *, int, const int);
17902     void vec_dst (const vector unsigned int *, int, const int);
17903     void vec_dst (const vector signed int *, int, const int);
17904     void vec_dst (const vector bool int *, int, const int);
17905     void vec_dst (const vector float *, int, const int);
17906     void vec_dst (const unsigned char *, int, const int);
17907     void vec_dst (const signed char *, int, const int);
17908     void vec_dst (const unsigned short *, int, const int);
17909     void vec_dst (const short *, int, const int);
17910     void vec_dst (const unsigned int *, int, const int);
17911     void vec_dst (const int *, int, const int);
17912     void vec_dst (const unsigned long *, int, const int);
17913     void vec_dst (const long *, int, const int);
17914     void vec_dst (const float *, int, const int);
17915
17916     void vec_dstst (const vector unsigned char *, int, const int);
17917     void vec_dstst (const vector signed char *, int, const int);
17918     void vec_dstst (const vector bool char *, int, const int);
17919     void vec_dstst (const vector unsigned short *, int, const int);
17920     void vec_dstst (const vector signed short *, int, const int);
17921     void vec_dstst (const vector bool short *, int, const int);
17922     void vec_dstst (const vector pixel *, int, const int);
17923     void vec_dstst (const vector unsigned int *, int, const int);
17924     void vec_dstst (const vector signed int *, int, const int);
17925     void vec_dstst (const vector bool int *, int, const int);
17926     void vec_dstst (const vector float *, int, const int);
17927     void vec_dstst (const unsigned char *, int, const int);
17928     void vec_dstst (const signed char *, int, const int);
17929     void vec_dstst (const unsigned short *, int, const int);
17930     void vec_dstst (const short *, int, const int);
17931     void vec_dstst (const unsigned int *, int, const int);
17932     void vec_dstst (const int *, int, const int);
17933     void vec_dstst (const unsigned long *, int, const int);
17934     void vec_dstst (const long *, int, const int);
17935     void vec_dstst (const float *, int, const int);
17936
17937     void vec_dststt (const vector unsigned char *, int, const int);
17938     void vec_dststt (const vector signed char *, int, const int);
17939     void vec_dststt (const vector bool char *, int, const int);
17940     void vec_dststt (const vector unsigned short *, int, const int);
17941     void vec_dststt (const vector signed short *, int, const int);
17942     void vec_dststt (const vector bool short *, int, const int);
17943     void vec_dststt (const vector pixel *, int, const int);
17944     void vec_dststt (const vector unsigned int *, int, const int);
17945     void vec_dststt (const vector signed int *, int, const int);
17946     void vec_dststt (const vector bool int *, int, const int);
17947     void vec_dststt (const vector float *, int, const int);
17948     void vec_dststt (const unsigned char *, int, const int);
17949     void vec_dststt (const signed char *, int, const int);
17950     void vec_dststt (const unsigned short *, int, const int);
17951     void vec_dststt (const short *, int, const int);
17952     void vec_dststt (const unsigned int *, int, const int);
17953     void vec_dststt (const int *, int, const int);
17954     void vec_dststt (const unsigned long *, int, const int);
17955     void vec_dststt (const long *, int, const int);
17956     void vec_dststt (const float *, int, const int);
17957
17958     void vec_dstt (const vector unsigned char *, int, const int);
17959     void vec_dstt (const vector signed char *, int, const int);
17960     void vec_dstt (const vector bool char *, int, const int);
17961     void vec_dstt (const vector unsigned short *, int, const int);
17962     void vec_dstt (const vector signed short *, int, const int);
17963     void vec_dstt (const vector bool short *, int, const int);
17964     void vec_dstt (const vector pixel *, int, const int);
17965     void vec_dstt (const vector unsigned int *, int, const int);
17966     void vec_dstt (const vector signed int *, int, const int);
17967     void vec_dstt (const vector bool int *, int, const int);
17968     void vec_dstt (const vector float *, int, const int);
17969     void vec_dstt (const unsigned char *, int, const int);
17970     void vec_dstt (const signed char *, int, const int);
17971     void vec_dstt (const unsigned short *, int, const int);
17972     void vec_dstt (const short *, int, const int);
17973     void vec_dstt (const unsigned int *, int, const int);
17974     void vec_dstt (const int *, int, const int);
17975     void vec_dstt (const unsigned long *, int, const int);
17976     void vec_dstt (const long *, int, const int);
17977     void vec_dstt (const float *, int, const int);
17978
17979     vector float vec_expte (vector float);
17980
17981     vector float vec_floor (vector float);
17982
17983     vector float vec_ld (int, const vector float *);
17984     vector float vec_ld (int, const float *);
17985     vector bool int vec_ld (int, const vector bool int *);
17986     vector signed int vec_ld (int, const vector signed int *);
17987     vector signed int vec_ld (int, const int *);
17988     vector signed int vec_ld (int, const long *);
17989     vector unsigned int vec_ld (int, const vector unsigned int *);
17990     vector unsigned int vec_ld (int, const unsigned int *);
17991     vector unsigned int vec_ld (int, const unsigned long *);
17992     vector bool short vec_ld (int, const vector bool short *);
17993     vector pixel vec_ld (int, const vector pixel *);
17994     vector signed short vec_ld (int, const vector signed short *);
17995     vector signed short vec_ld (int, const short *);
17996     vector unsigned short vec_ld (int, const vector unsigned short *);
17997     vector unsigned short vec_ld (int, const unsigned short *);
17998     vector bool char vec_ld (int, const vector bool char *);
17999     vector signed char vec_ld (int, const vector signed char *);
18000     vector signed char vec_ld (int, const signed char *);
18001     vector unsigned char vec_ld (int, const vector unsigned char *);
18002     vector unsigned char vec_ld (int, const unsigned char *);
18003
18004     vector signed char vec_lde (int, const signed char *);
18005     vector unsigned char vec_lde (int, const unsigned char *);
18006     vector signed short vec_lde (int, const short *);
18007     vector unsigned short vec_lde (int, const unsigned short *);
18008     vector float vec_lde (int, const float *);
18009     vector signed int vec_lde (int, const int *);
18010     vector unsigned int vec_lde (int, const unsigned int *);
18011     vector signed int vec_lde (int, const long *);
18012     vector unsigned int vec_lde (int, const unsigned long *);
18013
18014     vector float vec_lvewx (int, float *);
18015     vector signed int vec_lvewx (int, int *);
18016     vector unsigned int vec_lvewx (int, unsigned int *);
18017     vector signed int vec_lvewx (int, long *);
18018     vector unsigned int vec_lvewx (int, unsigned long *);
18019
18020     vector signed short vec_lvehx (int, short *);
18021     vector unsigned short vec_lvehx (int, unsigned short *);
18022
18023     vector signed char vec_lvebx (int, char *);
18024     vector unsigned char vec_lvebx (int, unsigned char *);
18025
18026     vector float vec_ldl (int, const vector float *);
18027     vector float vec_ldl (int, const float *);
18028     vector bool int vec_ldl (int, const vector bool int *);
18029     vector signed int vec_ldl (int, const vector signed int *);
18030     vector signed int vec_ldl (int, const int *);
18031     vector signed int vec_ldl (int, const long *);
18032     vector unsigned int vec_ldl (int, const vector unsigned int *);
18033     vector unsigned int vec_ldl (int, const unsigned int *);
18034     vector unsigned int vec_ldl (int, const unsigned long *);
18035     vector bool short vec_ldl (int, const vector bool short *);
18036     vector pixel vec_ldl (int, const vector pixel *);
18037     vector signed short vec_ldl (int, const vector signed short *);
18038     vector signed short vec_ldl (int, const short *);
18039     vector unsigned short vec_ldl (int, const vector unsigned short *);
18040     vector unsigned short vec_ldl (int, const unsigned short *);
18041     vector bool char vec_ldl (int, const vector bool char *);
18042     vector signed char vec_ldl (int, const vector signed char *);
18043     vector signed char vec_ldl (int, const signed char *);
18044     vector unsigned char vec_ldl (int, const vector unsigned char *);
18045     vector unsigned char vec_ldl (int, const unsigned char *);
18046
18047     vector float vec_loge (vector float);
18048
18049     vector unsigned char vec_lvsl (int, const volatile unsigned char *);
18050     vector unsigned char vec_lvsl (int, const volatile signed char *);
18051     vector unsigned char vec_lvsl (int, const volatile unsigned short *);
18052     vector unsigned char vec_lvsl (int, const volatile short *);
18053     vector unsigned char vec_lvsl (int, const volatile unsigned int *);
18054     vector unsigned char vec_lvsl (int, const volatile int *);
18055     vector unsigned char vec_lvsl (int, const volatile unsigned long *);
18056     vector unsigned char vec_lvsl (int, const volatile long *);
18057     vector unsigned char vec_lvsl (int, const volatile float *);
18058
18059     vector unsigned char vec_lvsr (int, const volatile unsigned char *);
18060     vector unsigned char vec_lvsr (int, const volatile signed char *);
18061     vector unsigned char vec_lvsr (int, const volatile unsigned short *);
18062     vector unsigned char vec_lvsr (int, const volatile short *);
18063     vector unsigned char vec_lvsr (int, const volatile unsigned int *);
18064     vector unsigned char vec_lvsr (int, const volatile int *);
18065     vector unsigned char vec_lvsr (int, const volatile unsigned long *);
18066     vector unsigned char vec_lvsr (int, const volatile long *);
18067     vector unsigned char vec_lvsr (int, const volatile float *);
18068
18069     vector float vec_madd (vector float, vector float, vector float);
18070
18071     vector signed short vec_madds (vector signed short,
18072                                    vector signed short,
18073                                    vector signed short);
18074
18075     vector unsigned char vec_max (vector bool char, vector unsigned char);
18076     vector unsigned char vec_max (vector unsigned char, vector bool char);
18077     vector unsigned char vec_max (vector unsigned char,
18078                                   vector unsigned char);
18079     vector signed char vec_max (vector bool char, vector signed char);
18080     vector signed char vec_max (vector signed char, vector bool char);
18081     vector signed char vec_max (vector signed char, vector signed char);
18082     vector unsigned short vec_max (vector bool short,
18083                                    vector unsigned short);
18084     vector unsigned short vec_max (vector unsigned short,
18085                                    vector bool short);
18086     vector unsigned short vec_max (vector unsigned short,
18087                                    vector unsigned short);
18088     vector signed short vec_max (vector bool short, vector signed short);
18089     vector signed short vec_max (vector signed short, vector bool short);
18090     vector signed short vec_max (vector signed short, vector signed short);
18091     vector unsigned int vec_max (vector bool int, vector unsigned int);
18092     vector unsigned int vec_max (vector unsigned int, vector bool int);
18093     vector unsigned int vec_max (vector unsigned int, vector unsigned int);
18094     vector signed int vec_max (vector bool int, vector signed int);
18095     vector signed int vec_max (vector signed int, vector bool int);
18096     vector signed int vec_max (vector signed int, vector signed int);
18097     vector float vec_max (vector float, vector float);
18098
18099     vector float vec_vmaxfp (vector float, vector float);
18100
18101     vector signed int vec_vmaxsw (vector bool int, vector signed int);
18102     vector signed int vec_vmaxsw (vector signed int, vector bool int);
18103     vector signed int vec_vmaxsw (vector signed int, vector signed int);
18104
18105     vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
18106     vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
18107     vector unsigned int vec_vmaxuw (vector unsigned int,
18108                                     vector unsigned int);
18109
18110     vector signed short vec_vmaxsh (vector bool short, vector signed short);
18111     vector signed short vec_vmaxsh (vector signed short, vector bool short);
18112     vector signed short vec_vmaxsh (vector signed short,
18113                                     vector signed short);
18114
18115     vector unsigned short vec_vmaxuh (vector bool short,
18116                                       vector unsigned short);
18117     vector unsigned short vec_vmaxuh (vector unsigned short,
18118                                       vector bool short);
18119     vector unsigned short vec_vmaxuh (vector unsigned short,
18120                                       vector unsigned short);
18121
18122     vector signed char vec_vmaxsb (vector bool char, vector signed char);
18123     vector signed char vec_vmaxsb (vector signed char, vector bool char);
18124     vector signed char vec_vmaxsb (vector signed char, vector signed char);
18125
18126     vector unsigned char vec_vmaxub (vector bool char,
18127                                      vector unsigned char);
18128     vector unsigned char vec_vmaxub (vector unsigned char,
18129                                      vector bool char);
18130     vector unsigned char vec_vmaxub (vector unsigned char,
18131                                      vector unsigned char);
18132
18133     vector bool char vec_mergeh (vector bool char, vector bool char);
18134     vector signed char vec_mergeh (vector signed char, vector signed char);
18135     vector unsigned char vec_mergeh (vector unsigned char,
18136                                      vector unsigned char);
18137     vector bool short vec_mergeh (vector bool short, vector bool short);
18138     vector pixel vec_mergeh (vector pixel, vector pixel);
18139     vector signed short vec_mergeh (vector signed short,
18140                                     vector signed short);
18141     vector unsigned short vec_mergeh (vector unsigned short,
18142                                       vector unsigned short);
18143     vector float vec_mergeh (vector float, vector float);
18144     vector bool int vec_mergeh (vector bool int, vector bool int);
18145     vector signed int vec_mergeh (vector signed int, vector signed int);
18146     vector unsigned int vec_mergeh (vector unsigned int,
18147                                     vector unsigned int);
18148
18149     vector float vec_vmrghw (vector float, vector float);
18150     vector bool int vec_vmrghw (vector bool int, vector bool int);
18151     vector signed int vec_vmrghw (vector signed int, vector signed int);
18152     vector unsigned int vec_vmrghw (vector unsigned int,
18153                                     vector unsigned int);
18154
18155     vector bool short vec_vmrghh (vector bool short, vector bool short);
18156     vector signed short vec_vmrghh (vector signed short,
18157                                     vector signed short);
18158     vector unsigned short vec_vmrghh (vector unsigned short,
18159                                       vector unsigned short);
18160     vector pixel vec_vmrghh (vector pixel, vector pixel);
18161
18162     vector bool char vec_vmrghb (vector bool char, vector bool char);
18163     vector signed char vec_vmrghb (vector signed char, vector signed char);
18164     vector unsigned char vec_vmrghb (vector unsigned char,
18165                                      vector unsigned char);
18166
18167     vector bool char vec_mergel (vector bool char, vector bool char);
18168     vector signed char vec_mergel (vector signed char, vector signed char);
18169     vector unsigned char vec_mergel (vector unsigned char,
18170                                      vector unsigned char);
18171     vector bool short vec_mergel (vector bool short, vector bool short);
18172     vector pixel vec_mergel (vector pixel, vector pixel);
18173     vector signed short vec_mergel (vector signed short,
18174                                     vector signed short);
18175     vector unsigned short vec_mergel (vector unsigned short,
18176                                       vector unsigned short);
18177     vector float vec_mergel (vector float, vector float);
18178     vector bool int vec_mergel (vector bool int, vector bool int);
18179     vector signed int vec_mergel (vector signed int, vector signed int);
18180     vector unsigned int vec_mergel (vector unsigned int,
18181                                     vector unsigned int);
18182
18183     vector float vec_vmrglw (vector float, vector float);
18184     vector signed int vec_vmrglw (vector signed int, vector signed int);
18185     vector unsigned int vec_vmrglw (vector unsigned int,
18186                                     vector unsigned int);
18187     vector bool int vec_vmrglw (vector bool int, vector bool int);
18188
18189     vector bool short vec_vmrglh (vector bool short, vector bool short);
18190     vector signed short vec_vmrglh (vector signed short,
18191                                     vector signed short);
18192     vector unsigned short vec_vmrglh (vector unsigned short,
18193                                       vector unsigned short);
18194     vector pixel vec_vmrglh (vector pixel, vector pixel);
18195
18196     vector bool char vec_vmrglb (vector bool char, vector bool char);
18197     vector signed char vec_vmrglb (vector signed char, vector signed char);
18198     vector unsigned char vec_vmrglb (vector unsigned char,
18199                                      vector unsigned char);
18200
18201     vector unsigned short vec_mfvscr (void);
18202
18203     vector unsigned char vec_min (vector bool char, vector unsigned char);
18204     vector unsigned char vec_min (vector unsigned char, vector bool char);
18205     vector unsigned char vec_min (vector unsigned char,
18206                                   vector unsigned char);
18207     vector signed char vec_min (vector bool char, vector signed char);
18208     vector signed char vec_min (vector signed char, vector bool char);
18209     vector signed char vec_min (vector signed char, vector signed char);
18210     vector unsigned short vec_min (vector bool short,
18211                                    vector unsigned short);
18212     vector unsigned short vec_min (vector unsigned short,
18213                                    vector bool short);
18214     vector unsigned short vec_min (vector unsigned short,
18215                                    vector unsigned short);
18216     vector signed short vec_min (vector bool short, vector signed short);
18217     vector signed short vec_min (vector signed short, vector bool short);
18218     vector signed short vec_min (vector signed short, vector signed short);
18219     vector unsigned int vec_min (vector bool int, vector unsigned int);
18220     vector unsigned int vec_min (vector unsigned int, vector bool int);
18221     vector unsigned int vec_min (vector unsigned int, vector unsigned int);
18222     vector signed int vec_min (vector bool int, vector signed int);
18223     vector signed int vec_min (vector signed int, vector bool int);
18224     vector signed int vec_min (vector signed int, vector signed int);
18225     vector float vec_min (vector float, vector float);
18226
18227     vector float vec_vminfp (vector float, vector float);
18228
18229     vector signed int vec_vminsw (vector bool int, vector signed int);
18230     vector signed int vec_vminsw (vector signed int, vector bool int);
18231     vector signed int vec_vminsw (vector signed int, vector signed int);
18232
18233     vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
18234     vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
18235     vector unsigned int vec_vminuw (vector unsigned int,
18236                                     vector unsigned int);
18237
18238     vector signed short vec_vminsh (vector bool short, vector signed short);
18239     vector signed short vec_vminsh (vector signed short, vector bool short);
18240     vector signed short vec_vminsh (vector signed short,
18241                                     vector signed short);
18242
18243     vector unsigned short vec_vminuh (vector bool short,
18244                                       vector unsigned short);
18245     vector unsigned short vec_vminuh (vector unsigned short,
18246                                       vector bool short);
18247     vector unsigned short vec_vminuh (vector unsigned short,
18248                                       vector unsigned short);
18249
18250     vector signed char vec_vminsb (vector bool char, vector signed char);
18251     vector signed char vec_vminsb (vector signed char, vector bool char);
18252     vector signed char vec_vminsb (vector signed char, vector signed char);
18253
18254     vector unsigned char vec_vminub (vector bool char,
18255                                      vector unsigned char);
18256     vector unsigned char vec_vminub (vector unsigned char,
18257                                      vector bool char);
18258     vector unsigned char vec_vminub (vector unsigned char,
18259                                      vector unsigned char);
18260
18261     vector signed short vec_mladd (vector signed short,
18262                                    vector signed short,
18263                                    vector signed short);
18264     vector signed short vec_mladd (vector signed short,
18265                                    vector unsigned short,
18266                                    vector unsigned short);
18267     vector signed short vec_mladd (vector unsigned short,
18268                                    vector signed short,
18269                                    vector signed short);
18270     vector unsigned short vec_mladd (vector unsigned short,
18271                                      vector unsigned short,
18272                                      vector unsigned short);
18273
18274     vector signed short vec_mradds (vector signed short,
18275                                     vector signed short,
18276                                     vector signed short);
18277
18278     vector unsigned int vec_msum (vector unsigned char,
18279                                   vector unsigned char,
18280                                   vector unsigned int);
18281     vector signed int vec_msum (vector signed char,
18282                                 vector unsigned char,
18283                                 vector signed int);
18284     vector unsigned int vec_msum (vector unsigned short,
18285                                   vector unsigned short,
18286                                   vector unsigned int);
18287     vector signed int vec_msum (vector signed short,
18288                                 vector signed short,
18289                                 vector signed int);
18290
18291     vector signed int vec_vmsumshm (vector signed short,
18292                                     vector signed short,
18293                                     vector signed int);
18294
18295     vector unsigned int vec_vmsumuhm (vector unsigned short,
18296                                       vector unsigned short,
18297                                       vector unsigned int);
18298
18299     vector signed int vec_vmsummbm (vector signed char,
18300                                     vector unsigned char,
18301                                     vector signed int);
18302
18303     vector unsigned int vec_vmsumubm (vector unsigned char,
18304                                       vector unsigned char,
18305                                       vector unsigned int);
18306
18307     vector unsigned int vec_msums (vector unsigned short,
18308                                    vector unsigned short,
18309                                    vector unsigned int);
18310     vector signed int vec_msums (vector signed short,
18311                                  vector signed short,
18312                                  vector signed int);
18313
18314     vector signed int vec_vmsumshs (vector signed short,
18315                                     vector signed short,
18316                                     vector signed int);
18317
18318     vector unsigned int vec_vmsumuhs (vector unsigned short,
18319                                       vector unsigned short,
18320                                       vector unsigned int);
18321
18322     void vec_mtvscr (vector signed int);
18323     void vec_mtvscr (vector unsigned int);
18324     void vec_mtvscr (vector bool int);
18325     void vec_mtvscr (vector signed short);
18326     void vec_mtvscr (vector unsigned short);
18327     void vec_mtvscr (vector bool short);
18328     void vec_mtvscr (vector pixel);
18329     void vec_mtvscr (vector signed char);
18330     void vec_mtvscr (vector unsigned char);
18331     void vec_mtvscr (vector bool char);
18332
18333     vector unsigned short vec_mule (vector unsigned char,
18334                                     vector unsigned char);
18335     vector signed short vec_mule (vector signed char,
18336                                   vector signed char);
18337     vector unsigned int vec_mule (vector unsigned short,
18338                                   vector unsigned short);
18339     vector signed int vec_mule (vector signed short, vector signed short);
18340
18341     vector signed int vec_vmulesh (vector signed short,
18342                                    vector signed short);
18343
18344     vector unsigned int vec_vmuleuh (vector unsigned short,
18345                                      vector unsigned short);
18346
18347     vector signed short vec_vmulesb (vector signed char,
18348                                      vector signed char);
18349
18350     vector unsigned short vec_vmuleub (vector unsigned char,
18351                                       vector unsigned char);
18352
18353     vector unsigned short vec_mulo (vector unsigned char,
18354                                     vector unsigned char);
18355     vector signed short vec_mulo (vector signed char, vector signed char);
18356     vector unsigned int vec_mulo (vector unsigned short,
18357                                   vector unsigned short);
18358     vector signed int vec_mulo (vector signed short, vector signed short);
18359
18360     vector signed int vec_vmulosh (vector signed short,
18361                                    vector signed short);
18362
18363     vector unsigned int vec_vmulouh (vector unsigned short,
18364                                      vector unsigned short);
18365
18366     vector signed short vec_vmulosb (vector signed char,
18367                                      vector signed char);
18368
18369     vector unsigned short vec_vmuloub (vector unsigned char,
18370                                        vector unsigned char);
18371
18372     vector float vec_nmsub (vector float, vector float, vector float);
18373
18374     vector float vec_nor (vector float, vector float);
18375     vector signed int vec_nor (vector signed int, vector signed int);
18376     vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
18377     vector bool int vec_nor (vector bool int, vector bool int);
18378     vector signed short vec_nor (vector signed short, vector signed short);
18379     vector unsigned short vec_nor (vector unsigned short,
18380                                    vector unsigned short);
18381     vector bool short vec_nor (vector bool short, vector bool short);
18382     vector signed char vec_nor (vector signed char, vector signed char);
18383     vector unsigned char vec_nor (vector unsigned char,
18384                                   vector unsigned char);
18385     vector bool char vec_nor (vector bool char, vector bool char);
18386
18387     vector float vec_or (vector float, vector float);
18388     vector float vec_or (vector float, vector bool int);
18389     vector float vec_or (vector bool int, vector float);
18390     vector bool int vec_or (vector bool int, vector bool int);
18391     vector signed int vec_or (vector bool int, vector signed int);
18392     vector signed int vec_or (vector signed int, vector bool int);
18393     vector signed int vec_or (vector signed int, vector signed int);
18394     vector unsigned int vec_or (vector bool int, vector unsigned int);
18395     vector unsigned int vec_or (vector unsigned int, vector bool int);
18396     vector unsigned int vec_or (vector unsigned int, vector unsigned int);
18397     vector bool short vec_or (vector bool short, vector bool short);
18398     vector signed short vec_or (vector bool short, vector signed short);
18399     vector signed short vec_or (vector signed short, vector bool short);
18400     vector signed short vec_or (vector signed short, vector signed short);
18401     vector unsigned short vec_or (vector bool short, vector unsigned short);
18402     vector unsigned short vec_or (vector unsigned short, vector bool short);
18403     vector unsigned short vec_or (vector unsigned short,
18404                                   vector unsigned short);
18405     vector signed char vec_or (vector bool char, vector signed char);
18406     vector bool char vec_or (vector bool char, vector bool char);
18407     vector signed char vec_or (vector signed char, vector bool char);
18408     vector signed char vec_or (vector signed char, vector signed char);
18409     vector unsigned char vec_or (vector bool char, vector unsigned char);
18410     vector unsigned char vec_or (vector unsigned char, vector bool char);
18411     vector unsigned char vec_or (vector unsigned char,
18412                                  vector unsigned char);
18413
18414     vector signed char vec_pack (vector signed short, vector signed short);
18415     vector unsigned char vec_pack (vector unsigned short,
18416                                    vector unsigned short);
18417     vector bool char vec_pack (vector bool short, vector bool short);
18418     vector signed short vec_pack (vector signed int, vector signed int);
18419     vector unsigned short vec_pack (vector unsigned int,
18420                                     vector unsigned int);
18421     vector bool short vec_pack (vector bool int, vector bool int);
18422
18423     vector bool short vec_vpkuwum (vector bool int, vector bool int);
18424     vector signed short vec_vpkuwum (vector signed int, vector signed int);
18425     vector unsigned short vec_vpkuwum (vector unsigned int,
18426                                        vector unsigned int);
18427
18428     vector bool char vec_vpkuhum (vector bool short, vector bool short);
18429     vector signed char vec_vpkuhum (vector signed short,
18430                                     vector signed short);
18431     vector unsigned char vec_vpkuhum (vector unsigned short,
18432                                       vector unsigned short);
18433
18434     vector pixel vec_packpx (vector unsigned int, vector unsigned int);
18435
18436     vector unsigned char vec_packs (vector unsigned short,
18437                                     vector unsigned short);
18438     vector signed char vec_packs (vector signed short, vector signed short);
18439     vector unsigned short vec_packs (vector unsigned int,
18440                                      vector unsigned int);
18441     vector signed short vec_packs (vector signed int, vector signed int);
18442
18443     vector signed short vec_vpkswss (vector signed int, vector signed int);
18444
18445     vector unsigned short vec_vpkuwus (vector unsigned int,
18446                                        vector unsigned int);
18447
18448     vector signed char vec_vpkshss (vector signed short,
18449                                     vector signed short);
18450
18451     vector unsigned char vec_vpkuhus (vector unsigned short,
18452                                       vector unsigned short);
18453
18454     vector unsigned char vec_packsu (vector unsigned short,
18455                                      vector unsigned short);
18456     vector unsigned char vec_packsu (vector signed short,
18457                                      vector signed short);
18458     vector unsigned short vec_packsu (vector unsigned int,
18459                                       vector unsigned int);
18460     vector unsigned short vec_packsu (vector signed int, vector signed int);
18461
18462     vector unsigned short vec_vpkswus (vector signed int,
18463                                        vector signed int);
18464
18465     vector unsigned char vec_vpkshus (vector signed short,
18466                                       vector signed short);
18467
18468     vector float vec_perm (vector float,
18469                            vector float,
18470                            vector unsigned char);
18471     vector signed int vec_perm (vector signed int,
18472                                 vector signed int,
18473                                 vector unsigned char);
18474     vector unsigned int vec_perm (vector unsigned int,
18475                                   vector unsigned int,
18476                                   vector unsigned char);
18477     vector bool int vec_perm (vector bool int,
18478                               vector bool int,
18479                               vector unsigned char);
18480     vector signed short vec_perm (vector signed short,
18481                                   vector signed short,
18482                                   vector unsigned char);
18483     vector unsigned short vec_perm (vector unsigned short,
18484                                     vector unsigned short,
18485                                     vector unsigned char);
18486     vector bool short vec_perm (vector bool short,
18487                                 vector bool short,
18488                                 vector unsigned char);
18489     vector pixel vec_perm (vector pixel,
18490                            vector pixel,
18491                            vector unsigned char);
18492     vector signed char vec_perm (vector signed char,
18493                                  vector signed char,
18494                                  vector unsigned char);
18495     vector unsigned char vec_perm (vector unsigned char,
18496                                    vector unsigned char,
18497                                    vector unsigned char);
18498     vector bool char vec_perm (vector bool char,
18499                                vector bool char,
18500                                vector unsigned char);
18501
18502     vector float vec_re (vector float);
18503
18504     vector signed char vec_rl (vector signed char,
18505                                vector unsigned char);
18506     vector unsigned char vec_rl (vector unsigned char,
18507                                  vector unsigned char);
18508     vector signed short vec_rl (vector signed short, vector unsigned short);
18509     vector unsigned short vec_rl (vector unsigned short,
18510                                   vector unsigned short);
18511     vector signed int vec_rl (vector signed int, vector unsigned int);
18512     vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
18513
18514     vector signed int vec_vrlw (vector signed int, vector unsigned int);
18515     vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
18516
18517     vector signed short vec_vrlh (vector signed short,
18518                                   vector unsigned short);
18519     vector unsigned short vec_vrlh (vector unsigned short,
18520                                     vector unsigned short);
18521
18522     vector signed char vec_vrlb (vector signed char, vector unsigned char);
18523     vector unsigned char vec_vrlb (vector unsigned char,
18524                                    vector unsigned char);
18525
18526     vector float vec_round (vector float);
18527
18528     vector float vec_rsqrte (vector float);
18529
18530     vector float vec_sel (vector float, vector float, vector bool int);
18531     vector float vec_sel (vector float, vector float, vector unsigned int);
18532     vector signed int vec_sel (vector signed int,
18533                                vector signed int,
18534                                vector bool int);
18535     vector signed int vec_sel (vector signed int,
18536                                vector signed int,
18537                                vector unsigned int);
18538     vector unsigned int vec_sel (vector unsigned int,
18539                                  vector unsigned int,
18540                                  vector bool int);
18541     vector unsigned int vec_sel (vector unsigned int,
18542                                  vector unsigned int,
18543                                  vector unsigned int);
18544     vector bool int vec_sel (vector bool int,
18545                              vector bool int,
18546                              vector bool int);
18547     vector bool int vec_sel (vector bool int,
18548                              vector bool int,
18549                              vector unsigned int);
18550     vector signed short vec_sel (vector signed short,
18551                                  vector signed short,
18552                                  vector bool short);
18553     vector signed short vec_sel (vector signed short,
18554                                  vector signed short,
18555                                  vector unsigned short);
18556     vector unsigned short vec_sel (vector unsigned short,
18557                                    vector unsigned short,
18558                                    vector bool short);
18559     vector unsigned short vec_sel (vector unsigned short,
18560                                    vector unsigned short,
18561                                    vector unsigned short);
18562     vector bool short vec_sel (vector bool short,
18563                                vector bool short,
18564                                vector bool short);
18565     vector bool short vec_sel (vector bool short,
18566                                vector bool short,
18567                                vector unsigned short);
18568     vector signed char vec_sel (vector signed char,
18569                                 vector signed char,
18570                                 vector bool char);
18571     vector signed char vec_sel (vector signed char,
18572                                 vector signed char,
18573                                 vector unsigned char);
18574     vector unsigned char vec_sel (vector unsigned char,
18575                                   vector unsigned char,
18576                                   vector bool char);
18577     vector unsigned char vec_sel (vector unsigned char,
18578                                   vector unsigned char,
18579                                   vector unsigned char);
18580     vector bool char vec_sel (vector bool char,
18581                               vector bool char,
18582                               vector bool char);
18583     vector bool char vec_sel (vector bool char,
18584                               vector bool char,
18585                               vector unsigned char);
18586
18587     vector signed char vec_sl (vector signed char,
18588                                vector unsigned char);
18589     vector unsigned char vec_sl (vector unsigned char,
18590                                  vector unsigned char);
18591     vector signed short vec_sl (vector signed short, vector unsigned short);
18592     vector unsigned short vec_sl (vector unsigned short,
18593                                   vector unsigned short);
18594     vector signed int vec_sl (vector signed int, vector unsigned int);
18595     vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
18596
18597     vector signed int vec_vslw (vector signed int, vector unsigned int);
18598     vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
18599
18600     vector signed short vec_vslh (vector signed short,
18601                                   vector unsigned short);
18602     vector unsigned short vec_vslh (vector unsigned short,
18603                                     vector unsigned short);
18604
18605     vector signed char vec_vslb (vector signed char, vector unsigned char);
18606     vector unsigned char vec_vslb (vector unsigned char,
18607                                    vector unsigned char);
18608
18609     vector float vec_sld (vector float, vector float, const int);
18610     vector signed int vec_sld (vector signed int,
18611                                vector signed int,
18612                                const int);
18613     vector unsigned int vec_sld (vector unsigned int,
18614                                  vector unsigned int,
18615                                  const int);
18616     vector bool int vec_sld (vector bool int,
18617                              vector bool int,
18618                              const int);
18619     vector signed short vec_sld (vector signed short,
18620                                  vector signed short,
18621                                  const int);
18622     vector unsigned short vec_sld (vector unsigned short,
18623                                    vector unsigned short,
18624                                    const int);
18625     vector bool short vec_sld (vector bool short,
18626                                vector bool short,
18627                                const int);
18628     vector pixel vec_sld (vector pixel,
18629                           vector pixel,
18630                           const int);
18631     vector signed char vec_sld (vector signed char,
18632                                 vector signed char,
18633                                 const int);
18634     vector unsigned char vec_sld (vector unsigned char,
18635                                   vector unsigned char,
18636                                   const int);
18637     vector bool char vec_sld (vector bool char,
18638                               vector bool char,
18639                               const int);
18640
18641     vector signed int vec_sll (vector signed int,
18642                                vector unsigned int);
18643     vector signed int vec_sll (vector signed int,
18644                                vector unsigned short);
18645     vector signed int vec_sll (vector signed int,
18646                                vector unsigned char);
18647     vector unsigned int vec_sll (vector unsigned int,
18648                                  vector unsigned int);
18649     vector unsigned int vec_sll (vector unsigned int,
18650                                  vector unsigned short);
18651     vector unsigned int vec_sll (vector unsigned int,
18652                                  vector unsigned char);
18653     vector bool int vec_sll (vector bool int,
18654                              vector unsigned int);
18655     vector bool int vec_sll (vector bool int,
18656                              vector unsigned short);
18657     vector bool int vec_sll (vector bool int,
18658                              vector unsigned char);
18659     vector signed short vec_sll (vector signed short,
18660                                  vector unsigned int);
18661     vector signed short vec_sll (vector signed short,
18662                                  vector unsigned short);
18663     vector signed short vec_sll (vector signed short,
18664                                  vector unsigned char);
18665     vector unsigned short vec_sll (vector unsigned short,
18666                                    vector unsigned int);
18667     vector unsigned short vec_sll (vector unsigned short,
18668                                    vector unsigned short);
18669     vector unsigned short vec_sll (vector unsigned short,
18670                                    vector unsigned char);
18671     vector bool short vec_sll (vector bool short, vector unsigned int);
18672     vector bool short vec_sll (vector bool short, vector unsigned short);
18673     vector bool short vec_sll (vector bool short, vector unsigned char);
18674     vector pixel vec_sll (vector pixel, vector unsigned int);
18675     vector pixel vec_sll (vector pixel, vector unsigned short);
18676     vector pixel vec_sll (vector pixel, vector unsigned char);
18677     vector signed char vec_sll (vector signed char, vector unsigned int);
18678     vector signed char vec_sll (vector signed char, vector unsigned short);
18679     vector signed char vec_sll (vector signed char, vector unsigned char);
18680     vector unsigned char vec_sll (vector unsigned char,
18681                                   vector unsigned int);
18682     vector unsigned char vec_sll (vector unsigned char,
18683                                   vector unsigned short);
18684     vector unsigned char vec_sll (vector unsigned char,
18685                                   vector unsigned char);
18686     vector bool char vec_sll (vector bool char, vector unsigned int);
18687     vector bool char vec_sll (vector bool char, vector unsigned short);
18688     vector bool char vec_sll (vector bool char, vector unsigned char);
18689
18690     vector float vec_slo (vector float, vector signed char);
18691     vector float vec_slo (vector float, vector unsigned char);
18692     vector signed int vec_slo (vector signed int, vector signed char);
18693     vector signed int vec_slo (vector signed int, vector unsigned char);
18694     vector unsigned int vec_slo (vector unsigned int, vector signed char);
18695     vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
18696     vector signed short vec_slo (vector signed short, vector signed char);
18697     vector signed short vec_slo (vector signed short, vector unsigned char);
18698     vector unsigned short vec_slo (vector unsigned short,
18699                                    vector signed char);
18700     vector unsigned short vec_slo (vector unsigned short,
18701                                    vector unsigned char);
18702     vector pixel vec_slo (vector pixel, vector signed char);
18703     vector pixel vec_slo (vector pixel, vector unsigned char);
18704     vector signed char vec_slo (vector signed char, vector signed char);
18705     vector signed char vec_slo (vector signed char, vector unsigned char);
18706     vector unsigned char vec_slo (vector unsigned char, vector signed char);
18707     vector unsigned char vec_slo (vector unsigned char,
18708                                   vector unsigned char);
18709
18710     vector signed char vec_splat (vector signed char, const int);
18711     vector unsigned char vec_splat (vector unsigned char, const int);
18712     vector bool char vec_splat (vector bool char, const int);
18713     vector signed short vec_splat (vector signed short, const int);
18714     vector unsigned short vec_splat (vector unsigned short, const int);
18715     vector bool short vec_splat (vector bool short, const int);
18716     vector pixel vec_splat (vector pixel, const int);
18717     vector float vec_splat (vector float, const int);
18718     vector signed int vec_splat (vector signed int, const int);
18719     vector unsigned int vec_splat (vector unsigned int, const int);
18720     vector bool int vec_splat (vector bool int, const int);
18721
18722     vector float vec_vspltw (vector float, const int);
18723     vector signed int vec_vspltw (vector signed int, const int);
18724     vector unsigned int vec_vspltw (vector unsigned int, const int);
18725     vector bool int vec_vspltw (vector bool int, const int);
18726
18727     vector bool short vec_vsplth (vector bool short, const int);
18728     vector signed short vec_vsplth (vector signed short, const int);
18729     vector unsigned short vec_vsplth (vector unsigned short, const int);
18730     vector pixel vec_vsplth (vector pixel, const int);
18731
18732     vector signed char vec_vspltb (vector signed char, const int);
18733     vector unsigned char vec_vspltb (vector unsigned char, const int);
18734     vector bool char vec_vspltb (vector bool char, const int);
18735
18736     vector signed char vec_splat_s8 (const int);
18737
18738     vector signed short vec_splat_s16 (const int);
18739
18740     vector signed int vec_splat_s32 (const int);
18741
18742     vector unsigned char vec_splat_u8 (const int);
18743
18744     vector unsigned short vec_splat_u16 (const int);
18745
18746     vector unsigned int vec_splat_u32 (const int);
18747
18748     vector signed char vec_sr (vector signed char, vector unsigned char);
18749     vector unsigned char vec_sr (vector unsigned char,
18750                                  vector unsigned char);
18751     vector signed short vec_sr (vector signed short,
18752                                 vector unsigned short);
18753     vector unsigned short vec_sr (vector unsigned short,
18754                                   vector unsigned short);
18755     vector signed int vec_sr (vector signed int, vector unsigned int);
18756     vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
18757
18758     vector signed int vec_vsrw (vector signed int, vector unsigned int);
18759     vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
18760
18761     vector signed short vec_vsrh (vector signed short,
18762                                   vector unsigned short);
18763     vector unsigned short vec_vsrh (vector unsigned short,
18764                                     vector unsigned short);
18765
18766     vector signed char vec_vsrb (vector signed char, vector unsigned char);
18767     vector unsigned char vec_vsrb (vector unsigned char,
18768                                    vector unsigned char);
18769
18770     vector signed char vec_sra (vector signed char, vector unsigned char);
18771     vector unsigned char vec_sra (vector unsigned char,
18772                                   vector unsigned char);
18773     vector signed short vec_sra (vector signed short,
18774                                  vector unsigned short);
18775     vector unsigned short vec_sra (vector unsigned short,
18776                                    vector unsigned short);
18777     vector signed int vec_sra (vector signed int, vector unsigned int);
18778     vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
18779
18780     vector signed int vec_vsraw (vector signed int, vector unsigned int);
18781     vector unsigned int vec_vsraw (vector unsigned int,
18782                                    vector unsigned int);
18783
18784     vector signed short vec_vsrah (vector signed short,
18785                                    vector unsigned short);
18786     vector unsigned short vec_vsrah (vector unsigned short,
18787                                      vector unsigned short);
18788
18789     vector signed char vec_vsrab (vector signed char, vector unsigned char);
18790     vector unsigned char vec_vsrab (vector unsigned char,
18791                                     vector unsigned char);
18792
18793     vector signed int vec_srl (vector signed int, vector unsigned int);
18794     vector signed int vec_srl (vector signed int, vector unsigned short);
18795     vector signed int vec_srl (vector signed int, vector unsigned char);
18796     vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
18797     vector unsigned int vec_srl (vector unsigned int,
18798                                  vector unsigned short);
18799     vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
18800     vector bool int vec_srl (vector bool int, vector unsigned int);
18801     vector bool int vec_srl (vector bool int, vector unsigned short);
18802     vector bool int vec_srl (vector bool int, vector unsigned char);
18803     vector signed short vec_srl (vector signed short, vector unsigned int);
18804     vector signed short vec_srl (vector signed short,
18805                                  vector unsigned short);
18806     vector signed short vec_srl (vector signed short, vector unsigned char);
18807     vector unsigned short vec_srl (vector unsigned short,
18808                                    vector unsigned int);
18809     vector unsigned short vec_srl (vector unsigned short,
18810                                    vector unsigned short);
18811     vector unsigned short vec_srl (vector unsigned short,
18812                                    vector unsigned char);
18813     vector bool short vec_srl (vector bool short, vector unsigned int);
18814     vector bool short vec_srl (vector bool short, vector unsigned short);
18815     vector bool short vec_srl (vector bool short, vector unsigned char);
18816     vector pixel vec_srl (vector pixel, vector unsigned int);
18817     vector pixel vec_srl (vector pixel, vector unsigned short);
18818     vector pixel vec_srl (vector pixel, vector unsigned char);
18819     vector signed char vec_srl (vector signed char, vector unsigned int);
18820     vector signed char vec_srl (vector signed char, vector unsigned short);
18821     vector signed char vec_srl (vector signed char, vector unsigned char);
18822     vector unsigned char vec_srl (vector unsigned char,
18823                                   vector unsigned int);
18824     vector unsigned char vec_srl (vector unsigned char,
18825                                   vector unsigned short);
18826     vector unsigned char vec_srl (vector unsigned char,
18827                                   vector unsigned char);
18828     vector bool char vec_srl (vector bool char, vector unsigned int);
18829     vector bool char vec_srl (vector bool char, vector unsigned short);
18830     vector bool char vec_srl (vector bool char, vector unsigned char);
18831
18832     vector float vec_sro (vector float, vector signed char);
18833     vector float vec_sro (vector float, vector unsigned char);
18834     vector signed int vec_sro (vector signed int, vector signed char);
18835     vector signed int vec_sro (vector signed int, vector unsigned char);
18836     vector unsigned int vec_sro (vector unsigned int, vector signed char);
18837     vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
18838     vector signed short vec_sro (vector signed short, vector signed char);
18839     vector signed short vec_sro (vector signed short, vector unsigned char);
18840     vector unsigned short vec_sro (vector unsigned short,
18841                                    vector signed char);
18842     vector unsigned short vec_sro (vector unsigned short,
18843                                    vector unsigned char);
18844     vector pixel vec_sro (vector pixel, vector signed char);
18845     vector pixel vec_sro (vector pixel, vector unsigned char);
18846     vector signed char vec_sro (vector signed char, vector signed char);
18847     vector signed char vec_sro (vector signed char, vector unsigned char);
18848     vector unsigned char vec_sro (vector unsigned char, vector signed char);
18849     vector unsigned char vec_sro (vector unsigned char,
18850                                   vector unsigned char);
18851
18852     void vec_st (vector float, int, vector float *);
18853     void vec_st (vector float, int, float *);
18854     void vec_st (vector signed int, int, vector signed int *);
18855     void vec_st (vector signed int, int, int *);
18856     void vec_st (vector unsigned int, int, vector unsigned int *);
18857     void vec_st (vector unsigned int, int, unsigned int *);
18858     void vec_st (vector bool int, int, vector bool int *);
18859     void vec_st (vector bool int, int, unsigned int *);
18860     void vec_st (vector bool int, int, int *);
18861     void vec_st (vector signed short, int, vector signed short *);
18862     void vec_st (vector signed short, int, short *);
18863     void vec_st (vector unsigned short, int, vector unsigned short *);
18864     void vec_st (vector unsigned short, int, unsigned short *);
18865     void vec_st (vector bool short, int, vector bool short *);
18866     void vec_st (vector bool short, int, unsigned short *);
18867     void vec_st (vector pixel, int, vector pixel *);
18868     void vec_st (vector pixel, int, unsigned short *);
18869     void vec_st (vector pixel, int, short *);
18870     void vec_st (vector bool short, int, short *);
18871     void vec_st (vector signed char, int, vector signed char *);
18872     void vec_st (vector signed char, int, signed char *);
18873     void vec_st (vector unsigned char, int, vector unsigned char *);
18874     void vec_st (vector unsigned char, int, unsigned char *);
18875     void vec_st (vector bool char, int, vector bool char *);
18876     void vec_st (vector bool char, int, unsigned char *);
18877     void vec_st (vector bool char, int, signed char *);
18878
18879     void vec_ste (vector signed char, int, signed char *);
18880     void vec_ste (vector unsigned char, int, unsigned char *);
18881     void vec_ste (vector bool char, int, signed char *);
18882     void vec_ste (vector bool char, int, unsigned char *);
18883     void vec_ste (vector signed short, int, short *);
18884     void vec_ste (vector unsigned short, int, unsigned short *);
18885     void vec_ste (vector bool short, int, short *);
18886     void vec_ste (vector bool short, int, unsigned short *);
18887     void vec_ste (vector pixel, int, short *);
18888     void vec_ste (vector pixel, int, unsigned short *);
18889     void vec_ste (vector float, int, float *);
18890     void vec_ste (vector signed int, int, int *);
18891     void vec_ste (vector unsigned int, int, unsigned int *);
18892     void vec_ste (vector bool int, int, int *);
18893     void vec_ste (vector bool int, int, unsigned int *);
18894
18895     void vec_stvewx (vector float, int, float *);
18896     void vec_stvewx (vector signed int, int, int *);
18897     void vec_stvewx (vector unsigned int, int, unsigned int *);
18898     void vec_stvewx (vector bool int, int, int *);
18899     void vec_stvewx (vector bool int, int, unsigned int *);
18900
18901     void vec_stvehx (vector signed short, int, short *);
18902     void vec_stvehx (vector unsigned short, int, unsigned short *);
18903     void vec_stvehx (vector bool short, int, short *);
18904     void vec_stvehx (vector bool short, int, unsigned short *);
18905     void vec_stvehx (vector pixel, int, short *);
18906     void vec_stvehx (vector pixel, int, unsigned short *);
18907
18908     void vec_stvebx (vector signed char, int, signed char *);
18909     void vec_stvebx (vector unsigned char, int, unsigned char *);
18910     void vec_stvebx (vector bool char, int, signed char *);
18911     void vec_stvebx (vector bool char, int, unsigned char *);
18912
18913     void vec_stl (vector float, int, vector float *);
18914     void vec_stl (vector float, int, float *);
18915     void vec_stl (vector signed int, int, vector signed int *);
18916     void vec_stl (vector signed int, int, int *);
18917     void vec_stl (vector unsigned int, int, vector unsigned int *);
18918     void vec_stl (vector unsigned int, int, unsigned int *);
18919     void vec_stl (vector bool int, int, vector bool int *);
18920     void vec_stl (vector bool int, int, unsigned int *);
18921     void vec_stl (vector bool int, int, int *);
18922     void vec_stl (vector signed short, int, vector signed short *);
18923     void vec_stl (vector signed short, int, short *);
18924     void vec_stl (vector unsigned short, int, vector unsigned short *);
18925     void vec_stl (vector unsigned short, int, unsigned short *);
18926     void vec_stl (vector bool short, int, vector bool short *);
18927     void vec_stl (vector bool short, int, unsigned short *);
18928     void vec_stl (vector bool short, int, short *);
18929     void vec_stl (vector pixel, int, vector pixel *);
18930     void vec_stl (vector pixel, int, unsigned short *);
18931     void vec_stl (vector pixel, int, short *);
18932     void vec_stl (vector signed char, int, vector signed char *);
18933     void vec_stl (vector signed char, int, signed char *);
18934     void vec_stl (vector unsigned char, int, vector unsigned char *);
18935     void vec_stl (vector unsigned char, int, unsigned char *);
18936     void vec_stl (vector bool char, int, vector bool char *);
18937     void vec_stl (vector bool char, int, unsigned char *);
18938     void vec_stl (vector bool char, int, signed char *);
18939
18940     vector signed char vec_sub (vector bool char, vector signed char);
18941     vector signed char vec_sub (vector signed char, vector bool char);
18942     vector signed char vec_sub (vector signed char, vector signed char);
18943     vector unsigned char vec_sub (vector bool char, vector unsigned char);
18944     vector unsigned char vec_sub (vector unsigned char, vector bool char);
18945     vector unsigned char vec_sub (vector unsigned char,
18946                                   vector unsigned char);
18947     vector signed short vec_sub (vector bool short, vector signed short);
18948     vector signed short vec_sub (vector signed short, vector bool short);
18949     vector signed short vec_sub (vector signed short, vector signed short);
18950     vector unsigned short vec_sub (vector bool short,
18951                                    vector unsigned short);
18952     vector unsigned short vec_sub (vector unsigned short,
18953                                    vector bool short);
18954     vector unsigned short vec_sub (vector unsigned short,
18955                                    vector unsigned short);
18956     vector signed int vec_sub (vector bool int, vector signed int);
18957     vector signed int vec_sub (vector signed int, vector bool int);
18958     vector signed int vec_sub (vector signed int, vector signed int);
18959     vector unsigned int vec_sub (vector bool int, vector unsigned int);
18960     vector unsigned int vec_sub (vector unsigned int, vector bool int);
18961     vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
18962     vector float vec_sub (vector float, vector float);
18963
18964     vector float vec_vsubfp (vector float, vector float);
18965
18966     vector signed int vec_vsubuwm (vector bool int, vector signed int);
18967     vector signed int vec_vsubuwm (vector signed int, vector bool int);
18968     vector signed int vec_vsubuwm (vector signed int, vector signed int);
18969     vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
18970     vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
18971     vector unsigned int vec_vsubuwm (vector unsigned int,
18972                                      vector unsigned int);
18973
18974     vector signed short vec_vsubuhm (vector bool short,
18975                                      vector signed short);
18976     vector signed short vec_vsubuhm (vector signed short,
18977                                      vector bool short);
18978     vector signed short vec_vsubuhm (vector signed short,
18979                                      vector signed short);
18980     vector unsigned short vec_vsubuhm (vector bool short,
18981                                        vector unsigned short);
18982     vector unsigned short vec_vsubuhm (vector unsigned short,
18983                                        vector bool short);
18984     vector unsigned short vec_vsubuhm (vector unsigned short,
18985                                        vector unsigned short);
18986
18987     vector signed char vec_vsububm (vector bool char, vector signed char);
18988     vector signed char vec_vsububm (vector signed char, vector bool char);
18989     vector signed char vec_vsububm (vector signed char, vector signed char);
18990     vector unsigned char vec_vsububm (vector bool char,
18991                                       vector unsigned char);
18992     vector unsigned char vec_vsububm (vector unsigned char,
18993                                       vector bool char);
18994     vector unsigned char vec_vsububm (vector unsigned char,
18995                                       vector unsigned char);
18996
18997     vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
18998
18999     vector unsigned char vec_subs (vector bool char, vector unsigned char);
19000     vector unsigned char vec_subs (vector unsigned char, vector bool char);
19001     vector unsigned char vec_subs (vector unsigned char,
19002                                    vector unsigned char);
19003     vector signed char vec_subs (vector bool char, vector signed char);
19004     vector signed char vec_subs (vector signed char, vector bool char);
19005     vector signed char vec_subs (vector signed char, vector signed char);
19006     vector unsigned short vec_subs (vector bool short,
19007                                     vector unsigned short);
19008     vector unsigned short vec_subs (vector unsigned short,
19009                                     vector bool short);
19010     vector unsigned short vec_subs (vector unsigned short,
19011                                     vector unsigned short);
19012     vector signed short vec_subs (vector bool short, vector signed short);
19013     vector signed short vec_subs (vector signed short, vector bool short);
19014     vector signed short vec_subs (vector signed short, vector signed short);
19015     vector unsigned int vec_subs (vector bool int, vector unsigned int);
19016     vector unsigned int vec_subs (vector unsigned int, vector bool int);
19017     vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
19018     vector signed int vec_subs (vector bool int, vector signed int);
19019     vector signed int vec_subs (vector signed int, vector bool int);
19020     vector signed int vec_subs (vector signed int, vector signed int);
19021
19022     vector signed int vec_vsubsws (vector bool int, vector signed int);
19023     vector signed int vec_vsubsws (vector signed int, vector bool int);
19024     vector signed int vec_vsubsws (vector signed int, vector signed int);
19025
19026     vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
19027     vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
19028     vector unsigned int vec_vsubuws (vector unsigned int,
19029                                      vector unsigned int);
19030
19031     vector signed short vec_vsubshs (vector bool short,
19032                                      vector signed short);
19033     vector signed short vec_vsubshs (vector signed short,
19034                                      vector bool short);
19035     vector signed short vec_vsubshs (vector signed short,
19036                                      vector signed short);
19037
19038     vector unsigned short vec_vsubuhs (vector bool short,
19039                                        vector unsigned short);
19040     vector unsigned short vec_vsubuhs (vector unsigned short,
19041                                        vector bool short);
19042     vector unsigned short vec_vsubuhs (vector unsigned short,
19043                                        vector unsigned short);
19044
19045     vector signed char vec_vsubsbs (vector bool char, vector signed char);
19046     vector signed char vec_vsubsbs (vector signed char, vector bool char);
19047     vector signed char vec_vsubsbs (vector signed char, vector signed char);
19048
19049     vector unsigned char vec_vsububs (vector bool char,
19050                                       vector unsigned char);
19051     vector unsigned char vec_vsububs (vector unsigned char,
19052                                       vector bool char);
19053     vector unsigned char vec_vsububs (vector unsigned char,
19054                                       vector unsigned char);
19055
19056     vector unsigned int vec_sum4s (vector unsigned char,
19057                                    vector unsigned int);
19058     vector signed int vec_sum4s (vector signed char, vector signed int);
19059     vector signed int vec_sum4s (vector signed short, vector signed int);
19060
19061     vector signed int vec_vsum4shs (vector signed short, vector signed int);
19062
19063     vector signed int vec_vsum4sbs (vector signed char, vector signed int);
19064
19065     vector unsigned int vec_vsum4ubs (vector unsigned char,
19066                                       vector unsigned int);
19067
19068     vector signed int vec_sum2s (vector signed int, vector signed int);
19069
19070     vector signed int vec_sums (vector signed int, vector signed int);
19071
19072     vector float vec_trunc (vector float);
19073
19074     vector signed short vec_unpackh (vector signed char);
19075     vector bool short vec_unpackh (vector bool char);
19076     vector signed int vec_unpackh (vector signed short);
19077     vector bool int vec_unpackh (vector bool short);
19078     vector unsigned int vec_unpackh (vector pixel);
19079
19080     vector bool int vec_vupkhsh (vector bool short);
19081     vector signed int vec_vupkhsh (vector signed short);
19082
19083     vector unsigned int vec_vupkhpx (vector pixel);
19084
19085     vector bool short vec_vupkhsb (vector bool char);
19086     vector signed short vec_vupkhsb (vector signed char);
19087
19088     vector signed short vec_unpackl (vector signed char);
19089     vector bool short vec_unpackl (vector bool char);
19090     vector unsigned int vec_unpackl (vector pixel);
19091     vector signed int vec_unpackl (vector signed short);
19092     vector bool int vec_unpackl (vector bool short);
19093
19094     vector unsigned int vec_vupklpx (vector pixel);
19095
19096     vector bool int vec_vupklsh (vector bool short);
19097     vector signed int vec_vupklsh (vector signed short);
19098
19099     vector bool short vec_vupklsb (vector bool char);
19100     vector signed short vec_vupklsb (vector signed char);
19101
19102     vector float vec_xor (vector float, vector float);
19103     vector float vec_xor (vector float, vector bool int);
19104     vector float vec_xor (vector bool int, vector float);
19105     vector bool int vec_xor (vector bool int, vector bool int);
19106     vector signed int vec_xor (vector bool int, vector signed int);
19107     vector signed int vec_xor (vector signed int, vector bool int);
19108     vector signed int vec_xor (vector signed int, vector signed int);
19109     vector unsigned int vec_xor (vector bool int, vector unsigned int);
19110     vector unsigned int vec_xor (vector unsigned int, vector bool int);
19111     vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
19112     vector bool short vec_xor (vector bool short, vector bool short);
19113     vector signed short vec_xor (vector bool short, vector signed short);
19114     vector signed short vec_xor (vector signed short, vector bool short);
19115     vector signed short vec_xor (vector signed short, vector signed short);
19116     vector unsigned short vec_xor (vector bool short,
19117                                    vector unsigned short);
19118     vector unsigned short vec_xor (vector unsigned short,
19119                                    vector bool short);
19120     vector unsigned short vec_xor (vector unsigned short,
19121                                    vector unsigned short);
19122     vector signed char vec_xor (vector bool char, vector signed char);
19123     vector bool char vec_xor (vector bool char, vector bool char);
19124     vector signed char vec_xor (vector signed char, vector bool char);
19125     vector signed char vec_xor (vector signed char, vector signed char);
19126     vector unsigned char vec_xor (vector bool char, vector unsigned char);
19127     vector unsigned char vec_xor (vector unsigned char, vector bool char);
19128     vector unsigned char vec_xor (vector unsigned char,
19129                                   vector unsigned char);
19130
19131     int vec_all_eq (vector signed char, vector bool char);
19132     int vec_all_eq (vector signed char, vector signed char);
19133     int vec_all_eq (vector unsigned char, vector bool char);
19134     int vec_all_eq (vector unsigned char, vector unsigned char);
19135     int vec_all_eq (vector bool char, vector bool char);
19136     int vec_all_eq (vector bool char, vector unsigned char);
19137     int vec_all_eq (vector bool char, vector signed char);
19138     int vec_all_eq (vector signed short, vector bool short);
19139     int vec_all_eq (vector signed short, vector signed short);
19140     int vec_all_eq (vector unsigned short, vector bool short);
19141     int vec_all_eq (vector unsigned short, vector unsigned short);
19142     int vec_all_eq (vector bool short, vector bool short);
19143     int vec_all_eq (vector bool short, vector unsigned short);
19144     int vec_all_eq (vector bool short, vector signed short);
19145     int vec_all_eq (vector pixel, vector pixel);
19146     int vec_all_eq (vector signed int, vector bool int);
19147     int vec_all_eq (vector signed int, vector signed int);
19148     int vec_all_eq (vector unsigned int, vector bool int);
19149     int vec_all_eq (vector unsigned int, vector unsigned int);
19150     int vec_all_eq (vector bool int, vector bool int);
19151     int vec_all_eq (vector bool int, vector unsigned int);
19152     int vec_all_eq (vector bool int, vector signed int);
19153     int vec_all_eq (vector float, vector float);
19154
19155     int vec_all_ge (vector bool char, vector unsigned char);
19156     int vec_all_ge (vector unsigned char, vector bool char);
19157     int vec_all_ge (vector unsigned char, vector unsigned char);
19158     int vec_all_ge (vector bool char, vector signed char);
19159     int vec_all_ge (vector signed char, vector bool char);
19160     int vec_all_ge (vector signed char, vector signed char);
19161     int vec_all_ge (vector bool short, vector unsigned short);
19162     int vec_all_ge (vector unsigned short, vector bool short);
19163     int vec_all_ge (vector unsigned short, vector unsigned short);
19164     int vec_all_ge (vector signed short, vector signed short);
19165     int vec_all_ge (vector bool short, vector signed short);
19166     int vec_all_ge (vector signed short, vector bool short);
19167     int vec_all_ge (vector bool int, vector unsigned int);
19168     int vec_all_ge (vector unsigned int, vector bool int);
19169     int vec_all_ge (vector unsigned int, vector unsigned int);
19170     int vec_all_ge (vector bool int, vector signed int);
19171     int vec_all_ge (vector signed int, vector bool int);
19172     int vec_all_ge (vector signed int, vector signed int);
19173     int vec_all_ge (vector float, vector float);
19174
19175     int vec_all_gt (vector bool char, vector unsigned char);
19176     int vec_all_gt (vector unsigned char, vector bool char);
19177     int vec_all_gt (vector unsigned char, vector unsigned char);
19178     int vec_all_gt (vector bool char, vector signed char);
19179     int vec_all_gt (vector signed char, vector bool char);
19180     int vec_all_gt (vector signed char, vector signed char);
19181     int vec_all_gt (vector bool short, vector unsigned short);
19182     int vec_all_gt (vector unsigned short, vector bool short);
19183     int vec_all_gt (vector unsigned short, vector unsigned short);
19184     int vec_all_gt (vector bool short, vector signed short);
19185     int vec_all_gt (vector signed short, vector bool short);
19186     int vec_all_gt (vector signed short, vector signed short);
19187     int vec_all_gt (vector bool int, vector unsigned int);
19188     int vec_all_gt (vector unsigned int, vector bool int);
19189     int vec_all_gt (vector unsigned int, vector unsigned int);
19190     int vec_all_gt (vector bool int, vector signed int);
19191     int vec_all_gt (vector signed int, vector bool int);
19192     int vec_all_gt (vector signed int, vector signed int);
19193     int vec_all_gt (vector float, vector float);
19194
19195     int vec_all_in (vector float, vector float);
19196
19197     int vec_all_le (vector bool char, vector unsigned char);
19198     int vec_all_le (vector unsigned char, vector bool char);
19199     int vec_all_le (vector unsigned char, vector unsigned char);
19200     int vec_all_le (vector bool char, vector signed char);
19201     int vec_all_le (vector signed char, vector bool char);
19202     int vec_all_le (vector signed char, vector signed char);
19203     int vec_all_le (vector bool short, vector unsigned short);
19204     int vec_all_le (vector unsigned short, vector bool short);
19205     int vec_all_le (vector unsigned short, vector unsigned short);
19206     int vec_all_le (vector bool short, vector signed short);
19207     int vec_all_le (vector signed short, vector bool short);
19208     int vec_all_le (vector signed short, vector signed short);
19209     int vec_all_le (vector bool int, vector unsigned int);
19210     int vec_all_le (vector unsigned int, vector bool int);
19211     int vec_all_le (vector unsigned int, vector unsigned int);
19212     int vec_all_le (vector bool int, vector signed int);
19213     int vec_all_le (vector signed int, vector bool int);
19214     int vec_all_le (vector signed int, vector signed int);
19215     int vec_all_le (vector float, vector float);
19216
19217     int vec_all_lt (vector bool char, vector unsigned char);
19218     int vec_all_lt (vector unsigned char, vector bool char);
19219     int vec_all_lt (vector unsigned char, vector unsigned char);
19220     int vec_all_lt (vector bool char, vector signed char);
19221     int vec_all_lt (vector signed char, vector bool char);
19222     int vec_all_lt (vector signed char, vector signed char);
19223     int vec_all_lt (vector bool short, vector unsigned short);
19224     int vec_all_lt (vector unsigned short, vector bool short);
19225     int vec_all_lt (vector unsigned short, vector unsigned short);
19226     int vec_all_lt (vector bool short, vector signed short);
19227     int vec_all_lt (vector signed short, vector bool short);
19228     int vec_all_lt (vector signed short, vector signed short);
19229     int vec_all_lt (vector bool int, vector unsigned int);
19230     int vec_all_lt (vector unsigned int, vector bool int);
19231     int vec_all_lt (vector unsigned int, vector unsigned int);
19232     int vec_all_lt (vector bool int, vector signed int);
19233     int vec_all_lt (vector signed int, vector bool int);
19234     int vec_all_lt (vector signed int, vector signed int);
19235     int vec_all_lt (vector float, vector float);
19236
19237     int vec_all_nan (vector float);
19238
19239     int vec_all_ne (vector signed char, vector bool char);
19240     int vec_all_ne (vector signed char, vector signed char);
19241     int vec_all_ne (vector unsigned char, vector bool char);
19242     int vec_all_ne (vector unsigned char, vector unsigned char);
19243     int vec_all_ne (vector bool char, vector bool char);
19244     int vec_all_ne (vector bool char, vector unsigned char);
19245     int vec_all_ne (vector bool char, vector signed char);
19246     int vec_all_ne (vector signed short, vector bool short);
19247     int vec_all_ne (vector signed short, vector signed short);
19248     int vec_all_ne (vector unsigned short, vector bool short);
19249     int vec_all_ne (vector unsigned short, vector unsigned short);
19250     int vec_all_ne (vector bool short, vector bool short);
19251     int vec_all_ne (vector bool short, vector unsigned short);
19252     int vec_all_ne (vector bool short, vector signed short);
19253     int vec_all_ne (vector pixel, vector pixel);
19254     int vec_all_ne (vector signed int, vector bool int);
19255     int vec_all_ne (vector signed int, vector signed int);
19256     int vec_all_ne (vector unsigned int, vector bool int);
19257     int vec_all_ne (vector unsigned int, vector unsigned int);
19258     int vec_all_ne (vector bool int, vector bool int);
19259     int vec_all_ne (vector bool int, vector unsigned int);
19260     int vec_all_ne (vector bool int, vector signed int);
19261     int vec_all_ne (vector float, vector float);
19262
19263     int vec_all_nge (vector float, vector float);
19264
19265     int vec_all_ngt (vector float, vector float);
19266
19267     int vec_all_nle (vector float, vector float);
19268
19269     int vec_all_nlt (vector float, vector float);
19270
19271     int vec_all_numeric (vector float);
19272
19273     int vec_any_eq (vector signed char, vector bool char);
19274     int vec_any_eq (vector signed char, vector signed char);
19275     int vec_any_eq (vector unsigned char, vector bool char);
19276     int vec_any_eq (vector unsigned char, vector unsigned char);
19277     int vec_any_eq (vector bool char, vector bool char);
19278     int vec_any_eq (vector bool char, vector unsigned char);
19279     int vec_any_eq (vector bool char, vector signed char);
19280     int vec_any_eq (vector signed short, vector bool short);
19281     int vec_any_eq (vector signed short, vector signed short);
19282     int vec_any_eq (vector unsigned short, vector bool short);
19283     int vec_any_eq (vector unsigned short, vector unsigned short);
19284     int vec_any_eq (vector bool short, vector bool short);
19285     int vec_any_eq (vector bool short, vector unsigned short);
19286     int vec_any_eq (vector bool short, vector signed short);
19287     int vec_any_eq (vector pixel, vector pixel);
19288     int vec_any_eq (vector signed int, vector bool int);
19289     int vec_any_eq (vector signed int, vector signed int);
19290     int vec_any_eq (vector unsigned int, vector bool int);
19291     int vec_any_eq (vector unsigned int, vector unsigned int);
19292     int vec_any_eq (vector bool int, vector bool int);
19293     int vec_any_eq (vector bool int, vector unsigned int);
19294     int vec_any_eq (vector bool int, vector signed int);
19295     int vec_any_eq (vector float, vector float);
19296
19297     int vec_any_ge (vector signed char, vector bool char);
19298     int vec_any_ge (vector unsigned char, vector bool char);
19299     int vec_any_ge (vector unsigned char, vector unsigned char);
19300     int vec_any_ge (vector signed char, vector signed char);
19301     int vec_any_ge (vector bool char, vector unsigned char);
19302     int vec_any_ge (vector bool char, vector signed char);
19303     int vec_any_ge (vector unsigned short, vector bool short);
19304     int vec_any_ge (vector unsigned short, vector unsigned short);
19305     int vec_any_ge (vector signed short, vector signed short);
19306     int vec_any_ge (vector signed short, vector bool short);
19307     int vec_any_ge (vector bool short, vector unsigned short);
19308     int vec_any_ge (vector bool short, vector signed short);
19309     int vec_any_ge (vector signed int, vector bool int);
19310     int vec_any_ge (vector unsigned int, vector bool int);
19311     int vec_any_ge (vector unsigned int, vector unsigned int);
19312     int vec_any_ge (vector signed int, vector signed int);
19313     int vec_any_ge (vector bool int, vector unsigned int);
19314     int vec_any_ge (vector bool int, vector signed int);
19315     int vec_any_ge (vector float, vector float);
19316
19317     int vec_any_gt (vector bool char, vector unsigned char);
19318     int vec_any_gt (vector unsigned char, vector bool char);
19319     int vec_any_gt (vector unsigned char, vector unsigned char);
19320     int vec_any_gt (vector bool char, vector signed char);
19321     int vec_any_gt (vector signed char, vector bool char);
19322     int vec_any_gt (vector signed char, vector signed char);
19323     int vec_any_gt (vector bool short, vector unsigned short);
19324     int vec_any_gt (vector unsigned short, vector bool short);
19325     int vec_any_gt (vector unsigned short, vector unsigned short);
19326     int vec_any_gt (vector bool short, vector signed short);
19327     int vec_any_gt (vector signed short, vector bool short);
19328     int vec_any_gt (vector signed short, vector signed short);
19329     int vec_any_gt (vector bool int, vector unsigned int);
19330     int vec_any_gt (vector unsigned int, vector bool int);
19331     int vec_any_gt (vector unsigned int, vector unsigned int);
19332     int vec_any_gt (vector bool int, vector signed int);
19333     int vec_any_gt (vector signed int, vector bool int);
19334     int vec_any_gt (vector signed int, vector signed int);
19335     int vec_any_gt (vector float, vector float);
19336
19337     int vec_any_le (vector bool char, vector unsigned char);
19338     int vec_any_le (vector unsigned char, vector bool char);
19339     int vec_any_le (vector unsigned char, vector unsigned char);
19340     int vec_any_le (vector bool char, vector signed char);
19341     int vec_any_le (vector signed char, vector bool char);
19342     int vec_any_le (vector signed char, vector signed char);
19343     int vec_any_le (vector bool short, vector unsigned short);
19344     int vec_any_le (vector unsigned short, vector bool short);
19345     int vec_any_le (vector unsigned short, vector unsigned short);
19346     int vec_any_le (vector bool short, vector signed short);
19347     int vec_any_le (vector signed short, vector bool short);
19348     int vec_any_le (vector signed short, vector signed short);
19349     int vec_any_le (vector bool int, vector unsigned int);
19350     int vec_any_le (vector unsigned int, vector bool int);
19351     int vec_any_le (vector unsigned int, vector unsigned int);
19352     int vec_any_le (vector bool int, vector signed int);
19353     int vec_any_le (vector signed int, vector bool int);
19354     int vec_any_le (vector signed int, vector signed int);
19355     int vec_any_le (vector float, vector float);
19356
19357     int vec_any_lt (vector bool char, vector unsigned char);
19358     int vec_any_lt (vector unsigned char, vector bool char);
19359     int vec_any_lt (vector unsigned char, vector unsigned char);
19360     int vec_any_lt (vector bool char, vector signed char);
19361     int vec_any_lt (vector signed char, vector bool char);
19362     int vec_any_lt (vector signed char, vector signed char);
19363     int vec_any_lt (vector bool short, vector unsigned short);
19364     int vec_any_lt (vector unsigned short, vector bool short);
19365     int vec_any_lt (vector unsigned short, vector unsigned short);
19366     int vec_any_lt (vector bool short, vector signed short);
19367     int vec_any_lt (vector signed short, vector bool short);
19368     int vec_any_lt (vector signed short, vector signed short);
19369     int vec_any_lt (vector bool int, vector unsigned int);
19370     int vec_any_lt (vector unsigned int, vector bool int);
19371     int vec_any_lt (vector unsigned int, vector unsigned int);
19372     int vec_any_lt (vector bool int, vector signed int);
19373     int vec_any_lt (vector signed int, vector bool int);
19374     int vec_any_lt (vector signed int, vector signed int);
19375     int vec_any_lt (vector float, vector float);
19376
19377     int vec_any_nan (vector float);
19378
19379     int vec_any_ne (vector signed char, vector bool char);
19380     int vec_any_ne (vector signed char, vector signed char);
19381     int vec_any_ne (vector unsigned char, vector bool char);
19382     int vec_any_ne (vector unsigned char, vector unsigned char);
19383     int vec_any_ne (vector bool char, vector bool char);
19384     int vec_any_ne (vector bool char, vector unsigned char);
19385     int vec_any_ne (vector bool char, vector signed char);
19386     int vec_any_ne (vector signed short, vector bool short);
19387     int vec_any_ne (vector signed short, vector signed short);
19388     int vec_any_ne (vector unsigned short, vector bool short);
19389     int vec_any_ne (vector unsigned short, vector unsigned short);
19390     int vec_any_ne (vector bool short, vector bool short);
19391     int vec_any_ne (vector bool short, vector unsigned short);
19392     int vec_any_ne (vector bool short, vector signed short);
19393     int vec_any_ne (vector pixel, vector pixel);
19394     int vec_any_ne (vector signed int, vector bool int);
19395     int vec_any_ne (vector signed int, vector signed int);
19396     int vec_any_ne (vector unsigned int, vector bool int);
19397     int vec_any_ne (vector unsigned int, vector unsigned int);
19398     int vec_any_ne (vector bool int, vector bool int);
19399     int vec_any_ne (vector bool int, vector unsigned int);
19400     int vec_any_ne (vector bool int, vector signed int);
19401     int vec_any_ne (vector float, vector float);
19402
19403     int vec_any_nge (vector float, vector float);
19404
19405     int vec_any_ngt (vector float, vector float);
19406
19407     int vec_any_nle (vector float, vector float);
19408
19409     int vec_any_nlt (vector float, vector float);
19410
19411     int vec_any_numeric (vector float);
19412
19413     int vec_any_out (vector float, vector float);
19414
19415
19416File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Builtins,  Up: C Extensions
19417
194185.46 Pragmas Accepted by GCC
19419============================
19420
19421GCC supports several types of pragmas, primarily in order to compile
19422code originally written for other compilers.  Note that in general we
19423do not recommend the use of pragmas; *Note Function Attributes::, for
19424further explanation.
19425
19426* Menu:
19427
19428* ARM Pragmas::
19429* RS/6000 and PowerPC Pragmas::
19430* Darwin Pragmas::
19431* Solaris Pragmas::
19432* Tru64 Pragmas::
19433
19434
19435File: gcc.info,  Node: ARM Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Up: Pragmas
19436
194375.46.1 ARM Pragmas
19438------------------
19439
19440The ARM target defines pragmas for controlling the default addition of
19441`long_call' and `short_call' attributes to functions.  *Note Function
19442Attributes::, for information about the effects of these attributes.
19443
19444`long_calls'
19445     Set all subsequent functions to have the `long_call' attribute.
19446
19447`no_long_calls'
19448     Set all subsequent functions to have the `short_call' attribute.
19449
19450`long_calls_off'
19451     Do not affect the `long_call' or `short_call' attributes of
19452     subsequent functions.
19453
19454
19455File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
19456
194575.46.2 RS/6000 and PowerPC Pragmas
19458----------------------------------
19459
19460The RS/6000 and PowerPC targets define one pragma for controlling
19461whether or not the `longcall' attribute is added to function
19462declarations by default.  This pragma overrides the `-mlongcall'
19463option, but not the `longcall' and `shortcall' attributes.  *Note
19464RS/6000 and PowerPC Options::, for more information about when long
19465calls are and are not necessary.
19466
19467`longcall (1)'
19468     Apply the `longcall' attribute to all subsequent function
19469     declarations.
19470
19471`longcall (0)'
19472     Do not apply the `longcall' attribute to subsequent function
19473     declarations.
19474
19475
19476File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
19477
194785.46.3 Darwin Pragmas
19479---------------------
19480
19481The following pragmas are available for all architectures running the
19482Darwin operating system.  These are useful for compatibility with other
19483Mac OS compilers.
19484
19485`mark TOKENS...'
19486     This pragma is accepted, but has no effect.
19487
19488`options align=ALIGNMENT'
19489     This pragma sets the alignment of fields in structures.  The
19490     values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
19491     `power', to emulate PowerPC alignment.  Uses of this pragma nest
19492     properly; to restore the previous setting, use `reset' for the
19493     ALIGNMENT.
19494
19495`segment TOKENS...'
19496     This pragma is accepted, but has no effect.
19497
19498`unused (VAR [, VAR]...)'
19499     This pragma declares variables to be possibly unused.  GCC will not
19500     produce warnings for the listed variables.  The effect is similar
19501     to that of the `unused' attribute, except that this pragma may
19502     appear anywhere within the variables' scopes.
19503
19504
19505File: gcc.info,  Node: Solaris Pragmas,  Next: Tru64 Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
19506
195075.46.4 Solaris Pragmas
19508----------------------
19509
19510For compatibility with the SunPRO compiler, the following pragma is
19511supported.
19512
19513`redefine_extname OLDNAME NEWNAME'
19514     This pragma gives the C function OLDNAME the assembler label
19515     NEWNAME.  The pragma must appear before the function declaration.
19516     This pragma is equivalent to the asm labels extension (*note Asm
19517     Labels::).  The preprocessor defines `__PRAGMA_REDEFINE_EXTNAME'
19518     if the pragma is available.
19519
19520
19521File: gcc.info,  Node: Tru64 Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
19522
195235.46.5 Tru64 Pragmas
19524--------------------
19525
19526For compatibility with the Compaq C compiler, the following pragma is
19527supported.
19528
19529`extern_prefix STRING'
19530     This pragma renames all subsequent function and variable
19531     declarations such that STRING is prepended to the name.  This
19532     effect may be terminated by using another `extern_prefix' pragma
19533     with the empty string.
19534
19535     This pragma is similar in intent to to the asm labels extension
19536     (*note Asm Labels::) in that the system programmer wants to change
19537     the assembly-level ABI without changing the source-level API.  The
19538     preprocessor defines `__PRAGMA_EXTERN_PREFIX' if the pragma is
19539     available.
19540
19541
19542File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
19543
195445.47 Unnamed struct/union fields within structs/unions.
19545=======================================================
19546
19547For compatibility with other compilers, GCC allows you to define a
19548structure or union that contains, as fields, structures and unions
19549without names.  For example:
19550
19551     struct {
19552       int a;
19553       union {
19554         int b;
19555         float c;
19556       };
19557       int d;
19558     } foo;
19559
19560 In this example, the user would be able to access members of the
19561unnamed union with code like `foo.b'.  Note that only unnamed structs
19562and unions are allowed, you may not have, for example, an unnamed `int'.
19563
19564 You must never create such structures that cause ambiguous field
19565definitions.  For example, this structure:
19566
19567     struct {
19568       int a;
19569       struct {
19570         int a;
19571       };
19572     } foo;
19573
19574 It is ambiguous which `a' is being referred to with `foo.a'.  Such
19575constructs are not supported and must be avoided.  In the future, such
19576constructs may be detected and treated as compilation errors.
19577
19578
19579File: gcc.info,  Node: Thread-Local,  Prev: Unnamed Fields,  Up: C Extensions
19580
195815.48 Thread-Local Storage
19582=========================
19583
19584Thread-local storage (TLS) is a mechanism by which variables are
19585allocated such that there is one instance of the variable per extant
19586thread.  The run-time model GCC uses to implement this originates in
19587the IA-64 processor-specific ABI, but has since been migrated to other
19588processors as well.  It requires significant support from the linker
19589(`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
19590`libpthread.so'), so it is not available everywhere.
19591
19592 At the user level, the extension is visible with a new storage class
19593keyword: `__thread'.  For example:
19594
19595     __thread int i;
19596     extern __thread struct state s;
19597     static __thread char *p;
19598
19599 The `__thread' specifier may be used alone, with the `extern' or
19600`static' specifiers, but with no other storage class specifier.  When
19601used with `extern' or `static', `__thread' must appear immediately
19602after the other storage class specifier.
19603
19604 The `__thread' specifier may be applied to any global, file-scoped
19605static, function-scoped static, or static data member of a class.  It
19606may not be applied to block-scoped automatic or non-static data member.
19607
19608 When the address-of operator is applied to a thread-local variable, it
19609is evaluated at run-time and returns the address of the current thread's
19610instance of that variable.  An address so obtained may be used by any
19611thread.  When a thread terminates, any pointers to thread-local
19612variables in that thread become invalid.
19613
19614 No static initialization may refer to the address of a thread-local
19615variable.
19616
19617 In C++, if an initializer is present for a thread-local variable, it
19618must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
19619standard.
19620
19621 See ELF Handling For Thread-Local Storage
19622(http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
19623the four thread-local storage addressing models, and how the run-time
19624is expected to function.
19625
19626* Menu:
19627
19628* C99 Thread-Local Edits::
19629* C++98 Thread-Local Edits::
19630
19631
19632File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
19633
196345.48.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
19635-------------------------------------------------------
19636
19637The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
19638document the exact semantics of the language extension.
19639
19640   * `5.1.2  Execution environments'
19641
19642     Add new text after paragraph 1
19643
19644          Within either execution environment, a "thread" is a flow of
19645          control within a program.  It is implementation defined
19646          whether or not there may be more than one thread associated
19647          with a program.  It is implementation defined how threads
19648          beyond the first are created, the name and type of the
19649          function called at thread startup, and how threads may be
19650          terminated.  However, objects with thread storage duration
19651          shall be initialized before thread startup.
19652
19653   * `6.2.4  Storage durations of objects'
19654
19655     Add new text before paragraph 3
19656
19657          An object whose identifier is declared with the storage-class
19658          specifier `__thread' has "thread storage duration".  Its
19659          lifetime is the entire execution of the thread, and its
19660          stored value is initialized only once, prior to thread
19661          startup.
19662
19663   * `6.4.1  Keywords'
19664
19665     Add `__thread'.
19666
19667   * `6.7.1  Storage-class specifiers'
19668
19669     Add `__thread' to the list of storage class specifiers in
19670     paragraph 1.
19671
19672     Change paragraph 2 to
19673
19674          With the exception of `__thread', at most one storage-class
19675          specifier may be given [...].  The `__thread' specifier may
19676          be used alone, or immediately following `extern' or `static'.
19677
19678     Add new text after paragraph 6
19679
19680          The declaration of an identifier for a variable that has
19681          block scope that specifies `__thread' shall also specify
19682          either `extern' or `static'.
19683
19684          The `__thread' specifier shall be used only with variables.
19685
19686
19687File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
19688
196895.48.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
19690--------------------------------------------------------
19691
19692The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
19693that document the exact semantics of the language extension.
19694
19695   * [intro.execution]
19696
19697     New text after paragraph 4
19698
19699          A "thread" is a flow of control within the abstract machine.
19700          It is implementation defined whether or not there may be more
19701          than one thread.
19702
19703     New text after paragraph 7
19704
19705          It is unspecified whether additional action must be taken to
19706          ensure when and whether side effects are visible to other
19707          threads.
19708
19709   * [lex.key]
19710
19711     Add `__thread'.
19712
19713   * [basic.start.main]
19714
19715     Add after paragraph 5
19716
19717          The thread that begins execution at the `main' function is
19718          called the "main thread".  It is implementation defined how
19719          functions beginning threads other than the main thread are
19720          designated or typed.  A function so designated, as well as
19721          the `main' function, is called a "thread startup function".
19722          It is implementation defined what happens if a thread startup
19723          function returns.  It is implementation defined what happens
19724          to other threads when any thread calls `exit'.
19725
19726   * [basic.start.init]
19727
19728     Add after paragraph 4
19729
19730          The storage for an object of thread storage duration shall be
19731          statically initialized before the first statement of the
19732          thread startup function.  An object of thread storage
19733          duration shall not require dynamic initialization.
19734
19735   * [basic.start.term]
19736
19737     Add after paragraph 3
19738
19739          The type of an object with thread storage duration shall not
19740          have a non-trivial destructor, nor shall it be an array type
19741          whose elements (directly or indirectly) have non-trivial
19742          destructors.
19743
19744   * [basic.stc]
19745
19746     Add "thread storage duration" to the list in paragraph 1.
19747
19748     Change paragraph 2
19749
19750          Thread, static, and automatic storage durations are
19751          associated with objects introduced by declarations [...].
19752
19753     Add `__thread' to the list of specifiers in paragraph 3.
19754
19755   * [basic.stc.thread]
19756
19757     New section before [basic.stc.static]
19758
19759          The keyword `__thread' applied to a non-local object gives the
19760          object thread storage duration.
19761
19762          A local variable or class data member declared both `static'
19763          and `__thread' gives the variable or member thread storage
19764          duration.
19765
19766   * [basic.stc.static]
19767
19768     Change paragraph 1
19769
19770          All objects which have neither thread storage duration,
19771          dynamic storage duration nor are local [...].
19772
19773   * [dcl.stc]
19774
19775     Add `__thread' to the list in paragraph 1.
19776
19777     Change paragraph 1
19778
19779          With the exception of `__thread', at most one
19780          STORAGE-CLASS-SPECIFIER shall appear in a given
19781          DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
19782          alone, or immediately following the `extern' or `static'
19783          specifiers.  [...]
19784
19785     Add after paragraph 5
19786
19787          The `__thread' specifier can be applied only to the names of
19788          objects and to anonymous unions.
19789
19790   * [class.mem]
19791
19792     Add after paragraph 6
19793
19794          Non-`static' members shall not be `__thread'.
19795
19796
19797File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
19798
197996 Extensions to the C++ Language
19800********************************
19801
19802The GNU compiler provides these extensions to the C++ language (and you
19803can also use most of the C language extensions in your C++ programs).
19804If you want to write code that checks whether these features are
19805available, you can test for the GNU compiler the same way as for C
19806programs: check for a predefined macro `__GNUC__'.  You can also use
19807`__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
19808(cpp)Common Predefined Macros.).
19809
19810* Menu:
19811
19812* Min and Max::		C++ Minimum and maximum operators.
19813* Volatiles::		What constitutes an access to a volatile object.
19814* Restricted Pointers:: C99 restricted pointers and references.
19815* Vague Linkage::       Where G++ puts inlines, vtables and such.
19816* C++ Interface::       You can use a single C++ header file for both
19817                        declarations and definitions.
19818* Template Instantiation:: Methods for ensuring that exactly one copy of
19819                        each needed template instantiation is emitted.
19820* Bound member functions:: You can extract a function pointer to the
19821                        method denoted by a `->*' or `.*' expression.
19822* C++ Attributes::      Variable, function, and type attributes for C++ only.
19823* Strong Using::      Strong using-directives for namespace composition.
19824* Offsetof::            Special syntax for implementing `offsetof'.
19825* Java Exceptions::     Tweaking exception handling to work with Java.
19826* Deprecated Features:: Things will disappear from g++.
19827* Backwards Compatibility:: Compatibilities with earlier definitions of C++.
19828
19829
19830File: gcc.info,  Node: Min and Max,  Next: Volatiles,  Up: C++ Extensions
19831
198326.1 Minimum and Maximum Operators in C++
19833========================================
19834
19835It is very convenient to have operators which return the "minimum" or
19836the "maximum" of two arguments.  In GNU C++ (but not in GNU C),
19837
19838`A <? B'
19839     is the "minimum", returning the smaller of the numeric values A
19840     and B;
19841
19842`A >? B'
19843     is the "maximum", returning the larger of the numeric values A and
19844     B.
19845
19846 These operations are not primitive in ordinary C++, since you can use
19847a macro to return the minimum of two things in C++, as in the following
19848example.
19849
19850     #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
19851
19852You might then use `int min = MIN (i, j);' to set MIN to the minimum
19853value of variables I and J.
19854
19855 However, side effects in `X' or `Y' may cause unintended behavior.
19856For example, `MIN (i++, j++)' will fail, incrementing the smaller
19857counter twice.  The GNU C `typeof' extension allows you to write safe
19858macros that avoid this kind of problem (*note Typeof::).  However,
19859writing `MIN' and `MAX' as macros also forces you to use function-call
19860notation for a fundamental arithmetic operation.  Using GNU C++
19861extensions, you can write `int min = i <? j;' instead.
19862
19863 Since `<?' and `>?' are built into the compiler, they properly handle
19864expressions with side-effects;  `int min = i++ <? j++;' works correctly.
19865
19866
19867File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Prev: Min and Max,  Up: C++ Extensions
19868
198696.2 When is a Volatile Object Accessed?
19870=======================================
19871
19872Both the C and C++ standard have the concept of volatile objects.  These
19873are normally accessed by pointers and used for accessing hardware.  The
19874standards encourage compilers to refrain from optimizations concerning
19875accesses to volatile objects that it might perform on non-volatile
19876objects.  The C standard leaves it implementation defined as to what
19877constitutes a volatile access.  The C++ standard omits to specify this,
19878except to say that C++ should behave in a similar manner to C with
19879respect to volatiles, where possible.  The minimum either standard
19880specifies is that at a sequence point all previous accesses to volatile
19881objects have stabilized and no subsequent accesses have occurred.  Thus
19882an implementation is free to reorder and combine volatile accesses
19883which occur between sequence points, but cannot do so for accesses
19884across a sequence point.  The use of volatiles does not allow you to
19885violate the restriction on updating objects multiple times within a
19886sequence point.
19887
19888 In most expressions, it is intuitively obvious what is a read and what
19889is a write.  For instance
19890
19891     volatile int *dst = SOMEVALUE;
19892     volatile int *src = SOMEOTHERVALUE;
19893     *dst = *src;
19894
19895will cause a read of the volatile object pointed to by SRC and stores
19896the value into the volatile object pointed to by DST.  There is no
19897guarantee that these reads and writes are atomic, especially for objects
19898larger than `int'.
19899
19900 Less obvious expressions are where something which looks like an access
19901is used in a void context.  An example would be,
19902
19903     volatile int *src = SOMEVALUE;
19904     *src;
19905
19906 With C, such expressions are rvalues, and as rvalues cause a read of
19907the object, GCC interprets this as a read of the volatile being pointed
19908to.  The C++ standard specifies that such expressions do not undergo
19909lvalue to rvalue conversion, and that the type of the dereferenced
19910object may be incomplete.  The C++ standard does not specify explicitly
19911that it is this lvalue to rvalue conversion which is responsible for
19912causing an access.  However, there is reason to believe that it is,
19913because otherwise certain simple expressions become undefined.  However,
19914because it would surprise most programmers, G++ treats dereferencing a
19915pointer to volatile object of complete type in a void context as a read
19916of the object.  When the object has incomplete type, G++ issues a
19917warning.
19918
19919     struct S;
19920     struct T {int m;};
19921     volatile S *ptr1 = SOMEVALUE;
19922     volatile T *ptr2 = SOMEVALUE;
19923     *ptr1;
19924     *ptr2;
19925
19926 In this example, a warning is issued for `*ptr1', and `*ptr2' causes a
19927read of the object pointed to.  If you wish to force an error on the
19928first case, you must force a conversion to rvalue with, for instance a
19929static cast, `static_cast<S>(*ptr1)'.
19930
19931 When using a reference to volatile, G++ does not treat equivalent
19932expressions as accesses to volatiles, but instead issues a warning that
19933no volatile is accessed.  The rationale for this is that otherwise it
19934becomes difficult to determine where volatile access occur, and not
19935possible to ignore the return value from functions returning volatile
19936references.  Again, if you wish to force a read, cast the reference to
19937an rvalue.
19938
19939
19940File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
19941
199426.3 Restricting Pointer Aliasing
19943================================
19944
19945As with the C front end, G++ understands the C99 feature of restricted
19946pointers, specified with the `__restrict__', or `__restrict' type
19947qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
19948language flag, `restrict' is not a keyword in C++.
19949
19950 In addition to allowing restricted pointers, you can specify restricted
19951references, which indicate that the reference is not aliased in the
19952local context.
19953
19954     void fn (int *__restrict__ rptr, int &__restrict__ rref)
19955     {
19956       /* ... */
19957     }
19958
19959In the body of `fn', RPTR points to an unaliased integer and RREF
19960refers to a (different) unaliased integer.
19961
19962 You may also specify whether a member function's THIS pointer is
19963unaliased by using `__restrict__' as a member function qualifier.
19964
19965     void T::fn () __restrict__
19966     {
19967       /* ... */
19968     }
19969
19970Within the body of `T::fn', THIS will have the effective definition `T
19971*__restrict__ const this'.  Notice that the interpretation of a
19972`__restrict__' member function qualifier is different to that of
19973`const' or `volatile' qualifier, in that it is applied to the pointer
19974rather than the object.  This is consistent with other compilers which
19975implement restricted pointers.
19976
19977 As with all outermost parameter qualifiers, `__restrict__' is ignored
19978in function definition matching.  This means you only need to specify
19979`__restrict__' in a function definition, rather than in a function
19980prototype as well.
19981
19982
19983File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
19984
199856.4 Vague Linkage
19986=================
19987
19988There are several constructs in C++ which require space in the object
19989file but are not clearly tied to a single translation unit.  We say that
19990these constructs have "vague linkage".  Typically such constructs are
19991emitted wherever they are needed, though sometimes we can be more
19992clever.
19993
19994Inline Functions
19995     Inline functions are typically defined in a header file which can
19996     be included in many different compilations.  Hopefully they can
19997     usually be inlined, but sometimes an out-of-line copy is
19998     necessary, if the address of the function is taken or if inlining
19999     fails.  In general, we emit an out-of-line copy in all translation
20000     units where one is needed.  As an exception, we only emit inline
20001     virtual functions with the vtable, since it will always require a
20002     copy.
20003
20004     Local static variables and string constants used in an inline
20005     function are also considered to have vague linkage, since they
20006     must be shared between all inlined and out-of-line instances of
20007     the function.
20008
20009VTables
20010     C++ virtual functions are implemented in most compilers using a
20011     lookup table, known as a vtable.  The vtable contains pointers to
20012     the virtual functions provided by a class, and each object of the
20013     class contains a pointer to its vtable (or vtables, in some
20014     multiple-inheritance situations).  If the class declares any
20015     non-inline, non-pure virtual functions, the first one is chosen as
20016     the "key method" for the class, and the vtable is only emitted in
20017     the translation unit where the key method is defined.
20018
20019     _Note:_ If the chosen key method is later defined as inline, the
20020     vtable will still be emitted in every translation unit which
20021     defines it.  Make sure that any inline virtuals are declared
20022     inline in the class body, even if they are not defined there.
20023
20024type_info objects
20025     C++ requires information about types to be written out in order to
20026     implement `dynamic_cast', `typeid' and exception handling.  For
20027     polymorphic classes (classes with virtual functions), the type_info
20028     object is written out along with the vtable so that `dynamic_cast'
20029     can determine the dynamic type of a class object at runtime.  For
20030     all other types, we write out the type_info object when it is
20031     used: when applying `typeid' to an expression, throwing an object,
20032     or referring to a type in a catch clause or exception
20033     specification.
20034
20035Template Instantiations
20036     Most everything in this section also applies to template
20037     instantiations, but there are other options as well.  *Note
20038     Where's the Template?: Template Instantiation.
20039
20040
20041 When used with GNU ld version 2.8 or later on an ELF system such as
20042GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
20043these constructs will be discarded at link time.  This is known as
20044COMDAT support.
20045
20046 On targets that don't support COMDAT, but do support weak symbols, GCC
20047will use them.  This way one copy will override all the others, but the
20048unused copies will still take up space in the executable.
20049
20050 For targets which do not support either COMDAT or weak symbols, most
20051entities with vague linkage will be emitted as local symbols to avoid
20052duplicate definition errors from the linker.  This will not happen for
20053local statics in inlines, however, as having multiple copies will
20054almost certainly break things.
20055
20056 *Note Declarations and Definitions in One Header: C++ Interface, for
20057another way to control placement of these constructs.
20058
20059
20060File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
20061
200626.5 #pragma interface and implementation
20063========================================
20064
20065`#pragma interface' and `#pragma implementation' provide the user with
20066a way of explicitly directing the compiler to emit entities with vague
20067linkage (and debugging information) in a particular translation unit.
20068
20069 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
20070cases, because of COMDAT support and the "key method" heuristic
20071mentioned in *Note Vague Linkage::.  Using them can actually cause your
20072program to grow due to unnecesary out-of-line copies of inline
20073functions.  Currently the only benefit of these `#pragma's is reduced
20074duplication of debugging information, and that should be addressed soon
20075on DWARF 2 targets with the use of COMDAT sections.
20076
20077`#pragma interface'
20078`#pragma interface "SUBDIR/OBJECTS.h"'
20079     Use this directive in _header files_ that define object classes,
20080     to save space in most of the object files that use those classes.
20081     Normally, local copies of certain information (backup copies of
20082     inline member functions, debugging information, and the internal
20083     tables that implement virtual functions) must be kept in each
20084     object file that includes class definitions.  You can use this
20085     pragma to avoid such duplication.  When a header file containing
20086     `#pragma interface' is included in a compilation, this auxiliary
20087     information will not be generated (unless the main input source
20088     file itself uses `#pragma implementation').  Instead, the object
20089     files will contain references to be resolved at link time.
20090
20091     The second form of this directive is useful for the case where you
20092     have multiple headers with the same name in different directories.
20093     If you use this form, you must specify the same string to `#pragma
20094     implementation'.
20095
20096`#pragma implementation'
20097`#pragma implementation "OBJECTS.h"'
20098     Use this pragma in a _main input file_, when you want full output
20099     from included header files to be generated (and made globally
20100     visible).  The included header file, in turn, should use `#pragma
20101     interface'.  Backup copies of inline member functions, debugging
20102     information, and the internal tables used to implement virtual
20103     functions are all generated in implementation files.
20104
20105     If you use `#pragma implementation' with no argument, it applies to
20106     an include file with the same basename(1) as your source file.
20107     For example, in `allclass.cc', giving just `#pragma implementation'
20108     by itself is equivalent to `#pragma implementation "allclass.h"'.
20109
20110     In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
20111     an implementation file whenever you would include it from
20112     `allclass.cc' even if you never specified `#pragma
20113     implementation'.  This was deemed to be more trouble than it was
20114     worth, however, and disabled.
20115
20116     Use the string argument if you want a single implementation file to
20117     include code from multiple header files.  (You must also use
20118     `#include' to include the header file; `#pragma implementation'
20119     only specifies how to use the file--it doesn't actually include
20120     it.)
20121
20122     There is no way to split up the contents of a single header file
20123     into multiple implementation files.
20124
20125 `#pragma implementation' and `#pragma interface' also have an effect
20126on function inlining.
20127
20128 If you define a class in a header file marked with `#pragma
20129interface', the effect on an inline function defined in that class is
20130similar to an explicit `extern' declaration--the compiler emits no code
20131at all to define an independent version of the function.  Its
20132definition is used only for inlining with its callers.
20133
20134 Conversely, when you include the same header file in a main source file
20135that declares it as `#pragma implementation', the compiler emits code
20136for the function itself; this defines a version of the function that
20137can be found via pointers (or by callers compiled without inlining).
20138If all calls to the function can be inlined, you can avoid emitting the
20139function by compiling with `-fno-implement-inlines'.  If any calls were
20140not inlined, you will get linker errors.
20141
20142 ---------- Footnotes ----------
20143
20144 (1) A file's "basename" was the name stripped of all leading path
20145information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
20146
20147
20148File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
20149
201506.6 Where's the Template?
20151=========================
20152
20153C++ templates are the first language feature to require more
20154intelligence from the environment than one usually finds on a UNIX
20155system.  Somehow the compiler and linker have to make sure that each
20156template instance occurs exactly once in the executable if it is needed,
20157and not at all otherwise.  There are two basic approaches to this
20158problem, which are referred to as the Borland model and the Cfront
20159model.
20160
20161Borland model
20162     Borland C++ solved the template instantiation problem by adding
20163     the code equivalent of common blocks to their linker; the compiler
20164     emits template instances in each translation unit that uses them,
20165     and the linker collapses them together.  The advantage of this
20166     model is that the linker only has to consider the object files
20167     themselves; there is no external complexity to worry about.  This
20168     disadvantage is that compilation time is increased because the
20169     template code is being compiled repeatedly.  Code written for this
20170     model tends to include definitions of all templates in the header
20171     file, since they must be seen to be instantiated.
20172
20173Cfront model
20174     The AT&T C++ translator, Cfront, solved the template instantiation
20175     problem by creating the notion of a template repository, an
20176     automatically maintained place where template instances are
20177     stored.  A more modern version of the repository works as follows:
20178     As individual object files are built, the compiler places any
20179     template definitions and instantiations encountered in the
20180     repository.  At link time, the link wrapper adds in the objects in
20181     the repository and compiles any needed instances that were not
20182     previously emitted.  The advantages of this model are more optimal
20183     compilation speed and the ability to use the system linker; to
20184     implement the Borland model a compiler vendor also needs to
20185     replace the linker.  The disadvantages are vastly increased
20186     complexity, and thus potential for error; for some code this can be
20187     just as transparent, but in practice it can been very difficult to
20188     build multiple programs in one directory and one program in
20189     multiple directories.  Code written for this model tends to
20190     separate definitions of non-inline member templates into a
20191     separate file, which should be compiled separately.
20192
20193 When used with GNU ld version 2.8 or later on an ELF system such as
20194GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
20195Borland model.  On other systems, G++ implements neither automatic
20196model.
20197
20198 A future version of G++ will support a hybrid model whereby the
20199compiler will emit any instantiations for which the template definition
20200is included in the compile, and store template definitions and
20201instantiation context information into the object file for the rest.
20202The link wrapper will extract that information as necessary and invoke
20203the compiler to produce the remaining instantiations.  The linker will
20204then combine duplicate instantiations.
20205
20206 In the mean time, you have the following options for dealing with
20207template instantiations:
20208
20209  1. Compile your template-using code with `-frepo'.  The compiler will
20210     generate files with the extension `.rpo' listing all of the
20211     template instantiations used in the corresponding object files
20212     which could be instantiated there; the link wrapper, `collect2',
20213     will then update the `.rpo' files to tell the compiler where to
20214     place those instantiations and rebuild any affected object files.
20215     The link-time overhead is negligible after the first pass, as the
20216     compiler will continue to place the instantiations in the same
20217     files.
20218
20219     This is your best option for application code written for the
20220     Borland model, as it will just work.  Code written for the Cfront
20221     model will need to be modified so that the template definitions
20222     are available at one or more points of instantiation; usually this
20223     is as simple as adding `#include <tmethods.cc>' to the end of each
20224     template header.
20225
20226     For library code, if you want the library to provide all of the
20227     template instantiations it needs, just try to link all of its
20228     object files together; the link will fail, but cause the
20229     instantiations to be generated as a side effect.  Be warned,
20230     however, that this may cause conflicts if multiple libraries try
20231     to provide the same instantiations.  For greater control, use
20232     explicit instantiation as described in the next option.
20233
20234  2. Compile your code with `-fno-implicit-templates' to disable the
20235     implicit generation of template instances, and explicitly
20236     instantiate all the ones you use.  This approach requires more
20237     knowledge of exactly which instances you need than do the others,
20238     but it's less mysterious and allows greater control.  You can
20239     scatter the explicit instantiations throughout your program,
20240     perhaps putting them in the translation units where the instances
20241     are used or the translation units that define the templates
20242     themselves; you can put all of the explicit instantiations you
20243     need into one big file; or you can create small files like
20244
20245          #include "Foo.h"
20246          #include "Foo.cc"
20247
20248          template class Foo<int>;
20249          template ostream& operator <<
20250                          (ostream&, const Foo<int>&);
20251
20252     for each of the instances you need, and create a template
20253     instantiation library from those.
20254
20255     If you are using Cfront-model code, you can probably get away with
20256     not using `-fno-implicit-templates' when compiling files that don't
20257     `#include' the member template definitions.
20258
20259     If you use one big file to do the instantiations, you may want to
20260     compile it without `-fno-implicit-templates' so you get all of the
20261     instances required by your explicit instantiations (but not by any
20262     other files) without having to specify them as well.
20263
20264     G++ has extended the template instantiation syntax given in the ISO
20265     standard to allow forward declaration of explicit instantiations
20266     (with `extern'), instantiation of the compiler support data for a
20267     template class (i.e. the vtable) without instantiating any of its
20268     members (with `inline'), and instantiation of only the static data
20269     members of a template class, without the support data or member
20270     functions (with (`static'):
20271
20272          extern template int max (int, int);
20273          inline template class Foo<int>;
20274          static template class Foo<int>;
20275
20276  3. Do nothing.  Pretend G++ does implement automatic instantiation
20277     management.  Code written for the Borland model will work fine, but
20278     each translation unit will contain instances of each of the
20279     templates it uses.  In a large program, this can lead to an
20280     unacceptable amount of code duplication.
20281
20282
20283File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
20284
202856.7 Extracting the function pointer from a bound pointer to member function
20286===========================================================================
20287
20288In C++, pointer to member functions (PMFs) are implemented using a wide
20289pointer of sorts to handle all the possible call mechanisms; the PMF
20290needs to store information about how to adjust the `this' pointer, and
20291if the function pointed to is virtual, where to find the vtable, and
20292where in the vtable to look for the member function.  If you are using
20293PMFs in an inner loop, you should really reconsider that decision.  If
20294that is not an option, you can extract the pointer to the function that
20295would be called for a given object/PMF pair and call it directly inside
20296the inner loop, to save a bit of time.
20297
20298 Note that you will still be paying the penalty for the call through a
20299function pointer; on most modern architectures, such a call defeats the
20300branch prediction features of the CPU.  This is also true of normal
20301virtual function calls.
20302
20303 The syntax for this extension is
20304
20305     extern A a;
20306     extern int (A::*fp)();
20307     typedef int (*fptr)(A *);
20308
20309     fptr p = (fptr)(a.*fp);
20310
20311 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
20312object is needed to obtain the address of the function.  They can be
20313converted to function pointers directly:
20314
20315     fptr p1 = (fptr)(&A::foo);
20316
20317 You must specify `-Wno-pmf-conversions' to use this extension.
20318
20319
20320File: gcc.info,  Node: C++ Attributes,  Next: Strong Using,  Prev: Bound member functions,  Up: C++ Extensions
20321
203226.8 C++-Specific Variable, Function, and Type Attributes
20323========================================================
20324
20325Some attributes only make sense for C++ programs.
20326
20327`init_priority (PRIORITY)'
20328     In Standard C++, objects defined at namespace scope are guaranteed
20329     to be initialized in an order in strict accordance with that of
20330     their definitions _in a given translation unit_.  No guarantee is
20331     made for initializations across translation units.  However, GNU
20332     C++ allows users to control the order of initialization of objects
20333     defined at namespace scope with the `init_priority' attribute by
20334     specifying a relative PRIORITY, a constant integral expression
20335     currently bounded between 101 and 65535 inclusive.  Lower numbers
20336     indicate a higher priority.
20337
20338     In the following example, `A' would normally be created before
20339     `B', but the `init_priority' attribute has reversed that order:
20340
20341          Some_Class  A  __attribute__ ((init_priority (2000)));
20342          Some_Class  B  __attribute__ ((init_priority (543)));
20343
20344     Note that the particular values of PRIORITY do not matter; only
20345     their relative ordering.
20346
20347`java_interface'
20348     This type attribute informs C++ that the class is a Java
20349     interface.  It may only be applied to classes declared within an
20350     `extern "Java"' block.  Calls to methods declared in this
20351     interface will be dispatched using GCJ's interface table
20352     mechanism, instead of regular virtual table dispatch.
20353
20354
20355 See also *Note Strong Using::.
20356
20357
20358File: gcc.info,  Node: Strong Using,  Next: Offsetof,  Prev: C++ Attributes,  Up: C++ Extensions
20359
203606.9 Strong Using
20361================
20362
20363*Caution:* The semantics of this extension are not fully defined.
20364Users should refrain from using this extension as its semantics may
20365change subtly over time.  It is possible that this extension wil be
20366removed in future versions of G++.
20367
20368 A using-directive with `__attribute ((strong))' is stronger than a
20369normal using-directive in two ways:
20370
20371   * Templates from the used namespace can be specialized as though
20372     they were members of the using namespace.
20373
20374   * The using namespace is considered an associated namespace of all
20375     templates in the used namespace for purposes of argument-dependent
20376     name lookup.
20377
20378 This is useful for composing a namespace transparently from
20379implementation namespaces.  For example:
20380
20381     namespace std {
20382       namespace debug {
20383         template <class T> struct A { };
20384       }
20385       using namespace debug __attribute ((__strong__));
20386       template <> struct A<int> { };   // ok to specialize
20387
20388       template <class T> void f (A<T>);
20389     }
20390
20391     int main()
20392     {
20393       f (std::A<float>());             // lookup finds std::f
20394       f (std::A<int>());
20395     }
20396
20397
20398File: gcc.info,  Node: Offsetof,  Next: Java Exceptions,  Prev: Strong Using,  Up: C++ Extensions
20399
204006.10 Offsetof
20401=============
20402
20403G++ uses a syntactic extension to implement the `offsetof' macro.
20404
20405 In particular:
20406
20407       __offsetof__ (expression)
20408
20409 is equivalent to the parenthesized expression, except that the
20410expression is considered an integral constant expression even if it
20411contains certain operators that are not normally permitted in an
20412integral constant expression.  Users should never use `__offsetof__'
20413directly; the only valid use of `__offsetof__' is to implement the
20414`offsetof' macro in `<stddef.h>'.
20415
20416
20417File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Offsetof,  Up: C++ Extensions
20418
204196.11 Java Exceptions
20420====================
20421
20422The Java language uses a slightly different exception handling model
20423from C++.  Normally, GNU C++ will automatically detect when you are
20424writing C++ code that uses Java exceptions, and handle them
20425appropriately.  However, if C++ code only needs to execute destructors
20426when Java exceptions are thrown through it, GCC will guess incorrectly.
20427Sample problematic code is:
20428
20429       struct S { ~S(); };
20430       extern void bar();    // is written in Java, and may throw exceptions
20431       void foo()
20432       {
20433         S s;
20434         bar();
20435       }
20436
20437The usual effect of an incorrect guess is a link failure, complaining of
20438a missing routine called `__gxx_personality_v0'.
20439
20440 You can inform the compiler that Java exceptions are to be used in a
20441translation unit, irrespective of what it might think, by writing
20442`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
20443must appear before any functions that throw or catch exceptions, or run
20444destructors when exceptions are thrown through them.
20445
20446 You cannot mix Java and C++ exceptions in the same translation unit.
20447It is believed to be safe to throw a C++ exception from one file through
20448another file compiled for the Java exception model, or vice versa, but
20449there may be bugs in this area.
20450
20451
20452File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
20453
204546.12 Deprecated Features
20455========================
20456
20457In the past, the GNU C++ compiler was extended to experiment with new
20458features, at a time when the C++ language was still evolving.  Now that
20459the C++ standard is complete, some of those features are superseded by
20460superior alternatives.  Using the old features might cause a warning in
20461some cases that the feature will be dropped in the future.  In other
20462cases, the feature might be gone already.
20463
20464 While the list below is not exhaustive, it documents some of the
20465options that are now deprecated:
20466
20467`-fexternal-templates'
20468`-falt-external-templates'
20469     These are two of the many ways for G++ to implement template
20470     instantiation.  *Note Template Instantiation::.  The C++ standard
20471     clearly defines how template definitions have to be organized
20472     across implementation units.  G++ has an implicit instantiation
20473     mechanism that should work just fine for standard-conforming code.
20474
20475`-fstrict-prototype'
20476`-fno-strict-prototype'
20477     Previously it was possible to use an empty prototype parameter
20478     list to indicate an unspecified number of parameters (like C),
20479     rather than no parameters, as C++ demands.  This feature has been
20480     removed, except where it is required for backwards compatibility
20481     *Note Backwards Compatibility::.
20482
20483 The named return value extension has been deprecated, and is now
20484removed from G++.
20485
20486 The use of initializer lists with new expressions has been deprecated,
20487and is now removed from G++.
20488
20489 Floating and complex non-type template parameters have been deprecated,
20490and are now removed from G++.
20491
20492 The implicit typename extension has been deprecated and is now removed
20493from G++.
20494
20495 The use of default arguments in function pointers, function typedefs
20496and and other places where they are not permitted by the standard is
20497deprecated and will be removed from a future version of G++.
20498
20499
20500File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
20501
205026.13 Backwards Compatibility
20503============================
20504
20505Now that there is a definitive ISO standard C++, G++ has a specification
20506to adhere to.  The C++ language evolved over time, and features that
20507used to be acceptable in previous drafts of the standard, such as the
20508ARM [Annotated C++ Reference Manual], are no longer accepted.  In order
20509to allow compilation of C++ written to such drafts, G++ contains some
20510backwards compatibilities.  _All such backwards compatibility features
20511are liable to disappear in future versions of G++._ They should be
20512considered deprecated *Note Deprecated Features::.
20513
20514`For scope'
20515     If a variable is declared at for scope, it used to remain in scope
20516     until the end of the scope which contained the for statement
20517     (rather than just within the for scope).  G++ retains this, but
20518     issues a warning, if such a variable is accessed outside the for
20519     scope.
20520
20521`Implicit C language'
20522     Old C system header files did not contain an `extern "C" {...}'
20523     scope to set the language.  On such systems, all header files are
20524     implicitly scoped inside a C language scope.  Also, an empty
20525     prototype `()' will be treated as an unspecified number of
20526     arguments, rather than no arguments, as C++ demands.
20527
20528
20529File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
20530
205317 GNU Objective-C runtime features
20532**********************************
20533
20534This document is meant to describe some of the GNU Objective-C runtime
20535features.  It is not intended to teach you Objective-C, there are
20536several resources on the Internet that present the language.  Questions
20537and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
20538
20539* Menu:
20540
20541* Executing code before main::
20542* Type encoding::
20543* Garbage Collection::
20544* Constant string objects::
20545* compatibility_alias::
20546
20547
20548File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
20549
205507.1 `+load': Executing code before main
20551=======================================
20552
20553The GNU Objective-C runtime provides a way that allows you to execute
20554code before the execution of the program enters the `main' function.
20555The code is executed on a per-class and a per-category basis, through a
20556special class method `+load'.
20557
20558 This facility is very useful if you want to initialize global variables
20559which can be accessed by the program directly, without sending a message
20560to the class first.  The usual way to initialize global variables, in
20561the `+initialize' method, might not be useful because `+initialize' is
20562only called when the first message is sent to a class object, which in
20563some cases could be too late.
20564
20565 Suppose for example you have a `FileStream' class that declares
20566`Stdin', `Stdout' and `Stderr' as global variables, like below:
20567
20568
20569     FileStream *Stdin = nil;
20570     FileStream *Stdout = nil;
20571     FileStream *Stderr = nil;
20572
20573     @implementation FileStream
20574
20575     + (void)initialize
20576     {
20577         Stdin = [[FileStream new] initWithFd:0];
20578         Stdout = [[FileStream new] initWithFd:1];
20579         Stderr = [[FileStream new] initWithFd:2];
20580     }
20581
20582     /* Other methods here */
20583     @end
20584
20585 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
20586in `+initialize' occurs too late.  The programmer can send a message to
20587one of these objects before the variables are actually initialized,
20588thus sending messages to the `nil' object.  The `+initialize' method
20589which actually initializes the global variables is not invoked until
20590the first message is sent to the class object.  The solution would
20591require these variables to be initialized just before entering `main'.
20592
20593 The correct solution of the above problem is to use the `+load' method
20594instead of `+initialize':
20595
20596
20597     @implementation FileStream
20598
20599     + (void)load
20600     {
20601         Stdin = [[FileStream new] initWithFd:0];
20602         Stdout = [[FileStream new] initWithFd:1];
20603         Stderr = [[FileStream new] initWithFd:2];
20604     }
20605
20606     /* Other methods here */
20607     @end
20608
20609 The `+load' is a method that is not overridden by categories.  If a
20610class and a category of it both implement `+load', both methods are
20611invoked.  This allows some additional initializations to be performed in
20612a category.
20613
20614 This mechanism is not intended to be a replacement for `+initialize'.
20615You should be aware of its limitations when you decide to use it
20616instead of `+initialize'.
20617
20618* Menu:
20619
20620* What you can and what you cannot do in +load::
20621
20622
20623File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
20624
206257.1.1 What you can and what you cannot do in `+load'
20626----------------------------------------------------
20627
20628The `+load' implementation in the GNU runtime guarantees you the
20629following things:
20630
20631   * you can write whatever C code you like;
20632
20633   * you can send messages to Objective-C constant strings (`@"this is a
20634     constant string"');
20635
20636   * you can allocate and send messages to objects whose class is
20637     implemented in the same file;
20638
20639   * the `+load' implementation of all super classes of a class are
20640     executed before the `+load' of that class is executed;
20641
20642   * the `+load' implementation of a class is executed before the
20643     `+load' implementation of any category.
20644
20645
20646 In particular, the following things, even if they can work in a
20647particular case, are not guaranteed:
20648
20649   * allocation of or sending messages to arbitrary objects;
20650
20651   * allocation of or sending messages to objects whose classes have a
20652     category implemented in the same file;
20653
20654
20655 You should make no assumptions about receiving `+load' in sibling
20656classes when you write `+load' of a class.  The order in which sibling
20657classes receive `+load' is not guaranteed.
20658
20659 The order in which `+load' and `+initialize' are called could be
20660problematic if this matters.  If you don't allocate objects inside
20661`+load', it is guaranteed that `+load' is called before `+initialize'.
20662If you create an object inside `+load' the `+initialize' method of
20663object's class is invoked even if `+load' was not invoked.  Note if you
20664explicitly call `+load' on a class, `+initialize' will be called first.
20665To avoid possible problems try to implement only one of these methods.
20666
20667 The `+load' method is also invoked when a bundle is dynamically loaded
20668into your running program.  This happens automatically without any
20669intervening operation from you.  When you write bundles and you need to
20670write `+load' you can safely create and send messages to objects whose
20671classes already exist in the running program.  The same restrictions as
20672above apply to classes defined in bundle.
20673
20674
20675File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
20676
206777.2 Type encoding
20678=================
20679
20680The Objective-C compiler generates type encodings for all the types.
20681These type encodings are used at runtime to find out information about
20682selectors and methods and about objects and classes.
20683
20684 The types are encoded in the following way:
20685
20686`char'             `c'
20687`unsigned char'    `C'
20688`short'            `s'
20689`unsigned short'   `S'
20690`int'              `i'
20691`unsigned int'     `I'
20692`long'             `l'
20693`unsigned long'    `L'
20694`long long'        `q'
20695`unsigned long     `Q'
20696long'
20697`float'            `f'
20698`double'           `d'
20699`void'             `v'
20700`id'               `@'
20701`Class'            `#'
20702`SEL'              `:'
20703`char*'            `*'
20704unknown type       `?'
20705bit-fields         `b' followed by the starting position of the
20706                   bit-field, the type of the bit-field and the size of
20707                   the bit-field (the bit-fields encoding was changed
20708                   from the NeXT's compiler encoding, see below)
20709
20710 The encoding of bit-fields has changed to allow bit-fields to be
20711properly handled by the runtime functions that compute sizes and
20712alignments of types that contain bit-fields.  The previous encoding
20713contained only the size of the bit-field.  Using only this information
20714it is not possible to reliably compute the size occupied by the
20715bit-field.  This is very important in the presence of the Boehm's
20716garbage collector because the objects are allocated using the typed
20717memory facility available in this collector.  The typed memory
20718allocation requires information about where the pointers are located
20719inside the object.
20720
20721 The position in the bit-field is the position, counting in bits, of the
20722bit closest to the beginning of the structure.
20723
20724 The non-atomic types are encoded as follows:
20725
20726pointers       `^' followed by the pointed type.
20727arrays         `[' followed by the number of elements in the array
20728               followed by the type of the elements followed by `]'
20729structures     `{' followed by the name of the structure (or `?' if the
20730               structure is unnamed), the `=' sign, the type of the
20731               members and by `}'
20732unions         `(' followed by the name of the structure (or `?' if the
20733               union is unnamed), the `=' sign, the type of the members
20734               followed by `)'
20735
20736 Here are some types and their encodings, as they are generated by the
20737compiler on an i386 machine:
20738
20739
20740Objective-C type   Compiler encoding
20741     int a[10];    `[10i]'
20742     struct {      `{?=i[3f]b128i3b131i2c}'
20743       int i;
20744       float f[3];
20745       int a:3;
20746       int b:2;
20747       char c;
20748     }
20749
20750
20751 In addition to the types the compiler also encodes the type
20752specifiers.  The table below describes the encoding of the current
20753Objective-C type specifiers:
20754
20755
20756Specifier          Encoding
20757`const'            `r'
20758`in'               `n'
20759`inout'            `N'
20760`out'              `o'
20761`bycopy'           `O'
20762`oneway'           `V'
20763
20764
20765 The type specifiers are encoded just before the type.  Unlike types
20766however, the type specifiers are only encoded when they appear in method
20767argument types.
20768
20769
20770File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
20771
207727.3 Garbage Collection
20773======================
20774
20775Support for a new memory management policy has been added by using a
20776powerful conservative garbage collector, known as the
20777Boehm-Demers-Weiser conservative garbage collector.  It is available
20778from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
20779
20780 To enable the support for it you have to configure the compiler using
20781an additional argument, `--enable-objc-gc'.  You need to have garbage
20782collector installed before building the compiler.  This will build an
20783additional runtime library which has several enhancements to support
20784the garbage collector.  The new library has a new name, `libobjc_gc.a'
20785to not conflict with the non-garbage-collected library.
20786
20787 When the garbage collector is used, the objects are allocated using the
20788so-called typed memory allocation mechanism available in the
20789Boehm-Demers-Weiser collector.  This mode requires precise information
20790on where pointers are located inside objects.  This information is
20791computed once per class, immediately after the class has been
20792initialized.
20793
20794 There is a new runtime function `class_ivar_set_gcinvisible()' which
20795can be used to declare a so-called "weak pointer" reference.  Such a
20796pointer is basically hidden for the garbage collector; this can be
20797useful in certain situations, especially when you want to keep track of
20798the allocated objects, yet allow them to be collected.  This kind of
20799pointers can only be members of objects, you cannot declare a global
20800pointer as a weak reference.  Every type which is a pointer type can be
20801declared a weak pointer, including `id', `Class' and `SEL'.
20802
20803 Here is an example of how to use this feature.  Suppose you want to
20804implement a class whose instances hold a weak pointer reference; the
20805following class does this:
20806
20807
20808     @interface WeakPointer : Object
20809     {
20810         const void* weakPointer;
20811     }
20812
20813     - initWithPointer:(const void*)p;
20814     - (const void*)weakPointer;
20815     @end
20816
20817
20818     @implementation WeakPointer
20819
20820     + (void)initialize
20821     {
20822       class_ivar_set_gcinvisible (self, "weakPointer", YES);
20823     }
20824
20825     - initWithPointer:(const void*)p
20826     {
20827       weakPointer = p;
20828       return self;
20829     }
20830
20831     - (const void*)weakPointer
20832     {
20833       return weakPointer;
20834     }
20835
20836     @end
20837
20838 Weak pointers are supported through a new type character specifier
20839represented by the `!' character.  The `class_ivar_set_gcinvisible()'
20840function adds or removes this specifier to the string type description
20841of the instance variable named as argument.
20842
20843
20844File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
20845
208467.4 Constant string objects
20847===========================
20848
20849GNU Objective-C provides constant string objects that are generated
20850directly by the compiler.  You declare a constant string object by
20851prefixing a C constant string with the character `@':
20852
20853       id myString = @"this is a constant string object";
20854
20855 The constant string objects are by default instances of the
20856`NXConstantString' class which is provided by the GNU Objective-C
20857runtime.  To get the definition of this class you must include the
20858`objc/NXConstStr.h' header file.
20859
20860 User defined libraries may want to implement their own constant string
20861class.  To be able to support them, the GNU Objective-C compiler
20862provides a new command line options
20863`-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
20864to a strict structure, the same as `NXConstantString''s structure:
20865
20866
20867     @interface MyConstantStringClass
20868     {
20869       Class isa;
20870       char *c_string;
20871       unsigned int len;
20872     }
20873     @end
20874
20875 `NXConstantString' inherits from `Object'; user class libraries may
20876choose to inherit the customized constant string class from a different
20877class than `Object'.  There is no requirement in the methods the
20878constant string class has to implement, but the final ivar layout of
20879the class must be the compatible with the given structure.
20880
20881 When the compiler creates the statically allocated constant string
20882object, the `c_string' field will be filled by the compiler with the
20883string; the `length' field will be filled by the compiler with the
20884string length; the `isa' pointer will be filled with `NULL' by the
20885compiler, and it will later be fixed up automatically at runtime by the
20886GNU Objective-C runtime library to point to the class which was set by
20887the `-fconstant-string-class' option when the object file is loaded (if
20888you wonder how it works behind the scenes, the name of the class to
20889use, and the list of static objects to fixup, are stored by the
20890compiler in the object file in a place where the GNU runtime library
20891will find them at runtime).
20892
20893 As a result, when a file is compiled with the
20894`-fconstant-string-class' option, all the constant string objects will
20895be instances of the class specified as argument to this option.  It is
20896possible to have multiple compilation units referring to different
20897constant string classes, neither the compiler nor the linker impose any
20898restrictions in doing this.
20899
20900
20901File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
20902
209037.5 compatibility_alias
20904=======================
20905
20906This is a feature of the Objective-C compiler rather than of the
20907runtime, anyway since it is documented nowhere and its existence was
20908forgotten, we are documenting it here.
20909
20910 The keyword `@compatibility_alias' allows you to define a class name
20911as equivalent to another class name.  For example:
20912
20913     @compatibility_alias WOApplication GSWApplication;
20914
20915 tells the compiler that each time it encounters `WOApplication' as a
20916class name, it should replace it with `GSWApplication' (that is,
20917`WOApplication' is just an alias for `GSWApplication').
20918
20919 There are some constraints on how this can be used--
20920
20921   * `WOApplication' (the alias) must not be an existing class;
20922
20923   * `GSWApplication' (the real class) must be an existing class.
20924
20925
20926
20927File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
20928
209298 Binary Compatibility
20930**********************
20931
20932Binary compatibility encompasses several related concepts:
20933
20934"application binary interface (ABI)"
20935     The set of runtime conventions followed by all of the tools that
20936     deal with binary representations of a program, including
20937     compilers, assemblers, linkers, and language runtime support.
20938     Some ABIs are formal with a written specification, possibly
20939     designed by multiple interested parties.  Others are simply the
20940     way things are actually done by a particular set of tools.
20941
20942"ABI conformance"
20943     A compiler conforms to an ABI if it generates code that follows
20944     all of the specifications enumerated by that ABI.  A library
20945     conforms to an ABI if it is implemented according to that ABI.  An
20946     application conforms to an ABI if it is built using tools that
20947     conform to that ABI and does not contain source code that
20948     specifically changes behavior specified by the ABI.
20949
20950"calling conventions"
20951     Calling conventions are a subset of an ABI that specify of how
20952     arguments are passed and function results are returned.
20953
20954"interoperability"
20955     Different sets of tools are interoperable if they generate files
20956     that can be used in the same program.  The set of tools includes
20957     compilers, assemblers, linkers, libraries, header files, startup
20958     files, and debuggers.  Binaries produced by different sets of
20959     tools are not interoperable unless they implement the same ABI.
20960     This applies to different versions of the same tools as well as
20961     tools from different vendors.
20962
20963"intercallability"
20964     Whether a function in a binary built by one set of tools can call a
20965     function in a binary built by a different set of tools is a subset
20966     of interoperability.
20967
20968"implementation-defined features"
20969     Language standards include lists of implementation-defined
20970     features whose behavior can vary from one implementation to
20971     another.  Some of these features are normally covered by a
20972     platform's ABI and others are not.  The features that are not
20973     covered by an ABI generally affect how a program behaves, but not
20974     intercallability.
20975
20976"compatibility"
20977     Conformance to the same ABI and the same behavior of
20978     implementation-defined features are both relevant for
20979     compatibility.
20980
20981 The application binary interface implemented by a C or C++ compiler
20982affects code generation and runtime support for:
20983
20984   * size and alignment of data types
20985
20986   * layout of structured types
20987
20988   * calling conventions
20989
20990   * register usage conventions
20991
20992   * interfaces for runtime arithmetic support
20993
20994   * object file formats
20995
20996 In addition, the application binary interface implemented by a C++
20997compiler affects code generation and runtime support for:
20998   * name mangling
20999
21000   * exception handling
21001
21002   * invoking constructors and destructors
21003
21004   * layout, alignment, and padding of classes
21005
21006   * layout and alignment of virtual tables
21007
21008 Some GCC compilation options cause the compiler to generate code that
21009does not conform to the platform's default ABI.  Other options cause
21010different program behavior for implementation-defined features that are
21011not covered by an ABI.  These options are provided for consistency with
21012other compilers that do not follow the platform's default ABI or the
21013usual behavior of implementation-defined features for the platform.  Be
21014very careful about using such options.
21015
21016 Most platforms have a well-defined ABI that covers C code, but ABIs
21017that cover C++ functionality are not yet common.
21018
21019 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
21020written, vendor-neutral C++ ABI that was designed to be specific to
2102164-bit Itanium but also includes generic specifications that apply to
21022any platform.  This C++ ABI is also implemented by other compiler
21023vendors on some platforms, notably GNU/Linux and BSD systems.  We have
21024tried hard to provide a stable ABI that will be compatible with future
21025GCC releases, but it is possible that we will encounter problems that
21026make this difficult.  Such problems could include different
21027interpretations of the C++ ABI by different vendors, bugs in the ABI, or
21028bugs in the implementation of the ABI in different compilers.  GCC's
21029`-Wabi' switch warns when G++ generates code that is probably not
21030compatible with the C++ ABI.
21031
21032 The C++ library used with a C++ compiler includes the Standard C++
21033Library, with functionality defined in the C++ Standard, plus language
21034runtime support.  The runtime support is included in a C++ ABI, but
21035there is no formal ABI for the Standard C++ Library.  Two
21036implementations of that library are interoperable if one follows the
21037de-facto ABI of the other and if they are both built with the same
21038compiler, or with compilers that conform to the same ABI for C++
21039compiler and runtime support.
21040
21041 When G++ and another C++ compiler conform to the same C++ ABI, but the
21042implementations of the Standard C++ Library that they normally use do
21043not follow the same ABI for the Standard C++ Library, object files
21044built with those compilers can be used in the same program only if they
21045use the same C++ library.  This requires specifying the location of the
21046C++ library header files when invoking the compiler whose usual library
21047is not being used.  The location of GCC's C++ header files depends on
21048how the GCC build was configured, but can be seen by using the G++ `-v'
21049option.  With default configuration options for G++ 3.3 the compile
21050line for a different C++ compiler needs to include
21051
21052         -IGCC_INSTALL_DIRECTORY/include/c++/3.3
21053
21054 Similarly, compiling code with G++ that must use a C++ library other
21055than the GNU C++ library requires specifying the location of the header
21056files for that other library.
21057
21058 The most straightforward way to link a program to use a particular C++
21059library is to use a C++ driver that specifies that C++ library by
21060default.  The `g++' driver, for example, tells the linker where to find
21061GCC's C++ library (`libstdc++') plus the other libraries and startup
21062files it needs, in the proper order.
21063
21064 If a program must use a different C++ library and it's not possible to
21065do the final link using a C++ driver that uses that library by default,
21066it is necessary to tell `g++' the location and name of that library.
21067It might also be necessary to specify different startup files and other
21068runtime support libraries, and to suppress the use of GCC's support
21069libraries with one or more of the options `-nostdlib', `-nostartfiles',
21070and `-nodefaultlibs'.
21071
21072
21073File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
21074
210759 `gcov'--a Test Coverage Program
21076*********************************
21077
21078`gcov' is a tool you can use in conjunction with GCC to test code
21079coverage in your programs.
21080
21081* Menu:
21082
21083* Gcov Intro::         	        Introduction to gcov.
21084* Invoking Gcov::       	How to use gcov.
21085* Gcov and Optimization::       Using gcov with GCC optimization.
21086* Gcov Data Files::             The files used by gcov.
21087
21088
21089File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
21090
210919.1 Introduction to `gcov'
21092==========================
21093
21094`gcov' is a test coverage program.  Use it in concert with GCC to
21095analyze your programs to help create more efficient, faster running
21096code and to discover untested parts of your program.  You can use
21097`gcov' as a profiling tool to help discover where your optimization
21098efforts will best affect your code.  You can also use `gcov' along with
21099the other profiling tool, `gprof', to assess which parts of your code
21100use the greatest amount of computing time.
21101
21102 Profiling tools help you analyze your code's performance.  Using a
21103profiler such as `gcov' or `gprof', you can find out some basic
21104performance statistics, such as:
21105
21106   * how often each line of code executes
21107
21108   * what lines of code are actually executed
21109
21110   * how much computing time each section of code uses
21111
21112 Once you know these things about how your code works when compiled, you
21113can look at each module to see which modules should be optimized.
21114`gcov' helps you determine where to work on optimization.
21115
21116 Software developers also use coverage testing in concert with
21117testsuites, to make sure software is actually good enough for a release.
21118Testsuites can verify that a program works as expected; a coverage
21119program tests to see how much of the program is exercised by the
21120testsuite.  Developers can then determine what kinds of test cases need
21121to be added to the testsuites to create both better testing and a better
21122final product.
21123
21124 You should compile your code without optimization if you plan to use
21125`gcov' because the optimization, by combining some lines of code into
21126one function, may not give you as much information as you need to look
21127for `hot spots' where the code is using a great deal of computer time.
21128Likewise, because `gcov' accumulates statistics by line (at the lowest
21129resolution), it works best with a programming style that places only
21130one statement on each line.  If you use complicated macros that expand
21131to loops or to other control structures, the statistics are less
21132helpful--they only report on the line where the macro call appears.  If
21133your complex macros behave like functions, you can replace them with
21134inline functions to solve this problem.
21135
21136 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
21137many times each line of a source file `SOURCEFILE.c' has executed.  You
21138can use these logfiles along with `gprof' to aid in fine-tuning the
21139performance of your programs.  `gprof' gives timing information you can
21140use along with the information you get from `gcov'.
21141
21142 `gcov' works only on code compiled with GCC.  It is not compatible
21143with any other profiling or test coverage mechanism.
21144
21145
21146File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
21147
211489.2 Invoking gcov
21149=================
21150
21151     gcov [OPTIONS] SOURCEFILE
21152
21153 `gcov' accepts the following options:
21154
21155`-h'
21156`--help'
21157     Display help about using `gcov' (on the standard output), and exit
21158     without doing any further processing.
21159
21160`-v'
21161`--version'
21162     Display the `gcov' version number (on the standard output), and
21163     exit without doing any further processing.
21164
21165`-a'
21166`--all-blocks'
21167     Write individual execution counts for every basic block. Normally
21168     gcov outputs execution counts only for the main blocks of a line.
21169     With this option you can determine if blocks within a single line
21170     are not being executed.
21171
21172`-b'
21173`--branch-probabilities'
21174     Write branch frequencies to the output file, and write branch
21175     summary info to the standard output.  This option allows you to
21176     see how often each branch in your program was taken. Unconditional
21177     branches will not be shown, unless the `-u' option is given.
21178
21179`-c'
21180`--branch-counts'
21181     Write branch frequencies as the number of branches taken, rather
21182     than the percentage of branches taken.
21183
21184`-n'
21185`--no-output'
21186     Do not create the `gcov' output file.
21187
21188`-l'
21189`--long-file-names'
21190     Create long file names for included source files.  For example, if
21191     the header file `x.h' contains code, and was included in the file
21192     `a.c', then running `gcov' on the file `a.c' will produce an
21193     output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
21194     can be useful if `x.h' is included in multiple source files. If
21195     you uses the `-p' option, both the including and included file
21196     names will be complete path names.
21197
21198`-p'
21199`--preserve-paths'
21200     Preserve complete path information in the names of generated
21201     `.gcov' files. Without this option, just the filename component is
21202     used. With this option, all directories are used, with '/'
21203     characters translated to '#' characters, '.' directory components
21204     removed and '..'  components renamed to '^'. This is useful if
21205     sourcefiles are in several different directories. It also affects
21206     the `-l' option.
21207
21208`-f'
21209`--function-summaries'
21210     Output summaries for each function in addition to the file level
21211     summary.
21212
21213`-o DIRECTORY|FILE'
21214`--object-directory DIRECTORY'
21215`--object-file FILE'
21216     Specify either the directory containing the gcov data files, or the
21217     object path name. The `.gcno', and `.gcda' data files are searched
21218     for using this option. If a directory is specified, the data files
21219     are in that directory and named after the source file name,
21220     without its extension. If a file is specified here, the data files
21221     are named after that file, without its extension. If this option
21222     is not supplied, it defaults to the current directory.
21223
21224`-u'
21225`--unconditional-branches'
21226     When branch counts are given, include those of unconditional
21227     branches.  Unconditional branches are normally not interesting.
21228
21229
21230 `gcov' should be run with the current directory the same as that when
21231you invoked the compiler. Otherwise it will not be able to locate the
21232source files. `gcov' produces files called `MANGLEDNAME.gcov' in the
21233current directory. These contain the coverage information of the source
21234file they correspond to.  One `.gcov' file is produced for each source
21235file containing code, which was compiled to produce the data files. The
21236MANGLEDNAME part of the output file name is usually simply the source
21237file name, but can be something more complicated if the `-l' or `-p'
21238options are given. Refer to those options for details.
21239
21240 The `.gcov' files contain the ':' separated fields along with program
21241source code. The format is
21242
21243     EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
21244
21245 Additional block information may succeed each line, when requested by
21246command line option. The EXECUTION_COUNT is `-' for lines containing no
21247code and `#####' for lines which were never executed. Some lines of
21248information at the start have LINE_NUMBER of zero.
21249
21250 When printing percentages, 0% and 100% are only printed when the values
21251are _exactly_ 0% and 100% respectively. Other values which would
21252conventionally be rounded to 0% or 100% are instead printed as the
21253nearest non-boundary value.
21254
21255 When using `gcov', you must first compile your program with two
21256special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
21257compiler to generate additional information needed by gcov (basically a
21258flow graph of the program) and also includes additional code in the
21259object files for generating the extra profiling information needed by
21260gcov.  These additional files are placed in the directory where the
21261object file is located.
21262
21263 Running the program will cause profile output to be generated.  For
21264each source file compiled with `-fprofile-arcs', an accompanying
21265`.gcda' file will be placed in the object file directory.
21266
21267 Running `gcov' with your program's source file names as arguments will
21268now produce a listing of the code along with frequency of execution for
21269each line.  For example, if your program is called `tmp.c', this is
21270what you see when you use the basic `gcov' facility:
21271
21272     $ gcc -fprofile-arcs -ftest-coverage tmp.c
21273     $ a.out
21274     $ gcov tmp.c
21275     90.00% of 10 source lines executed in file tmp.c
21276     Creating tmp.c.gcov.
21277
21278 The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
21279
21280             -:    0:Source:tmp.c
21281             -:    0:Graph:tmp.gcno
21282             -:    0:Data:tmp.gcda
21283             -:    0:Runs:1
21284             -:    0:Programs:1
21285             -:    1:#include <stdio.h>
21286             -:    2:
21287             -:    3:int main (void)
21288     function main called 1 returned 1 blocks executed 75%
21289             1:    4:{
21290             1:    5:  int i, total;
21291             -:    6:
21292             1:    7:  total = 0;
21293             -:    8:
21294            11:    9:  for (i = 0; i < 10; i++)
21295            10:   10:    total += i;
21296             -:   11:
21297             1:   12:  if (total != 45)
21298         #####:   13:    printf ("Failure\n");
21299             -:   14:  else
21300             1:   15:    printf ("Success\n");
21301             1:   16:  return 0;
21302             -:   17:}
21303
21304 When you use the `-a' option, you will get individual block counts,
21305and the output looks like this:
21306
21307             -:    0:Source:tmp.c
21308             -:    0:Graph:tmp.gcno
21309             -:    0:Data:tmp.gcda
21310             -:    0:Runs:1
21311             -:    0:Programs:1
21312             -:    1:#include <stdio.h>
21313             -:    2:
21314             -:    3:int main (void)
21315     function main called 1 returned 1 blocks executed 75%
21316             1:    4:{
21317             1:    4-block  0
21318             1:    5:  int i, total;
21319             -:    6:
21320             1:    7:  total = 0;
21321             -:    8:
21322            11:    9:  for (i = 0; i < 10; i++)
21323            11:    9-block  0
21324            10:   10:    total += i;
21325            10:   10-block  0
21326             -:   11:
21327             1:   12:  if (total != 45)
21328             1:   12-block  0
21329         #####:   13:    printf ("Failure\n");
21330         $$$$$:   13-block  0
21331             -:   14:  else
21332             1:   15:    printf ("Success\n");
21333             1:   15-block  0
21334             1:   16:  return 0;
21335             1:   16-block  0
21336             -:   17:}
21337
21338 In this mode, each basic block is only shown on one line - the last
21339line of the block. A multi-line block will only contribute to the
21340execution count of that last line, and other lines will not be shown to
21341contain code, unless previous blocks end on those lines.  The total
21342execution count of a line is shown and subsequent lines show the
21343execution counts for individual blocks that end on that line. After each
21344block, the branch and call counts of the block will be shown, if the
21345`-b' option is given.
21346
21347 Because of the way GCC instruments calls, a call count can be shown
21348after a line with no individual blocks.  As you can see, line 13
21349contains a basic block that was not executed.
21350
21351 When you use the `-b' option, your output looks like this:
21352
21353     $ gcov -b tmp.c
21354     90.00% of 10 source lines executed in file tmp.c
21355     80.00% of 5 branches executed in file tmp.c
21356     80.00% of 5 branches taken at least once in file tmp.c
21357     50.00% of 2 calls executed in file tmp.c
21358     Creating tmp.c.gcov.
21359
21360 Here is a sample of a resulting `tmp.c.gcov' file:
21361
21362             -:    0:Source:tmp.c
21363             -:    0:Graph:tmp.gcno
21364             -:    0:Data:tmp.gcda
21365             -:    0:Runs:1
21366             -:    0:Programs:1
21367             -:    1:#include <stdio.h>
21368             -:    2:
21369             -:    3:int main (void)
21370     function main called 1 returned 1 blocks executed 75%
21371             1:    4:{
21372             1:    5:  int i, total;
21373             -:    6:
21374             1:    7:  total = 0;
21375             -:    8:
21376            11:    9:  for (i = 0; i < 10; i++)
21377     branch  0 taken 91% (fallthrough)
21378     branch  1 taken 9%
21379            10:   10:    total += i;
21380             -:   11:
21381             1:   12:  if (total != 45)
21382     branch  0 taken 0% (fallthrough)
21383     branch  1 taken 100%
21384         #####:   13:    printf ("Failure\n");
21385     call    0 never executed
21386             -:   14:  else
21387             1:   15:    printf ("Success\n");
21388     call    0 called 1 returned 100%
21389             1:   16:  return 0;
21390             -:   17:}
21391
21392 For each basic block, a line is printed after the last line of the
21393basic block describing the branch or call that ends the basic block.
21394There can be multiple branches and calls listed for a single source
21395line if there are multiple basic blocks that end on that line.  In this
21396case, the branches and calls are each given a number.  There is no
21397simple way to map these branches and calls back to source constructs.
21398In general, though, the lowest numbered branch or call will correspond
21399to the leftmost construct on the source line.
21400
21401 For a branch, if it was executed at least once, then a percentage
21402indicating the number of times the branch was taken divided by the
21403number of times the branch was executed will be printed.  Otherwise, the
21404message "never executed" is printed.
21405
21406 For a call, if it was executed at least once, then a percentage
21407indicating the number of times the call returned divided by the number
21408of times the call was executed will be printed.  This will usually be
21409100%, but may be less for functions call `exit' or `longjmp', and thus
21410may not return every time they are called.
21411
21412 The execution counts are cumulative.  If the example program were
21413executed again without removing the `.gcda' file, the count for the
21414number of times each line in the source was executed would be added to
21415the results of the previous run(s).  This is potentially useful in
21416several ways.  For example, it could be used to accumulate data over a
21417number of program runs as part of a test verification suite, or to
21418provide more accurate long-term information over a large number of
21419program runs.
21420
21421 The data in the `.gcda' files is saved immediately before the program
21422exits.  For each source file compiled with `-fprofile-arcs', the
21423profiling code first attempts to read in an existing `.gcda' file; if
21424the file doesn't match the executable (differing number of basic block
21425counts) it will ignore the contents of the file.  It then adds in the
21426new execution counts and finally writes the data to the file.
21427
21428
21429File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
21430
214319.3 Using `gcov' with GCC Optimization
21432======================================
21433
21434If you plan to use `gcov' to help optimize your code, you must first
21435compile your program with two special GCC options: `-fprofile-arcs
21436-ftest-coverage'.  Aside from that, you can use any other GCC options;
21437but if you want to prove that every single line in your program was
21438executed, you should not compile with optimization at the same time.
21439On some machines the optimizer can eliminate some simple code lines by
21440combining them with other lines.  For example, code like this:
21441
21442     if (a != b)
21443       c = 1;
21444     else
21445       c = 0;
21446
21447can be compiled into one instruction on some machines.  In this case,
21448there is no way for `gcov' to calculate separate execution counts for
21449each line because there isn't separate code for each line.  Hence the
21450`gcov' output looks like this if you compiled the program with
21451optimization:
21452
21453           100:   12:if (a != b)
21454           100:   13:  c = 1;
21455           100:   14:else
21456           100:   15:  c = 0;
21457
21458 The output shows that this block of code, combined by optimization,
21459executed 100 times.  In one sense this result is correct, because there
21460was only one instruction representing all four of these lines.  However,
21461the output does not indicate how many times the result was 0 and how
21462many times the result was 1.
21463
21464 Inlineable functions can create unexpected line counts.  Line counts
21465are shown for the source code of the inlineable function, but what is
21466shown depends on where the function is inlined, or if it is not inlined
21467at all.
21468
21469 If the function is not inlined, the compiler must emit an out of line
21470copy of the function, in any object file that needs it.  If `fileA.o'
21471and `fileB.o' both contain out of line bodies of a particular
21472inlineable function, they will also both contain coverage counts for
21473that function.  When `fileA.o' and `fileB.o' are linked together, the
21474linker will, on many systems, select one of those out of line bodies
21475for all calls to that function, and remove or ignore the other.
21476Unfortunately, it will not remove the coverage counters for the unused
21477function body.  Hence when instrumented, all but one use of that
21478function will show zero counts.
21479
21480 If the function is inlined in several places, the block structure in
21481each location might not be the same.  For instance, a condition might
21482now be calculable at compile time in some instances.  Because the
21483coverage of all the uses of the inline function will be shown for the
21484same source lines, the line counts themselves might seem inconsistent.
21485
21486
21487File: gcc.info,  Node: Gcov Data Files,  Prev: Gcov and Optimization,  Up: Gcov
21488
214899.4 Brief description of `gcov' data files
21490==========================================
21491
21492`gcov' uses two files for profiling.  The names of these files are
21493derived from the original _object_ file by substituting the file suffix
21494with either `.gcno', or `.gcda'.  All of these files are placed in the
21495same directory as the object file, and contain data stored in a
21496platform-independent format.
21497
21498 The `.gcno' file is generated when the source file is compiled with
21499the GCC `-ftest-coverage' option.  It contains information to
21500reconstruct the basic block graphs and assign source line numbers to
21501blocks.
21502
21503 The `.gcda' file is generated when a program containing object files
21504built with the GCC `-fprofile-arcs' option is executed.  A separate
21505`.gcda' file is created for each object file compiled with this option.
21506It contains arc transition counts, and some summary information.
21507
21508 The full details of the file format is specified in `gcov-io.h', and
21509functions provided in that header file should be used to access the
21510coverage files.
21511
21512
21513File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
21514
2151510 Known Causes of Trouble with GCC
21516***********************************
21517
21518This section describes known problems that affect users of GCC.  Most
21519of these are not GCC bugs per se--if they were, we would fix them.  But
21520the result for a user may be like the result of a bug.
21521
21522 Some of these problems are due to bugs in other software, some are
21523missing features that are too much work to add, and some are places
21524where people's opinions differ as to what is best.
21525
21526* Menu:
21527
21528* Actual Bugs::		      Bugs we will fix later.
21529* Cross-Compiler Problems::   Common problems of cross compiling with GCC.
21530* Interoperation::      Problems using GCC with other compilers,
21531			   and with certain linkers, assemblers and debuggers.
21532* External Bugs::	Problems compiling certain programs.
21533* Incompatibilities::   GCC is incompatible with traditional C.
21534* Fixed Headers::       GCC uses corrected versions of system header files.
21535                           This is necessary, but doesn't always work smoothly.
21536* Standard Libraries::  GCC uses the system C library, which might not be
21537                           compliant with the ISO C standard.
21538* Disappointments::     Regrettable things we can't change, but not quite bugs.
21539* C++ Misunderstandings::     Common misunderstandings with GNU C++.
21540* Protoize Caveats::    Things to watch out for when using `protoize'.
21541* Non-bugs::		Things we think are right, but some others disagree.
21542* Warnings and Errors:: Which problems in your code get warnings,
21543                         and which get errors.
21544
21545
21546File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
21547
2154810.1 Actual Bugs We Haven't Fixed Yet
21549=====================================
21550
21551   * The `fixincludes' script interacts badly with automounters; if the
21552     directory of system header files is automounted, it tends to be
21553     unmounted while `fixincludes' is running.  This would seem to be a
21554     bug in the automounter.  We don't know any good way to work around
21555     it.
21556
21557   * The `fixproto' script will sometimes add prototypes for the
21558     `sigsetjmp' and `siglongjmp' functions that reference the
21559     `jmp_buf' type before that type is defined.  To work around this,
21560     edit the offending file and place the typedef in front of the
21561     prototypes.
21562
21563   * When `-pedantic-errors' is specified, GCC will incorrectly give an
21564     error message when a function name is specified in an expression
21565     involving the comma operator.
21566
21567
21568File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
21569
2157010.2 Cross-Compiler Problems
21571============================
21572
21573You may run into problems with cross compilation on certain machines,
21574for several reasons.
21575
21576   * Cross compilation can run into trouble for certain machines because
21577     some target machines' assemblers require floating point numbers to
21578     be written as _integer_ constants in certain contexts.
21579
21580     The compiler writes these integer constants by examining the
21581     floating point value as an integer and printing that integer,
21582     because this is simple to write and independent of the details of
21583     the floating point representation.  But this does not work if the
21584     compiler is running on a different machine with an incompatible
21585     floating point format, or even a different byte-ordering.
21586
21587     In addition, correct constant folding of floating point values
21588     requires representing them in the target machine's format.  (The C
21589     standard does not quite require this, but in practice it is the
21590     only way to win.)
21591
21592     It is now possible to overcome these problems by defining macros
21593     such as `REAL_VALUE_TYPE'.  But doing so is a substantial amount of
21594     work for each target machine.  *Note Cross Compilation and
21595     Floating Point: (gccint)Cross-compilation.
21596
21597   * At present, the program `mips-tfile' which adds debug support to
21598     object files on MIPS systems does not work in a cross compile
21599     environment.
21600
21601
21602File: gcc.info,  Node: Interoperation,  Next: External Bugs,  Prev: Cross-Compiler Problems,  Up: Trouble
21603
2160410.3 Interoperation
21605===================
21606
21607This section lists various difficulties encountered in using GCC
21608together with other compilers or with the assemblers, linkers,
21609libraries and debuggers on certain systems.
21610
21611   * On many platforms, GCC supports a different ABI for C++ than do
21612     other compilers, so the object files compiled by GCC cannot be
21613     used with object files generated by another C++ compiler.
21614
21615     An area where the difference is most apparent is name mangling.
21616     The use of different name mangling is intentional, to protect you
21617     from more subtle problems.  Compilers differ as to many internal
21618     details of C++ implementation, including: how class instances are
21619     laid out, how multiple inheritance is implemented, and how virtual
21620     function calls are handled.  If the name encoding were made the
21621     same, your programs would link against libraries provided from
21622     other compilers--but the programs would then crash when run.
21623     Incompatible libraries are then detected at link time, rather than
21624     at run time.
21625
21626   * Older GDB versions sometimes fail to read the output of GCC version
21627     2.  If you have trouble, get GDB version 4.4 or later.
21628
21629   * DBX rejects some files produced by GCC, though it accepts similar
21630     constructs in output from PCC.  Until someone can supply a coherent
21631     description of what is valid DBX input and what is not, there is
21632     nothing that can be done about these problems.
21633
21634   * The GNU assembler (GAS) does not support PIC.  To generate PIC
21635     code, you must use some other assembler, such as `/bin/as'.
21636
21637   * On some BSD systems, including some versions of Ultrix, use of
21638     profiling causes static variable destructors (currently used only
21639     in C++) not to be run.
21640
21641   * On some SGI systems, when you use `-lgl_s' as an option, it gets
21642     translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
21643     does not happen when you use GCC.  You must specify all three
21644     options explicitly.
21645
21646   * On a SPARC, GCC aligns all values of type `double' on an 8-byte
21647     boundary, and it expects every `double' to be so aligned.  The Sun
21648     compiler usually gives `double' values 8-byte alignment, with one
21649     exception: function arguments of type `double' may not be aligned.
21650
21651     As a result, if a function compiled with Sun CC takes the address
21652     of an argument of type `double' and passes this pointer of type
21653     `double *' to a function compiled with GCC, dereferencing the
21654     pointer may cause a fatal signal.
21655
21656     One way to solve this problem is to compile your entire program
21657     with GCC.  Another solution is to modify the function that is
21658     compiled with Sun CC to copy the argument into a local variable;
21659     local variables are always properly aligned.  A third solution is
21660     to modify the function that uses the pointer to dereference it via
21661     the following function `access_double' instead of directly with
21662     `*':
21663
21664          inline double
21665          access_double (double *unaligned_ptr)
21666          {
21667            union d2i { double d; int i[2]; };
21668
21669            union d2i *p = (union d2i *) unaligned_ptr;
21670            union d2i u;
21671
21672            u.i[0] = p->i[0];
21673            u.i[1] = p->i[1];
21674
21675            return u.d;
21676          }
21677
21678     Storing into the pointer can be done likewise with the same union.
21679
21680   * On Solaris, the `malloc' function in the `libmalloc.a' library may
21681     allocate memory that is only 4 byte aligned.  Since GCC on the
21682     SPARC assumes that doubles are 8 byte aligned, this may result in a
21683     fatal signal if doubles are stored in memory allocated by the
21684     `libmalloc.a' library.
21685
21686     The solution is to not use the `libmalloc.a' library.  Use instead
21687     `malloc' and related functions from `libc.a'; they do not have
21688     this problem.
21689
21690   * Sun forgot to include a static version of `libdl.a' with some
21691     versions of SunOS (mainly 4.1).  This results in undefined symbols
21692     when linking static binaries (that is, if you use `-static').  If
21693     you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when
21694     linking, compile and link against the file `mit/util/misc/dlsym.c'
21695     from the MIT version of X windows.
21696
21697   * The 128-bit long double format that the SPARC port supports
21698     currently works by using the architecturally defined quad-word
21699     floating point instructions.  Since there is no hardware that
21700     supports these instructions they must be emulated by the operating
21701     system.  Long doubles do not work in Sun OS versions 4.0.3 and
21702     earlier, because the kernel emulator uses an obsolete and
21703     incompatible format.  Long doubles do not work in Sun OS version
21704     4.1.1 due to a problem in a Sun library.  Long doubles do work on
21705     Sun OS versions 4.1.2 and higher, but GCC does not enable them by
21706     default.  Long doubles appear to work in Sun OS 5.x (Solaris 2.x).
21707
21708   * On HP-UX version 9.01 on the HP PA, the HP compiler `cc' does not
21709     compile GCC correctly.  We do not yet know why.  However, GCC
21710     compiled on earlier HP-UX versions works properly on HP-UX 9.01
21711     and can compile itself properly on 9.01.
21712
21713   * On the HP PA machine, ADB sometimes fails to work on functions
21714     compiled with GCC.  Specifically, it fails to work on functions
21715     that use `alloca' or variable-size arrays.  This is because GCC
21716     doesn't generate HP-UX unwind descriptors for such functions.  It
21717     may even be impossible to generate them.
21718
21719   * Debugging (`-g') is not supported on the HP PA machine, unless you
21720     use the preliminary GNU tools.
21721
21722   * Taking the address of a label may generate errors from the HP-UX
21723     PA assembler.  GAS for the PA does not have this problem.
21724
21725   * Using floating point parameters for indirect calls to static
21726     functions will not work when using the HP assembler.  There simply
21727     is no way for GCC to specify what registers hold arguments for
21728     static functions when using the HP assembler.  GAS for the PA does
21729     not have this problem.
21730
21731   * In extremely rare cases involving some very large functions you may
21732     receive errors from the HP linker complaining about an out of
21733     bounds unconditional branch offset.  This used to occur more often
21734     in previous versions of GCC, but is now exceptionally rare.  If
21735     you should run into it, you can work around by making your
21736     function smaller.
21737
21738   * GCC compiled code sometimes emits warnings from the HP-UX
21739     assembler of the form:
21740
21741          (warning) Use of GR3 when
21742            frame >= 8192 may cause conflict.
21743
21744     These warnings are harmless and can be safely ignored.
21745
21746   * On the IBM RS/6000, compiling code of the form
21747
21748          extern int foo;
21749
21750          ... foo ...
21751
21752          static int foo;
21753
21754     will cause the linker to report an undefined symbol `foo'.
21755     Although this behavior differs from most other systems, it is not a
21756     bug because redefining an `extern' variable as `static' is
21757     undefined in ISO C.
21758
21759   * In extremely rare cases involving some very large functions you may
21760     receive errors from the AIX Assembler complaining about a
21761     displacement that is too large.  If you should run into it, you
21762     can work around by making your function smaller.
21763
21764   * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
21765     semantics which merges global symbols between libraries and
21766     applications, especially necessary for C++ streams functionality.
21767     This is not the default behavior of AIX shared libraries and
21768     dynamic linking.  `libstdc++.a' is built on AIX with
21769     "runtime-linking" enabled so that symbol merging can occur.  To
21770     utilize this feature, the application linked with `libstdc++.a'
21771     must include the `-Wl,-brtl' flag on the link line.  G++ cannot
21772     impose this because this option may interfere with the semantics
21773     of the user program and users may not always use `g++' to link his
21774     or her application. Applications are not required to use the
21775     `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
21776     library which is not dependent on the symbol merging semantics
21777     will continue to function correctly.
21778
21779   * An application can interpose its own definition of functions for
21780     functions invoked by `libstdc++.a' with "runtime-linking" enabled
21781     on AIX.  To accomplish this the application must be linked with
21782     "runtime-linking" option and the functions explicitly must be
21783     exported by the application (`-Wl,-brtl,-bE:exportfile').
21784
21785   * AIX on the RS/6000 provides support (NLS) for environments outside
21786     of the United States.  Compilers and assemblers use NLS to support
21787     locale-specific representations of various objects including
21788     floating-point numbers (`.' vs `,' for separating decimal
21789     fractions). There have been problems reported where the library
21790     linked with GCC does not produce the same floating-point formats
21791     that the assembler accepts. If you have this problem, set the
21792     `LANG' environment variable to `C' or `En_US'.
21793
21794   * Even if you specify `-fdollars-in-identifiers', you cannot
21795     successfully use `$' in identifiers on the RS/6000 due to a
21796     restriction in the IBM assembler.  GAS supports these identifiers.
21797
21798   * On Ultrix, the Fortran compiler expects registers 2 through 5 to
21799     be saved by function calls.  However, the C compiler uses
21800     conventions compatible with BSD Unix: registers 2 through 5 may be
21801     clobbered by function calls.
21802
21803     GCC uses the same convention as the Ultrix C compiler.  You can use
21804     these options to produce code compatible with the Fortran compiler:
21805
21806          -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
21807
21808   * On the Alpha, you may get assembler errors about invalid syntax as
21809     a result of floating point constants.  This is due to a bug in the
21810     C library functions `ecvt', `fcvt' and `gcvt'.  Given valid
21811     floating point numbers, they sometimes print `NaN'.
21812
21813
21814File: gcc.info,  Node: External Bugs,  Next: Incompatibilities,  Prev: Interoperation,  Up: Trouble
21815
2181610.4 Problems Compiling Certain Programs
21817========================================
21818
21819Certain programs have problems compiling.
21820
21821   * Parse errors may occur compiling X11 on a Decstation running
21822     Ultrix 4.2 because of problems in DEC's versions of the X11 header
21823     files `X11/Xlib.h' and `X11/Xutil.h'.  People recommend adding
21824     `-I/usr/include/mit' to use the MIT versions of the header files,
21825     or fixing the header files by adding this:
21826
21827          #ifdef __STDC__
21828          #define NeedFunctionPrototypes 0
21829          #endif
21830
21831   * On various 386 Unix systems derived from System V, including SCO,
21832     ISC, and ESIX, you may get error messages about running out of
21833     virtual memory while compiling certain programs.
21834
21835     You can prevent this problem by linking GCC with the GNU malloc
21836     (which thus replaces the malloc that comes with the system).  GNU
21837     malloc is available as a separate package, and also in the file
21838     `src/gmalloc.c' in the GNU Emacs 19 distribution.
21839
21840     If you have installed GNU malloc as a separate library package,
21841     use this option when you relink GCC:
21842
21843          MALLOC=/usr/local/lib/libgmalloc.a
21844
21845     Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy
21846     the object file to `gmalloc.o' and use this option when you relink
21847     GCC:
21848
21849          MALLOC=gmalloc.o
21850
21851
21852File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: External Bugs,  Up: Trouble
21853
2185410.5 Incompatibilities of GCC
21855=============================
21856
21857There are several noteworthy incompatibilities between GNU C and K&R
21858(non-ISO) versions of C.
21859
21860   * GCC normally makes string constants read-only.  If several
21861     identical-looking string constants are used, GCC stores only one
21862     copy of the string.
21863
21864     One consequence is that you cannot call `mktemp' with a string
21865     constant argument.  The function `mktemp' always alters the string
21866     its argument points to.
21867
21868     Another consequence is that `sscanf' does not work on some systems
21869     when passed a string constant as its format control string or
21870     input.  This is because `sscanf' incorrectly tries to write into
21871     the string constant.  Likewise `fscanf' and `scanf'.
21872
21873     The best solution to these problems is to change the program to use
21874     `char'-array variables with initialization strings for these
21875     purposes instead of string constants.  But if this is not possible,
21876     you can use the `-fwritable-strings' flag, which directs GCC to
21877     handle string constants the same way most C compilers do.
21878
21879   * `-2147483648' is positive.
21880
21881     This is because 2147483648 cannot fit in the type `int', so
21882     (following the ISO C rules) its data type is `unsigned long int'.
21883     Negating this value yields 2147483648 again.
21884
21885   * GCC does not substitute macro arguments when they appear inside of
21886     string constants.  For example, the following macro in GCC
21887
21888          #define foo(a) "a"
21889
21890     will produce output `"a"' regardless of what the argument A is.
21891
21892   * When you use `setjmp' and `longjmp', the only automatic variables
21893     guaranteed to remain valid are those declared `volatile'.  This is
21894     a consequence of automatic register allocation.  Consider this
21895     function:
21896
21897          jmp_buf j;
21898
21899          foo ()
21900          {
21901            int a, b;
21902
21903            a = fun1 ();
21904            if (setjmp (j))
21905              return a;
21906
21907            a = fun2 ();
21908            /* `longjmp (j)' may occur in `fun3'. */
21909            return a + fun3 ();
21910          }
21911
21912     Here `a' may or may not be restored to its first value when the
21913     `longjmp' occurs.  If `a' is allocated in a register, then its
21914     first value is restored; otherwise, it keeps the last value stored
21915     in it.
21916
21917     If you use the `-W' option with the `-O' option, you will get a
21918     warning when GCC thinks such a problem might be possible.
21919
21920   * Programs that use preprocessing directives in the middle of macro
21921     arguments do not work with GCC.  For example, a program like this
21922     will not work:
21923
21924          foobar (
21925          #define luser
21926                  hack)
21927
21928     ISO C does not permit such a construct.
21929
21930   * K&R compilers allow comments to cross over an inclusion boundary
21931     (i.e. started in an include file and ended in the including file).
21932
21933   * Declarations of external variables and functions within a block
21934     apply only to the block containing the declaration.  In other
21935     words, they have the same scope as any other declaration in the
21936     same place.
21937
21938     In some other C compilers, a `extern' declaration affects all the
21939     rest of the file even if it happens within a block.
21940
21941   * In traditional C, you can combine `long', etc., with a typedef
21942     name, as shown here:
21943
21944          typedef int foo;
21945          typedef long foo bar;
21946
21947     In ISO C, this is not allowed: `long' and other type modifiers
21948     require an explicit `int'.
21949
21950   * PCC allows typedef names to be used as function parameters.
21951
21952   * Traditional C allows the following erroneous pair of declarations
21953     to appear together in a given scope:
21954
21955          typedef int foo;
21956          typedef foo foo;
21957
21958   * GCC treats all characters of identifiers as significant.
21959     According to K&R-1 (2.2), "No more than the first eight characters
21960     are significant, although more may be used.".  Also according to
21961     K&R-1 (2.2), "An identifier is a sequence of letters and digits;
21962     the first character must be a letter.  The underscore _ counts as
21963     a letter.", but GCC also allows dollar signs in identifiers.
21964
21965   * PCC allows whitespace in the middle of compound assignment
21966     operators such as `+='.  GCC, following the ISO standard, does not
21967     allow this.
21968
21969   * GCC complains about unterminated character constants inside of
21970     preprocessing conditionals that fail.  Some programs have English
21971     comments enclosed in conditionals that are guaranteed to fail; if
21972     these comments contain apostrophes, GCC will probably report an
21973     error.  For example, this code would produce an error:
21974
21975          #if 0
21976          You can't expect this to work.
21977          #endif
21978
21979     The best solution to such a problem is to put the text into an
21980     actual C comment delimited by `/*...*/'.
21981
21982   * Many user programs contain the declaration `long time ();'.  In the
21983     past, the system header files on many systems did not actually
21984     declare `time', so it did not matter what type your program
21985     declared it to return.  But in systems with ISO C headers, `time'
21986     is declared to return `time_t', and if that is not the same as
21987     `long', then `long time ();' is erroneous.
21988
21989     The solution is to change your program to use appropriate system
21990     headers (`<time.h>' on systems with ISO C headers) and not to
21991     declare `time' if the system header files declare it, or failing
21992     that to use `time_t' as the return type of `time'.
21993
21994   * When compiling functions that return `float', PCC converts it to a
21995     double.  GCC actually returns a `float'.  If you are concerned
21996     with PCC compatibility, you should declare your functions to return
21997     `double'; you might as well say what you mean.
21998
21999   * When compiling functions that return structures or unions, GCC
22000     output code normally uses a method different from that used on most
22001     versions of Unix.  As a result, code compiled with GCC cannot call
22002     a structure-returning function compiled with PCC, and vice versa.
22003
22004     The method used by GCC is as follows: a structure or union which is
22005     1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
22006     union with any other size is stored into an address supplied by
22007     the caller (usually in a special, fixed register, but on some
22008     machines it is passed on the stack).  The target hook
22009     `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
22010
22011     By contrast, PCC on most target machines returns structures and
22012     unions of any size by copying the data into an area of static
22013     storage, and then returning the address of that storage as if it
22014     were a pointer value.  The caller must copy the data from that
22015     memory area to the place where the value is wanted.  GCC does not
22016     use this method because it is slower and nonreentrant.
22017
22018     On some newer machines, PCC uses a reentrant convention for all
22019     structure and union returning.  GCC on most of these machines uses
22020     a compatible convention when returning structures and unions in
22021     memory, but still returns small structures and unions in registers.
22022
22023     You can tell GCC to use a compatible convention for all structure
22024     and union returning with the option `-fpcc-struct-return'.
22025
22026   * GCC complains about program fragments such as `0x74ae-0x4000'
22027     which appear to be two hexadecimal constants separated by the minus
22028     operator.  Actually, this string is a single "preprocessing token".
22029     Each such token must correspond to one token in C.  Since this
22030     does not, GCC prints an error message.  Although it may appear
22031     obvious that what is meant is an operator and two values, the ISO
22032     C standard specifically requires that this be treated as erroneous.
22033
22034     A "preprocessing token" is a "preprocessing number" if it begins
22035     with a digit and is followed by letters, underscores, digits,
22036     periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
22037     character sequences.  (In strict C89 mode, the sequences `p+',
22038     `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
22039
22040     To make the above program fragment valid, place whitespace in
22041     front of the minus sign.  This whitespace will end the
22042     preprocessing number.
22043
22044
22045File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
22046
2204710.6 Fixed Header Files
22048=======================
22049
22050GCC needs to install corrected versions of some system header files.
22051This is because most target systems have some header files that won't
22052work with GCC unless they are changed.  Some have bugs, some are
22053incompatible with ISO C, and some depend on special features of other
22054compilers.
22055
22056 Installing GCC automatically creates and installs the fixed header
22057files, by running a program called `fixincludes' (or for certain
22058targets an alternative such as `fixinc.svr4').  Normally, you don't
22059need to pay attention to this.  But there are cases where it doesn't do
22060the right thing automatically.
22061
22062   * If you update the system's header files, such as by installing a
22063     new system version, the fixed header files of GCC are not
22064     automatically updated.  The easiest way to update them is to
22065     reinstall GCC.  (If you want to be clever, look in the makefile
22066     and you can find a shortcut.)
22067
22068   * On some systems, in particular SunOS 4, header file directories
22069     contain machine-specific symbolic links in certain places.  This
22070     makes it possible to share most of the header files among hosts
22071     running the same version of SunOS 4 on different machine models.
22072
22073     The programs that fix the header files do not understand this
22074     special way of using symbolic links; therefore, the directory of
22075     fixed header files is good only for the machine model used to
22076     build it.
22077
22078     In SunOS 4, only programs that look inside the kernel will notice
22079     the difference between machine models.  Therefore, for most
22080     purposes, you need not be concerned about this.
22081
22082     It is possible to make separate sets of fixed header files for the
22083     different machine models, and arrange a structure of symbolic
22084     links so as to use the proper set, but you'll have to do this by
22085     hand.
22086
22087   * On Lynxos, GCC by default does not fix the header files.  This is
22088     because bugs in the shell cause the `fixincludes' script to fail.
22089
22090     This means you will encounter problems due to bugs in the system
22091     header files.  It may be no comfort that they aren't GCC's fault,
22092     but it does mean that there's nothing for us to do about them.
22093
22094
22095File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
22096
2209710.7 Standard Libraries
22098=======================
22099
22100GCC by itself attempts to be a conforming freestanding implementation.
22101*Note Language Standards Supported by GCC: Standards, for details of
22102what this means.  Beyond the library facilities required of such an
22103implementation, the rest of the C library is supplied by the vendor of
22104the operating system.  If that C library doesn't conform to the C
22105standards, then your programs might get warnings (especially when using
22106`-Wall') that you don't expect.
22107
22108 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
22109while the C standard says that `sprintf' returns an `int'.  The
22110`fixincludes' program could make the prototype for this function match
22111the Standard, but that would be wrong, since the function will still
22112return `char *'.
22113
22114 If you need a Standard compliant library, then you need to find one, as
22115GCC does not provide one.  The GNU C library (called `glibc') provides
22116ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
22117HURD-based GNU systems; no recent version of it supports other systems,
22118though some very old versions did.  Version 2.2 of the GNU C library
22119includes nearly complete C99 support.  You could also ask your
22120operating system vendor if newer libraries are available.
22121
22122
22123File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
22124
2212510.8 Disappointments and Misunderstandings
22126==========================================
22127
22128These problems are perhaps regrettable, but we don't know any practical
22129way around them.
22130
22131   * Certain local variables aren't recognized by debuggers when you
22132     compile with optimization.
22133
22134     This occurs because sometimes GCC optimizes the variable out of
22135     existence.  There is no way to tell the debugger how to compute the
22136     value such a variable "would have had", and it is not clear that
22137     would be desirable anyway.  So GCC simply does not mention the
22138     eliminated variable when it writes debugging information.
22139
22140     You have to expect a certain amount of disagreement between the
22141     executable and your source code, when you use optimization.
22142
22143   * Users often think it is a bug when GCC reports an error for code
22144     like this:
22145
22146          int foo (struct mumble *);
22147
22148          struct mumble { ... };
22149
22150          int foo (struct mumble *x)
22151          { ... }
22152
22153     This code really is erroneous, because the scope of `struct
22154     mumble' in the prototype is limited to the argument list
22155     containing it.  It does not refer to the `struct mumble' defined
22156     with file scope immediately below--they are two unrelated types
22157     with similar names in different scopes.
22158
22159     But in the definition of `foo', the file-scope type is used
22160     because that is available to be inherited.  Thus, the definition
22161     and the prototype do not match, and you get an error.
22162
22163     This behavior may seem silly, but it's what the ISO standard
22164     specifies.  It is easy enough for you to make your code work by
22165     moving the definition of `struct mumble' above the prototype.
22166     It's not worth being incompatible with ISO C just to avoid an
22167     error for the example shown above.
22168
22169   * Accesses to bit-fields even in volatile objects works by accessing
22170     larger objects, such as a byte or a word.  You cannot rely on what
22171     size of object is accessed in order to read or write the
22172     bit-field; it may even vary for a given bit-field according to the
22173     precise usage.
22174
22175     If you care about controlling the amount of memory that is
22176     accessed, use volatile but do not use bit-fields.
22177
22178   * GCC comes with shell scripts to fix certain known problems in
22179     system header files.  They install corrected copies of various
22180     header files in a special directory where only GCC will normally
22181     look for them.  The scripts adapt to various systems by searching
22182     all the system header files for the problem cases that we know
22183     about.
22184
22185     If new system header files are installed, nothing automatically
22186     arranges to update the corrected header files.  You will have to
22187     reinstall GCC to fix the new header files.  More specifically, go
22188     to the build directory and delete the files `stmp-fixinc' and
22189     `stmp-headers', and the subdirectory `include'; then do `make
22190     install' again.
22191
22192   * On 68000 and x86 systems, for instance, you can get paradoxical
22193     results if you test the precise values of floating point numbers.
22194     For example, you can find that a floating point value which is not
22195     a NaN is not equal to itself.  This results from the fact that the
22196     floating point registers hold a few more bits of precision than
22197     fit in a `double' in memory.  Compiled code moves values between
22198     memory and floating point registers at its convenience, and moving
22199     them into memory truncates them.
22200
22201     You can partially avoid this problem by using the `-ffloat-store'
22202     option (*note Optimize Options::).
22203
22204   * On AIX and other platforms without weak symbol support, templates
22205     need to be instantiated explicitly and symbols for static members
22206     of templates will not be generated.
22207
22208   * On AIX, GCC scans object files and library archives for static
22209     constructors and destructors when linking an application before the
22210     linker prunes unreferenced symbols.  This is necessary to prevent
22211     the AIX linker from mistakenly assuming that static constructor or
22212     destructor are unused and removing them before the scanning can
22213     occur.  All static constructors and destructors found will be
22214     referenced even though the modules in which they occur may not be
22215     used by the program.  This may lead to both increased executable
22216     size and unexpected symbol references.
22217
22218
22219File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
22220
2222110.9 Common Misunderstandings with GNU C++
22222==========================================
22223
22224C++ is a complex language and an evolving one, and its standard
22225definition (the ISO C++ standard) was only recently completed.  As a
22226result, your C++ compiler may occasionally surprise you, even when its
22227behavior is correct.  This section discusses some areas that frequently
22228give rise to questions of this sort.
22229
22230* Menu:
22231
22232* Static Definitions::  Static member declarations are not definitions
22233* Name lookup::         Name lookup, templates, and accessing members of base classes
22234* Temporaries::         Temporaries may vanish before you expect
22235* Copy Assignment::     Copy Assignment operators copy virtual bases twice
22236
22237
22238File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
22239
2224010.9.1 Declare _and_ Define Static Members
22241------------------------------------------
22242
22243When a class has static data members, it is not enough to _declare_ the
22244static member; you must also _define_ it.  For example:
22245
22246     class Foo
22247     {
22248       ...
22249       void method();
22250       static int bar;
22251     };
22252
22253 This declaration only establishes that the class `Foo' has an `int'
22254named `Foo::bar', and a member function named `Foo::method'.  But you
22255still need to define _both_ `method' and `bar' elsewhere.  According to
22256the ISO standard, you must supply an initializer in one (and only one)
22257source file, such as:
22258
22259     int Foo::bar = 0;
22260
22261 Other C++ compilers may not correctly implement the standard behavior.
22262As a result, when you switch to `g++' from one of these compilers, you
22263may discover that a program that appeared to work correctly in fact
22264does not conform to the standard: `g++' reports as undefined symbols
22265any static data members that lack definitions.
22266
22267
22268File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
22269
2227010.9.2 Name lookup, templates, and accessing members of base classes
22271--------------------------------------------------------------------
22272
22273The C++ standard prescribes that all names that are not dependent on
22274template parameters are bound to their present definitions when parsing
22275a template function or class.(1)  Only names that are dependent are
22276looked up at the point of instantiation.  For example, consider
22277
22278       void foo(double);
22279
22280       struct A {
22281         template <typename T>
22282         void f () {
22283           foo (1);        // 1
22284           int i = N;      // 2
22285           T t;
22286           t.bar();        // 3
22287           foo (t);        // 4
22288         }
22289
22290         static const int N;
22291       };
22292
22293 Here, the names `foo' and `N' appear in a context that does not depend
22294on the type of `T'.  The compiler will thus require that they are
22295defined in the context of use in the template, not only before the
22296point of instantiation, and will here use `::foo(double)' and `A::N',
22297respectively.  In particular, it will convert the integer value to a
22298`double' when passing it to `::foo(double)'.
22299
22300 Conversely, `bar' and the call to `foo' in the fourth marked line are
22301used in contexts that do depend on the type of `T', so they are only
22302looked up at the point of instantiation, and you can provide
22303declarations for them after declaring the template, but before
22304instantiating it.  In particular, if you instantiate `A::f<int>', the
22305last line will call an overloaded `::foo(int)' if one was provided,
22306even if after the declaration of `struct A'.
22307
22308 This distinction between lookup of dependent and non-dependent names is
22309called two-stage (or dependent) name lookup.  G++ implements it since
22310version 3.4.
22311
22312 Two-stage name lookup sometimes leads to situations with behavior
22313different from non-template codes. The most common is probably this:
22314
22315       template <typename T> struct Base {
22316         int i;
22317       };
22318
22319       template <typename T> struct Derived : public Base<T> {
22320         int get_i() { return i; }
22321       };
22322
22323 In `get_i()', `i' is not used in a dependent context, so the compiler
22324will look for a name declared at the enclosing namespace scope (which
22325is the global scope here).  It will not look into the base class, since
22326that is dependent and you may declare specializations of `Base' even
22327after declaring `Derived', so the compiler can't really know what `i'
22328would refer to.  If there is no global variable `i', then you will get
22329an error message.
22330
22331 In order to make it clear that you want the member of the base class,
22332you need to defer lookup until instantiation time, at which the base
22333class is known.  For this, you need to access `i' in a dependent
22334context, by either using `this->i' (remember that `this' is of type
22335`Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
22336Alternatively, `Base<T>::i' might be brought into scope by a
22337`using'-declaration.
22338
22339 Another, similar example involves calling member functions of a base
22340class:
22341
22342       template <typename T> struct Base {
22343           int f();
22344       };
22345
22346       template <typename T> struct Derived : Base<T> {
22347           int g() { return f(); };
22348       };
22349
22350 Again, the call to `f()' is not dependent on template arguments (there
22351are no arguments that depend on the type `T', and it is also not
22352otherwise specified that the call should be in a dependent context).
22353Thus a global declaration of such a function must be available, since
22354the one in the base class is not visible until instantiation time.  The
22355compiler will consequently produce the following error message:
22356
22357       x.cc: In member function `int Derived<T>::g()':
22358       x.cc:6: error: there are no arguments to `f' that depend on a template
22359          parameter, so a declaration of `f' must be available
22360       x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
22361          allowing the use of an undeclared name is deprecated)
22362
22363 To make the code valid either use `this->f()', or `Base<T>::f()'.
22364Using the `-fpermissive' flag will also let the compiler accept the
22365code, by marking all function calls for which no declaration is visible
22366at the time of definition of the template for later lookup at
22367instantiation time, as if it were a dependent call.  We do not
22368recommend using `-fpermissive' to work around invalid code, and it will
22369also only catch cases where functions in base classes are called, not
22370where variables in base classes are used (as in the example above).
22371
22372 Note that some compilers (including G++ versions prior to 3.4) get
22373these examples wrong and accept above code without an error.  Those
22374compilers do not implement two-stage name lookup correctly.
22375
22376 ---------- Footnotes ----------
22377
22378 (1) The C++ standard just uses the term "dependent" for names that
22379depend on the type or value of template parameters.  This shorter term
22380will also be used in the rest of this section.
22381
22382
22383File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
22384
2238510.9.3 Temporaries May Vanish Before You Expect
22386-----------------------------------------------
22387
22388It is dangerous to use pointers or references to _portions_ of a
22389temporary object.  The compiler may very well delete the object before
22390you expect it to, leaving a pointer to garbage.  The most common place
22391where this problem crops up is in classes like string classes,
22392especially ones that define a conversion function to type `char *' or
22393`const char *'--which is one reason why the standard `string' class
22394requires you to call the `c_str' member function.  However, any class
22395that returns a pointer to some internal structure is potentially
22396subject to this problem.
22397
22398 For example, a program may use a function `strfunc' that returns
22399`string' objects, and another function `charfunc' that operates on
22400pointers to `char':
22401
22402     string strfunc ();
22403     void charfunc (const char *);
22404
22405     void
22406     f ()
22407     {
22408       const char *p = strfunc().c_str();
22409       ...
22410       charfunc (p);
22411       ...
22412       charfunc (p);
22413     }
22414
22415In this situation, it may seem reasonable to save a pointer to the C
22416string returned by the `c_str' member function and use that rather than
22417call `c_str' repeatedly.  However, the temporary string created by the
22418call to `strfunc' is destroyed after `p' is initialized, at which point
22419`p' is left pointing to freed memory.
22420
22421 Code like this may run successfully under some other compilers,
22422particularly obsolete cfront-based compilers that delete temporaries
22423along with normal local variables.  However, the GNU C++ behavior is
22424standard-conforming, so if your program depends on late destruction of
22425temporaries it is not portable.
22426
22427 The safe way to write such code is to give the temporary a name, which
22428forces it to remain until the end of the scope of the name.  For
22429example:
22430
22431     const string& tmp = strfunc ();
22432     charfunc (tmp.c_str ());
22433
22434
22435File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
22436
2243710.9.4 Implicit Copy-Assignment for Virtual Bases
22438-------------------------------------------------
22439
22440When a base class is virtual, only one subobject of the base class
22441belongs to each full object.  Also, the constructors and destructors are
22442invoked only once, and called from the most-derived class.  However,
22443such objects behave unspecified when being assigned.  For example:
22444
22445     struct Base{
22446       char *name;
22447       Base(char *n) : name(strdup(n)){}
22448       Base& operator= (const Base& other){
22449        free (name);
22450        name = strdup (other.name);
22451       }
22452     };
22453
22454     struct A:virtual Base{
22455       int val;
22456       A():Base("A"){}
22457     };
22458
22459     struct B:virtual Base{
22460       int bval;
22461       B():Base("B"){}
22462     };
22463
22464     struct Derived:public A, public B{
22465       Derived():Base("Derived"){}
22466     };
22467
22468     void func(Derived &d1, Derived &d2)
22469     {
22470       d1 = d2;
22471     }
22472
22473 The C++ standard specifies that `Base::Base' is only called once when
22474constructing or copy-constructing a Derived object.  It is unspecified
22475whether `Base::operator=' is called more than once when the implicit
22476copy-assignment for Derived objects is invoked (as it is inside `func'
22477in the example).
22478
22479 G++ implements the "intuitive" algorithm for copy-assignment: assign
22480all direct bases, then assign all members.  In that algorithm, the
22481virtual base subobject can be encountered more than once.  In the
22482example, copying proceeds in the following order: `val', `name' (via
22483`strdup'), `bval', and `name' again.
22484
22485 If application code relies on copy-assignment, a user-defined
22486copy-assignment operator removes any uncertainties.  With such an
22487operator, the application can define whether and how the virtual base
22488subobject is assigned.
22489
22490
22491File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
22492
2249310.10 Caveats of using `protoize'
22494=================================
22495
22496The conversion programs `protoize' and `unprotoize' can sometimes
22497change a source file in a way that won't work unless you rearrange it.
22498
22499   * `protoize' can insert references to a type name or type tag before
22500     the definition, or in a file where they are not defined.
22501
22502     If this happens, compiler error messages should show you where the
22503     new references are, so fixing the file by hand is straightforward.
22504
22505   * There are some C constructs which `protoize' cannot figure out.
22506     For example, it can't determine argument types for declaring a
22507     pointer-to-function variable; this you must do by hand.  `protoize'
22508     inserts a comment containing `???' each time it finds such a
22509     variable; so you can find all such variables by searching for this
22510     string.  ISO C does not require declaring the argument types of
22511     pointer-to-function types.
22512
22513   * Using `unprotoize' can easily introduce bugs.  If the program
22514     relied on prototypes to bring about conversion of arguments, these
22515     conversions will not take place in the program without prototypes.
22516     One case in which you can be sure `unprotoize' is safe is when you
22517     are removing prototypes that were made with `protoize'; if the
22518     program worked before without any prototypes, it will work again
22519     without them.
22520
22521     You can find all the places where this problem might occur by
22522     compiling the program with the `-Wconversion' option.  It prints a
22523     warning whenever an argument is converted.
22524
22525   * Both conversion programs can be confused if there are macro calls
22526     in and around the text to be converted.  In other words, the
22527     standard syntax for a declaration or definition must not result
22528     from expanding a macro.  This problem is inherent in the design of
22529     C and cannot be fixed.  If only a few functions have confusing
22530     macro calls, you can easily convert them manually.
22531
22532   * `protoize' cannot get the argument types for a function whose
22533     definition was not actually compiled due to preprocessing
22534     conditionals.  When this happens, `protoize' changes nothing in
22535     regard to such a function.  `protoize' tries to detect such
22536     instances and warn about them.
22537
22538     You can generally work around this problem by using `protoize' step
22539     by step, each time specifying a different set of `-D' options for
22540     compilation, until all of the functions have been converted.
22541     There is no automatic way to verify that you have got them all,
22542     however.
22543
22544   * Confusion may result if there is an occasion to convert a function
22545     declaration or definition in a region of source code where there
22546     is more than one formal parameter list present.  Thus, attempts to
22547     convert code containing multiple (conditionally compiled) versions
22548     of a single function header (in the same vicinity) may not produce
22549     the desired (or expected) results.
22550
22551     If you plan on converting source files which contain such code, it
22552     is recommended that you first make sure that each conditionally
22553     compiled region of source code which contains an alternative
22554     function header also contains at least one additional follower
22555     token (past the final right parenthesis of the function header).
22556     This should circumvent the problem.
22557
22558   * `unprotoize' can become confused when trying to convert a function
22559     definition or declaration which contains a declaration for a
22560     pointer-to-function formal argument which has the same name as the
22561     function being defined or declared.  We recommend you avoid such
22562     choices of formal parameter names.
22563
22564   * You might also want to correct some of the indentation by hand and
22565     break long lines.  (The conversion programs don't write lines
22566     longer than eighty characters in any case.)
22567
22568
22569File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
22570
2257110.11 Certain Changes We Don't Want to Make
22572===========================================
22573
22574This section lists changes that people frequently request, but which we
22575do not make because we think GCC is better without them.
22576
22577   * Checking the number and type of arguments to a function which has
22578     an old-fashioned definition and no prototype.
22579
22580     Such a feature would work only occasionally--only for calls that
22581     appear in the same file as the called function, following the
22582     definition.  The only way to check all calls reliably is to add a
22583     prototype for the function.  But adding a prototype eliminates the
22584     motivation for this feature.  So the feature is not worthwhile.
22585
22586   * Warning about using an expression whose type is signed as a shift
22587     count.
22588
22589     Shift count operands are probably signed more often than unsigned.
22590     Warning about this would cause far more annoyance than good.
22591
22592   * Warning about assigning a signed value to an unsigned variable.
22593
22594     Such assignments must be very common; warning about them would
22595     cause more annoyance than good.
22596
22597   * Warning when a non-void function value is ignored.
22598
22599     C contains many standard functions that return a value that most
22600     programs choose to ignore.  One obvious example is `printf'.
22601     Warning about this practice only leads the defensive programmer to
22602     clutter programs with dozens of casts to `void'.  Such casts are
22603     required so frequently that they become visual noise.  Writing
22604     those casts becomes so automatic that they no longer convey useful
22605     information about the intentions of the programmer.  For functions
22606     where the return value should never be ignored, use the
22607     `warn_unused_result' function attribute (*note Function
22608     Attributes::).
22609
22610   * Making `-fshort-enums' the default.
22611
22612     This would cause storage layout to be incompatible with most other
22613     C compilers.  And it doesn't seem very important, given that you
22614     can get the same result in other ways.  The case where it matters
22615     most is when the enumeration-valued object is inside a structure,
22616     and in that case you can specify a field width explicitly.
22617
22618   * Making bit-fields unsigned by default on particular machines where
22619     "the ABI standard" says to do so.
22620
22621     The ISO C standard leaves it up to the implementation whether a
22622     bit-field declared plain `int' is signed or not.  This in effect
22623     creates two alternative dialects of C.
22624
22625     The GNU C compiler supports both dialects; you can specify the
22626     signed dialect with `-fsigned-bitfields' and the unsigned dialect
22627     with `-funsigned-bitfields'.  However, this leaves open the
22628     question of which dialect to use by default.
22629
22630     Currently, the preferred dialect makes plain bit-fields signed,
22631     because this is simplest.  Since `int' is the same as `signed int'
22632     in every other context, it is cleanest for them to be the same in
22633     bit-fields as well.
22634
22635     Some computer manufacturers have published Application Binary
22636     Interface standards which specify that plain bit-fields should be
22637     unsigned.  It is a mistake, however, to say anything about this
22638     issue in an ABI.  This is because the handling of plain bit-fields
22639     distinguishes two dialects of C.  Both dialects are meaningful on
22640     every type of machine.  Whether a particular object file was
22641     compiled using signed bit-fields or unsigned is of no concern to
22642     other object files, even if they access the same bit-fields in the
22643     same data structures.
22644
22645     A given program is written in one or the other of these two
22646     dialects.  The program stands a chance to work on most any machine
22647     if it is compiled with the proper dialect.  It is unlikely to work
22648     at all if compiled with the wrong dialect.
22649
22650     Many users appreciate the GNU C compiler because it provides an
22651     environment that is uniform across machines.  These users would be
22652     inconvenienced if the compiler treated plain bit-fields
22653     differently on certain machines.
22654
22655     Occasionally users write programs intended only for a particular
22656     machine type.  On these occasions, the users would benefit if the
22657     GNU C compiler were to support by default the same dialect as the
22658     other compilers on that machine.  But such applications are rare.
22659     And users writing a program to run on more than one type of
22660     machine cannot possibly benefit from this kind of compatibility.
22661
22662     This is why GCC does and will treat plain bit-fields in the same
22663     fashion on all types of machines (by default).
22664
22665     There are some arguments for making bit-fields unsigned by default
22666     on all machines.  If, for example, this becomes a universal de
22667     facto standard, it would make sense for GCC to go along with it.
22668     This is something to be considered in the future.
22669
22670     (Of course, users strongly concerned about portability should
22671     indicate explicitly in each bit-field whether it is signed or not.
22672     In this way, they write programs which have the same meaning in
22673     both C dialects.)
22674
22675   * Undefining `__STDC__' when `-ansi' is not used.
22676
22677     Currently, GCC defines `__STDC__' unconditionally.  This provides
22678     good results in practice.
22679
22680     Programmers normally use conditionals on `__STDC__' to ask whether
22681     it is safe to use certain features of ISO C, such as function
22682     prototypes or ISO token concatenation.  Since plain `gcc' supports
22683     all the features of ISO C, the correct answer to these questions is
22684     "yes".
22685
22686     Some users try to use `__STDC__' to check for the availability of
22687     certain library facilities.  This is actually incorrect usage in
22688     an ISO C program, because the ISO C standard says that a conforming
22689     freestanding implementation should define `__STDC__' even though it
22690     does not have the library facilities.  `gcc -ansi -pedantic' is a
22691     conforming freestanding implementation, and it is therefore
22692     required to define `__STDC__', even though it does not come with
22693     an ISO C library.
22694
22695     Sometimes people say that defining `__STDC__' in a compiler that
22696     does not completely conform to the ISO C standard somehow violates
22697     the standard.  This is illogical.  The standard is a standard for
22698     compilers that claim to support ISO C, such as `gcc -ansi'--not
22699     for other compilers such as plain `gcc'.  Whatever the ISO C
22700     standard says is relevant to the design of plain `gcc' without
22701     `-ansi' only for pragmatic reasons, not as a requirement.
22702
22703     GCC normally defines `__STDC__' to be 1, and in addition defines
22704     `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
22705     option for strict conformance to some version of ISO C.  On some
22706     hosts, system include files use a different convention, where
22707     `__STDC__' is normally 0, but is 1 if the user specifies strict
22708     conformance to the C Standard.  GCC follows the host convention
22709     when processing system include files, but when processing user
22710     files it follows the usual GNU C convention.
22711
22712   * Undefining `__STDC__' in C++.
22713
22714     Programs written to compile with C++-to-C translators get the
22715     value of `__STDC__' that goes with the C compiler that is
22716     subsequently used.  These programs must test `__STDC__' to
22717     determine what kind of C preprocessor that compiler uses: whether
22718     they should concatenate tokens in the ISO C fashion or in the
22719     traditional fashion.
22720
22721     These programs work properly with GNU C++ if `__STDC__' is defined.
22722     They would not work otherwise.
22723
22724     In addition, many header files are written to provide prototypes
22725     in ISO C but not in traditional C.  Many of these header files can
22726     work without change in C++ provided `__STDC__' is defined.  If
22727     `__STDC__' is not defined, they will all fail, and will all need
22728     to be changed to test explicitly for C++ as well.
22729
22730   * Deleting "empty" loops.
22731
22732     Historically, GCC has not deleted "empty" loops under the
22733     assumption that the most likely reason you would put one in a
22734     program is to have a delay, so deleting them will not make real
22735     programs run any faster.
22736
22737     However, the rationale here is that optimization of a nonempty loop
22738     cannot produce an empty one, which holds for C but is not always
22739     the case for C++.
22740
22741     Moreover, with `-funroll-loops' small "empty" loops are already
22742     removed, so the current behavior is both sub-optimal and
22743     inconsistent and will change in the future.
22744
22745   * Making side effects happen in the same order as in some other
22746     compiler.
22747
22748     It is never safe to depend on the order of evaluation of side
22749     effects.  For example, a function call like this may very well
22750     behave differently from one compiler to another:
22751
22752          void func (int, int);
22753
22754          int i = 2;
22755          func (i++, i++);
22756
22757     There is no guarantee (in either the C or the C++ standard language
22758     definitions) that the increments will be evaluated in any
22759     particular order.  Either increment might happen first.  `func'
22760     might get the arguments `2, 3', or it might get `3, 2', or even
22761     `2, 2'.
22762
22763   * Not allowing structures with volatile fields in registers.
22764
22765     Strictly speaking, there is no prohibition in the ISO C standard
22766     against allowing structures with volatile fields in registers, but
22767     it does not seem to make any sense and is probably not what you
22768     wanted to do.  So the compiler will give an error message in this
22769     case.
22770
22771   * Making certain warnings into errors by default.
22772
22773     Some ISO C testsuites report failure when the compiler does not
22774     produce an error message for a certain program.
22775
22776     ISO C requires a "diagnostic" message for certain kinds of invalid
22777     programs, but a warning is defined by GCC to count as a
22778     diagnostic.  If GCC produces a warning but not an error, that is
22779     correct ISO C support.  If testsuites call this "failure", they
22780     should be run with the GCC option `-pedantic-errors', which will
22781     turn these warnings into errors.
22782
22783
22784
22785File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
22786
2278710.12 Warning Messages and Error Messages
22788=========================================
22789
22790The GNU compiler can produce two kinds of diagnostics: errors and
22791warnings.  Each kind has a different purpose:
22792
22793     "Errors" report problems that make it impossible to compile your
22794     program.  GCC reports errors with the source file name and line
22795     number where the problem is apparent.
22796
22797     "Warnings" report other unusual conditions in your code that _may_
22798     indicate a problem, although compilation can (and does) proceed.
22799     Warning messages also report the source file name and line number,
22800     but include the text `warning:' to distinguish them from error
22801     messages.
22802
22803 Warnings may indicate danger points where you should check to make sure
22804that your program really does what you intend; or the use of obsolete
22805features; or the use of nonstandard features of GNU C or C++.  Many
22806warnings are issued only if you ask for them, with one of the `-W'
22807options (for instance, `-Wall' requests a variety of useful warnings).
22808
22809 GCC always tries to compile your program if possible; it never
22810gratuitously rejects a program whose meaning is clear merely because
22811(for instance) it fails to conform to a standard.  In some cases,
22812however, the C and C++ standards specify that certain extensions are
22813forbidden, and a diagnostic _must_ be issued by a conforming compiler.
22814The `-pedantic' option tells GCC to issue warnings in such cases;
22815`-pedantic-errors' says to make them errors instead.  This does not
22816mean that _all_ non-ISO constructs get warnings or errors.
22817
22818 *Note Options to Request or Suppress Warnings: Warning Options, for
22819more detail on these and related command-line options.
22820
22821
22822File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
22823
2282411 Reporting Bugs
22825*****************
22826
22827Your bug reports play an essential role in making GCC reliable.
22828
22829 When you encounter a problem, the first thing to do is to see if it is
22830already known.  *Note Trouble::.  If it isn't known, then you should
22831report the problem.
22832
22833* Menu:
22834
22835* Criteria:  Bug Criteria.   Have you really found a bug?
22836* Reporting: Bug Reporting.  How to report a bug effectively.
22837* Known: Trouble.            Known problems.
22838* Help: Service.             Where to ask for help.
22839
22840
22841File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
22842
2284311.1 Have You Found a Bug?
22844==========================
22845
22846If you are not sure whether you have found a bug, here are some
22847guidelines:
22848
22849   * If the compiler gets a fatal signal, for any input whatever, that
22850     is a compiler bug.  Reliable compilers never crash.
22851
22852   * If the compiler produces invalid assembly code, for any input
22853     whatever (except an `asm' statement), that is a compiler bug,
22854     unless the compiler reports errors (not just warnings) which would
22855     ordinarily prevent the assembler from being run.
22856
22857   * If the compiler produces valid assembly code that does not
22858     correctly execute the input source code, that is a compiler bug.
22859
22860     However, you must double-check to make sure, because you may have a
22861     program whose behavior is undefined, which happened by chance to
22862     give the desired results with another C or C++ compiler.
22863
22864     For example, in many nonoptimizing compilers, you can write `x;'
22865     at the end of a function instead of `return x;', with the same
22866     results.  But the value of the function is undefined if `return'
22867     is omitted; it is not a bug when GCC produces different results.
22868
22869     Problems often result from expressions with two increment
22870     operators, as in `f (*p++, *p++)'.  Your previous compiler might
22871     have interpreted that expression the way you intended; GCC might
22872     interpret it another way.  Neither compiler is wrong.  The bug is
22873     in your code.
22874
22875     After you have localized the error to a single source line, it
22876     should be easy to check for these things.  If your program is
22877     correct and well defined, you have found a compiler bug.
22878
22879   * If the compiler produces an error message for valid input, that is
22880     a compiler bug.
22881
22882   * If the compiler does not produce an error message for invalid
22883     input, that is a compiler bug.  However, you should note that your
22884     idea of "invalid input" might be someone else's idea of "an
22885     extension" or "support for traditional practice".
22886
22887   * If you are an experienced user of one of the languages GCC
22888     supports, your suggestions for improvement of GCC are welcome in
22889     any case.
22890
22891
22892File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
22893
2289411.2 How and where to Report Bugs
22895=================================
22896
22897Bugs should be reported to the GCC bug database.  Please refer to
22898`http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
22899submit bug reports.  Copies of this file in HTML (`bugs.html') and
22900plain text (`BUGS') are also part of GCC releases.
22901
22902
22903File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
22904
2290512 How To Get Help with GCC
22906***************************
22907
22908If you need help installing, using or changing GCC, there are two ways
22909to find it:
22910
22911   * Send a message to a suitable network mailing list.  First try
22912     <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
22913     that brings no response, try <gcc@gcc.gnu.org>.  For help changing
22914     GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
22915     GCC, please report it following the instructions at *note Bug
22916     Reporting::.
22917
22918   * Look in the service directory for someone who might help you for a
22919     fee.  The service directory is found at
22920     `http://www.gnu.org/prep/service.html'.
22921
22922 For further information, see `http://gcc.gnu.org/faq.html#support'.
22923
22924
22925File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
22926
2292713 Contributing to GCC Development
22928**********************************
22929
22930If you would like to help pretest GCC releases to assure they work well,
22931current development sources are available by CVS (see
22932`http://gcc.gnu.org/cvs.html').  Source and binary snapshots are also
22933available for FTP; see `http://gcc.gnu.org/snapshots.html'.
22934
22935 If you would like to work on improvements to GCC, please read the
22936advice at these URLs:
22937
22938     `http://gcc.gnu.org/contribute.html'
22939     `http://gcc.gnu.org/contributewhy.html'
22940
22941for information on how to make useful contributions and avoid
22942duplication of effort.  Suggested projects are listed at
22943`http://gcc.gnu.org/projects/'.
22944
22945
22946File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
22947
22948Funding Free Software
22949*********************
22950
22951If you want to have more free software a few years from now, it makes
22952sense for you to help encourage people to contribute funds for its
22953development.  The most effective approach known is to encourage
22954commercial redistributors to donate.
22955
22956 Users of free software systems can boost the pace of development by
22957encouraging for-a-fee distributors to donate part of their selling price
22958to free software developers--the Free Software Foundation, and others.
22959
22960 The way to convince distributors to do this is to demand it and expect
22961it from them.  So when you compare distributors, judge them partly by
22962how much they give to free software development.  Show distributors
22963they must compete to be the one who gives the most.
22964
22965 To make this approach work, you must insist on numbers that you can
22966compare, such as, "We will donate ten dollars to the Frobnitz project
22967for each disk sold."  Don't be satisfied with a vague promise, such as
22968"A portion of the profits are donated," since it doesn't give a basis
22969for comparison.
22970
22971 Even a precise fraction "of the profits from this disk" is not very
22972meaningful, since creative accounting and unrelated business decisions
22973can greatly alter what fraction of the sales price counts as profit.
22974If the price you pay is $50, ten percent of the profit is probably less
22975than a dollar; it might be a few cents, or nothing at all.
22976
22977 Some redistributors do development work themselves.  This is useful
22978too; but to keep everyone honest, you need to inquire how much they do,
22979and what kind.  Some kinds of development make much more long-term
22980difference than others.  For example, maintaining a separate version of
22981a program contributes very little; maintaining the standard version of a
22982program for the whole community contributes much.  Easy new ports
22983contribute little, since someone else would surely do them; difficult
22984ports such as adding a new CPU to the GNU Compiler Collection
22985contribute more; major new features or packages contribute the most.
22986
22987 By establishing the idea that supporting further development is "the
22988proper thing to do" when distributing free software for a fee, we can
22989assure a steady flow of resources into making more free software.
22990
22991     Copyright (C) 1994 Free Software Foundation, Inc.
22992     Verbatim copying and redistribution of this section is permitted
22993     without royalty; alteration is not permitted.
22994
22995
22996File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
22997
22998The GNU Project and GNU/Linux
22999*****************************
23000
23001The GNU Project was launched in 1984 to develop a complete Unix-like
23002operating system which is free software: the GNU system.  (GNU is a
23003recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
23004Variants of the GNU operating system, which use the kernel Linux, are
23005now widely used; though these systems are often referred to as "Linux",
23006they are more accurately called GNU/Linux systems.
23007
23008 For more information, see:
23009     `http://www.gnu.org/'
23010     `http://www.gnu.org/gnu/linux-and-gnu.html'
23011
23012
23013File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
23014
23015GNU GENERAL PUBLIC LICENSE
23016**************************
23017
23018                         Version 2, June 1991
23019
23020     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
23021     59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
23022
23023     Everyone is permitted to copy and distribute verbatim copies
23024     of this license document, but changing it is not allowed.
23025
23026Preamble
23027========
23028
23029The licenses for most software are designed to take away your freedom
23030to share and change it.  By contrast, the GNU General Public License is
23031intended to guarantee your freedom to share and change free
23032software--to make sure the software is free for all its users.  This
23033General Public License applies to most of the Free Software
23034Foundation's software and to any other program whose authors commit to
23035using it.  (Some other Free Software Foundation software is covered by
23036the GNU Library General Public License instead.)  You can apply it to
23037your programs, too.
23038
23039 When we speak of free software, we are referring to freedom, not
23040price.  Our General Public Licenses are designed to make sure that you
23041have the freedom to distribute copies of free software (and charge for
23042this service if you wish), that you receive source code or can get it
23043if you want it, that you can change the software or use pieces of it in
23044new free programs; and that you know you can do these things.
23045
23046 To protect your rights, we need to make restrictions that forbid
23047anyone to deny you these rights or to ask you to surrender the rights.
23048These restrictions translate to certain responsibilities for you if you
23049distribute copies of the software, or if you modify it.
23050
23051 For example, if you distribute copies of such a program, whether
23052gratis or for a fee, you must give the recipients all the rights that
23053you have.  You must make sure that they, too, receive or can get the
23054source code.  And you must show them these terms so they know their
23055rights.
23056
23057 We protect your rights with two steps: (1) copyright the software, and
23058(2) offer you this license which gives you legal permission to copy,
23059distribute and/or modify the software.
23060
23061 Also, for each author's protection and ours, we want to make certain
23062that everyone understands that there is no warranty for this free
23063software.  If the software is modified by someone else and passed on, we
23064want its recipients to know that what they have is not the original, so
23065that any problems introduced by others will not reflect on the original
23066authors' reputations.
23067
23068 Finally, any free program is threatened constantly by software
23069patents.  We wish to avoid the danger that redistributors of a free
23070program will individually obtain patent licenses, in effect making the
23071program proprietary.  To prevent this, we have made it clear that any
23072patent must be licensed for everyone's free use or not licensed at all.
23073
23074 The precise terms and conditions for copying, distribution and
23075modification follow.
23076
23077    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
23078  0. This License applies to any program or other work which contains a
23079     notice placed by the copyright holder saying it may be distributed
23080     under the terms of this General Public License.  The "Program",
23081     below, refers to any such program or work, and a "work based on
23082     the Program" means either the Program or any derivative work under
23083     copyright law: that is to say, a work containing the Program or a
23084     portion of it, either verbatim or with modifications and/or
23085     translated into another language.  (Hereinafter, translation is
23086     included without limitation in the term "modification".)  Each
23087     licensee is addressed as "you".
23088
23089     Activities other than copying, distribution and modification are
23090     not covered by this License; they are outside its scope.  The act
23091     of running the Program is not restricted, and the output from the
23092     Program is covered only if its contents constitute a work based on
23093     the Program (independent of having been made by running the
23094     Program).  Whether that is true depends on what the Program does.
23095
23096  1. You may copy and distribute verbatim copies of the Program's
23097     source code as you receive it, in any medium, provided that you
23098     conspicuously and appropriately publish on each copy an appropriate
23099     copyright notice and disclaimer of warranty; keep intact all the
23100     notices that refer to this License and to the absence of any
23101     warranty; and give any other recipients of the Program a copy of
23102     this License along with the Program.
23103
23104     You may charge a fee for the physical act of transferring a copy,
23105     and you may at your option offer warranty protection in exchange
23106     for a fee.
23107
23108  2. You may modify your copy or copies of the Program or any portion
23109     of it, thus forming a work based on the Program, and copy and
23110     distribute such modifications or work under the terms of Section 1
23111     above, provided that you also meet all of these conditions:
23112
23113       a. You must cause the modified files to carry prominent notices
23114          stating that you changed the files and the date of any change.
23115
23116       b. You must cause any work that you distribute or publish, that
23117          in whole or in part contains or is derived from the Program
23118          or any part thereof, to be licensed as a whole at no charge
23119          to all third parties under the terms of this License.
23120
23121       c. If the modified program normally reads commands interactively
23122          when run, you must cause it, when started running for such
23123          interactive use in the most ordinary way, to print or display
23124          an announcement including an appropriate copyright notice and
23125          a notice that there is no warranty (or else, saying that you
23126          provide a warranty) and that users may redistribute the
23127          program under these conditions, and telling the user how to
23128          view a copy of this License.  (Exception: if the Program
23129          itself is interactive but does not normally print such an
23130          announcement, your work based on the Program is not required
23131          to print an announcement.)
23132
23133     These requirements apply to the modified work as a whole.  If
23134     identifiable sections of that work are not derived from the
23135     Program, and can be reasonably considered independent and separate
23136     works in themselves, then this License, and its terms, do not
23137     apply to those sections when you distribute them as separate
23138     works.  But when you distribute the same sections as part of a
23139     whole which is a work based on the Program, the distribution of
23140     the whole must be on the terms of this License, whose permissions
23141     for other licensees extend to the entire whole, and thus to each
23142     and every part regardless of who wrote it.
23143
23144     Thus, it is not the intent of this section to claim rights or
23145     contest your rights to work written entirely by you; rather, the
23146     intent is to exercise the right to control the distribution of
23147     derivative or collective works based on the Program.
23148
23149     In addition, mere aggregation of another work not based on the
23150     Program with the Program (or with a work based on the Program) on
23151     a volume of a storage or distribution medium does not bring the
23152     other work under the scope of this License.
23153
23154  3. You may copy and distribute the Program (or a work based on it,
23155     under Section 2) in object code or executable form under the terms
23156     of Sections 1 and 2 above provided that you also do one of the
23157     following:
23158
23159       a. Accompany it with the complete corresponding machine-readable
23160          source code, which must be distributed under the terms of
23161          Sections 1 and 2 above on a medium customarily used for
23162          software interchange; or,
23163
23164       b. Accompany it with a written offer, valid for at least three
23165          years, to give any third party, for a charge no more than your
23166          cost of physically performing source distribution, a complete
23167          machine-readable copy of the corresponding source code, to be
23168          distributed under the terms of Sections 1 and 2 above on a
23169          medium customarily used for software interchange; or,
23170
23171       c. Accompany it with the information you received as to the offer
23172          to distribute corresponding source code.  (This alternative is
23173          allowed only for noncommercial distribution and only if you
23174          received the program in object code or executable form with
23175          such an offer, in accord with Subsection b above.)
23176
23177     The source code for a work means the preferred form of the work for
23178     making modifications to it.  For an executable work, complete
23179     source code means all the source code for all modules it contains,
23180     plus any associated interface definition files, plus the scripts
23181     used to control compilation and installation of the executable.
23182     However, as a special exception, the source code distributed need
23183     not include anything that is normally distributed (in either
23184     source or binary form) with the major components (compiler,
23185     kernel, and so on) of the operating system on which the executable
23186     runs, unless that component itself accompanies the executable.
23187
23188     If distribution of executable or object code is made by offering
23189     access to copy from a designated place, then offering equivalent
23190     access to copy the source code from the same place counts as
23191     distribution of the source code, even though third parties are not
23192     compelled to copy the source along with the object code.
23193
23194  4. You may not copy, modify, sublicense, or distribute the Program
23195     except as expressly provided under this License.  Any attempt
23196     otherwise to copy, modify, sublicense or distribute the Program is
23197     void, and will automatically terminate your rights under this
23198     License.  However, parties who have received copies, or rights,
23199     from you under this License will not have their licenses
23200     terminated so long as such parties remain in full compliance.
23201
23202  5. You are not required to accept this License, since you have not
23203     signed it.  However, nothing else grants you permission to modify
23204     or distribute the Program or its derivative works.  These actions
23205     are prohibited by law if you do not accept this License.
23206     Therefore, by modifying or distributing the Program (or any work
23207     based on the Program), you indicate your acceptance of this
23208     License to do so, and all its terms and conditions for copying,
23209     distributing or modifying the Program or works based on it.
23210
23211  6. Each time you redistribute the Program (or any work based on the
23212     Program), the recipient automatically receives a license from the
23213     original licensor to copy, distribute or modify the Program
23214     subject to these terms and conditions.  You may not impose any
23215     further restrictions on the recipients' exercise of the rights
23216     granted herein.  You are not responsible for enforcing compliance
23217     by third parties to this License.
23218
23219  7. If, as a consequence of a court judgment or allegation of patent
23220     infringement or for any other reason (not limited to patent
23221     issues), conditions are imposed on you (whether by court order,
23222     agreement or otherwise) that contradict the conditions of this
23223     License, they do not excuse you from the conditions of this
23224     License.  If you cannot distribute so as to satisfy simultaneously
23225     your obligations under this License and any other pertinent
23226     obligations, then as a consequence you may not distribute the
23227     Program at all.  For example, if a patent license would not permit
23228     royalty-free redistribution of the Program by all those who
23229     receive copies directly or indirectly through you, then the only
23230     way you could satisfy both it and this License would be to refrain
23231     entirely from distribution of the Program.
23232
23233     If any portion of this section is held invalid or unenforceable
23234     under any particular circumstance, the balance of the section is
23235     intended to apply and the section as a whole is intended to apply
23236     in other circumstances.
23237
23238     It is not the purpose of this section to induce you to infringe any
23239     patents or other property right claims or to contest validity of
23240     any such claims; this section has the sole purpose of protecting
23241     the integrity of the free software distribution system, which is
23242     implemented by public license practices.  Many people have made
23243     generous contributions to the wide range of software distributed
23244     through that system in reliance on consistent application of that
23245     system; it is up to the author/donor to decide if he or she is
23246     willing to distribute software through any other system and a
23247     licensee cannot impose that choice.
23248
23249     This section is intended to make thoroughly clear what is believed
23250     to be a consequence of the rest of this License.
23251
23252  8. If the distribution and/or use of the Program is restricted in
23253     certain countries either by patents or by copyrighted interfaces,
23254     the original copyright holder who places the Program under this
23255     License may add an explicit geographical distribution limitation
23256     excluding those countries, so that distribution is permitted only
23257     in or among countries not thus excluded.  In such case, this
23258     License incorporates the limitation as if written in the body of
23259     this License.
23260
23261  9. The Free Software Foundation may publish revised and/or new
23262     versions of the General Public License from time to time.  Such
23263     new versions will be similar in spirit to the present version, but
23264     may differ in detail to address new problems or concerns.
23265
23266     Each version is given a distinguishing version number.  If the
23267     Program specifies a version number of this License which applies
23268     to it and "any later version", you have the option of following
23269     the terms and conditions either of that version or of any later
23270     version published by the Free Software Foundation.  If the Program
23271     does not specify a version number of this License, you may choose
23272     any version ever published by the Free Software Foundation.
23273
23274 10. If you wish to incorporate parts of the Program into other free
23275     programs whose distribution conditions are different, write to the
23276     author to ask for permission.  For software which is copyrighted
23277     by the Free Software Foundation, write to the Free Software
23278     Foundation; we sometimes make exceptions for this.  Our decision
23279     will be guided by the two goals of preserving the free status of
23280     all derivatives of our free software and of promoting the sharing
23281     and reuse of software generally.
23282
23283                                NO WARRANTY
23284 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
23285     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
23286     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
23287     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
23288     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
23289     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
23290     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
23291     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
23292     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
23293     SERVICING, REPAIR OR CORRECTION.
23294
23295 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
23296     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
23297     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
23298     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
23299     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
23300     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
23301     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
23302     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
23303     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
23304     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
23305
23306                      END OF TERMS AND CONDITIONS
23307How to Apply These Terms to Your New Programs
23308=============================================
23309
23310If you develop a new program, and you want it to be of the greatest
23311possible use to the public, the best way to achieve this is to make it
23312free software which everyone can redistribute and change under these
23313terms.
23314
23315 To do so, attach the following notices to the program.  It is safest
23316to attach them to the start of each source file to most effectively
23317convey the exclusion of warranty; and each file should have at least
23318the "copyright" line and a pointer to where the full notice is found.
23319
23320     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
23321     Copyright (C) YEAR  NAME OF AUTHOR
23322
23323     This program is free software; you can redistribute it and/or modify
23324     it under the terms of the GNU General Public License as published by
23325     the Free Software Foundation; either version 2 of the License, or
23326     (at your option) any later version.
23327
23328     This program is distributed in the hope that it will be useful,
23329     but WITHOUT ANY WARRANTY; without even the implied warranty of
23330     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23331     GNU General Public License for more details.
23332
23333     You should have received a copy of the GNU General Public License
23334     along with this program; if not, write to the Free Software Foundation,
23335     Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23336
23337 Also add information on how to contact you by electronic and paper
23338mail.
23339
23340 If the program is interactive, make it output a short notice like this
23341when it starts in an interactive mode:
23342
23343     Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
23344     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
23345     type `show w'.
23346     This is free software, and you are welcome to redistribute it
23347     under certain conditions; type `show c' for details.
23348
23349 The hypothetical commands `show w' and `show c' should show the
23350appropriate parts of the General Public License.  Of course, the
23351commands you use may be called something other than `show w' and `show
23352c'; they could even be mouse-clicks or menu items--whatever suits your
23353program.
23354
23355 You should also get your employer (if you work as a programmer) or your
23356school, if any, to sign a "copyright disclaimer" for the program, if
23357necessary.  Here is a sample; alter the names:
23358
23359     Yoyodyne, Inc., hereby disclaims all copyright interest in the program
23360     `Gnomovision' (which makes passes at compilers) written by James Hacker.
23361
23362     SIGNATURE OF TY COON, 1 April 1989
23363     Ty Coon, President of Vice
23364
23365 This General Public License does not permit incorporating your program
23366into proprietary programs.  If your program is a subroutine library,
23367you may consider it more useful to permit linking proprietary
23368applications with the library.  If this is what you want to do, use the
23369GNU Library General Public License instead of this License.
23370
23371
23372File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
23373
23374GNU Free Documentation License
23375******************************
23376
23377                      Version 1.2, November 2002
23378
23379     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
23380     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
23381
23382     Everyone is permitted to copy and distribute verbatim copies
23383     of this license document, but changing it is not allowed.
23384
23385  0. PREAMBLE
23386
23387     The purpose of this License is to make a manual, textbook, or other
23388     functional and useful document "free" in the sense of freedom: to
23389     assure everyone the effective freedom to copy and redistribute it,
23390     with or without modifying it, either commercially or
23391     noncommercially.  Secondarily, this License preserves for the
23392     author and publisher a way to get credit for their work, while not
23393     being considered responsible for modifications made by others.
23394
23395     This License is a kind of "copyleft", which means that derivative
23396     works of the document must themselves be free in the same sense.
23397     It complements the GNU General Public License, which is a copyleft
23398     license designed for free software.
23399
23400     We have designed this License in order to use it for manuals for
23401     free software, because free software needs free documentation: a
23402     free program should come with manuals providing the same freedoms
23403     that the software does.  But this License is not limited to
23404     software manuals; it can be used for any textual work, regardless
23405     of subject matter or whether it is published as a printed book.
23406     We recommend this License principally for works whose purpose is
23407     instruction or reference.
23408
23409  1. APPLICABILITY AND DEFINITIONS
23410
23411     This License applies to any manual or other work, in any medium,
23412     that contains a notice placed by the copyright holder saying it
23413     can be distributed under the terms of this License.  Such a notice
23414     grants a world-wide, royalty-free license, unlimited in duration,
23415     to use that work under the conditions stated herein.  The
23416     "Document", below, refers to any such manual or work.  Any member
23417     of the public is a licensee, and is addressed as "you".  You
23418     accept the license if you copy, modify or distribute the work in a
23419     way requiring permission under copyright law.
23420
23421     A "Modified Version" of the Document means any work containing the
23422     Document or a portion of it, either copied verbatim, or with
23423     modifications and/or translated into another language.
23424
23425     A "Secondary Section" is a named appendix or a front-matter section
23426     of the Document that deals exclusively with the relationship of the
23427     publishers or authors of the Document to the Document's overall
23428     subject (or to related matters) and contains nothing that could
23429     fall directly within that overall subject.  (Thus, if the Document
23430     is in part a textbook of mathematics, a Secondary Section may not
23431     explain any mathematics.)  The relationship could be a matter of
23432     historical connection with the subject or with related matters, or
23433     of legal, commercial, philosophical, ethical or political position
23434     regarding them.
23435
23436     The "Invariant Sections" are certain Secondary Sections whose
23437     titles are designated, as being those of Invariant Sections, in
23438     the notice that says that the Document is released under this
23439     License.  If a section does not fit the above definition of
23440     Secondary then it is not allowed to be designated as Invariant.
23441     The Document may contain zero Invariant Sections.  If the Document
23442     does not identify any Invariant Sections then there are none.
23443
23444     The "Cover Texts" are certain short passages of text that are
23445     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
23446     that says that the Document is released under this License.  A
23447     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
23448     be at most 25 words.
23449
23450     A "Transparent" copy of the Document means a machine-readable copy,
23451     represented in a format whose specification is available to the
23452     general public, that is suitable for revising the document
23453     straightforwardly with generic text editors or (for images
23454     composed of pixels) generic paint programs or (for drawings) some
23455     widely available drawing editor, and that is suitable for input to
23456     text formatters or for automatic translation to a variety of
23457     formats suitable for input to text formatters.  A copy made in an
23458     otherwise Transparent file format whose markup, or absence of
23459     markup, has been arranged to thwart or discourage subsequent
23460     modification by readers is not Transparent.  An image format is
23461     not Transparent if used for any substantial amount of text.  A
23462     copy that is not "Transparent" is called "Opaque".
23463
23464     Examples of suitable formats for Transparent copies include plain
23465     ASCII without markup, Texinfo input format, LaTeX input format,
23466     SGML or XML using a publicly available DTD, and
23467     standard-conforming simple HTML, PostScript or PDF designed for
23468     human modification.  Examples of transparent image formats include
23469     PNG, XCF and JPG.  Opaque formats include proprietary formats that
23470     can be read and edited only by proprietary word processors, SGML or
23471     XML for which the DTD and/or processing tools are not generally
23472     available, and the machine-generated HTML, PostScript or PDF
23473     produced by some word processors for output purposes only.
23474
23475     The "Title Page" means, for a printed book, the title page itself,
23476     plus such following pages as are needed to hold, legibly, the
23477     material this License requires to appear in the title page.  For
23478     works in formats which do not have any title page as such, "Title
23479     Page" means the text near the most prominent appearance of the
23480     work's title, preceding the beginning of the body of the text.
23481
23482     A section "Entitled XYZ" means a named subunit of the Document
23483     whose title either is precisely XYZ or contains XYZ in parentheses
23484     following text that translates XYZ in another language.  (Here XYZ
23485     stands for a specific section name mentioned below, such as
23486     "Acknowledgements", "Dedications", "Endorsements", or "History".)
23487     To "Preserve the Title" of such a section when you modify the
23488     Document means that it remains a section "Entitled XYZ" according
23489     to this definition.
23490
23491     The Document may include Warranty Disclaimers next to the notice
23492     which states that this License applies to the Document.  These
23493     Warranty Disclaimers are considered to be included by reference in
23494     this License, but only as regards disclaiming warranties: any other
23495     implication that these Warranty Disclaimers may have is void and
23496     has no effect on the meaning of this License.
23497
23498  2. VERBATIM COPYING
23499
23500     You may copy and distribute the Document in any medium, either
23501     commercially or noncommercially, provided that this License, the
23502     copyright notices, and the license notice saying this License
23503     applies to the Document are reproduced in all copies, and that you
23504     add no other conditions whatsoever to those of this License.  You
23505     may not use technical measures to obstruct or control the reading
23506     or further copying of the copies you make or distribute.  However,
23507     you may accept compensation in exchange for copies.  If you
23508     distribute a large enough number of copies you must also follow
23509     the conditions in section 3.
23510
23511     You may also lend copies, under the same conditions stated above,
23512     and you may publicly display copies.
23513
23514  3. COPYING IN QUANTITY
23515
23516     If you publish printed copies (or copies in media that commonly
23517     have printed covers) of the Document, numbering more than 100, and
23518     the Document's license notice requires Cover Texts, you must
23519     enclose the copies in covers that carry, clearly and legibly, all
23520     these Cover Texts: Front-Cover Texts on the front cover, and
23521     Back-Cover Texts on the back cover.  Both covers must also clearly
23522     and legibly identify you as the publisher of these copies.  The
23523     front cover must present the full title with all words of the
23524     title equally prominent and visible.  You may add other material
23525     on the covers in addition.  Copying with changes limited to the
23526     covers, as long as they preserve the title of the Document and
23527     satisfy these conditions, can be treated as verbatim copying in
23528     other respects.
23529
23530     If the required texts for either cover are too voluminous to fit
23531     legibly, you should put the first ones listed (as many as fit
23532     reasonably) on the actual cover, and continue the rest onto
23533     adjacent pages.
23534
23535     If you publish or distribute Opaque copies of the Document
23536     numbering more than 100, you must either include a
23537     machine-readable Transparent copy along with each Opaque copy, or
23538     state in or with each Opaque copy a computer-network location from
23539     which the general network-using public has access to download
23540     using public-standard network protocols a complete Transparent
23541     copy of the Document, free of added material.  If you use the
23542     latter option, you must take reasonably prudent steps, when you
23543     begin distribution of Opaque copies in quantity, to ensure that
23544     this Transparent copy will remain thus accessible at the stated
23545     location until at least one year after the last time you
23546     distribute an Opaque copy (directly or through your agents or
23547     retailers) of that edition to the public.
23548
23549     It is requested, but not required, that you contact the authors of
23550     the Document well before redistributing any large number of
23551     copies, to give them a chance to provide you with an updated
23552     version of the Document.
23553
23554  4. MODIFICATIONS
23555
23556     You may copy and distribute a Modified Version of the Document
23557     under the conditions of sections 2 and 3 above, provided that you
23558     release the Modified Version under precisely this License, with
23559     the Modified Version filling the role of the Document, thus
23560     licensing distribution and modification of the Modified Version to
23561     whoever possesses a copy of it.  In addition, you must do these
23562     things in the Modified Version:
23563
23564       A. Use in the Title Page (and on the covers, if any) a title
23565          distinct from that of the Document, and from those of
23566          previous versions (which should, if there were any, be listed
23567          in the History section of the Document).  You may use the
23568          same title as a previous version if the original publisher of
23569          that version gives permission.
23570
23571       B. List on the Title Page, as authors, one or more persons or
23572          entities responsible for authorship of the modifications in
23573          the Modified Version, together with at least five of the
23574          principal authors of the Document (all of its principal
23575          authors, if it has fewer than five), unless they release you
23576          from this requirement.
23577
23578       C. State on the Title page the name of the publisher of the
23579          Modified Version, as the publisher.
23580
23581       D. Preserve all the copyright notices of the Document.
23582
23583       E. Add an appropriate copyright notice for your modifications
23584          adjacent to the other copyright notices.
23585
23586       F. Include, immediately after the copyright notices, a license
23587          notice giving the public permission to use the Modified
23588          Version under the terms of this License, in the form shown in
23589          the Addendum below.
23590
23591       G. Preserve in that license notice the full lists of Invariant
23592          Sections and required Cover Texts given in the Document's
23593          license notice.
23594
23595       H. Include an unaltered copy of this License.
23596
23597       I. Preserve the section Entitled "History", Preserve its Title,
23598          and add to it an item stating at least the title, year, new
23599          authors, and publisher of the Modified Version as given on
23600          the Title Page.  If there is no section Entitled "History" in
23601          the Document, create one stating the title, year, authors,
23602          and publisher of the Document as given on its Title Page,
23603          then add an item describing the Modified Version as stated in
23604          the previous sentence.
23605
23606       J. Preserve the network location, if any, given in the Document
23607          for public access to a Transparent copy of the Document, and
23608          likewise the network locations given in the Document for
23609          previous versions it was based on.  These may be placed in
23610          the "History" section.  You may omit a network location for a
23611          work that was published at least four years before the
23612          Document itself, or if the original publisher of the version
23613          it refers to gives permission.
23614
23615       K. For any section Entitled "Acknowledgements" or "Dedications",
23616          Preserve the Title of the section, and preserve in the
23617          section all the substance and tone of each of the contributor
23618          acknowledgements and/or dedications given therein.
23619
23620       L. Preserve all the Invariant Sections of the Document,
23621          unaltered in their text and in their titles.  Section numbers
23622          or the equivalent are not considered part of the section
23623          titles.
23624
23625       M. Delete any section Entitled "Endorsements".  Such a section
23626          may not be included in the Modified Version.
23627
23628       N. Do not retitle any existing section to be Entitled
23629          "Endorsements" or to conflict in title with any Invariant
23630          Section.
23631
23632       O. Preserve any Warranty Disclaimers.
23633
23634     If the Modified Version includes new front-matter sections or
23635     appendices that qualify as Secondary Sections and contain no
23636     material copied from the Document, you may at your option
23637     designate some or all of these sections as invariant.  To do this,
23638     add their titles to the list of Invariant Sections in the Modified
23639     Version's license notice.  These titles must be distinct from any
23640     other section titles.
23641
23642     You may add a section Entitled "Endorsements", provided it contains
23643     nothing but endorsements of your Modified Version by various
23644     parties--for example, statements of peer review or that the text
23645     has been approved by an organization as the authoritative
23646     definition of a standard.
23647
23648     You may add a passage of up to five words as a Front-Cover Text,
23649     and a passage of up to 25 words as a Back-Cover Text, to the end
23650     of the list of Cover Texts in the Modified Version.  Only one
23651     passage of Front-Cover Text and one of Back-Cover Text may be
23652     added by (or through arrangements made by) any one entity.  If the
23653     Document already includes a cover text for the same cover,
23654     previously added by you or by arrangement made by the same entity
23655     you are acting on behalf of, you may not add another; but you may
23656     replace the old one, on explicit permission from the previous
23657     publisher that added the old one.
23658
23659     The author(s) and publisher(s) of the Document do not by this
23660     License give permission to use their names for publicity for or to
23661     assert or imply endorsement of any Modified Version.
23662
23663  5. COMBINING DOCUMENTS
23664
23665     You may combine the Document with other documents released under
23666     this License, under the terms defined in section 4 above for
23667     modified versions, provided that you include in the combination
23668     all of the Invariant Sections of all of the original documents,
23669     unmodified, and list them all as Invariant Sections of your
23670     combined work in its license notice, and that you preserve all
23671     their Warranty Disclaimers.
23672
23673     The combined work need only contain one copy of this License, and
23674     multiple identical Invariant Sections may be replaced with a single
23675     copy.  If there are multiple Invariant Sections with the same name
23676     but different contents, make the title of each such section unique
23677     by adding at the end of it, in parentheses, the name of the
23678     original author or publisher of that section if known, or else a
23679     unique number.  Make the same adjustment to the section titles in
23680     the list of Invariant Sections in the license notice of the
23681     combined work.
23682
23683     In the combination, you must combine any sections Entitled
23684     "History" in the various original documents, forming one section
23685     Entitled "History"; likewise combine any sections Entitled
23686     "Acknowledgements", and any sections Entitled "Dedications".  You
23687     must delete all sections Entitled "Endorsements."
23688
23689  6. COLLECTIONS OF DOCUMENTS
23690
23691     You may make a collection consisting of the Document and other
23692     documents released under this License, and replace the individual
23693     copies of this License in the various documents with a single copy
23694     that is included in the collection, provided that you follow the
23695     rules of this License for verbatim copying of each of the
23696     documents in all other respects.
23697
23698     You may extract a single document from such a collection, and
23699     distribute it individually under this License, provided you insert
23700     a copy of this License into the extracted document, and follow
23701     this License in all other respects regarding verbatim copying of
23702     that document.
23703
23704  7. AGGREGATION WITH INDEPENDENT WORKS
23705
23706     A compilation of the Document or its derivatives with other
23707     separate and independent documents or works, in or on a volume of
23708     a storage or distribution medium, is called an "aggregate" if the
23709     copyright resulting from the compilation is not used to limit the
23710     legal rights of the compilation's users beyond what the individual
23711     works permit.  When the Document is included an aggregate, this
23712     License does not apply to the other works in the aggregate which
23713     are not themselves derivative works of the Document.
23714
23715     If the Cover Text requirement of section 3 is applicable to these
23716     copies of the Document, then if the Document is less than one half
23717     of the entire aggregate, the Document's Cover Texts may be placed
23718     on covers that bracket the Document within the aggregate, or the
23719     electronic equivalent of covers if the Document is in electronic
23720     form.  Otherwise they must appear on printed covers that bracket
23721     the whole aggregate.
23722
23723  8. TRANSLATION
23724
23725     Translation is considered a kind of modification, so you may
23726     distribute translations of the Document under the terms of section
23727     4.  Replacing Invariant Sections with translations requires special
23728     permission from their copyright holders, but you may include
23729     translations of some or all Invariant Sections in addition to the
23730     original versions of these Invariant Sections.  You may include a
23731     translation of this License, and all the license notices in the
23732     Document, and any Warrany Disclaimers, provided that you also
23733     include the original English version of this License and the
23734     original versions of those notices and disclaimers.  In case of a
23735     disagreement between the translation and the original version of
23736     this License or a notice or disclaimer, the original version will
23737     prevail.
23738
23739     If a section in the Document is Entitled "Acknowledgements",
23740     "Dedications", or "History", the requirement (section 4) to
23741     Preserve its Title (section 1) will typically require changing the
23742     actual title.
23743
23744  9. TERMINATION
23745
23746     You may not copy, modify, sublicense, or distribute the Document
23747     except as expressly provided for under this License.  Any other
23748     attempt to copy, modify, sublicense or distribute the Document is
23749     void, and will automatically terminate your rights under this
23750     License.  However, parties who have received copies, or rights,
23751     from you under this License will not have their licenses
23752     terminated so long as such parties remain in full compliance.
23753
23754 10. FUTURE REVISIONS OF THIS LICENSE
23755
23756     The Free Software Foundation may publish new, revised versions of
23757     the GNU Free Documentation License from time to time.  Such new
23758     versions will be similar in spirit to the present version, but may
23759     differ in detail to address new problems or concerns.  See
23760     `http://www.gnu.org/copyleft/'.
23761
23762     Each version of the License is given a distinguishing version
23763     number.  If the Document specifies that a particular numbered
23764     version of this License "or any later version" applies to it, you
23765     have the option of following the terms and conditions either of
23766     that specified version or of any later version that has been
23767     published (not as a draft) by the Free Software Foundation.  If
23768     the Document does not specify a version number of this License,
23769     you may choose any version ever published (not as a draft) by the
23770     Free Software Foundation.
23771
23772ADDENDUM: How to use this License for your documents
23773====================================================
23774
23775To use this License in a document you have written, include a copy of
23776the License in the document and put the following copyright and license
23777notices just after the title page:
23778
23779       Copyright (C)  YEAR  YOUR NAME.
23780       Permission is granted to copy, distribute and/or modify this document
23781       under the terms of the GNU Free Documentation License, Version 1.2
23782       or any later version published by the Free Software Foundation;
23783       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
23784       A copy of the license is included in the section entitled ``GNU
23785       Free Documentation License''.
23786
23787 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
23788replace the "with...Texts." line with this:
23789
23790         with the Invariant Sections being LIST THEIR TITLES, with
23791         the Front-Cover Texts being LIST, and with the Back-Cover Texts
23792         being LIST.
23793
23794 If you have Invariant Sections without Cover Texts, or some other
23795combination of the three, merge those two alternatives to suit the
23796situation.
23797
23798 If your document contains nontrivial examples of program code, we
23799recommend releasing these examples in parallel under your choice of
23800free software license, such as the GNU General Public License, to
23801permit their use in free software.
23802
23803
23804File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
23805
23806Contributors to GCC
23807*******************
23808
23809The GCC project would like to thank its many contributors.  Without
23810them the project would not have been nearly as successful as it has
23811been.  Any omissions in this list are accidental.  Feel free to contact
23812<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
23813some of your contributions are not listed.  Please keep this list in
23814alphabetical order.
23815
23816   * Analog Devices helped implement the support for complex data types
23817     and iterators.
23818
23819   * John David Anglin for threading-related fixes and improvements to
23820     libstdc++-v3, and the HP-UX port.
23821
23822   * James van Artsdalen wrote the code that makes efficient use of the
23823     Intel 80387 register stack.
23824
23825   * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
23826     Series port.
23827
23828   * Alasdair Baird for various bug fixes.
23829
23830   * Giovanni Bajo for analyzing lots of complicated C++ problem
23831     reports.
23832
23833   * Peter Barada for his work to improve code generation for new
23834     ColdFire cores.
23835
23836   * Gerald Baumgartner added the signature extension to the C++ front
23837     end.
23838
23839   * Godmar Back for his Java improvements and encouragement.
23840
23841   * Scott Bambrough for help porting the Java compiler.
23842
23843   * Wolfgang Bangerth for processing tons of bug reports.
23844
23845   * Jon Beniston for his Microsoft Windows port of Java.
23846
23847   * Daniel Berlin for better DWARF2 support, faster/better
23848     optimizations, improved alias analysis, plus migrating GCC to
23849     Bugzilla.
23850
23851   * Geoff Berry for his Java object serialization work and various
23852     patches.
23853
23854   * Eric Blake for helping to make GCJ and libgcj conform to the
23855     specifications.
23856
23857   * Segher Boessenkool for various fixes.
23858
23859   * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
23860     other Java work.
23861
23862   * Neil Booth for work on cpplib, lang hooks, debug hooks and other
23863     miscellaneous clean-ups.
23864
23865   * Eric Botcazou for fixing middle- and backend bugs left and right.
23866
23867   * Per Bothner for his direction via the steering committee and
23868     various improvements to the infrastructure for supporting new
23869     languages.  Chill front end implementation.  Initial
23870     implementations of cpplib, fix-header, config.guess, libio, and
23871     past C++ library (libg++) maintainer.  Dreaming up, designing and
23872     implementing much of GCJ.
23873
23874   * Devon Bowen helped port GCC to the Tahoe.
23875
23876   * Don Bowman for mips-vxworks contributions.
23877
23878   * Dave Brolley for work on cpplib and Chill.
23879
23880   * Robert Brown implemented the support for Encore 32000 systems.
23881
23882   * Christian Bruel for improvements to local store elimination.
23883
23884   * Herman A.J. ten Brugge for various fixes.
23885
23886   * Joerg Brunsmann for Java compiler hacking and help with the GCJ
23887     FAQ.
23888
23889   * Joe Buck for his direction via the steering committee.
23890
23891   * Craig Burley for leadership of the Fortran effort.
23892
23893   * Stephan Buys for contributing Doxygen notes for libstdc++.
23894
23895   * Paolo Carlini for libstdc++ work: lots of efficiency improvements
23896     to the C++ strings, streambufs and formatted I/O, hard detective
23897     work on the frustrating localization issues, and keeping up with
23898     the problem reports.
23899
23900   * John Carr for his alias work, SPARC hacking, infrastructure
23901     improvements, previous contributions to the steering committee,
23902     loop optimizations, etc.
23903
23904   * Stephane Carrez for 68HC11 and 68HC12 ports.
23905
23906   * Steve Chamberlain for support for the Renesas SH and H8 processors
23907     and the PicoJava processor, and for GCJ config fixes.
23908
23909   * Glenn Chambers for help with the GCJ FAQ.
23910
23911   * John-Marc Chandonia for various libgcj patches.
23912
23913   * Scott Christley for his Objective-C contributions.
23914
23915   * Eric Christopher for his Java porting help and clean-ups.
23916
23917   * Branko Cibej for more warning contributions.
23918
23919   * The GNU Classpath project for all of their merged runtime code.
23920
23921   * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
23922     other random hacking.
23923
23924   * Michael Cook for libstdc++ cleanup patches to reduce warnings.
23925
23926   * R. Kelley Cook for making GCC buildable from a read-only directory
23927     as well as other miscellaneous build process and documentation
23928     clean-ups.
23929
23930   * Ralf Corsepius for SH testing and minor bugfixing.
23931
23932   * Stan Cox for care and feeding of the x86 port and lots of behind
23933     the scenes hacking.
23934
23935   * Alex Crain provided changes for the 3b1.
23936
23937   * Ian Dall for major improvements to the NS32k port.
23938
23939   * Paul Dale for his work to add uClinux platform support to the m68k
23940     backend.
23941
23942   * Dario Dariol contributed the four varieties of sample programs
23943     that print a copy of their source.
23944
23945   * Russell Davidson for fstream and stringstream fixes in libstdc++.
23946
23947   * Mo DeJong for GCJ and libgcj bug fixes.
23948
23949   * DJ Delorie for the DJGPP port, build and libiberty maintenance, and
23950     various bug fixes.
23951
23952   * Gabriel Dos Reis for contributions to G++, contributions and
23953     maintenance of GCC diagnostics infrastructure, libstdc++-v3,
23954     including valarray<>, complex<>, maintaining the numerics library
23955     (including that pesky <limits> :-) and keeping up-to-date anything
23956     to do with numbers.
23957
23958   * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
23959     ISO C99 support, CFG dumping support, etc., plus support of the
23960     C++ runtime libraries including for all kinds of C interface
23961     issues, contributing and maintaining complex<>, sanity checking
23962     and disbursement, configuration architecture, libio maintenance,
23963     and early math work.
23964
23965   * Zdenek Dvorak for a new loop unroller and various fixes.
23966
23967   * Richard Earnshaw for his ongoing work with the ARM.
23968
23969   * David Edelsohn for his direction via the steering committee,
23970     ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
23971     loop changes, doing the entire AIX port of libstdc++ with his bare
23972     hands, and for ensuring GCC properly keeps working on AIX.
23973
23974   * Kevin Ediger for the floating point formatting of num_put::do_put
23975     in libstdc++.
23976
23977   * Phil Edwards for libstdc++ work including configuration hackery,
23978     documentation maintainer, chief breaker of the web pages, the
23979     occasional iostream bug fix, and work on shared library symbol
23980     versioning.
23981
23982   * Paul Eggert for random hacking all over GCC.
23983
23984   * Mark Elbrecht for various DJGPP improvements, and for libstdc++
23985     configuration support for locales and fstream-related fixes.
23986
23987   * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
23988     iostreams.
23989
23990   * Christian Ehrhardt for dealing with bug reports.
23991
23992   * Ben Elliston for his work to move the Objective-C runtime into its
23993     own subdirectory and for his work on autoconf.
23994
23995   * Marc Espie for OpenBSD support.
23996
23997   * Doug Evans for much of the global optimization framework, arc,
23998     m32r, and SPARC work.
23999
24000   * Christopher Faylor for his work on the Cygwin port and for caring
24001     and feeding the gcc.gnu.org box and saving its users tons of spam.
24002
24003   * Fred Fish for BeOS support and Ada fixes.
24004
24005   * Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ.
24006
24007   * Peter Gerwinski for various bug fixes and the Pascal front end.
24008
24009   * Kaveh Ghazi for his direction via the steering committee, amazing
24010     work to make `-W -Wall' useful, and continuously testing GCC on a
24011     plethora of platforms.
24012
24013   * John Gilmore for a donation to the FSF earmarked improving GNU
24014     Java.
24015
24016   * Judy Goldberg for c++ contributions.
24017
24018   * Torbjorn Granlund for various fixes and the c-torture testsuite,
24019     multiply- and divide-by-constant optimization, improved long long
24020     support, improved leaf function register allocation, and his
24021     direction via the steering committee.
24022
24023   * Anthony Green for his `-Os' contributions and Java front end work.
24024
24025   * Stu Grossman for gdb hacking, allowing GCJ developers to debug
24026     Java code.
24027
24028   * Michael K. Gschwind contributed the port to the PDP-11.
24029
24030   * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
24031     the support for Dwarf symbolic debugging information, and much of
24032     the support for System V Release 4.  He has also worked heavily on
24033     the Intel 386 and 860 support.
24034
24035   * Bruno Haible for improvements in the runtime overhead for EH, new
24036     warnings and assorted bug fixes.
24037
24038   * Andrew Haley for his amazing Java compiler and library efforts.
24039
24040   * Chris Hanson assisted in making GCC work on HP-UX for the 9000
24041     series 300.
24042
24043   * Michael Hayes for various thankless work he's done trying to get
24044     the c30/c40 ports functional.  Lots of loop and unroll
24045     improvements and fixes.
24046
24047   * Dara Hazeghi for wading through myriads of target-specific bug
24048     reports.
24049
24050   * Kate Hedstrom for staking the G77 folks with an initial testsuite.
24051
24052   * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
24053     work, loop opts, and generally fixing lots of old problems we've
24054     ignored for years, flow rewrite and lots of further stuff,
24055     including reviewing tons of patches.
24056
24057   * Aldy Hernandez for working on the PowerPC port, SIMD support, and
24058     various fixes.
24059
24060   * Nobuyuki Hikichi of Software Research Associates, Tokyo,
24061     contributed the support for the Sony NEWS machine.
24062
24063   * Kazu Hirata for caring and feeding the Renesas H8/300 port and
24064     various fixes.
24065
24066   * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
24067     of testing and bug fixing, particularly of GCC configury code.
24068
24069   * Steve Holmgren for MachTen patches.
24070
24071   * Jan Hubicka for his x86 port improvements.
24072
24073   * Falk Hueffner for working on C and optimization bug reports.
24074
24075   * Bernardo Innocenti for his m68k work, including merging of
24076     ColdFire improvements and uClinux support.
24077
24078   * Christian Iseli for various bug fixes.
24079
24080   * Kamil Iskra for general m68k hacking.
24081
24082   * Lee Iverson for random fixes and MIPS testing.
24083
24084   * Andreas Jaeger for testing and benchmarking of GCC and various bug
24085     fixes.
24086
24087   * Jakub Jelinek for his SPARC work and sibling call optimizations as
24088     well as lots of bug fixes and test cases, and for improving the
24089     Java build system.
24090
24091   * Janis Johnson for ia64 testing and fixes, her quality improvement
24092     sidetracks, and web page maintenance.
24093
24094   * Kean Johnston for SCO OpenServer support and various fixes.
24095
24096   * Tim Josling for the sample language treelang based originally on
24097     Richard Kenner's ""toy" language".
24098
24099   * Nicolai Josuttis for additional libstdc++ documentation.
24100
24101   * Klaus Kaempf for his ongoing work to make alpha-vms a viable
24102     target.
24103
24104   * David Kashtan of SRI adapted GCC to VMS.
24105
24106   * Ryszard Kabatek for many, many libstdc++ bug fixes and
24107     optimizations of strings, especially member functions, and for
24108     auto_ptr fixes.
24109
24110   * Geoffrey Keating for his ongoing work to make the PPC work for
24111     GNU/Linux and his automatic regression tester.
24112
24113   * Brendan Kehoe for his ongoing work with G++ and for a lot of early
24114     work in just about every part of libstdc++.
24115
24116   * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
24117     MIL-STD-1750A.
24118
24119   * Richard Kenner of the New York University Ultracomputer Research
24120     Laboratory wrote the machine descriptions for the AMD 29000, the
24121     DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
24122     support for instruction attributes.  He also made changes to
24123     better support RISC processors including changes to common
24124     subexpression elimination, strength reduction, function calling
24125     sequence handling, and condition code support, in addition to
24126     generalizing the code for frame pointer elimination and delay slot
24127     scheduling.  Richard Kenner was also the head maintainer of GCC
24128     for several years.
24129
24130   * Mumit Khan for various contributions to the Cygwin and Mingw32
24131     ports and maintaining binary releases for Microsoft Windows hosts,
24132     and for massive libstdc++ porting work to Cygwin/Mingw32.
24133
24134   * Robin Kirkham for cpu32 support.
24135
24136   * Mark Klein for PA improvements.
24137
24138   * Thomas Koenig for various bug fixes.
24139
24140   * Bruce Korb for the new and improved fixincludes code.
24141
24142   * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
24143     effort.
24144
24145   * Charles LaBrec contributed the support for the Integrated Solutions
24146     68020 system.
24147
24148   * Jeff Law for his direction via the steering committee,
24149     coordinating the entire egcs project and GCC 2.95, rolling out
24150     snapshots and releases, handling merges from GCC2, reviewing tons
24151     of patches that might have fallen through the cracks else, and
24152     random but extensive hacking.
24153
24154   * Marc Lehmann for his direction via the steering committee and
24155     helping with analysis and improvements of x86 performance.
24156
24157   * Ted Lemon wrote parts of the RTL reader and printer.
24158
24159   * Kriang Lerdsuwanakij for C++ improvements including template as
24160     template parameter support, and many C++ fixes.
24161
24162   * Warren Levy for tremendous work on libgcj (Java Runtime Library)
24163     and random work on the Java front end.
24164
24165   * Alain Lichnewsky ported GCC to the MIPS CPU.
24166
24167   * Oskar Liljeblad for hacking on AWT and his many Java bug reports
24168     and patches.
24169
24170   * Robert Lipe for OpenServer support, new testsuites, testing, etc.
24171
24172   * Weiwen Liu for testing and various bug fixes.
24173
24174   * Dave Love for his ongoing work with the Fortran front end and
24175     runtime libraries.
24176
24177   * Martin von Lo"wis for internal consistency checking infrastructure,
24178     various C++ improvements including namespace support, and tons of
24179     assistance with libstdc++/compiler merges.
24180
24181   * H.J. Lu for his previous contributions to the steering committee,
24182     many x86 bug reports, prototype patches, and keeping the GNU/Linux
24183     ports working.
24184
24185   * Greg McGary for random fixes and (someday) bounded pointers.
24186
24187   * Andrew MacLeod for his ongoing work in building a real EH system,
24188     various code generation improvements, work on the global
24189     optimizer, etc.
24190
24191   * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
24192     hacking improvements to compile-time performance, overall
24193     knowledge and direction in the area of instruction scheduling, and
24194     design and implementation of the automaton based instruction
24195     scheduler.
24196
24197   * Bob Manson for his behind the scenes work on dejagnu.
24198
24199   * Philip Martin for lots of libstdc++ string and vector iterator
24200     fixes and improvements, and string clean up and testsuites.
24201
24202   * All of the Mauve project contributors, for Java test code.
24203
24204   * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
24205
24206   * Adam Megacz for his work on the Microsoft Windows port of GCJ.
24207
24208   * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
24209     powerpc, haifa, ECOFF debug support, and other assorted hacking.
24210
24211   * Jason Merrill for his direction via the steering committee and
24212     leading the G++ effort.
24213
24214   * David Miller for his direction via the steering committee, lots of
24215     SPARC work, improvements in jump.c and interfacing with the Linux
24216     kernel developers.
24217
24218   * Gary Miller ported GCC to Charles River Data Systems machines.
24219
24220   * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
24221     the entire libstdc++ testsuite namespace-compatible.
24222
24223   * Mark Mitchell for his direction via the steering committee,
24224     mountains of C++ work, load/store hoisting out of loops, alias
24225     analysis improvements, ISO C `restrict' support, and serving as
24226     release manager for GCC 3.x.
24227
24228   * Alan Modra for various GNU/Linux bits and testing.
24229
24230   * Toon Moene for his direction via the steering committee, Fortran
24231     maintenance, and his ongoing work to make us make Fortran run fast.
24232
24233   * Jason Molenda for major help in the care and feeding of all the
24234     services on the gcc.gnu.org (formerly egcs.cygnus.com)
24235     machine--mail, web services, ftp services, etc etc.  Doing all
24236     this work on scrap paper and the backs of envelopes would have
24237     been... difficult.
24238
24239   * Catherine Moore for fixing various ugly problems we have sent her
24240     way, including the haifa bug which was killing the Alpha & PowerPC
24241     Linux kernels.
24242
24243   * Mike Moreton for his various Java patches.
24244
24245   * David Mosberger-Tang for various Alpha improvements, and for the
24246     initial IA-64 port.
24247
24248   * Stephen Moshier contributed the floating point emulator that
24249     assists in cross-compilation and permits support for floating
24250     point numbers wider than 64 bits and for ISO C99 support.
24251
24252   * Bill Moyer for his behind the scenes work on various issues.
24253
24254   * Philippe De Muyter for his work on the m68k port.
24255
24256   * Joseph S. Myers for his work on the PDP-11 port, format checking
24257     and ISO C99 support, and continuous emphasis on (and contributions
24258     to) documentation.
24259
24260   * Nathan Myers for his work on libstdc++-v3: architecture and
24261     authorship through the first three snapshots, including
24262     implementation of locale infrastructure, string, shadow C headers,
24263     and the initial project documentation (DESIGN, CHECKLIST, and so
24264     forth).  Later, more work on MT-safe string and shadow headers.
24265
24266   * Felix Natter for documentation on porting libstdc++.
24267
24268   * Nathanael Nerode for cleaning up the configuration/build process.
24269
24270   * NeXT, Inc. donated the front end that supports the Objective-C
24271     language.
24272
24273   * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
24274     the search engine setup, various documentation fixes and other
24275     small fixes.
24276
24277   * Geoff Noer for this work on getting cygwin native builds working.
24278
24279   * Diego Novillo for his SPEC performance tracking web pages and
24280     assorted fixes in the middle end and various back ends.
24281
24282   * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
24283     FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
24284     related infrastructure improvements.
24285
24286   * Alexandre Oliva for various build infrastructure improvements,
24287     scripts and amazing testing work, including keeping libtool issues
24288     sane and happy.
24289
24290   * Melissa O'Neill for various NeXT fixes.
24291
24292   * Rainer Orth for random MIPS work, including improvements to GCC's
24293     o32 ABI support, improvements to dejagnu's MIPS support, Java
24294     configuration clean-ups and porting work, etc.
24295
24296   * Hartmut Penner for work on the s390 port.
24297
24298   * Paul Petersen wrote the machine description for the Alliant FX/8.
24299
24300   * Alexandre Petit-Bianco for implementing much of the Java compiler
24301     and continued Java maintainership.
24302
24303   * Matthias Pfaller for major improvements to the NS32k port.
24304
24305   * Gerald Pfeifer for his direction via the steering committee,
24306     pointing out lots of problems we need to solve, maintenance of the
24307     web pages, and taking care of documentation maintenance in general.
24308
24309   * Andrew Pinski for processing bug reports by the dozen.
24310
24311   * Ovidiu Predescu for his work on the Objective-C front end and
24312     runtime libraries.
24313
24314   * Jerry Quinn for major performance improvements in C++ formatted
24315     I/O.
24316
24317   * Ken Raeburn for various improvements to checker, MIPS ports and
24318     various cleanups in the compiler.
24319
24320   * Rolf W. Rasmussen for hacking on AWT.
24321
24322   * David Reese of Sun Microsystems contributed to the Solaris on
24323     PowerPC port.
24324
24325   * Volker Reichelt for keeping up with the problem reports.
24326
24327   * Joern Rennecke for maintaining the sh port, loop, regmove & reload
24328     hacking.
24329
24330   * Loren J. Rittle for improvements to libstdc++-v3 including the
24331     FreeBSD port, threading fixes, thread-related configury changes,
24332     critical threading documentation, and solutions to really tricky
24333     I/O problems, as well as keeping GCC properly working on FreeBSD
24334     and continuous testing.
24335
24336   * Craig Rodrigues for processing tons of bug reports.
24337
24338   * Gavin Romig-Koch for lots of behind the scenes MIPS work.
24339
24340   * Ken Rose for fixes to GCC's delay slot filling code.
24341
24342   * Paul Rubin wrote most of the preprocessor.
24343
24344   * Pe'tur Runo'lfsson for major performance improvements in C++
24345     formatted I/O and large file support in C++ filebuf.
24346
24347   * Chip Salzenberg for libstdc++ patches and improvements to locales,
24348     traits, Makefiles, libio, libtool hackery, and "long long" support.
24349
24350   * Juha Sarlin for improvements to the H8 code generator.
24351
24352   * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
24353     300.
24354
24355   * Roger Sayle for improvements to constant folding and GCC's RTL
24356     optimizers as well as for fixing numerous bugs.
24357
24358   * Bradley Schatz for his work on the GCJ FAQ.
24359
24360   * Peter Schauer wrote the code to allow debugging to work on the
24361     Alpha.
24362
24363   * William Schelter did most of the work on the Intel 80386 support.
24364
24365   * Bernd Schmidt for various code generation improvements and major
24366     work in the reload pass as well a serving as release manager for
24367     GCC 2.95.3.
24368
24369   * Peter Schmid for constant testing of libstdc++ - especially
24370     application testing, going above and beyond what was requested for
24371     the release criteria - and libstdc++ header file tweaks.
24372
24373   * Jason Schroeder for jcf-dump patches.
24374
24375   * Andreas Schwab for his work on the m68k port.
24376
24377   * Joel Sherrill for his direction via the steering committee, RTEMS
24378     contributions and RTEMS testing.
24379
24380   * Nathan Sidwell for many C++ fixes/improvements.
24381
24382   * Jeffrey Siegal for helping RMS with the original design of GCC,
24383     some code which handles the parse tree and RTL data structures,
24384     constant folding and help with the original VAX & m68k ports.
24385
24386   * Kenny Simpson for prompting libstdc++ fixes due to defect reports
24387     from the LWG (thereby keeping GCC in line with updates from the
24388     ISO).
24389
24390   * Franz Sirl for his ongoing work with making the PPC port stable
24391     for GNU/Linux.
24392
24393   * Andrey Slepuhin for assorted AIX hacking.
24394
24395   * Christopher Smith did the port for Convex machines.
24396
24397   * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
24398
24399   * Randy Smith finished the Sun FPA support.
24400
24401   * Scott Snyder for queue, iterator, istream, and string fixes and
24402     libstdc++ testsuite entries.
24403
24404   * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
24405
24406   * Richard Stallman, for writing the original GCC and launching the
24407     GNU project.
24408
24409   * Jan Stein of the Chalmers Computer Society provided support for
24410     Genix, as well as part of the 32000 machine description.
24411
24412   * Nigel Stephens for various mips16 related fixes/improvements.
24413
24414   * Jonathan Stone wrote the machine description for the Pyramid
24415     computer.
24416
24417   * Graham Stott for various infrastructure improvements.
24418
24419   * John Stracke for his Java HTTP protocol fixes.
24420
24421   * Mike Stump for his Elxsi port, G++ contributions over the years
24422     and more recently his vxworks contributions
24423
24424   * Jeff Sturm for Java porting help, bug fixes, and encouragement.
24425
24426   * Shigeya Suzuki for this fixes for the bsdi platforms.
24427
24428   * Ian Lance Taylor for his mips16 work, general configury hacking,
24429     fixincludes, etc.
24430
24431   * Holger Teutsch provided the support for the Clipper CPU.
24432
24433   * Gary Thomas for his ongoing work to make the PPC work for
24434     GNU/Linux.
24435
24436   * Philipp Thomas for random bug fixes throughout the compiler
24437
24438   * Jason Thorpe for thread support in libstdc++ on NetBSD.
24439
24440   * Kresten Krab Thorup wrote the run time support for the Objective-C
24441     language and the fantastic Java bytecode interpreter.
24442
24443   * Michael Tiemann for random bug fixes, the first instruction
24444     scheduler, initial C++ support, function integration, NS32k, SPARC
24445     and M88k machine description work, delay slot scheduling.
24446
24447   * Andreas Tobler for his work porting libgcj to Darwin.
24448
24449   * Teemu Torma for thread safe exception handling support.
24450
24451   * Leonard Tower wrote parts of the parser, RTL generator, and RTL
24452     definitions, and of the VAX machine description.
24453
24454   * Tom Tromey for internationalization support and for his many Java
24455     contributions and libgcj maintainership.
24456
24457   * Lassi Tuura for improvements to config.guess to determine HP
24458     processor types.
24459
24460   * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
24461
24462   * Brent Verner for work with the libstdc++ cshadow files and their
24463     associated configure steps.
24464
24465   * Todd Vierling for contributions for NetBSD ports.
24466
24467   * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
24468     guidance.
24469
24470   * Dean Wakerley for converting the install documentation from HTML
24471     to texinfo in time for GCC 3.0.
24472
24473   * Krister Walfridsson for random bug fixes.
24474
24475   * Stephen M. Webb for time and effort on making libstdc++ shadow
24476     files work with the tricky Solaris 8+ headers, and for pushing the
24477     build-time header tree.
24478
24479   * John Wehle for various improvements for the x86 code generator,
24480     related infrastructure improvements to help x86 code generation,
24481     value range propagation and other work, WE32k port.
24482
24483   * Ulrich Weigand for work on the s390 port.
24484
24485   * Zack Weinberg for major work on cpplib and various other bug fixes.
24486
24487   * Matt Welsh for help with Linux Threads support in GCJ.
24488
24489   * Urban Widmark for help fixing java.io.
24490
24491   * Mark Wielaard for new Java library code and his work integrating
24492     with Classpath.
24493
24494   * Dale Wiles helped port GCC to the Tahoe.
24495
24496   * Bob Wilson from Tensilica, Inc. for the Xtensa port.
24497
24498   * Jim Wilson for his direction via the steering committee, tackling
24499     hard problems in various places that nobody else wanted to work
24500     on, strength reduction and other loop optimizations.
24501
24502   * Carlo Wood for various fixes.
24503
24504   * Tom Wood for work on the m88k port.
24505
24506   * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
24507     description for the Tron architecture (specifically, the Gmicro).
24508
24509   * Kevin Zachmann helped ported GCC to the Tahoe.
24510
24511   * Gilles Zunino for help porting Java to Irix.
24512
24513
24514 In addition to the above, all of which also contributed time and
24515energy in testing GCC, we would like to thank the following for their
24516contributions to testing:
24517
24518   * Michael Abd-El-Malek
24519
24520   * Thomas Arend
24521
24522   * Bonzo Armstrong
24523
24524   * Steven Ashe
24525
24526   * Chris Baldwin
24527
24528   * David Billinghurst
24529
24530   * Jim Blandy
24531
24532   * Stephane Bortzmeyer
24533
24534   * Horst von Brand
24535
24536   * Frank Braun
24537
24538   * Rodney Brown
24539
24540   * Sidney Cadot
24541
24542   * Bradford Castalia
24543
24544   * Ralph Doncaster
24545
24546   * Richard Emberson
24547
24548   * Levente Farkas
24549
24550   * Graham Fawcett
24551
24552   * Robert A. French
24553
24554   * Jo"rgen Freyh
24555
24556   * Mark K. Gardner
24557
24558   * Charles-Antoine Gauthier
24559
24560   * Yung Shing Gene
24561
24562   * David Gilbert
24563
24564   * Simon Gornall
24565
24566   * Fred Gray
24567
24568   * John Griffin
24569
24570   * Patrik Hagglund
24571
24572   * Phil Hargett
24573
24574   * Amancio Hasty
24575
24576   * Bryan W. Headley
24577
24578   * Kevin B. Hendricks
24579
24580   * Joep Jansen
24581
24582   * Christian Joensson
24583
24584   * David Kidd
24585
24586   * Tobias Kuipers
24587
24588   * Anand Krishnaswamy
24589
24590   * llewelly
24591
24592   * Damon Love
24593
24594   * Brad Lucier
24595
24596   * Matthias Klose
24597
24598   * Martin Knoblauch
24599
24600   * Jesse Macnish
24601
24602   * Stefan Morrell
24603
24604   * Anon A. Mous
24605
24606   * Matthias Mueller
24607
24608   * Pekka Nikander
24609
24610   * Jon Olson
24611
24612   * Magnus Persson
24613
24614   * Chris Pollard
24615
24616   * Richard Polton
24617
24618   * David Rees
24619
24620   * Paul Reilly
24621
24622   * Tom Reilly
24623
24624   * Torsten Rueger
24625
24626   * Danny Sadinoff
24627
24628   * Marc Schifer
24629
24630   * David Schuler
24631
24632   * Vin Shelton
24633
24634   * Tim Souder
24635
24636   * Adam Sulmicki
24637
24638   * George Talbot
24639
24640   * Gregory Warnes
24641
24642   * David E. Young
24643
24644   * And many others
24645
24646 And finally we'd like to thank everyone who uses the compiler, submits
24647bug reports and generally reminds us why we're doing this work in the
24648first place.
24649
24650
24651File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
24652
24653Option Index
24654************
24655
24656GCC's command line options are indexed here without any initial `-' or
24657`--'.  Where an option has both positive and negative forms (such as
24658`-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
24659indexed under the most appropriate form; it may sometimes be useful to
24660look up both forms.
24661
24662�[index�]
24663* Menu:
24664
24665* ###:                                   Overall Options.    (line  174)
24666* -mf930:                                SPARC Options.      (line  122)
24667* -mf934:                                SPARC Options.      (line  122)
24668* A:                                     Preprocessor Options.
24669                                                             (line  474)
24670* all_load:                              Darwin Options.     (line   11)
24671* allowable_client:                      Darwin Options.     (line   87)
24672* ansi <1>:                              Non-bugs.           (line  107)
24673* ansi <2>:                              Other Builtins.     (line   22)
24674* ansi <3>:                              Preprocessor Options.
24675                                                             (line  308)
24676* ansi <4>:                              C Dialect Options.  (line   10)
24677* ansi:                                  Standards.          (line   13)
24678* arch_errors_fatal:                     Darwin Options.     (line   15)
24679* arch_only:                             Darwin Options.     (line   87)
24680* aux-info:                              C Dialect Options.  (line   97)
24681* b:                                     Target Options.     (line   13)
24682* B:                                     Directory Options.  (line   55)
24683* bcopy-builtin:                         PDP-11 Options.     (line   32)
24684* bind_at_load:                          Darwin Options.     (line   19)
24685* bundle:                                Darwin Options.     (line   24)
24686* bundle_loader:                         Darwin Options.     (line   28)
24687* c:                                     Link Options.       (line   20)
24688* C:                                     Preprocessor Options.
24689                                                             (line  521)
24690* c:                                     Overall Options.    (line  126)
24691* client_name:                           Darwin Options.     (line   87)
24692* compatibility_version:                 Darwin Options.     (line   87)
24693* crossjumping:                          Optimize Options.   (line  382)
24694* current_version:                       Darwin Options.     (line   87)
24695* D:                                     Preprocessor Options.
24696                                                             (line   33)
24697* d:                                     Debugging Options.  (line  199)
24698* da:                                    Debugging Options.  (line  327)
24699* dA:                                    Debugging Options.  (line  210)
24700* dB:                                    Debugging Options.  (line  217)
24701* db:                                    Debugging Options.  (line  214)
24702* dC:                                    Debugging Options.  (line  224)
24703* dc:                                    Debugging Options.  (line  220)
24704* dD <1>:                                Preprocessor Options.
24705                                                             (line  502)
24706* dD:                                    Debugging Options.  (line  234)
24707* dd:                                    Debugging Options.  (line  229)
24708* dE:                                    Debugging Options.  (line  238)
24709* dependency-file:                       Darwin Options.     (line   87)
24710* dF:                                    Debugging Options.  (line  245)
24711* df:                                    Debugging Options.  (line  241)
24712* dG:                                    Debugging Options.  (line  251)
24713* dg:                                    Debugging Options.  (line  248)
24714* dH:                                    Debugging Options.  (line  330)
24715* dh:                                    Debugging Options.  (line  255)
24716* dI:                                    Preprocessor Options.
24717                                                             (line  511)
24718* di:                                    Debugging Options.  (line  258)
24719* dj:                                    Debugging Options.  (line  261)
24720* dk:                                    Debugging Options.  (line  264)
24721* dL:                                    Debugging Options.  (line  271)
24722* dl:                                    Debugging Options.  (line  268)
24723* dM:                                    Preprocessor Options.
24724                                                             (line  490)
24725* dm:                                    Debugging Options.  (line  333)
24726* dM:                                    Debugging Options.  (line  275)
24727* dN <1>:                                Preprocessor Options.
24728                                                             (line  508)
24729* dN:                                    Debugging Options.  (line  282)
24730* dn:                                    Debugging Options.  (line  279)
24731* do:                                    Debugging Options.  (line  285)
24732* dP:                                    Debugging Options.  (line  342)
24733* dp:                                    Debugging Options.  (line  337)
24734* dR:                                    Debugging Options.  (line  291)
24735* dr:                                    Debugging Options.  (line  288)
24736* dS:                                    Debugging Options.  (line  298)
24737* ds:                                    Debugging Options.  (line  294)
24738* dT:                                    Debugging Options.  (line  305)
24739* dt:                                    Debugging Options.  (line  301)
24740* dU:                                    Debugging Options.  (line  311)
24741* du:                                    Debugging Options.  (line  308)
24742* dumpmachine:                           Debugging Options.  (line  504)
24743* dumpspecs:                             Debugging Options.  (line  512)
24744* dumpversion:                           Debugging Options.  (line  508)
24745* dv:                                    Debugging Options.  (line  346)
24746* dV:                                    Debugging Options.  (line  314)
24747* dw:                                    Debugging Options.  (line  318)
24748* dx:                                    Debugging Options.  (line  351)
24749* dy:                                    Debugging Options.  (line  355)
24750* dylib_file:                            Darwin Options.     (line   87)
24751* dylinker_install_name:                 Darwin Options.     (line   87)
24752* dynamic:                               Darwin Options.     (line   87)
24753* dynamiclib:                            Darwin Options.     (line   87)
24754* dZ:                                    Debugging Options.  (line  324)
24755* dz:                                    Debugging Options.  (line  321)
24756* E <1>:                                 Link Options.       (line   20)
24757* E:                                     Overall Options.    (line  147)
24758* EB <1>:                                ARC Options.        (line   12)
24759* EB:                                    MIPS Options.       (line    7)
24760* EL <1>:                                ARC Options.        (line    9)
24761* EL:                                    MIPS Options.       (line   10)
24762* exported_symbols_list:                 Darwin Options.     (line   87)
24763* fabi-version:                          C++ Dialect Options.
24764                                                             (line   20)
24765* falign-functions:                      Optimize Options.   (line  644)
24766* falign-jumps:                          Optimize Options.   (line  694)
24767* falign-labels:                         Optimize Options.   (line  662)
24768* falign-loops:                          Optimize Options.   (line  680)
24769* fargument-alias:                       Code Gen Options.   (line  314)
24770* fargument-noalias:                     Code Gen Options.   (line  314)
24771* fargument-noalias-global:              Code Gen Options.   (line  314)
24772* fbounds-check:                         Code Gen Options.   (line   15)
24773* fbranch-probabilities:                 Optimize Options.   (line  876)
24774* fbranch-target-load-optimize:          Optimize Options.   (line 1004)
24775* fbranch-target-load-optimize2:         Optimize Options.   (line 1010)
24776* fcall-saved <1>:                       Interoperation.     (line  197)
24777* fcall-saved:                           Code Gen Options.   (line  230)
24778* fcall-used:                            Code Gen Options.   (line  216)
24779* fcaller-saves:                         Optimize Options.   (line  516)
24780* fcheck-new:                            C++ Dialect Options.
24781                                                             (line   34)
24782* fcommon:                               Variable Attributes.
24783                                                             (line   92)
24784* fcond-mismatch:                        C Dialect Options.  (line  197)
24785* fconserve-space:                       C++ Dialect Options.
24786                                                             (line   44)
24787* fconstant-string-class:                Objective-C Dialect Options.
24788                                                             (line   24)
24789* fcse-follow-jumps:                     Optimize Options.   (line  311)
24790* fcse-skip-blocks:                      Optimize Options.   (line  320)
24791* fdata-sections:                        Optimize Options.   (line  985)
24792* fdelayed-branch:                       Optimize Options.   (line  435)
24793* fdelete-null-pointer-checks:           Optimize Options.   (line  404)
24794* fdiagnostics-show-location:            Language Independent Options.
24795                                                             (line   21)
24796* fdollars-in-identifiers <1>:           Interoperation.     (line  193)
24797* fdollars-in-identifiers:               Preprocessor Options.
24798                                                             (line  409)
24799* fdump-class-hierarchy:                 Debugging Options.  (line  374)
24800* fdump-translation-unit:                Debugging Options.  (line  366)
24801* fdump-tree:                            Debugging Options.  (line  382)
24802* fdump-unnumbered:                      Debugging Options.  (line  358)
24803* feliminate-dwarf2-dups:                Debugging Options.  (line  112)
24804* feliminate-unused-debug-symbols:       Debugging Options.  (line   53)
24805* feliminate-unused-debug-types:         Debugging Options.  (line  516)
24806* fexceptions:                           Code Gen Options.   (line   34)
24807* fexec-charset:                         Preprocessor Options.
24808                                                             (line  431)
24809* fexpensive-optimizations:              Optimize Options.   (line  417)
24810* ffast-math:                            Optimize Options.   (line  767)
24811* ffinite-math-only:                     Optimize Options.   (line  807)
24812* ffixed:                                Code Gen Options.   (line  204)
24813* ffloat-store <1>:                      Disappointments.    (line   79)
24814* ffloat-store:                          Optimize Options.   (line  753)
24815* ffor-scope:                            C++ Dialect Options.
24816                                                             (line   81)
24817* fforce-addr:                           Optimize Options.   (line  141)
24818* fforce-mem:                            Optimize Options.   (line  132)
24819* ffreestanding <1>:                     Function Attributes.
24820                                                             (line  168)
24821* ffreestanding <2>:                     C Dialect Options.  (line  162)
24822* ffreestanding:                         Standards.          (line   81)
24823* ffunction-sections:                    Optimize Options.   (line  985)
24824* fgcse:                                 Optimize Options.   (line  339)
24825* fgcse-las:                             Optimize Options.   (line  368)
24826* fgcse-lm:                              Optimize Options.   (line  350)
24827* fgcse-sm:                              Optimize Options.   (line  359)
24828* fgnu-runtime:                          Objective-C Dialect Options.
24829                                                             (line   33)
24830* fhosted:                               C Dialect Options.  (line  155)
24831* filelist:                              Darwin Options.     (line   87)
24832* finhibit-size-directive:               Code Gen Options.   (line  154)
24833* finline-functions:                     Optimize Options.   (line  173)
24834* finline-limit:                         Optimize Options.   (line  184)
24835* finput-charset:                        Preprocessor Options.
24836                                                             (line  444)
24837* finstrument-functions <1>:             Function Attributes.
24838                                                             (line  244)
24839* finstrument-functions:                 Code Gen Options.   (line  255)
24840* fkeep-inline-functions <1>:            Inline.             (line   51)
24841* fkeep-inline-functions:                Optimize Options.   (line  222)
24842* fkeep-static-consts:                   Optimize Options.   (line  228)
24843* flat_namespace:                        Darwin Options.     (line   87)
24844* fleading-underscore:                   Code Gen Options.   (line  329)
24845* floop-optimize:                        Optimize Options.   (line  375)
24846* fmem-report:                           Debugging Options.  (line  137)
24847* fmessage-length:                       Language Independent Options.
24848                                                             (line   15)
24849* fmove-all-movables:                    Optimize Options.   (line  529)
24850* fms-extensions <1>:                    C++ Dialect Options.
24851                                                             (line  116)
24852* fms-extensions:                        C Dialect Options.  (line  172)
24853* fnew-ra:                               Optimize Options.   (line  257)
24854* fnext-runtime:                         Objective-C Dialect Options.
24855                                                             (line   37)
24856* fno-access-control:                    C++ Dialect Options.
24857                                                             (line   30)
24858* fno-asm:                               C Dialect Options.  (line  113)
24859* fno-branch-count-reg:                  Optimize Options.   (line  262)
24860* fno-builtin <1>:                       Other Builtins.     (line   14)
24861* fno-builtin:                           C Dialect Options.  (line  127)
24862* fno-common <1>:                        Variable Attributes.
24863                                                             (line   92)
24864* fno-common:                            Code Gen Options.   (line  142)
24865* fno-const-strings:                     C++ Dialect Options.
24866                                                             (line   56)
24867* fno-cprop-registers:                   Optimize Options.   (line  725)
24868* fno-default-inline <1>:                Inline.             (line   46)
24869* fno-default-inline <2>:                Optimize Options.   (line  117)
24870* fno-default-inline:                    C++ Dialect Options.
24871                                                             (line  187)
24872* fno-defer-pop:                         Optimize Options.   (line  124)
24873* fno-elide-constructors:                C++ Dialect Options.
24874                                                             (line   67)
24875* fno-enforce-eh-specs:                  C++ Dialect Options.
24876                                                             (line   73)
24877* fno-for-scope:                         C++ Dialect Options.
24878                                                             (line   81)
24879* fno-function-cse:                      Optimize Options.   (line  273)
24880* fno-gnu-keywords:                      C++ Dialect Options.
24881                                                             (line   93)
24882* fno-guess-branch-probability:          Optimize Options.   (line  563)
24883* fno-ident:                             Code Gen Options.   (line  151)
24884* fno-implement-inlines <1>:             C++ Interface.      (line   75)
24885* fno-implement-inlines:                 C++ Dialect Options.
24886                                                             (line  110)
24887* fno-implicit-inline-templates:         C++ Dialect Options.
24888                                                             (line  104)
24889* fno-implicit-templates <1>:            Template Instantiation.
24890                                                             (line   87)
24891* fno-implicit-templates:                C++ Dialect Options.
24892                                                             (line   98)
24893* fno-inline:                            Optimize Options.   (line  167)
24894* fno-math-errno:                        Optimize Options.   (line  780)
24895* fno-nil-receivers:                     Objective-C Dialect Options.
24896                                                             (line   43)
24897* fno-nonansi-builtins:                  C++ Dialect Options.
24898                                                             (line  121)
24899* fno-operator-names:                    C++ Dialect Options.
24900                                                             (line  126)
24901* fno-optional-diags:                    C++ Dialect Options.
24902                                                             (line  130)
24903* fno-peephole:                          Optimize Options.   (line  554)
24904* fno-peephole2:                         Optimize Options.   (line  554)
24905* fno-rtti:                              C++ Dialect Options.
24906                                                             (line  145)
24907* fno-sched-interblock:                  Optimize Options.   (line  461)
24908* fno-sched-spec:                        Optimize Options.   (line  466)
24909* fno-show-column:                       Preprocessor Options.
24910                                                             (line  469)
24911* fno-signed-bitfields:                  C Dialect Options.  (line  230)
24912* fno-stack-limit:                       Code Gen Options.   (line  298)
24913* fno-trapping-math:                     Optimize Options.   (line  817)
24914* fno-unsigned-bitfields:                C Dialect Options.  (line  230)
24915* fno-weak:                              C++ Dialect Options.
24916                                                             (line  172)
24917* fno-working-directory:                 Preprocessor Options.
24918                                                             (line  454)
24919* fno-zero-initialized-in-bss:           Optimize Options.   (line  284)
24920* fnon-call-exceptions:                  Code Gen Options.   (line   48)
24921* fobjc-exceptions:                      Objective-C Dialect Options.
24922                                                             (line   50)
24923* fold-unroll-all-loops:                 Optimize Options.   (line  960)
24924* fold-unroll-loops:                     Optimize Options.   (line  952)
24925* fomit-frame-pointer:                   Optimize Options.   (line  146)
24926* foptimize-register-move:               Optimize Options.   (line  424)
24927* foptimize-sibling-calls:               Optimize Options.   (line  162)
24928* force_cpusubtype_ALL:                  Darwin Options.     (line   87)
24929* force_flat_namespace:                  Darwin Options.     (line   87)
24930* fpack-struct:                          Code Gen Options.   (line  247)
24931* fpcc-struct-return <1>:                Incompatibilities.  (line  172)
24932* fpcc-struct-return:                    Code Gen Options.   (line   70)
24933* fpch-deps:                             Preprocessor Options.
24934                                                             (line  281)
24935* fpeel-loops:                           Optimize Options.   (line  941)
24936* fpermissive:                           C++ Dialect Options.
24937                                                             (line  135)
24938* fPIC:                                  Code Gen Options.   (line  188)
24939* fpic:                                  Code Gen Options.   (line  170)
24940* fPIE:                                  Code Gen Options.   (line  198)
24941* fpie:                                  Code Gen Options.   (line  198)
24942* fprefetch-loop-arrays:                 Optimize Options.   (line  977)
24943* fpreprocessed:                         Preprocessor Options.
24944                                                             (line  412)
24945* fprofile-arcs <1>:                     Other Builtins.     (line  227)
24946* fprofile-arcs:                         Debugging Options.  (line  141)
24947* fprofile-generate:                     Optimize Options.   (line  732)
24948* fprofile-use:                          Optimize Options.   (line  741)
24949* fprofile-values:                       Optimize Options.   (line  895)
24950* frandom-string:                        Debugging Options.  (line  415)
24951* freduce-all-givs:                      Optimize Options.   (line  533)
24952* freg-struct-return:                    Code Gen Options.   (line   88)
24953* fregmove:                              Optimize Options.   (line  424)
24954* frename-registers:                     Optimize Options.   (line  707)
24955* freorder-blocks:                       Optimize Options.   (line  581)
24956* freorder-functions:                    Optimize Options.   (line  587)
24957* freplace-objc-classes:                 Objective-C Dialect Options.
24958                                                             (line  135)
24959* frepo <1>:                             Template Instantiation.
24960                                                             (line   62)
24961* frepo:                                 C++ Dialect Options.
24962                                                             (line  140)
24963* frerun-cse-after-loop:                 Optimize Options.   (line  328)
24964* frerun-loop-opt:                       Optimize Options.   (line  334)
24965* frounding-math:                        Optimize Options.   (line  832)
24966* fsched-spec-load:                      Optimize Options.   (line  471)
24967* fsched-spec-load-dangerous:            Optimize Options.   (line  476)
24968* fsched-stalled-insns:                  Optimize Options.   (line  481)
24969* fsched-stalled-insns-dep:              Optimize Options.   (line  486)
24970* fsched-verbose:                        Debugging Options.  (line  425)
24971* fsched2-use-superblocks:               Optimize Options.   (line  493)
24972* fsched2-use-traces:                    Optimize Options.   (line  504)
24973* fschedule-insns:                       Optimize Options.   (line  442)
24974* fschedule-insns2:                      Optimize Options.   (line  452)
24975* fshared-data:                          Code Gen Options.   (line  135)
24976* fshort-double:                         Code Gen Options.   (line  117)
24977* fshort-enums <1>:                      Non-bugs.           (line   42)
24978* fshort-enums <2>:                      Type Attributes.    (line  112)
24979* fshort-enums:                          Code Gen Options.   (line  106)
24980* fshort-wchar:                          Code Gen Options.   (line  125)
24981* fsignaling-nans:                       Optimize Options.   (line  852)
24982* fsigned-bitfields <1>:                 Non-bugs.           (line   57)
24983* fsigned-bitfields:                     C Dialect Options.  (line  230)
24984* fsigned-char:                          C Dialect Options.  (line  220)
24985* fsingle-precision-constant:            Optimize Options.   (line  867)
24986* fstack-check:                          Code Gen Options.   (line  283)
24987* fstack-limit-register:                 Code Gen Options.   (line  298)
24988* fstack-limit-symbol:                   Code Gen Options.   (line  298)
24989* fstats:                                C++ Dialect Options.
24990                                                             (line  153)
24991* fstrength-reduce:                      Optimize Options.   (line  296)
24992* fstrict-aliasing:                      Optimize Options.   (line  601)
24993* fsyntax-only:                          Warning Options.    (line   22)
24994* ftabstop:                              Preprocessor Options.
24995                                                             (line  425)
24996* ftemplate-depth:                       C++ Dialect Options.
24997                                                             (line  158)
24998* ftest-coverage:                        Debugging Options.  (line  190)
24999* fthread-jumps:                         Optimize Options.   (line  302)
25000* ftime-report:                          Debugging Options.  (line  133)
25001* ftracer:                               Optimize Options.   (line  917)
25002* ftrapv:                                Code Gen Options.   (line   22)
25003* funit-at-a-time:                       Optimize Options.   (line  922)
25004* funroll-all-loops:                     Optimize Options.   (line  935)
25005* funroll-loops <1>:                     Non-bugs.           (line  173)
25006* funroll-loops:                         Optimize Options.   (line  927)
25007* funsafe-math-optimizations:            Optimize Options.   (line  793)
25008* funsigned-bitfields <1>:               Non-bugs.           (line   57)
25009* funsigned-bitfields:                   C Dialect Options.  (line  230)
25010* funsigned-char:                        C Dialect Options.  (line  202)
25011* funswitch-loops:                       Optimize Options.   (line  947)
25012* funwind-tables:                        Code Gen Options.   (line   57)
25013* fuse-cxa-atexit:                       C++ Dialect Options.
25014                                                             (line  165)
25015* fverbose-asm:                          Code Gen Options.   (line  161)
25016* fvpt:                                  Optimize Options.   (line  903)
25017* fweb:                                  Optimize Options.   (line  714)
25018* fwide-exec-charset:                    Preprocessor Options.
25019                                                             (line  436)
25020* fworking-directory:                    Preprocessor Options.
25021                                                             (line  454)
25022* fwrapv:                                Code Gen Options.   (line   26)
25023* fwritable-strings <1>:                 Incompatibilities.  (line   22)
25024* fwritable-strings:                     C Dialect Options.  (line  236)
25025* fzero-link:                            Objective-C Dialect Options.
25026                                                             (line  145)
25027* G <1>:                                 System V Options.   (line   10)
25028* G <2>:                                 MIPS Options.       (line  177)
25029* G <3>:                                 RS/6000 and PowerPC Options.
25030                                                             (line  508)
25031* G:                                     M32R/D Options.     (line   57)
25032* g:                                     Debugging Options.  (line   10)
25033* gcoff:                                 Debugging Options.  (line   63)
25034* gdwarf-2:                              Debugging Options.  (line   81)
25035* gen-decls:                             Objective-C Dialect Options.
25036                                                             (line  155)
25037* ggdb:                                  Debugging Options.  (line   39)
25038* gnu-ld:                                HPPA Options.       (line  110)
25039* gstabs:                                Debugging Options.  (line   45)
25040* gstabs+:                               Debugging Options.  (line   57)
25041* gvms:                                  Debugging Options.  (line   85)
25042* gxcoff:                                Debugging Options.  (line   68)
25043* gxcoff+:                               Debugging Options.  (line   73)
25044* H:                                     Preprocessor Options.
25045                                                             (line  576)
25046* headerpad_max_install_names:           Darwin Options.     (line   87)
25047* help <1>:                              Preprocessor Options.
25048                                                             (line  568)
25049* help:                                  Overall Options.    (line  185)
25050* hp-ld:                                 HPPA Options.       (line  120)
25051* I <1>:                                 Directory Options.  (line   10)
25052* I:                                     Preprocessor Options.
25053                                                             (line   65)
25054* I- <1>:                                Directory Options.  (line   31)
25055* I-:                                    Preprocessor Options.
25056                                                             (line  345)
25057* idirafter:                             Preprocessor Options.
25058                                                             (line  386)
25059* if-conversion:                         Optimize Options.   (line  389)
25060* if-conversion2:                        Optimize Options.   (line  398)
25061* imacros:                               Preprocessor Options.
25062                                                             (line  377)
25063* image_base:                            Darwin Options.     (line   87)
25064* include:                               Preprocessor Options.
25065                                                             (line  366)
25066* init:                                  Darwin Options.     (line   87)
25067* install_name:                          Darwin Options.     (line   87)
25068* iprefix:                               Preprocessor Options.
25069                                                             (line  391)
25070* isystem:                               Preprocessor Options.
25071                                                             (line  403)
25072* iwithprefix:                           Preprocessor Options.
25073                                                             (line  397)
25074* iwithprefixbefore:                     Preprocessor Options.
25075                                                             (line  397)
25076* keep_private_externs:                  Darwin Options.     (line   87)
25077* L:                                     Directory Options.  (line   51)
25078* l:                                     Link Options.       (line   26)
25079* lobjc:                                 Link Options.       (line   53)
25080* M:                                     Preprocessor Options.
25081                                                             (line  174)
25082* m1:                                    SH Options.         (line    9)
25083* m10:                                   PDP-11 Options.     (line   29)
25084* m128bit-long-double:                   i386 and x86-64 Options.
25085                                                             (line  216)
25086* m16-bit:                               CRIS Options.       (line   69)
25087* m2:                                    SH Options.         (line   12)
25088* m210:                                  MCore Options.      (line   43)
25089* m3:                                    SH Options.         (line   18)
25090* m31:                                   S/390 and zSeries Options.
25091                                                             (line   35)
25092* m32 <1>:                               i386 and x86-64 Options.
25093                                                             (line  391)
25094* m32:                                   SPARC Options.      (line  218)
25095* m32-bit:                               CRIS Options.       (line   69)
25096* m32032:                                NS32K Options.      (line   13)
25097* m32081:                                NS32K Options.      (line   27)
25098* m32332:                                NS32K Options.      (line   18)
25099* m32381:                                NS32K Options.      (line   31)
25100* m32532:                                NS32K Options.      (line   23)
25101* m32r:                                  M32R/D Options.     (line   15)
25102* m32r2:                                 M32R/D Options.     (line    9)
25103* m32rx:                                 M32R/D Options.     (line   12)
25104* m340:                                  MCore Options.      (line   43)
25105* m386:                                  i386 and x86-64 Options.
25106                                                             (line  107)
25107* m3dnow:                                i386 and x86-64 Options.
25108                                                             (line  323)
25109* m3e:                                   SH Options.         (line   21)
25110* m4:                                    SH Options.         (line   35)
25111* m4-nofpu:                              SH Options.         (line   24)
25112* m4-single:                             SH Options.         (line   31)
25113* m4-single-only:                        SH Options.         (line   27)
25114* m40:                                   PDP-11 Options.     (line   23)
25115* m45:                                   PDP-11 Options.     (line   26)
25116* m486:                                  i386 and x86-64 Options.
25117                                                             (line  107)
25118* m4byte-functions:                      MCore Options.      (line   27)
25119* m5200:                                 M680x0 Options.     (line   59)
25120* m64 <1>:                               S/390 and zSeries Options.
25121                                                             (line   35)
25122* m64 <2>:                               i386 and x86-64 Options.
25123                                                             (line  391)
25124* m64:                                   SPARC Options.      (line  218)
25125* m68000:                                M680x0 Options.     (line   13)
25126* m68020:                                M680x0 Options.     (line   21)
25127* m68020-40:                             M680x0 Options.     (line   66)
25128* m68020-60:                             M680x0 Options.     (line   73)
25129* m68030:                                M680x0 Options.     (line   30)
25130* m68040:                                M680x0 Options.     (line   34)
25131* m68060:                                M680x0 Options.     (line   42)
25132* m6811:                                 M68hc1x Options.    (line   13)
25133* m6812:                                 M68hc1x Options.    (line   18)
25134* m68881:                                M680x0 Options.     (line   25)
25135* m68hc11:                               M68hc1x Options.    (line   13)
25136* m68hc12:                               M68hc1x Options.    (line   18)
25137* m68hcs12:                              M68hc1x Options.    (line   23)
25138* m68S12:                                M68hc1x Options.    (line   23)
25139* m8-bit:                                CRIS Options.       (line   69)
25140* m96bit-long-double:                    i386 and x86-64 Options.
25141                                                             (line  216)
25142* mabi-mmixware:                         MMIX Options.       (line   20)
25143* mabi=32:                               MIPS Options.       (line   87)
25144* mabi=64:                               MIPS Options.       (line   87)
25145* mabi=altivec:                          RS/6000 and PowerPC Options.
25146                                                             (line  403)
25147* mabi=eabi:                             MIPS Options.       (line   87)
25148* mabi=gnu:                              MMIX Options.       (line   20)
25149* mabi=n32:                              MIPS Options.       (line   87)
25150* mabi=no-altivec:                       RS/6000 and PowerPC Options.
25151                                                             (line  408)
25152* mabi=no-spe:                           RS/6000 and PowerPC Options.
25153                                                             (line  146)
25154* mabi=o64:                              MIPS Options.       (line   87)
25155* mabi=spe:                              RS/6000 and PowerPC Options.
25156                                                             (line  141)
25157* mabicalls:                             MIPS Options.       (line   95)
25158* mabort-on-noreturn:                    ARM Options.        (line  171)
25159* mabshi:                                PDP-11 Options.     (line   55)
25160* mac0:                                  PDP-11 Options.     (line   16)
25161* macc-4:                                FRV Options.        (line   59)
25162* macc-8:                                FRV Options.        (line   62)
25163* maccumulate-outgoing-args:             i386 and x86-64 Options.
25164                                                             (line  342)
25165* mads:                                  RS/6000 and PowerPC Options.
25166                                                             (line  433)
25167* maix-struct-return:                    RS/6000 and PowerPC Options.
25168                                                             (line  396)
25169* maix32:                                RS/6000 and PowerPC Options.
25170                                                             (line  196)
25171* maix64:                                RS/6000 and PowerPC Options.
25172                                                             (line  196)
25173* malign-300:                            H8/300 Options.     (line   31)
25174* malign-double:                         i386 and x86-64 Options.
25175                                                             (line  202)
25176* malign-int:                            M680x0 Options.     (line  125)
25177* malign-loops:                          M32R/D Options.     (line   73)
25178* malign-natural:                        RS/6000 and PowerPC Options.
25179                                                             (line  229)
25180* malign-power:                          RS/6000 and PowerPC Options.
25181                                                             (line  229)
25182* malignment-traps:                      ARM Options.        (line   87)
25183* malloc-cc:                             FRV Options.        (line   25)
25184* malpha-as:                             DEC Alpha Options.  (line  159)
25185* maltivec:                              RS/6000 and PowerPC Options.
25186                                                             (line  135)
25187* mam33:                                 MN10300 Options.    (line   17)
25188* maout:                                 CRIS Options.       (line   92)
25189* mapcs:                                 ARM Options.        (line   18)
25190* mapcs-26:                              ARM Options.        (line   21)
25191* mapcs-32:                              ARM Options.        (line   29)
25192* mapcs-frame:                           ARM Options.        (line   10)
25193* mapp-regs <1>:                         V850 Options.       (line   57)
25194* mapp-regs:                             SPARC Options.      (line   10)
25195* march <1>:                             CRIS Options.       (line   10)
25196* march <2>:                             S/390 and zSeries Options.
25197                                                             (line   63)
25198* march <3>:                             HPPA Options.       (line    9)
25199* march <4>:                             i386 and x86-64 Options.
25200                                                             (line   96)
25201* march <5>:                             MIPS Options.       (line   14)
25202* march:                                 ARM Options.        (line  144)
25203* masm-compat:                           Intel 960 Options.  (line   58)
25204* masm-optimize:                         D30V Options.       (line   24)
25205* masm=DIALECT:                          i386 and x86-64 Options.
25206                                                             (line  159)
25207* mauto-incdec:                          M68hc1x Options.    (line   26)
25208* mauto-pic:                             IA-64 Options.      (line   53)
25209* mb:                                    SH Options.         (line   38)
25210* mb-step:                               IA-64 Options.      (line   36)
25211* mbackchain:                            S/390 and zSeries Options.
25212                                                             (line   20)
25213* mbase-addresses:                       MMIX Options.       (line   54)
25214* mbcopy:                                PDP-11 Options.     (line   36)
25215* mbig <1>:                              TMS320C3x/C4x Options.
25216                                                             (line   18)
25217* mbig:                                  RS/6000 and PowerPC Options.
25218                                                             (line  328)
25219* mbig-endian <1>:                       IA-64 Options.      (line    9)
25220* mbig-endian <2>:                       MCore Options.      (line   39)
25221* mbig-endian <3>:                       RS/6000 and PowerPC Options.
25222                                                             (line  328)
25223* mbig-endian:                           ARM Options.        (line   75)
25224* mbig-memory:                           TMS320C3x/C4x Options.
25225                                                             (line   18)
25226* mbig-switch <1>:                       V850 Options.       (line   52)
25227* mbig-switch:                           HPPA Options.       (line   27)
25228* mbigtable:                             SH Options.         (line   54)
25229* mbit-align:                            RS/6000 and PowerPC Options.
25230                                                             (line  282)
25231* mbitfield <1>:                         NS32K Options.      (line   66)
25232* mbitfield:                             M680x0 Options.     (line   97)
25233* mbk:                                   TMS320C3x/C4x Options.
25234                                                             (line   27)
25235* mbranch-cheap:                         PDP-11 Options.     (line   65)
25236* mbranch-cost:                          D30V Options.       (line   29)
25237* mbranch-cost=NUMBER:                   M32R/D Options.     (line   82)
25238* mbranch-expensive:                     PDP-11 Options.     (line   61)
25239* mbranch-likely:                        MIPS Options.       (line  291)
25240* mbranch-predict:                       MMIX Options.       (line   49)
25241* mbuild-constants:                      DEC Alpha Options.  (line  142)
25242* mbwx:                                  DEC Alpha Options.  (line  171)
25243* mc68000:                               M680x0 Options.     (line   13)
25244* mc68020:                               M680x0 Options.     (line   21)
25245* mca:                                   Intel 960 Options.  (line    9)
25246* mcall-gnu:                             RS/6000 and PowerPC Options.
25247                                                             (line  388)
25248* mcall-linux:                           RS/6000 and PowerPC Options.
25249                                                             (line  384)
25250* mcall-netbsd:                          RS/6000 and PowerPC Options.
25251                                                             (line  392)
25252* mcall-prologues:                       AVR Options.        (line   43)
25253* mcall-solaris:                         RS/6000 and PowerPC Options.
25254                                                             (line  380)
25255* mcall-sysv:                            RS/6000 and PowerPC Options.
25256                                                             (line  367)
25257* mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
25258                                                             (line  374)
25259* mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
25260                                                             (line  377)
25261* mcallee-super-interworking:            ARM Options.        (line  261)
25262* mcaller-super-interworking:            ARM Options.        (line  267)
25263* mcallgraph-data:                       MCore Options.      (line   31)
25264* mcc-init:                              CRIS Options.       (line   46)
25265* mcf:                                   Intel 960 Options.  (line    9)
25266* mcheck-zero-division:                  MIPS Options.       (line  235)
25267* mcirrus-fix-invalid-insns:             ARM Options.        (line  214)
25268* mcix:                                  DEC Alpha Options.  (line  171)
25269* mcmodel=embmedany:                     SPARC Options.      (line  240)
25270* mcmodel=kernel:                        i386 and x86-64 Options.
25271                                                             (line  412)
25272* mcmodel=large:                         i386 and x86-64 Options.
25273                                                             (line  424)
25274* mcmodel=medany:                        SPARC Options.      (line  234)
25275* mcmodel=medium:                        i386 and x86-64 Options.
25276                                                             (line  417)
25277* mcmodel=medlow:                        SPARC Options.      (line  223)
25278* mcmodel=medmid:                        SPARC Options.      (line  228)
25279* mcmodel=small:                         i386 and x86-64 Options.
25280                                                             (line  406)
25281* mcode-align:                           Intel 960 Options.  (line   47)
25282* mcomplex-addr:                         Intel 960 Options.  (line   39)
25283* mcond-exec <1>:                        FRV Options.        (line   98)
25284* mcond-exec:                            D30V Options.       (line   34)
25285* mcond-move:                            FRV Options.        (line   74)
25286* mconst-align:                          CRIS Options.       (line   60)
25287* mconst16:                              Xtensa Options.     (line   10)
25288* mconstant-gp:                          IA-64 Options.      (line   49)
25289* mcpu <1>:                              FRV Options.        (line  150)
25290* mcpu <2>:                              CRIS Options.       (line   10)
25291* mcpu <3>:                              ARC Options.        (line   23)
25292* mcpu <4>:                              TMS320C3x/C4x Options.
25293                                                             (line    9)
25294* mcpu <5>:                              DEC Alpha Options.  (line  223)
25295* mcpu <6>:                              i386 and x86-64 Options.
25296                                                             (line  101)
25297* mcpu <7>:                              RS/6000 and PowerPC Options.
25298                                                             (line   82)
25299* mcpu <8>:                              ARM Options.        (line  121)
25300* mcpu:                                  SPARC Options.      (line  127)
25301* mcpu32:                                M680x0 Options.     (line   51)
25302* mcypress:                              SPARC Options.      (line  122)
25303* MD:                                    Preprocessor Options.
25304                                                             (line  262)
25305* mdalign:                               SH Options.         (line   44)
25306* mdata:                                 ARC Options.        (line   30)
25307* mdata-align:                           CRIS Options.       (line   60)
25308* mdb:                                   TMS320C3x/C4x Options.
25309                                                             (line   32)
25310* mdebug <1>:                            S/390 and zSeries Options.
25311                                                             (line   59)
25312* mdebug:                                M32R/D Options.     (line   69)
25313* mdec-asm:                              PDP-11 Options.     (line   78)
25314* mdisable-callt:                        V850 Options.       (line   80)
25315* mdisable-fpregs:                       HPPA Options.       (line   37)
25316* mdisable-indexing:                     HPPA Options.       (line   44)
25317* mdiv:                                  MCore Options.      (line   15)
25318* mdouble:                               FRV Options.        (line   38)
25319* mdouble-float:                         MIPS Options.       (line  154)
25320* mdp-isr-reload:                        TMS320C3x/C4x Options.
25321                                                             (line   45)
25322* mdwarf2-asm:                           IA-64 Options.      (line   74)
25323* mdword:                                FRV Options.        (line   32)
25324* mdynamic-no-pic:                       RS/6000 and PowerPC Options.
25325                                                             (line  333)
25326* meabi:                                 RS/6000 and PowerPC Options.
25327                                                             (line  456)
25328* mearly-stop-bits:                      IA-64 Options.      (line   87)
25329* melf <1>:                              MMIX Options.       (line   44)
25330* melf:                                  CRIS Options.       (line   95)
25331* melinux:                               CRIS Options.       (line   99)
25332* melinux-stacksize:                     CRIS Options.       (line   25)
25333* memb:                                  RS/6000 and PowerPC Options.
25334                                                             (line  451)
25335* membedded-data:                        MIPS Options.       (line  186)
25336* membedded-pic:                         MIPS Options.       (line  124)
25337* mep:                                   V850 Options.       (line   16)
25338* mepsilon:                              MMIX Options.       (line   15)
25339* mesa:                                  S/390 and zSeries Options.
25340                                                             (line   43)
25341* metrax100:                             CRIS Options.       (line   31)
25342* metrax4:                               CRIS Options.       (line   31)
25343* mexplicit-relocs <1>:                  DEC Alpha Options.  (line  184)
25344* mexplicit-relocs:                      MIPS Options.       (line  206)
25345* mextmem:                               D30V Options.       (line    9)
25346* mextmemory:                            D30V Options.       (line   14)
25347* MF:                                    Preprocessor Options.
25348                                                             (line  208)
25349* mfast-fix:                             TMS320C3x/C4x Options.
25350                                                             (line   62)
25351* mfast-indirect-calls:                  HPPA Options.       (line   56)
25352* mfaster-structs:                       SPARC Options.      (line   88)
25353* mfix:                                  DEC Alpha Options.  (line  171)
25354* mfix-sb1:                              MIPS Options.       (line  275)
25355* mfixed-cc:                             FRV Options.        (line   28)
25356* mfixed-range:                          IA-64 Options.      (line   79)
25357* mflat:                                 SPARC Options.      (line   59)
25358* mfloat-gprs:                           RS/6000 and PowerPC Options.
25359                                                             (line  160)
25360* mfloat-ieee:                           DEC Alpha Options.  (line  179)
25361* mfloat-vax:                            DEC Alpha Options.  (line  179)
25362* mfloat32:                              PDP-11 Options.     (line   52)
25363* mfloat64:                              PDP-11 Options.     (line   48)
25364* mflush-func:                           MIPS Options.       (line  281)
25365* mflush-func=NAME:                      M32R/D Options.     (line   94)
25366* mflush-trap=NUMBER:                    M32R/D Options.     (line   87)
25367* mfmovd:                                SH Options.         (line   58)
25368* mfp:                                   ARM Options.        (line  153)
25369* mfp-reg:                               DEC Alpha Options.  (line   25)
25370* mfp-rounding-mode:                     DEC Alpha Options.  (line   85)
25371* mfp-trap-mode:                         DEC Alpha Options.  (line   63)
25372* mfp32:                                 MIPS Options.       (line  137)
25373* mfp64:                                 MIPS Options.       (line  140)
25374* mfpe:                                  ARM Options.        (line  153)
25375* mfpr-32:                               FRV Options.        (line   13)
25376* mfpr-64:                               FRV Options.        (line   16)
25377* mfpu <1>:                              PDP-11 Options.     (line    9)
25378* mfpu:                                  SPARC Options.      (line   20)
25379* mfull-toc:                             RS/6000 and PowerPC Options.
25380                                                             (line  169)
25381* mfused-madd <1>:                       Xtensa Options.     (line   19)
25382* mfused-madd <2>:                       S/390 and zSeries Options.
25383                                                             (line   77)
25384* mfused-madd <3>:                       MIPS Options.       (line  260)
25385* mfused-madd:                           RS/6000 and PowerPC Options.
25386                                                             (line  276)
25387* mg:                                    VAX Options.        (line   17)
25388* MG:                                    Preprocessor Options.
25389                                                             (line  217)
25390* mgas <1>:                              DEC Alpha Options.  (line  159)
25391* mgas:                                  HPPA Options.       (line   72)
25392* mgnu:                                  VAX Options.        (line   13)
25393* mgnu-as:                               IA-64 Options.      (line   18)
25394* mgnu-ld:                               IA-64 Options.      (line   23)
25395* mgotplt:                               CRIS Options.       (line   86)
25396* mgp32:                                 MIPS Options.       (line  131)
25397* mgp64:                                 MIPS Options.       (line  134)
25398* mgpr-32:                               FRV Options.        (line    7)
25399* mgpr-64:                               FRV Options.        (line   10)
25400* mh:                                    H8/300 Options.     (line   14)
25401* mhard-float <1>:                       FRV Options.        (line   19)
25402* mhard-float <2>:                       S/390 and zSeries Options.
25403                                                             (line   11)
25404* mhard-float <3>:                       MIPS Options.       (line  143)
25405* mhard-float <4>:                       RS/6000 and PowerPC Options.
25406                                                             (line  238)
25407* mhard-float <5>:                       ARM Options.        (line   53)
25408* mhard-float:                           SPARC Options.      (line   20)
25409* mhard-quad-float:                      SPARC Options.      (line   41)
25410* mhardlit:                              MCore Options.      (line   10)
25411* mhimem:                                NS32K Options.      (line  111)
25412* mhitachi:                              SH Options.         (line   61)
25413* mic-compat:                            Intel 960 Options.  (line   54)
25414* mic2.0-compat:                         Intel 960 Options.  (line   54)
25415* mic3.0-compat:                         Intel 960 Options.  (line   54)
25416* mieee <1>:                             SH Options.         (line   68)
25417* mieee:                                 DEC Alpha Options.  (line   39)
25418* mieee-compare:                         NS32K Options.      (line   55)
25419* mieee-conformant:                      DEC Alpha Options.  (line  134)
25420* mieee-fp:                              i386 and x86-64 Options.
25421                                                             (line  164)
25422* mieee-with-inexact:                    DEC Alpha Options.  (line   52)
25423* mimpure-text:                          SPARC Options.      (line   98)
25424* minit-stack:                           AVR Options.        (line   35)
25425* minline-all-stringops:                 i386 and x86-64 Options.
25426                                                             (line  363)
25427* minline-float-divide-max-throughput:   IA-64 Options.      (line   61)
25428* minline-float-divide-min-latency:      IA-64 Options.      (line   57)
25429* minline-int-divide-max-throughput:     IA-64 Options.      (line   69)
25430* minline-int-divide-min-latency:        IA-64 Options.      (line   65)
25431* minmax:                                M68hc1x Options.    (line   31)
25432* minsert-sched-nops:                    RS/6000 and PowerPC Options.
25433                                                             (line  355)
25434* mint16:                                PDP-11 Options.     (line   40)
25435* mint32 <1>:                            PDP-11 Options.     (line   44)
25436* mint32:                                H8/300 Options.     (line   28)
25437* mint64:                                MIPS Options.       (line  158)
25438* mintel-asm:                            Intel 960 Options.  (line   58)
25439* mips1:                                 MIPS Options.       (line   58)
25440* mips16:                                MIPS Options.       (line   80)
25441* mips2:                                 MIPS Options.       (line   61)
25442* mips3:                                 MIPS Options.       (line   64)
25443* mips32:                                MIPS Options.       (line   70)
25444* mips32r2:                              MIPS Options.       (line   73)
25445* mips4:                                 MIPS Options.       (line   67)
25446* mips64:                                MIPS Options.       (line   76)
25447* misel:                                 RS/6000 and PowerPC Options.
25448                                                             (line  150)
25449* misize:                                SH Options.         (line   71)
25450* missue-rate=NUMBER:                    M32R/D Options.     (line   79)
25451* mjump-in-delay:                        HPPA Options.       (line   32)
25452* mka:                                   Intel 960 Options.  (line    9)
25453* mkb:                                   Intel 960 Options.  (line    9)
25454* mknuthdiv:                             MMIX Options.       (line   33)
25455* ml:                                    SH Options.         (line   41)
25456* mlarge-data:                           DEC Alpha Options.  (line  195)
25457* mlarge-text:                           DEC Alpha Options.  (line  213)
25458* mleaf-procedures:                      Intel 960 Options.  (line   22)
25459* mlibfuncs:                             MMIX Options.       (line   10)
25460* mlibrary-pic:                          FRV Options.        (line   56)
25461* mlinker-opt:                           HPPA Options.       (line   82)
25462* mlinux:                                CRIS Options.       (line  104)
25463* mlittle:                               RS/6000 and PowerPC Options.
25464                                                             (line  322)
25465* mlittle-endian <1>:                    IA-64 Options.      (line   13)
25466* mlittle-endian <2>:                    MCore Options.      (line   39)
25467* mlittle-endian <3>:                    RS/6000 and PowerPC Options.
25468                                                             (line  322)
25469* mlittle-endian <4>:                    ARM Options.        (line   71)
25470* mlittle-endian:                        SPARC Options.      (line  212)
25471* mlong-calls <1>:                       V850 Options.       (line   10)
25472* mlong-calls <2>:                       MIPS Options.       (line  246)
25473* mlong-calls <3>:                       ARM Options.        (line  176)
25474* mlong-calls:                           M68hc1x Options.    (line   35)
25475* mlong-double-64:                       Intel 960 Options.  (line   70)
25476* mlong-load-store:                      HPPA Options.       (line   63)
25477* mlong32:                               MIPS Options.       (line  168)
25478* mlong64:                               MIPS Options.       (line  163)
25479* mlongcall:                             RS/6000 and PowerPC Options.
25480                                                             (line  522)
25481* mlongcalls:                            Xtensa Options.     (line   60)
25482* mloop-unsigned:                        TMS320C3x/C4x Options.
25483                                                             (line   94)
25484* MM:                                    Preprocessor Options.
25485                                                             (line  198)
25486* mmad:                                  MIPS Options.       (line  255)
25487* mmangle-cpu:                           ARC Options.        (line   15)
25488* mmax:                                  DEC Alpha Options.  (line  171)
25489* mmax-stack-frame:                      CRIS Options.       (line   22)
25490* mmc:                                   Intel 960 Options.  (line    9)
25491* mmcu:                                  AVR Options.        (line    9)
25492* MMD:                                   Preprocessor Options.
25493                                                             (line  277)
25494* mmedia:                                FRV Options.        (line   44)
25495* mmemcpy:                               MIPS Options.       (line  240)
25496* mmemory-latency:                       DEC Alpha Options.  (line  266)
25497* mmemparm:                              TMS320C3x/C4x Options.
25498                                                             (line  109)
25499* mminimal-toc:                          RS/6000 and PowerPC Options.
25500                                                             (line  169)
25501* mmmx:                                  i386 and x86-64 Options.
25502                                                             (line  323)
25503* mmodel=large:                          M32R/D Options.     (line   33)
25504* mmodel=medium:                         M32R/D Options.     (line   27)
25505* mmodel=small:                          M32R/D Options.     (line   18)
25506* mmpyi:                                 TMS320C3x/C4x Options.
25507                                                             (line   53)
25508* mmul-bug-workaround:                   CRIS Options.       (line   36)
25509* mmuladd:                               FRV Options.        (line   50)
25510* mmult-bug:                             MN10300 Options.    (line    9)
25511* mmulti-add:                            NS32K Options.      (line   37)
25512* mmulti-cond-exec:                      FRV Options.        (line  122)
25513* mmultiple:                             RS/6000 and PowerPC Options.
25514                                                             (line  244)
25515* mmvcle:                                S/390 and zSeries Options.
25516                                                             (line   53)
25517* mmvme:                                 RS/6000 and PowerPC Options.
25518                                                             (line  428)
25519* mn:                                    H8/300 Options.     (line   20)
25520* mnested-cond-exec:                     FRV Options.        (line  135)
25521* mnew-mnemonics:                        RS/6000 and PowerPC Options.
25522                                                             (line   67)
25523* mno-3dnow:                             i386 and x86-64 Options.
25524                                                             (line  323)
25525* mno-4byte-functions:                   MCore Options.      (line   27)
25526* mno-abicalls:                          MIPS Options.       (line   95)
25527* mno-abshi:                             PDP-11 Options.     (line   58)
25528* mno-ac0:                               PDP-11 Options.     (line   20)
25529* mno-align-double:                      i386 and x86-64 Options.
25530                                                             (line  202)
25531* mno-align-int:                         M680x0 Options.     (line  125)
25532* mno-align-loops:                       M32R/D Options.     (line   76)
25533* mno-align-stringops:                   i386 and x86-64 Options.
25534                                                             (line  358)
25535* mno-alignment-traps:                   ARM Options.        (line  104)
25536* mno-altivec:                           RS/6000 and PowerPC Options.
25537                                                             (line  135)
25538* mno-am33:                              MN10300 Options.    (line   20)
25539* mno-app-regs <1>:                      V850 Options.       (line   61)
25540* mno-app-regs:                          SPARC Options.      (line   10)
25541* mno-asm-optimize:                      D30V Options.       (line   24)
25542* mno-backchain:                         S/390 and zSeries Options.
25543                                                             (line   20)
25544* mno-base-addresses:                    MMIX Options.       (line   54)
25545* mno-bit-align:                         RS/6000 and PowerPC Options.
25546                                                             (line  282)
25547* mno-bk:                                TMS320C3x/C4x Options.
25548                                                             (line   27)
25549* mno-branch-likely:                     MIPS Options.       (line  291)
25550* mno-branch-predict:                    MMIX Options.       (line   49)
25551* mno-bwx:                               DEC Alpha Options.  (line  171)
25552* mno-callgraph-data:                    MCore Options.      (line   31)
25553* mno-check-zero-division:               MIPS Options.       (line  235)
25554* mno-cirrus-fix-invalid-insns:          ARM Options.        (line  214)
25555* mno-cix:                               DEC Alpha Options.  (line  171)
25556* mno-code-align:                        Intel 960 Options.  (line   47)
25557* mno-complex-addr:                      Intel 960 Options.  (line   39)
25558* mno-cond-exec:                         FRV Options.        (line  104)
25559* mno-cond-move:                         FRV Options.        (line   80)
25560* mno-const-align:                       CRIS Options.       (line   60)
25561* mno-const16:                           Xtensa Options.     (line   10)
25562* mno-crt0:                              MN10300 Options.    (line   24)
25563* mno-data-align:                        CRIS Options.       (line   60)
25564* mno-db:                                TMS320C3x/C4x Options.
25565                                                             (line   32)
25566* mno-debug:                             S/390 and zSeries Options.
25567                                                             (line   59)
25568* mno-div:                               MCore Options.      (line   15)
25569* mno-double:                            FRV Options.        (line   41)
25570* mno-dwarf2-asm:                        IA-64 Options.      (line   74)
25571* mno-dword:                             FRV Options.        (line   35)
25572* mno-eabi:                              RS/6000 and PowerPC Options.
25573                                                             (line  456)
25574* mno-early-stop-bits:                   IA-64 Options.      (line   87)
25575* mno-eflags:                            FRV Options.        (line   71)
25576* mno-embedded-data:                     MIPS Options.       (line  186)
25577* mno-embedded-pic:                      MIPS Options.       (line  124)
25578* mno-ep:                                V850 Options.       (line   16)
25579* mno-epsilon:                           MMIX Options.       (line   15)
25580* mno-explicit-relocs <1>:               DEC Alpha Options.  (line  184)
25581* mno-explicit-relocs:                   MIPS Options.       (line  206)
25582* mno-fancy-math-387:                    i386 and x86-64 Options.
25583                                                             (line  191)
25584* mno-fast-fix:                          TMS320C3x/C4x Options.
25585                                                             (line   62)
25586* mno-faster-structs:                    SPARC Options.      (line   88)
25587* mno-fix:                               DEC Alpha Options.  (line  171)
25588* mno-flat:                              SPARC Options.      (line   59)
25589* mno-float32:                           PDP-11 Options.     (line   48)
25590* mno-float64:                           PDP-11 Options.     (line   52)
25591* mno-flush-func:                        M32R/D Options.     (line   99)
25592* mno-flush-trap:                        M32R/D Options.     (line   91)
25593* mno-fp-in-toc:                         RS/6000 and PowerPC Options.
25594                                                             (line  169)
25595* mno-fp-regs:                           DEC Alpha Options.  (line   25)
25596* mno-fp-ret-in-387:                     i386 and x86-64 Options.
25597                                                             (line  181)
25598* mno-fpu:                               SPARC Options.      (line   25)
25599* mno-fused-madd <1>:                    Xtensa Options.     (line   19)
25600* mno-fused-madd <2>:                    S/390 and zSeries Options.
25601                                                             (line   77)
25602* mno-fused-madd <3>:                    MIPS Options.       (line  260)
25603* mno-fused-madd:                        RS/6000 and PowerPC Options.
25604                                                             (line  276)
25605* mno-gnu-as:                            IA-64 Options.      (line   18)
25606* mno-gnu-ld:                            IA-64 Options.      (line   23)
25607* mno-gotplt:                            CRIS Options.       (line   86)
25608* mno-hardlit:                           MCore Options.      (line   10)
25609* mno-ieee-compare:                      NS32K Options.      (line   55)
25610* mno-ieee-fp:                           i386 and x86-64 Options.
25611                                                             (line  164)
25612* mno-int16:                             PDP-11 Options.     (line   44)
25613* mno-int32:                             PDP-11 Options.     (line   40)
25614* mno-interrupts:                        AVR Options.        (line   39)
25615* mno-knuthdiv:                          MMIX Options.       (line   33)
25616* mno-leaf-procedures:                   Intel 960 Options.  (line   22)
25617* mno-libfuncs:                          MMIX Options.       (line   10)
25618* mno-long-calls <1>:                    V850 Options.       (line   10)
25619* mno-long-calls <2>:                    HPPA Options.       (line  131)
25620* mno-long-calls <3>:                    MIPS Options.       (line  246)
25621* mno-long-calls <4>:                    ARM Options.        (line  176)
25622* mno-long-calls:                        M68hc1x Options.    (line   35)
25623* mno-longcall:                          RS/6000 and PowerPC Options.
25624                                                             (line  522)
25625* mno-longcalls:                         Xtensa Options.     (line   60)
25626* mno-loop-unsigned:                     TMS320C3x/C4x Options.
25627                                                             (line   94)
25628* mno-mad:                               MIPS Options.       (line  255)
25629* mno-max:                               DEC Alpha Options.  (line  171)
25630* mno-media:                             FRV Options.        (line   47)
25631* mno-memcpy:                            MIPS Options.       (line  240)
25632* mno-mips16:                            MIPS Options.       (line   80)
25633* mno-mmx:                               i386 and x86-64 Options.
25634                                                             (line  323)
25635* mno-mpyi:                              TMS320C3x/C4x Options.
25636                                                             (line   53)
25637* mno-mul-bug-workaround:                CRIS Options.       (line   36)
25638* mno-muladd:                            FRV Options.        (line   53)
25639* mno-mult-bug:                          MN10300 Options.    (line   13)
25640* mno-multi-cond-exec:                   FRV Options.        (line  129)
25641* mno-multiple:                          RS/6000 and PowerPC Options.
25642                                                             (line  244)
25643* mno-mvcle:                             S/390 and zSeries Options.
25644                                                             (line   53)
25645* mno-nested-cond-exec:                  FRV Options.        (line  141)
25646* mno-pack:                              FRV Options.        (line   68)
25647* mno-parallel-insns:                    TMS320C3x/C4x Options.
25648                                                             (line  115)
25649* mno-parallel-mpy:                      TMS320C3x/C4x Options.
25650                                                             (line  120)
25651* mno-pic:                               IA-64 Options.      (line   26)
25652* mno-power:                             RS/6000 and PowerPC Options.
25653                                                             (line   19)
25654* mno-power2:                            RS/6000 and PowerPC Options.
25655                                                             (line   19)
25656* mno-powerpc:                           RS/6000 and PowerPC Options.
25657                                                             (line   19)
25658* mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
25659                                                             (line   19)
25660* mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
25661                                                             (line   19)
25662* mno-powerpc64:                         RS/6000 and PowerPC Options.
25663                                                             (line   19)
25664* mno-prolog-function:                   V850 Options.       (line   23)
25665* mno-prologue-epilogue:                 CRIS Options.       (line   76)
25666* mno-prototype:                         RS/6000 and PowerPC Options.
25667                                                             (line  412)
25668* mno-push-args:                         i386 and x86-64 Options.
25669                                                             (line  335)
25670* mno-register-names:                    IA-64 Options.      (line   40)
25671* mno-regnames:                          RS/6000 and PowerPC Options.
25672                                                             (line  516)
25673* mno-relax-immediate:                   MCore Options.      (line   19)
25674* mno-relocatable:                       RS/6000 and PowerPC Options.
25675                                                             (line  299)
25676* mno-relocatable-lib:                   RS/6000 and PowerPC Options.
25677                                                             (line  307)
25678* mno-rnames:                            MIPS Options.       (line  227)
25679* mno-rptb:                              TMS320C3x/C4x Options.
25680                                                             (line   72)
25681* mno-rpts:                              TMS320C3x/C4x Options.
25682                                                             (line   81)
25683* mno-scc:                               FRV Options.        (line   92)
25684* mno-sched-prolog:                      ARM Options.        (line   44)
25685* mno-sdata <1>:                         IA-64 Options.      (line   45)
25686* mno-sdata:                             RS/6000 and PowerPC Options.
25687                                                             (line  503)
25688* mno-side-effects:                      CRIS Options.       (line   51)
25689* mno-single-exit:                       MMIX Options.       (line   66)
25690* mno-slow-bytes:                        MCore Options.      (line   35)
25691* mno-small-exec:                        S/390 and zSeries Options.
25692                                                             (line   28)
25693* mno-soft-float:                        DEC Alpha Options.  (line   10)
25694* mno-space-regs:                        HPPA Options.       (line   49)
25695* mno-split:                             PDP-11 Options.     (line   71)
25696* mno-split-addresses:                   MIPS Options.       (line  200)
25697* mno-sse:                               i386 and x86-64 Options.
25698                                                             (line  323)
25699* mno-stack-align:                       CRIS Options.       (line   60)
25700* mno-stack-bias:                        SPARC Options.      (line  249)
25701* mno-strict-align <1>:                  Intel 960 Options.  (line   62)
25702* mno-strict-align <2>:                  RS/6000 and PowerPC Options.
25703                                                             (line  294)
25704* mno-strict-align:                      M680x0 Options.     (line  145)
25705* mno-string:                            RS/6000 and PowerPC Options.
25706                                                             (line  255)
25707* mno-sum-in-toc:                        RS/6000 and PowerPC Options.
25708                                                             (line  169)
25709* mno-svr3-shlib:                        i386 and x86-64 Options.
25710                                                             (line  243)
25711* mno-tablejump:                         AVR Options.        (line   47)
25712* mno-tail-call:                         Intel 960 Options.  (line   31)
25713* mno-target-align:                      Xtensa Options.     (line   47)
25714* mno-text-section-literals:             Xtensa Options.     (line   35)
25715* mno-toc:                               RS/6000 and PowerPC Options.
25716                                                             (line  316)
25717* mno-toplevel-symbols:                  MMIX Options.       (line   40)
25718* mno-unaligned-doubles:                 SPARC Options.      (line   76)
25719* mno-uninit-const-in-rodata:            MIPS Options.       (line  194)
25720* mno-update:                            RS/6000 and PowerPC Options.
25721                                                             (line  266)
25722* mno-v8plus:                            SPARC Options.      (line  197)
25723* mno-vis:                               SPARC Options.      (line  204)
25724* mno-vliw-branch:                       FRV Options.        (line  116)
25725* mno-volatile-asm-stop:                 IA-64 Options.      (line   32)
25726* mno-wide-bitfields:                    MCore Options.      (line   23)
25727* mno-xgot:                              MIPS Options.       (line  100)
25728* mno-xl-call:                           RS/6000 and PowerPC Options.
25729                                                             (line  204)
25730* mno-zero-extend:                       MMIX Options.       (line   27)
25731* mnobitfield <1>:                       NS32K Options.      (line   61)
25732* mnobitfield:                           M680x0 Options.     (line   93)
25733* mnohimem:                              NS32K Options.      (line  118)
25734* mnomacsave:                            SH Options.         (line   64)
25735* mnominmax:                             M68hc1x Options.    (line   31)
25736* mnomulti-add:                          NS32K Options.      (line   46)
25737* mnop-fun-dllimport:                    ARM Options.        (line  201)
25738* mnoregparam:                           NS32K Options.      (line   97)
25739* mnosb:                                 NS32K Options.      (line  105)
25740* mnumerics:                             Intel 960 Options.  (line   16)
25741* mold-align:                            Intel 960 Options.  (line   65)
25742* mold-mnemonics:                        RS/6000 and PowerPC Options.
25743                                                             (line   67)
25744* momit-leaf-frame-pointer:              i386 and x86-64 Options.
25745                                                             (line  370)
25746* monchip:                               D30V Options.       (line   17)
25747* MP:                                    Preprocessor Options.
25748                                                             (line  227)
25749* mpa-risc-1-0:                          HPPA Options.       (line   23)
25750* mpa-risc-1-1:                          HPPA Options.       (line   23)
25751* mpa-risc-2-0:                          HPPA Options.       (line   23)
25752* mpack:                                 FRV Options.        (line   65)
25753* mpadstruct:                            SH Options.         (line   74)
25754* mparallel-insns:                       TMS320C3x/C4x Options.
25755                                                             (line  115)
25756* mparallel-mpy:                         TMS320C3x/C4x Options.
25757                                                             (line  120)
25758* mparanoid:                             TMS320C3x/C4x Options.
25759                                                             (line   45)
25760* mpcrel:                                M680x0 Options.     (line  137)
25761* mpdebug:                               CRIS Options.       (line   40)
25762* mpe:                                   RS/6000 and PowerPC Options.
25763                                                             (line  218)
25764* mpentium:                              i386 and x86-64 Options.
25765                                                             (line  107)
25766* mpentiumpro:                           i386 and x86-64 Options.
25767                                                             (line  107)
25768* mpic-register:                         ARM Options.        (line  210)
25769* mpoke-function-name:                   ARM Options.        (line  224)
25770* mportable-runtime:                     HPPA Options.       (line   68)
25771* mpower:                                RS/6000 and PowerPC Options.
25772                                                             (line   19)
25773* mpower2:                               RS/6000 and PowerPC Options.
25774                                                             (line   19)
25775* mpowerpc:                              RS/6000 and PowerPC Options.
25776                                                             (line   19)
25777* mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
25778                                                             (line   19)
25779* mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
25780                                                             (line   19)
25781* mpowerpc64:                            RS/6000 and PowerPC Options.
25782                                                             (line   19)
25783* mprefergot:                            SH Options.         (line   81)
25784* mpreferred-stack-boundary:             i386 and x86-64 Options.
25785                                                             (line  283)
25786* mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
25787                                                             (line  339)
25788* mprolog-function:                      V850 Options.       (line   23)
25789* mprologue-epilogue:                    CRIS Options.       (line   76)
25790* mprototype:                            RS/6000 and PowerPC Options.
25791                                                             (line  412)
25792* mpush-args:                            i386 and x86-64 Options.
25793                                                             (line  335)
25794* MQ:                                    Preprocessor Options.
25795                                                             (line  253)
25796* mregister-names:                       IA-64 Options.      (line   40)
25797* mregnames:                             RS/6000 and PowerPC Options.
25798                                                             (line  516)
25799* mregparam:                             NS32K Options.      (line   89)
25800* mregparm <1>:                          TMS320C3x/C4x Options.
25801                                                             (line  109)
25802* mregparm:                              i386 and x86-64 Options.
25803                                                             (line  272)
25804* mrelax <1>:                            SH Options.         (line   50)
25805* mrelax <2>:                            H8/300 Options.     (line    9)
25806* mrelax:                                MN10300 Options.    (line   27)
25807* mrelax-immediate:                      MCore Options.      (line   19)
25808* mrelocatable:                          RS/6000 and PowerPC Options.
25809                                                             (line  299)
25810* mrelocatable-lib:                      RS/6000 and PowerPC Options.
25811                                                             (line  307)
25812* mrnames:                               MIPS Options.       (line  227)
25813* mrodata:                               ARC Options.        (line   30)
25814* mrptb:                                 TMS320C3x/C4x Options.
25815                                                             (line   72)
25816* mrpts:                                 TMS320C3x/C4x Options.
25817                                                             (line   81)
25818* mrtd <1>:                              Function Attributes.
25819                                                             (line  423)
25820* mrtd <2>:                              NS32K Options.      (line   70)
25821* mrtd <3>:                              i386 and x86-64 Options.
25822                                                             (line  248)
25823* mrtd:                                  M680x0 Options.     (line  102)
25824* ms:                                    H8/300 Options.     (line   17)
25825* ms2600:                                H8/300 Options.     (line   24)
25826* msa:                                   Intel 960 Options.  (line    9)
25827* msb <1>:                               NS32K Options.      (line  101)
25828* msb:                                   Intel 960 Options.  (line    9)
25829* mscc:                                  FRV Options.        (line   86)
25830* msched-costly-dep:                     RS/6000 and PowerPC Options.
25831                                                             (line  346)
25832* mschedule:                             HPPA Options.       (line   75)
25833* msda:                                  V850 Options.       (line   40)
25834* msdata <1>:                            IA-64 Options.      (line   45)
25835* msdata:                                RS/6000 and PowerPC Options.
25836                                                             (line  490)
25837* msdata-data:                           RS/6000 and PowerPC Options.
25838                                                             (line  495)
25839* msdata=default:                        RS/6000 and PowerPC Options.
25840                                                             (line  490)
25841* msdata=eabi:                           RS/6000 and PowerPC Options.
25842                                                             (line  470)
25843* msdata=none <1>:                       RS/6000 and PowerPC Options.
25844                                                             (line  503)
25845* msdata=none:                           M32R/D Options.     (line   40)
25846* msdata=sdata:                          M32R/D Options.     (line   49)
25847* msdata=sysv:                           RS/6000 and PowerPC Options.
25848                                                             (line  481)
25849* msdata=use:                            M32R/D Options.     (line   53)
25850* mshort <1>:                            M68hc1x Options.    (line   40)
25851* mshort:                                M680x0 Options.     (line   90)
25852* msim <1>:                              Xstormy16 Options.  (line    9)
25853* msim:                                  RS/6000 and PowerPC Options.
25854                                                             (line  422)
25855* msingle-exit:                          MMIX Options.       (line   66)
25856* msingle-float:                         MIPS Options.       (line  150)
25857* msingle-pic-base:                      ARM Options.        (line  204)
25858* msio:                                  HPPA Options.       (line  104)
25859* msize:                                 AVR Options.        (line   32)
25860* mslow-bytes:                           MCore Options.      (line   35)
25861* msmall:                                TMS320C3x/C4x Options.
25862                                                             (line   18)
25863* msmall-data:                           DEC Alpha Options.  (line  195)
25864* msmall-exec:                           S/390 and zSeries Options.
25865                                                             (line   28)
25866* msmall-memory:                         TMS320C3x/C4x Options.
25867                                                             (line   18)
25868* msmall-text:                           DEC Alpha Options.  (line  213)
25869* msoft-float <1>:                       FRV Options.        (line   22)
25870* msoft-float <2>:                       PDP-11 Options.     (line   13)
25871* msoft-float <3>:                       S/390 and zSeries Options.
25872                                                             (line   11)
25873* msoft-float <4>:                       NS32K Options.      (line   50)
25874* msoft-float <5>:                       DEC Alpha Options.  (line   10)
25875* msoft-float <6>:                       Intel 960 Options.  (line   16)
25876* msoft-float <7>:                       HPPA Options.       (line   88)
25877* msoft-float <8>:                       i386 and x86-64 Options.
25878                                                             (line  169)
25879* msoft-float <9>:                       MIPS Options.       (line  146)
25880* msoft-float <10>:                      RS/6000 and PowerPC Options.
25881                                                             (line  238)
25882* msoft-float <11>:                      ARM Options.        (line   57)
25883* msoft-float <12>:                      SPARC Options.      (line   25)
25884* msoft-float:                           M680x0 Options.     (line   80)
25885* msoft-quad-float:                      SPARC Options.      (line   45)
25886* msoft-reg-count:                       M68hc1x Options.    (line   43)
25887* mspace <1>:                            V850 Options.       (line   30)
25888* mspace:                                SH Options.         (line   78)
25889* msparclite:                            SPARC Options.      (line  114)
25890* mspe:                                  RS/6000 and PowerPC Options.
25891                                                             (line  155)
25892* msplit:                                PDP-11 Options.     (line   68)
25893* msplit-addresses:                      MIPS Options.       (line  200)
25894* msse:                                  i386 and x86-64 Options.
25895                                                             (line  323)
25896* mstack-align:                          CRIS Options.       (line   60)
25897* mstack-bias:                           SPARC Options.      (line  249)
25898* mstrict-align <1>:                     Intel 960 Options.  (line   62)
25899* mstrict-align <2>:                     RS/6000 and PowerPC Options.
25900                                                             (line  294)
25901* mstrict-align:                         M680x0 Options.     (line  145)
25902* mstring:                               RS/6000 and PowerPC Options.
25903                                                             (line  255)
25904* mstructure-size-boundary:              ARM Options.        (line  159)
25905* msupersparc:                           SPARC Options.      (line  122)
25906* msvr3-shlib:                           i386 and x86-64 Options.
25907                                                             (line  243)
25908* msvr4-struct-return:                   RS/6000 and PowerPC Options.
25909                                                             (line  399)
25910* MT:                                    Preprocessor Options.
25911                                                             (line  239)
25912* mtail-call:                            Intel 960 Options.  (line   31)
25913* mtarget-align:                         Xtensa Options.     (line   47)
25914* mtda:                                  V850 Options.       (line   34)
25915* mtext:                                 ARC Options.        (line   30)
25916* mtext-section-literals:                Xtensa Options.     (line   35)
25917* mthreads:                              i386 and x86-64 Options.
25918                                                             (line  350)
25919* mthumb:                                ARM Options.        (line  245)
25920* mthumb-interwork:                      ARM Options.        (line   37)
25921* mti:                                   TMS320C3x/C4x Options.
25922                                                             (line  102)
25923* mtiny-stack:                           AVR Options.        (line   50)
25924* mtls-direct-seg-refs:                  i386 and x86-64 Options.
25925                                                             (line  378)
25926* mtoc:                                  RS/6000 and PowerPC Options.
25927                                                             (line  316)
25928* mtomcat-stats:                         FRV Options.        (line  147)
25929* mtoplevel-symbols:                     MMIX Options.       (line   40)
25930* mtpcs-frame:                           ARM Options.        (line  249)
25931* mtpcs-leaf-frame:                      ARM Options.        (line  255)
25932* mtrap-precision:                       DEC Alpha Options.  (line  109)
25933* mtune <1>:                             CRIS Options.       (line   16)
25934* mtune <2>:                             S/390 and zSeries Options.
25935                                                             (line   70)
25936* mtune <3>:                             DEC Alpha Options.  (line  262)
25937* mtune <4>:                             i386 and x86-64 Options.
25938                                                             (line   10)
25939* mtune <5>:                             MIPS Options.       (line   43)
25940* mtune <6>:                             RS/6000 and PowerPC Options.
25941                                                             (line  125)
25942* mtune <7>:                             ARM Options.        (line  134)
25943* mtune:                                 SPARC Options.      (line  185)
25944* multi_module:                          Darwin Options.     (line   87)
25945* multiply_defined:                      Darwin Options.     (line   87)
25946* multiply_defined_unused:               Darwin Options.     (line   87)
25947* munaligned-doubles:                    SPARC Options.      (line   76)
25948* muninit-const-in-rodata:               MIPS Options.       (line  194)
25949* munix:                                 VAX Options.        (line    9)
25950* munix-asm:                             PDP-11 Options.     (line   74)
25951* mupdate:                               RS/6000 and PowerPC Options.
25952                                                             (line  266)
25953* musermode:                             SH Options.         (line   86)
25954* mv8:                                   SPARC Options.      (line  114)
25955* mv850:                                 V850 Options.       (line   49)
25956* mv850e:                                V850 Options.       (line   69)
25957* mv850e1:                               V850 Options.       (line   64)
25958* mv8plus:                               SPARC Options.      (line  197)
25959* mvis:                                  SPARC Options.      (line  204)
25960* mvliw-branch:                          FRV Options.        (line  110)
25961* mvms-return-codes:                     DEC Alpha/VMS Options.
25962                                                             (line    9)
25963* mvolatile-asm-stop:                    IA-64 Options.      (line   32)
25964* mvxworks:                              RS/6000 and PowerPC Options.
25965                                                             (line  443)
25966* mwide-bitfields:                       MCore Options.      (line   23)
25967* mwindiss:                              RS/6000 and PowerPC Options.
25968                                                             (line  447)
25969* mwords-little-endian:                  ARM Options.        (line   79)
25970* mxgot:                                 MIPS Options.       (line  100)
25971* mxl-call:                              RS/6000 and PowerPC Options.
25972                                                             (line  204)
25973* myellowknife:                          RS/6000 and PowerPC Options.
25974                                                             (line  438)
25975* mzarch:                                S/390 and zSeries Options.
25976                                                             (line   43)
25977* mzda:                                  V850 Options.       (line   45)
25978* mzero-extend:                          MMIX Options.       (line   27)
25979* no-integrated-cpp:                     C Dialect Options.  (line  179)
25980* no-red-zone:                           i386 and x86-64 Options.
25981                                                             (line  398)
25982* noall_load:                            Darwin Options.     (line   87)
25983* nocpp:                                 MIPS Options.       (line  270)
25984* nodefaultlibs:                         Link Options.       (line   62)
25985* nofixprebinding:                       Darwin Options.     (line   87)
25986* nolibdld:                              HPPA Options.       (line  157)
25987* nomultidefs:                           Darwin Options.     (line   87)
25988* noprebind:                             Darwin Options.     (line   87)
25989* noseglinkedit:                         Darwin Options.     (line   87)
25990* nostartfiles:                          Link Options.       (line   57)
25991* nostdinc:                              Preprocessor Options.
25992                                                             (line  356)
25993* nostdinc++ <1>:                        Preprocessor Options.
25994                                                             (line  361)
25995* nostdinc++:                            C++ Dialect Options.
25996                                                             (line  179)
25997* nostdlib:                              Link Options.       (line   72)
25998* o:                                     Preprocessor Options.
25999                                                             (line   73)
26000* O:                                     Optimize Options.   (line   32)
26001* o:                                     Overall Options.    (line  154)
26002* O0:                                    Optimize Options.   (line   91)
26003* O1:                                    Optimize Options.   (line   32)
26004* O2:                                    Optimize Options.   (line   54)
26005* O3:                                    Optimize Options.   (line   86)
26006* Os:                                    Optimize Options.   (line   94)
26007* P:                                     Preprocessor Options.
26008                                                             (line  515)
26009* p:                                     Debugging Options.  (line  117)
26010* pagezero_size:                         Darwin Options.     (line   87)
26011* param:                                 Optimize Options.   (line 1014)
26012* pass-exit-codes:                       Overall Options.    (line  113)
26013* pedantic <1>:                          Warnings and Errors.
26014                                                             (line   25)
26015* pedantic <2>:                          Alternate Keywords. (line   29)
26016* pedantic <3>:                          C Extensions.       (line    6)
26017* pedantic <4>:                          Preprocessor Options.
26018                                                             (line  164)
26019* pedantic <5>:                          Warning Options.    (line   26)
26020* pedantic:                              Standards.          (line   13)
26021* pedantic-errors <1>:                   Warnings and Errors.
26022                                                             (line   25)
26023* pedantic-errors <2>:                   Non-bugs.           (line  208)
26024* pedantic-errors <3>:                   Actual Bugs.        (line   18)
26025* pedantic-errors <4>:                   Preprocessor Options.
26026                                                             (line  169)
26027* pedantic-errors <5>:                   Warning Options.    (line   68)
26028* pedantic-errors:                       Standards.          (line   13)
26029* pg:                                    Debugging Options.  (line  123)
26030* pie:                                   Link Options.       (line   94)
26031* pipe:                                  Overall Options.    (line  179)
26032* prebind:                               Darwin Options.     (line   87)
26033* prebind_all_twolevel_modules:          Darwin Options.     (line   87)
26034* preprocessor:                          Preprocessor Options.
26035                                                             (line   24)
26036* print-file-name:                       Debugging Options.  (line  462)
26037* print-libgcc-file-name:                Debugging Options.  (line  483)
26038* print-multi-directory:                 Debugging Options.  (line  468)
26039* print-multi-lib:                       Debugging Options.  (line  473)
26040* print-objc-runtime-info:               Objective-C Dialect Options.
26041                                                             (line  193)
26042* print-prog-name:                       Debugging Options.  (line  480)
26043* print-search-dirs:                     Debugging Options.  (line  491)
26044* private_bundle:                        Darwin Options.     (line   87)
26045* pthread:                               RS/6000 and PowerPC Options.
26046                                                             (line  543)
26047* pthreads:                              SPARC Options.      (line  263)
26048* Q:                                     Debugging Options.  (line  129)
26049* Qn:                                    System V Options.   (line   18)
26050* Qy:                                    System V Options.   (line   14)
26051* read_only_relocs:                      Darwin Options.     (line   87)
26052* remap:                                 Preprocessor Options.
26053                                                             (line  563)
26054* s:                                     Link Options.       (line  100)
26055* S <1>:                                 Link Options.       (line   20)
26056* S:                                     Overall Options.    (line  137)
26057* save-temps:                            Debugging Options.  (line  440)
26058* sectalign:                             Darwin Options.     (line   87)
26059* sectcreate:                            Darwin Options.     (line   87)
26060* sectobjectsymbols:                     Darwin Options.     (line   87)
26061* sectorder:                             Darwin Options.     (line   87)
26062* seg1addr:                              Darwin Options.     (line   87)
26063* seg_addr_table:                        Darwin Options.     (line   87)
26064* seg_addr_table_filename:               Darwin Options.     (line   87)
26065* seglinkedit:                           Darwin Options.     (line   87)
26066* segprot:                               Darwin Options.     (line   87)
26067* segs_read_only_addr:                   Darwin Options.     (line   87)
26068* segs_read_write_addr:                  Darwin Options.     (line   87)
26069* shared:                                Link Options.       (line  109)
26070* shared-libgcc:                         Link Options.       (line  117)
26071* sim:                                   CRIS Options.       (line  108)
26072* sim2:                                  CRIS Options.       (line  114)
26073* single_module:                         Darwin Options.     (line   87)
26074* specs:                                 Directory Options.  (line   98)
26075* static <1>:                            HPPA Options.       (line  161)
26076* static <2>:                            Darwin Options.     (line   87)
26077* static:                                Link Options.       (line  104)
26078* static-libgcc:                         Link Options.       (line  117)
26079* std <1>:                               Non-bugs.           (line  107)
26080* std <2>:                               Other Builtins.     (line   22)
26081* std <3>:                               C Dialect Options.  (line   46)
26082* std:                                   Standards.          (line   13)
26083* std=:                                  Preprocessor Options.
26084                                                             (line  308)
26085* sub_library:                           Darwin Options.     (line   87)
26086* sub_umbrella:                          Darwin Options.     (line   87)
26087* symbolic:                              Link Options.       (line  152)
26088* target-help <1>:                       Preprocessor Options.
26089                                                             (line  568)
26090* target-help:                           Overall Options.    (line  194)
26091* threads <1>:                           HPPA Options.       (line  174)
26092* threads:                               SPARC Options.      (line  257)
26093* time:                                  Debugging Options.  (line  448)
26094* traditional <1>:                       Incompatibilities.  (line    6)
26095* traditional:                           C Dialect Options.  (line  191)
26096* traditional-cpp <1>:                   Preprocessor Options.
26097                                                             (line  546)
26098* traditional-cpp:                       C Dialect Options.  (line  191)
26099* trigraphs <1>:                         Preprocessor Options.
26100                                                             (line  550)
26101* trigraphs:                             C Dialect Options.  (line  175)
26102* twolevel_namespace:                    Darwin Options.     (line   87)
26103* u:                                     Link Options.       (line  174)
26104* U:                                     Preprocessor Options.
26105                                                             (line   57)
26106* umbrella:                              Darwin Options.     (line   87)
26107* undef:                                 Preprocessor Options.
26108                                                             (line   61)
26109* undefined:                             Darwin Options.     (line   87)
26110* unexported_symbols_list:               Darwin Options.     (line   87)
26111* V:                                     Target Options.     (line   22)
26112* v <1>:                                 Preprocessor Options.
26113                                                             (line  572)
26114* v:                                     Overall Options.    (line  168)
26115* version <1>:                           Preprocessor Options.
26116                                                             (line  585)
26117* version:                               Overall Options.    (line  198)
26118* W:                                     Incompatibilities.  (line   66)
26119* w:                                     Preprocessor Options.
26120                                                             (line  160)
26121* W:                                     Warning Options.    (line  456)
26122* w:                                     Warning Options.    (line   72)
26123* Wa:                                    Assembler Options.  (line    9)
26124* Wabi:                                  C++ Dialect Options.
26125                                                             (line  193)
26126* Waggregate-return:                     Warning Options.    (line  724)
26127* Wall <1>:                              Standard Libraries. (line    6)
26128* Wall <2>:                              Preprocessor Options.
26129                                                             (line   79)
26130* Wall:                                  Warning Options.    (line  441)
26131* Wbad-function-cast:                    Warning Options.    (line  678)
26132* Wcast-align:                           Warning Options.    (line  687)
26133* Wcast-qual:                            Warning Options.    (line  682)
26134* Wchar-subscripts:                      Warning Options.    (line   78)
26135* Wcomment <1>:                          Preprocessor Options.
26136                                                             (line   87)
26137* Wcomment:                              Warning Options.    (line   83)
26138* Wcomments:                             Preprocessor Options.
26139                                                             (line   87)
26140* Wconversion <1>:                       Protoize Caveats.   (line   31)
26141* Wconversion:                           Warning Options.    (line  704)
26142* Wctor-dtor-privacy:                    C++ Dialect Options.
26143                                                             (line  271)
26144* Wdeclaration-after-statement:          Warning Options.    (line  651)
26145* Wdisabled-optimization:                Warning Options.    (line  872)
26146* Wdiv-by-zero:                          Warning Options.    (line  543)
26147* weak_reference_mismatches:             Darwin Options.     (line   87)
26148* Weffc++:                               C++ Dialect Options.
26149                                                             (line  297)
26150* Wendif-labels <1>:                     Preprocessor Options.
26151                                                             (line  137)
26152* Wendif-labels:                         Warning Options.    (line  661)
26153* Werror <1>:                            Preprocessor Options.
26154                                                             (line  150)
26155* Werror:                                Warning Options.    (line  881)
26156* Werror-implicit-function-declaration:  Warning Options.    (line  185)
26157* Wextra:                                Warning Options.    (line  456)
26158* Wfloat-equal:                          Warning Options.    (line  559)
26159* Wformat <1>:                           Function Attributes.
26160                                                             (line  135)
26161* Wformat:                               Warning Options.    (line   87)
26162* Wformat-nonliteral <1>:                Function Attributes.
26163                                                             (line  183)
26164* Wformat-nonliteral:                    Warning Options.    (line  139)
26165* Wformat-security:                      Warning Options.    (line  144)
26166* Wformat-y2k:                           Warning Options.    (line  117)
26167* Wformat=2:                             Warning Options.    (line  155)
26168* whatsloaded:                           Darwin Options.     (line   87)
26169* whyload:                               Darwin Options.     (line   87)
26170* Wimplicit:                             Warning Options.    (line  189)
26171* Wimplicit-function-declaration:        Warning Options.    (line  185)
26172* Wimplicit-int:                         Warning Options.    (line  181)
26173* Wimport:                               Preprocessor Options.
26174                                                             (line  110)
26175* Winit-self:                            Warning Options.    (line  167)
26176* Winline <1>:                           Inline.             (line   35)
26177* Winline:                               Warning Options.    (line  835)
26178* Winvalid-pch:                          Warning Options.    (line  862)
26179* Wl:                                    Link Options.       (line  170)
26180* Wlarger-than:                          Warning Options.    (line  669)
26181* Wlong-long:                            Warning Options.    (line  866)
26182* Wmain:                                 Warning Options.    (line  192)
26183* Wmissing-braces:                       Warning Options.    (line  197)
26184* Wmissing-declarations:                 Warning Options.    (line  745)
26185* Wmissing-format-attribute:             Warning Options.    (line  759)
26186* Wmissing-noreturn:                     Warning Options.    (line  751)
26187* Wmissing-prototypes:                   Warning Options.    (line  739)
26188* Wmultichar:                            Warning Options.    (line  769)
26189* Wnested-externs:                       Warning Options.    (line  810)
26190* Wno-deprecated:                        C++ Dialect Options.
26191                                                             (line  327)
26192* Wno-deprecated-declarations:           Warning Options.    (line  775)
26193* Wno-div-by-zero:                       Warning Options.    (line  543)
26194* Wno-format-extra-args:                 Warning Options.    (line  121)
26195* Wno-format-zero-length:                Warning Options.    (line  135)
26196* Wno-import:                            Warning Options.    (line   75)
26197* Wno-invalid-offsetof:                  Warning Options.    (line  848)
26198* Wno-long-long:                         Warning Options.    (line  866)
26199* Wno-multichar:                         Warning Options.    (line  769)
26200* Wno-non-template-friend:               C++ Dialect Options.
26201                                                             (line  331)
26202* Wno-pmf-conversions <1>:               Bound member functions.
26203                                                             (line   35)
26204* Wno-pmf-conversions:                   C++ Dialect Options.
26205                                                             (line  372)
26206* Wno-protocol:                          Objective-C Dialect Options.
26207                                                             (line  159)
26208* Wnon-virtual-dtor:                     C++ Dialect Options.
26209                                                             (line  276)
26210* Wnonnull:                              Warning Options.    (line  160)
26211* Wold-style-cast:                       C++ Dialect Options.
26212                                                             (line  347)
26213* Wold-style-definition:                 Warning Options.    (line  735)
26214* Woverloaded-virtual:                   C++ Dialect Options.
26215                                                             (line  353)
26216* Wp:                                    Preprocessor Options.
26217                                                             (line   13)
26218* Wpacked:                               Warning Options.    (line  781)
26219* Wpadded:                               Warning Options.    (line  798)
26220* Wparentheses:                          Warning Options.    (line  205)
26221* Wpointer-arith <1>:                    Pointer Arith.      (line   13)
26222* Wpointer-arith:                        Warning Options.    (line  672)
26223* Wredundant-decls:                      Warning Options.    (line  805)
26224* Wreorder:                              C++ Dialect Options.
26225                                                             (line  281)
26226* Wreturn-type:                          Warning Options.    (line  290)
26227* Wselector:                             Objective-C Dialect Options.
26228                                                             (line  169)
26229* Wsequence-point:                       Warning Options.    (line  243)
26230* Wshadow:                               Warning Options.    (line  664)
26231* Wsign-compare:                         Warning Options.    (line  717)
26232* Wsign-promo:                           C++ Dialect Options.
26233                                                             (line  376)
26234* Wstrict-aliasing:                      Warning Options.    (line  434)
26235* Wstrict-prototypes:                    Warning Options.    (line  729)
26236* Wswitch:                               Warning Options.    (line  300)
26237* Wswitch-enum:                          Warning Options.    (line  310)
26238* Wswitch-switch:                        Warning Options.    (line  307)
26239* Wsynth:                                C++ Dialect Options.
26240                                                             (line  383)
26241* Wsystem-headers <1>:                   Preprocessor Options.
26242                                                             (line  154)
26243* Wsystem-headers:                       Warning Options.    (line  548)
26244* Wtraditional <1>:                      Preprocessor Options.
26245                                                             (line  104)
26246* Wtraditional:                          Warning Options.    (line  574)
26247* Wtrigraphs <1>:                        Preprocessor Options.
26248                                                             (line   92)
26249* Wtrigraphs:                            Warning Options.    (line  316)
26250* Wundeclared-selector:                  Objective-C Dialect Options.
26251                                                             (line  181)
26252* Wundef <1>:                            Preprocessor Options.
26253                                                             (line  113)
26254* Wundef:                                Warning Options.    (line  658)
26255* Wuninitialized:                        Warning Options.    (line  358)
26256* Wunknown-pragmas:                      Warning Options.    (line  427)
26257* Wunreachable-code:                     Warning Options.    (line  813)
26258* Wunused:                               Warning Options.    (line  351)
26259* Wunused-function:                      Warning Options.    (line  321)
26260* Wunused-label:                         Warning Options.    (line  325)
26261* Wunused-macros:                        Preprocessor Options.
26262                                                             (line  118)
26263* Wunused-parameter:                     Warning Options.    (line  331)
26264* Wunused-value:                         Warning Options.    (line  345)
26265* Wunused-variable:                      Warning Options.    (line  338)
26266* Wwrite-strings:                        Warning Options.    (line  693)
26267* x <1>:                                 Preprocessor Options.
26268                                                             (line  292)
26269* x:                                     Overall Options.    (line   90)
26270* Xassembler:                            Assembler Options.  (line   13)
26271* Xlinker:                               Link Options.       (line  158)
26272* Ym:                                    System V Options.   (line   26)
26273* YP:                                    System V Options.   (line   22)
26274
26275
26276File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
26277
26278Keyword Index
26279*************
26280
26281�[index�]
26282* Menu:
26283
26284* ! in constraint:                       Multi-Alternative.   (line  33)
26285* # in constraint:                       Modifiers.           (line  52)
26286* #pragma:                               Pragmas.             (line   6)
26287* #pragma implementation:                C++ Interface.       (line  39)
26288* #pragma implementation, implied:       C++ Interface.       (line  46)
26289* #pragma interface:                     C++ Interface.       (line  20)
26290* #pragma, reason for not using:         Function Attributes. (line 654)
26291* $:                                     Dollar Signs.        (line   6)
26292* % in constraint:                       Modifiers.           (line  45)
26293* %include:                              Spec Files.          (line  27)
26294* %include_noerr:                        Spec Files.          (line  31)
26295* %rename:                               Spec Files.          (line  35)
26296* & in constraint:                       Modifiers.           (line  25)
26297* ':                                     Incompatibilities.   (line 118)
26298* * in constraint:                       Modifiers.           (line  57)
26299* + in constraint:                       Modifiers.           (line  12)
26300* -lgcc, use with -nodefaultlibs:        Link Options.        (line  81)
26301* -lgcc, use with -nostdlib:             Link Options.        (line  81)
26302* -nodefaultlibs and unresolved references: Link Options.     (line  81)
26303* -nostdlib and unresolved references:   Link Options.        (line  81)
26304* .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
26305                                                              (line 508)
26306* //:                                    C++ Comments.        (line   6)
26307* 0 in constraint:                       Simple Constraints.  (line 115)
26308* < in constraint:                       Simple Constraints.  (line  46)
26309* <?:                                    Min and Max.         (line  10)
26310* = in constraint:                       Modifiers.           (line   8)
26311* > in constraint:                       Simple Constraints.  (line  50)
26312* >?:                                    Min and Max.         (line  14)
26313* ? in constraint:                       Multi-Alternative.   (line  27)
26314* ?: extensions <1>:                     Conditionals.        (line   6)
26315* ?: extensions:                         Lvalues.             (line   6)
26316* ?: side effect:                        Conditionals.        (line  20)
26317* _ in variables in macros:              Typeof.              (line  42)
26318* __builtin_apply:                       Constructing Calls.  (line  31)
26319* __builtin_apply_args:                  Constructing Calls.  (line  20)
26320* __builtin_choose_expr:                 Other Builtins.      (line 141)
26321* __builtin_clz:                         Other Builtins.      (line 353)
26322* __builtin_clzl:                        Other Builtins.      (line 371)
26323* __builtin_clzll:                       Other Builtins.      (line 391)
26324* __builtin_constant_p:                  Other Builtins.      (line 181)
26325* __builtin_ctz:                         Other Builtins.      (line 357)
26326* __builtin_ctzl:                        Other Builtins.      (line 375)
26327* __builtin_ctzll:                       Other Builtins.      (line 395)
26328* __builtin_expect:                      Other Builtins.      (line 227)
26329* __builtin_ffs:                         Other Builtins.      (line 349)
26330* __builtin_ffsl:                        Other Builtins.      (line 367)
26331* __builtin_ffsll:                       Other Builtins.      (line 387)
26332* __builtin_frame_address:               Return Address.      (line  34)
26333* __builtin_huge_val:                    Other Builtins.      (line 291)
26334* __builtin_huge_valf:                   Other Builtins.      (line 296)
26335* __builtin_huge_vall:                   Other Builtins.      (line 299)
26336* __builtin_inf:                         Other Builtins.      (line 303)
26337* __builtin_inff:                        Other Builtins.      (line 309)
26338* __builtin_infl:                        Other Builtins.      (line 312)
26339* __builtin_isgreater:                   Other Builtins.      (line   6)
26340* __builtin_isgreaterequal:              Other Builtins.      (line   6)
26341* __builtin_isless:                      Other Builtins.      (line   6)
26342* __builtin_islessequal:                 Other Builtins.      (line   6)
26343* __builtin_islessgreater:               Other Builtins.      (line   6)
26344* __builtin_isunordered:                 Other Builtins.      (line   6)
26345* __builtin_nan:                         Other Builtins.      (line 316)
26346* __builtin_nanf:                        Other Builtins.      (line 331)
26347* __builtin_nanl:                        Other Builtins.      (line 334)
26348* __builtin_nans:                        Other Builtins.      (line 338)
26349* __builtin_nansf:                       Other Builtins.      (line 342)
26350* __builtin_nansl:                       Other Builtins.      (line 345)
26351* __builtin_parity:                      Other Builtins.      (line 364)
26352* __builtin_parityl:                     Other Builtins.      (line 383)
26353* __builtin_parityll:                    Other Builtins.      (line 403)
26354* __builtin_popcount:                    Other Builtins.      (line 361)
26355* __builtin_popcountl:                   Other Builtins.      (line 379)
26356* __builtin_popcountll:                  Other Builtins.      (line 399)
26357* __builtin_prefetch:                    Other Builtins.      (line 252)
26358* __builtin_return:                      Constructing Calls.  (line  48)
26359* __builtin_return_address:              Return Address.      (line  11)
26360* __builtin_types_compatible_p:          Other Builtins.      (line  95)
26361* __complex__ keyword:                   Complex.             (line   6)
26362* __declspec(dllexport):                 Function Attributes. (line 625)
26363* __declspec(dllimport):                 Function Attributes. (line 589)
26364* __extension__:                         Alternate Keywords.  (line  29)
26365* __func__ identifier:                   Function Names.      (line   6)
26366* __FUNCTION__ identifier:               Function Names.      (line   6)
26367* __imag__ keyword:                      Complex.             (line  27)
26368* __PRETTY_FUNCTION__ identifier:        Function Names.      (line   6)
26369* __real__ keyword:                      Complex.             (line  27)
26370* __STDC_HOSTED__:                       Standards.           (line   6)
26371* __thread:                              Thread-Local.        (line   6)
26372* _Complex keyword:                      Complex.             (line   6)
26373* _exit:                                 Other Builtins.      (line   6)
26374* _Exit:                                 Other Builtins.      (line   6)
26375* ABI:                                   Compatibility.       (line   6)
26376* abort:                                 Other Builtins.      (line   6)
26377* abs:                                   Other Builtins.      (line   6)
26378* accessing volatiles:                   Volatiles.           (line   6)
26379* acos:                                  Other Builtins.      (line   6)
26380* acosf:                                 Other Builtins.      (line   6)
26381* acosh:                                 Other Builtins.      (line   6)
26382* acoshf:                                Other Builtins.      (line   6)
26383* acoshl:                                Other Builtins.      (line   6)
26384* acosl:                                 Other Builtins.      (line   6)
26385* Ada:                                   G++ and GCC.         (line   6)
26386* address constraints:                   Simple Constraints.  (line 142)
26387* address of a label:                    Labels as Values.    (line   6)
26388* address_operand:                       Simple Constraints.  (line 146)
26389* alias attribute:                       Function Attributes. (line 341)
26390* aliasing of parameters:                Code Gen Options.    (line 311)
26391* aligned attribute <1>:                 Type Attributes.     (line  30)
26392* aligned attribute:                     Variable Attributes. (line  23)
26393* alignment:                             Alignment.           (line   6)
26394* alloca:                                Other Builtins.      (line   6)
26395* alloca vs variable-length arrays:      Variable Length.     (line  27)
26396* alternate keywords:                    Alternate Keywords.  (line   6)
26397* always_inline function attribute:      Function Attributes. (line  74)
26398* AMD x86-64 Options:                    i386 and x86-64 Options.
26399                                                              (line   6)
26400* AMD1:                                  Standards.           (line   6)
26401* ANSI C:                                Standards.           (line   6)
26402* ANSI C standard:                       Standards.           (line   6)
26403* ANSI C89:                              Standards.           (line   6)
26404* ANSI support:                          C Dialect Options.   (line   9)
26405* ANSI X3.159-1989:                      Standards.           (line   6)
26406* apostrophes:                           Incompatibilities.   (line 118)
26407* application binary interface:          Compatibility.       (line   6)
26408* ARC Options:                           ARC Options.         (line   6)
26409* ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
26410                                                              (line   6)
26411* ARM options:                           ARM Options.         (line   6)
26412* arrays of length zero:                 Zero Length.         (line   6)
26413* arrays of variable length:             Variable Length.     (line   6)
26414* arrays, non-lvalue:                    Subscripting.        (line   6)
26415* asin:                                  Other Builtins.      (line   6)
26416* asinf:                                 Other Builtins.      (line   6)
26417* asinh:                                 Other Builtins.      (line   6)
26418* asinhf:                                Other Builtins.      (line   6)
26419* asinhl:                                Other Builtins.      (line   6)
26420* asinl:                                 Other Builtins.      (line   6)
26421* asm constraints:                       Constraints.         (line   6)
26422* asm expressions:                       Extended Asm.        (line   6)
26423* assembler instructions:                Extended Asm.        (line   6)
26424* assembler names for identifiers:       Asm Labels.          (line   6)
26425* assembly code, invalid:                Bug Criteria.        (line  12)
26426* atan:                                  Other Builtins.      (line   6)
26427* atan2:                                 Other Builtins.      (line   6)
26428* atan2f:                                Other Builtins.      (line   6)
26429* atan2l:                                Other Builtins.      (line   6)
26430* atanf:                                 Other Builtins.      (line   6)
26431* atanh:                                 Other Builtins.      (line   6)
26432* atanhf:                                Other Builtins.      (line   6)
26433* atanhl:                                Other Builtins.      (line   6)
26434* atanl:                                 Other Builtins.      (line   6)
26435* attribute of types:                    Type Attributes.     (line   6)
26436* attribute of variables:                Variable Attributes. (line   6)
26437* attribute syntax:                      Attribute Syntax.    (line   6)
26438* autoincrement/decrement addressing:    Simple Constraints.  (line  28)
26439* automatic inline for C++ member fns:   Inline.              (line  46)
26440* AVR Options:                           AVR Options.         (line   6)
26441* Backwards Compatibility:               Backwards Compatibility.
26442                                                              (line   6)
26443* base class members:                    Name lookup.         (line   6)
26444* bcmp:                                  Other Builtins.      (line   6)
26445* binary compatibility:                  Compatibility.       (line   6)
26446* bound pointer to member function:      Bound member functions.
26447                                                              (line   6)
26448* bug criteria:                          Bug Criteria.        (line   6)
26449* bugs:                                  Bugs.                (line   6)
26450* bugs, known:                           Trouble.             (line   6)
26451* built-in functions <1>:                Other Builtins.      (line   6)
26452* built-in functions:                    C Dialect Options.   (line 127)
26453* bzero:                                 Other Builtins.      (line   6)
26454* C compilation options:                 Invoking GCC.        (line  17)
26455* C intermediate output, nonexistent:    G++ and GCC.         (line  35)
26456* C language extensions:                 C Extensions.        (line   6)
26457* C language, traditional:               C Dialect Options.   (line 189)
26458* C standard:                            Standards.           (line   6)
26459* C standards:                           Standards.           (line   6)
26460* c++:                                   Invoking G++.        (line  13)
26461* C++:                                   G++ and GCC.         (line  30)
26462* C++ comments:                          C++ Comments.        (line   6)
26463* C++ compilation options:               Invoking GCC.        (line  23)
26464* C++ interface and implementation headers: C++ Interface.    (line   6)
26465* C++ language extensions:               C++ Extensions.      (line   6)
26466* C++ member fns, automatically inline:  Inline.              (line  46)
26467* C++ misunderstandings:                 C++ Misunderstandings.
26468                                                              (line   6)
26469* C++ options, command line:             C++ Dialect Options. (line   6)
26470* C++ pragmas, effect on inlining:       C++ Interface.       (line  66)
26471* C++ source file suffixes:              Invoking G++.        (line   6)
26472* C++ static data, declaring and defining: Static Definitions.
26473                                                              (line   6)
26474* C89:                                   Standards.           (line   6)
26475* C90:                                   Standards.           (line   6)
26476* C94:                                   Standards.           (line   6)
26477* C95:                                   Standards.           (line   6)
26478* C99:                                   Standards.           (line   6)
26479* C9X:                                   Standards.           (line   6)
26480* C_INCLUDE_PATH:                        Environment Variables.
26481                                                              (line 124)
26482* cabs:                                  Other Builtins.      (line   6)
26483* cabsf:                                 Other Builtins.      (line   6)
26484* cabsl:                                 Other Builtins.      (line   6)
26485* cacos:                                 Other Builtins.      (line   6)
26486* cacosf:                                Other Builtins.      (line   6)
26487* cacosh:                                Other Builtins.      (line   6)
26488* cacoshf:                               Other Builtins.      (line   6)
26489* cacoshl:                               Other Builtins.      (line   6)
26490* cacosl:                                Other Builtins.      (line   6)
26491* calling functions through the function vector on the H8/300 processors: Function Attributes.
26492                                                              (line 450)
26493* calloc:                                Other Builtins.      (line   6)
26494* carg:                                  Other Builtins.      (line   6)
26495* cargf:                                 Other Builtins.      (line   6)
26496* cargl:                                 Other Builtins.      (line   6)
26497* case labels in initializers:           Designated Inits.    (line   6)
26498* case ranges:                           Case Ranges.         (line   6)
26499* casin:                                 Other Builtins.      (line   6)
26500* casinf:                                Other Builtins.      (line   6)
26501* casinh:                                Other Builtins.      (line   6)
26502* casinhf:                               Other Builtins.      (line   6)
26503* casinhl:                               Other Builtins.      (line   6)
26504* casinl:                                Other Builtins.      (line   6)
26505* cast to a union:                       Cast to Union.       (line   6)
26506* casts as lvalues:                      Lvalues.             (line   6)
26507* catan:                                 Other Builtins.      (line   6)
26508* catanf:                                Other Builtins.      (line   6)
26509* catanh:                                Other Builtins.      (line   6)
26510* catanhf:                               Other Builtins.      (line   6)
26511* catanhl:                               Other Builtins.      (line   6)
26512* catanl:                                Other Builtins.      (line   6)
26513* cbrt:                                  Other Builtins.      (line   6)
26514* cbrtf:                                 Other Builtins.      (line   6)
26515* cbrtl:                                 Other Builtins.      (line   6)
26516* ccos:                                  Other Builtins.      (line   6)
26517* ccosf:                                 Other Builtins.      (line   6)
26518* ccosh:                                 Other Builtins.      (line   6)
26519* ccoshf:                                Other Builtins.      (line   6)
26520* ccoshl:                                Other Builtins.      (line   6)
26521* ccosl:                                 Other Builtins.      (line   6)
26522* ceil:                                  Other Builtins.      (line   6)
26523* ceilf:                                 Other Builtins.      (line   6)
26524* ceill:                                 Other Builtins.      (line   6)
26525* cexp:                                  Other Builtins.      (line   6)
26526* cexpf:                                 Other Builtins.      (line   6)
26527* cexpl:                                 Other Builtins.      (line   6)
26528* cimag:                                 Other Builtins.      (line   6)
26529* cimagf:                                Other Builtins.      (line   6)
26530* cimagl:                                Other Builtins.      (line   6)
26531* cleanup attribute:                     Variable Attributes. (line  76)
26532* COBOL:                                 G++ and GCC.         (line  23)
26533* code generation conventions:           Code Gen Options.    (line   6)
26534* code, mixed with declarations:         Mixed Declarations.  (line   6)
26535* command options:                       Invoking GCC.        (line   6)
26536* comments, C++ style:                   C++ Comments.        (line   6)
26537* common attribute:                      Variable Attributes. (line  92)
26538* comparison of signed and unsigned values, warning: Warning Options.
26539                                                              (line 717)
26540* compiler bugs, reporting:              Bug Reporting.       (line   6)
26541* compiler compared to C++ preprocessor: G++ and GCC.         (line  35)
26542* compiler options, C++:                 C++ Dialect Options. (line   6)
26543* compiler options, Objective-C:         Objective-C Dialect Options.
26544                                                              (line   6)
26545* compiler version, specifying:          Target Options.      (line   6)
26546* COMPILER_PATH:                         Environment Variables.
26547                                                              (line  85)
26548* complex conjugation:                   Complex.             (line  34)
26549* complex numbers:                       Complex.             (line   6)
26550* compound expressions as lvalues:       Lvalues.             (line   6)
26551* compound literals:                     Compound Literals.   (line   6)
26552* computed gotos:                        Labels as Values.    (line   6)
26553* conditional expressions as lvalues:    Lvalues.             (line   6)
26554* conditional expressions, extensions:   Conditionals.        (line   6)
26555* conflicting types:                     Disappointments.     (line  21)
26556* conj:                                  Other Builtins.      (line   6)
26557* conjf:                                 Other Builtins.      (line   6)
26558* conjl:                                 Other Builtins.      (line   6)
26559* const applied to function:             Function Attributes. (line   6)
26560* const function attribute:              Function Attributes. (line  99)
26561* constants in constraints:              Simple Constraints.  (line  58)
26562* constraint modifier characters:        Modifiers.           (line   6)
26563* constraint, matching:                  Simple Constraints.  (line 127)
26564* constraints, asm:                      Constraints.         (line   6)
26565* constraints, machine specific:         Machine Constraints. (line   6)
26566* constructing calls:                    Constructing Calls.  (line   6)
26567* constructor expressions:               Compound Literals.   (line   6)
26568* constructor function attribute:        Function Attributes. (line 266)
26569* contributors:                          Contributors.        (line   6)
26570* copysign:                              Other Builtins.      (line   6)
26571* copysignf:                             Other Builtins.      (line   6)
26572* copysignl:                             Other Builtins.      (line   6)
26573* core dump:                             Bug Criteria.        (line   9)
26574* cos:                                   Other Builtins.      (line   6)
26575* cosf:                                  Other Builtins.      (line   6)
26576* cosh:                                  Other Builtins.      (line   6)
26577* coshf:                                 Other Builtins.      (line   6)
26578* coshl:                                 Other Builtins.      (line   6)
26579* cosl:                                  Other Builtins.      (line   6)
26580* CPATH:                                 Environment Variables.
26581                                                              (line 123)
26582* CPLUS_INCLUDE_PATH:                    Environment Variables.
26583                                                              (line 125)
26584* cpow:                                  Other Builtins.      (line   6)
26585* cpowf:                                 Other Builtins.      (line   6)
26586* cpowl:                                 Other Builtins.      (line   6)
26587* cproj:                                 Other Builtins.      (line   6)
26588* cprojf:                                Other Builtins.      (line   6)
26589* cprojl:                                Other Builtins.      (line   6)
26590* creal:                                 Other Builtins.      (line   6)
26591* crealf:                                Other Builtins.      (line   6)
26592* creall:                                Other Builtins.      (line   6)
26593* CRIS Options:                          CRIS Options.        (line   6)
26594* cross compiling:                       Target Options.      (line   6)
26595* csin:                                  Other Builtins.      (line   6)
26596* csinf:                                 Other Builtins.      (line   6)
26597* csinh:                                 Other Builtins.      (line   6)
26598* csinhf:                                Other Builtins.      (line   6)
26599* csinhl:                                Other Builtins.      (line   6)
26600* csinl:                                 Other Builtins.      (line   6)
26601* csqrt:                                 Other Builtins.      (line   6)
26602* csqrtf:                                Other Builtins.      (line   6)
26603* csqrtl:                                Other Builtins.      (line   6)
26604* ctan:                                  Other Builtins.      (line   6)
26605* ctanf:                                 Other Builtins.      (line   6)
26606* ctanh:                                 Other Builtins.      (line   6)
26607* ctanhf:                                Other Builtins.      (line   6)
26608* ctanhl:                                Other Builtins.      (line   6)
26609* ctanl:                                 Other Builtins.      (line   6)
26610* D30V Options:                          D30V Options.        (line   6)
26611* Darwin options:                        Darwin Options.      (line   6)
26612* DBX:                                   Interoperation.      (line  28)
26613* dcgettext:                             Other Builtins.      (line   6)
26614* deallocating variable length arrays:   Variable Length.     (line  23)
26615* debugging information options:         Debugging Options.   (line   6)
26616* declaration scope:                     Incompatibilities.   (line  82)
26617* declarations inside expressions:       Statement Exprs.     (line   6)
26618* declarations, mixed with code:         Mixed Declarations.  (line   6)
26619* declaring attributes of functions:     Function Attributes. (line   6)
26620* declaring static data in C++:          Static Definitions.  (line   6)
26621* defining static data in C++:           Static Definitions.  (line   6)
26622* dependencies for make as output:       Environment Variables.
26623                                                              (line 151)
26624* dependencies, make:                    Preprocessor Options.
26625                                                              (line 174)
26626* DEPENDENCIES_OUTPUT:                   Environment Variables.
26627                                                              (line 150)
26628* dependent name lookup:                 Name lookup.         (line   6)
26629* deprecated attribute:                  Variable Attributes. (line 100)
26630* deprecated attribute.:                 Function Attributes. (line 287)
26631* designated initializers:               Designated Inits.    (line   6)
26632* designator lists:                      Designated Inits.    (line  94)
26633* designators:                           Designated Inits.    (line  61)
26634* destructor function attribute:         Function Attributes. (line 266)
26635* dgettext:                              Other Builtins.      (line   6)
26636* diagnostic messages:                   Language Independent Options.
26637                                                              (line   6)
26638* dialect options:                       C Dialect Options.   (line   6)
26639* digits in constraint:                  Simple Constraints.  (line 115)
26640* directory options:                     Directory Options.   (line   6)
26641* dollar signs in identifier names:      Dollar Signs.        (line   6)
26642* double-word arithmetic:                Long Long.           (line   6)
26643* downward funargs:                      Nested Functions.    (line   6)
26644* drem:                                  Other Builtins.      (line   6)
26645* dremf:                                 Other Builtins.      (line   6)
26646* dreml:                                 Other Builtins.      (line   6)
26647* E in constraint:                       Simple Constraints.  (line  77)
26648* earlyclobber operand:                  Modifiers.           (line  25)
26649* eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
26650                                                              (line 504)
26651* empty structures:                      Empty Structures.    (line   6)
26652* environment variables:                 Environment Variables.
26653                                                              (line   6)
26654* erf:                                   Other Builtins.      (line   6)
26655* erfc:                                  Other Builtins.      (line   6)
26656* erfcf:                                 Other Builtins.      (line   6)
26657* erfcl:                                 Other Builtins.      (line   6)
26658* erff:                                  Other Builtins.      (line   6)
26659* erfl:                                  Other Builtins.      (line   6)
26660* error messages:                        Warnings and Errors. (line   6)
26661* escaped newlines:                      Escaped Newlines.    (line   6)
26662* exclamation point:                     Multi-Alternative.   (line  33)
26663* exit:                                  Other Builtins.      (line   6)
26664* exp:                                   Other Builtins.      (line   6)
26665* exp10:                                 Other Builtins.      (line   6)
26666* exp10f:                                Other Builtins.      (line   6)
26667* exp10l:                                Other Builtins.      (line   6)
26668* exp2:                                  Other Builtins.      (line   6)
26669* exp2f:                                 Other Builtins.      (line   6)
26670* exp2l:                                 Other Builtins.      (line   6)
26671* expf:                                  Other Builtins.      (line   6)
26672* expl:                                  Other Builtins.      (line   6)
26673* explicit register variables:           Explicit Reg Vars.   (line   6)
26674* expm1:                                 Other Builtins.      (line   6)
26675* expm1f:                                Other Builtins.      (line   6)
26676* expm1l:                                Other Builtins.      (line   6)
26677* expressions containing statements:     Statement Exprs.     (line   6)
26678* expressions, compound, as lvalues:     Lvalues.             (line   6)
26679* expressions, conditional, as lvalues:  Lvalues.             (line   6)
26680* expressions, constructor:              Compound Literals.   (line   6)
26681* extended asm:                          Extended Asm.        (line   6)
26682* extensible constraints:                Simple Constraints.  (line 151)
26683* extensions, ?: <1>:                    Conditionals.        (line   6)
26684* extensions, ?::                        Lvalues.             (line   6)
26685* extensions, C language:                C Extensions.        (line   6)
26686* extensions, C++ language:              C++ Extensions.      (line   6)
26687* external declaration scope:            Incompatibilities.   (line  82)
26688* F in constraint:                       Simple Constraints.  (line  82)
26689* fabs:                                  Other Builtins.      (line   6)
26690* fabsf:                                 Other Builtins.      (line   6)
26691* fabsl:                                 Other Builtins.      (line   6)
26692* fatal signal:                          Bug Criteria.        (line   9)
26693* fdim:                                  Other Builtins.      (line   6)
26694* fdimf:                                 Other Builtins.      (line   6)
26695* fdiml:                                 Other Builtins.      (line   6)
26696* FDL, GNU Free Documentation License:   GNU Free Documentation License.
26697                                                              (line   6)
26698* ffs:                                   Other Builtins.      (line   6)
26699* file name suffix:                      Overall Options.     (line  14)
26700* file names:                            Link Options.        (line  10)
26701* flexible array members:                Zero Length.         (line   6)
26702* float as function value type:          Incompatibilities.   (line 143)
26703* floating point precision <1>:          Disappointments.     (line  70)
26704* floating point precision:              Optimize Options.    (line 757)
26705* floor:                                 Other Builtins.      (line   6)
26706* floorf:                                Other Builtins.      (line   6)
26707* floorl:                                Other Builtins.      (line   6)
26708* fma:                                   Other Builtins.      (line   6)
26709* fmaf:                                  Other Builtins.      (line   6)
26710* fmal:                                  Other Builtins.      (line   6)
26711* fmax:                                  Other Builtins.      (line   6)
26712* fmaxf:                                 Other Builtins.      (line   6)
26713* fmaxl:                                 Other Builtins.      (line   6)
26714* fmin:                                  Other Builtins.      (line   6)
26715* fminf:                                 Other Builtins.      (line   6)
26716* fminl:                                 Other Builtins.      (line   6)
26717* fmod:                                  Other Builtins.      (line   6)
26718* fmodf:                                 Other Builtins.      (line   6)
26719* fmodl:                                 Other Builtins.      (line   6)
26720* format function attribute:             Function Attributes. (line 135)
26721* format_arg function attribute:         Function Attributes. (line 183)
26722* Fortran:                               G++ and GCC.         (line   6)
26723* forwarding calls:                      Constructing Calls.  (line   6)
26724* fprintf:                               Other Builtins.      (line   6)
26725* fprintf_unlocked:                      Other Builtins.      (line   6)
26726* fputs:                                 Other Builtins.      (line   6)
26727* fputs_unlocked:                        Other Builtins.      (line   6)
26728* freestanding environment:              Standards.           (line   6)
26729* freestanding implementation:           Standards.           (line   6)
26730* frexp:                                 Other Builtins.      (line   6)
26731* frexpf:                                Other Builtins.      (line   6)
26732* frexpl:                                Other Builtins.      (line   6)
26733* FRV Options:                           FRV Options.         (line   6)
26734* fscanf:                                Other Builtins.      (line   6)
26735* fscanf, and constant strings:          Incompatibilities.   (line  17)
26736* function addressability on the M32R/D: Function Attributes. (line 539)
26737* function attributes:                   Function Attributes. (line   6)
26738* function pointers, arithmetic:         Pointer Arith.       (line   6)
26739* function prototype declarations:       Function Prototypes. (line   6)
26740* function without a prologue/epilogue code: Function Attributes.
26741                                                              (line 533)
26742* function, size of pointer to:          Pointer Arith.       (line   6)
26743* functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
26744                                                              (line 429)
26745* functions in arbitrary sections:       Function Attributes. (line   6)
26746* functions that are passed arguments in registers on the 386: Function Attributes.
26747                                                              (line   6)
26748* functions that behave like malloc:     Function Attributes. (line   6)
26749* functions that do not pop the argument stack on the 386: Function Attributes.
26750                                                              (line   6)
26751* functions that do pop the argument stack on the 386: Function Attributes.
26752                                                              (line 423)
26753* functions that have no side effects:   Function Attributes. (line   6)
26754* functions that never return:           Function Attributes. (line   6)
26755* functions that pop the argument stack on the 386: Function Attributes.
26756                                                              (line   6)
26757* functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
26758                                                              (line 583)
26759* functions which handle memory bank switching: Function Attributes.
26760                                                              (line 567)
26761* functions with non-null pointer arguments: Function Attributes.
26762                                                              (line   6)
26763* functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
26764                                                              (line   6)
26765* g in constraint:                       Simple Constraints.  (line 108)
26766* G in constraint:                       Simple Constraints.  (line  86)
26767* g++:                                   Invoking G++.        (line  13)
26768* G++:                                   G++ and GCC.         (line  30)
26769* gamma:                                 Other Builtins.      (line   6)
26770* gammaf:                                Other Builtins.      (line   6)
26771* gammal:                                Other Builtins.      (line   6)
26772* GCC:                                   G++ and GCC.         (line   6)
26773* GCC command options:                   Invoking GCC.        (line   6)
26774* GCC_EXEC_PREFIX:                       Environment Variables.
26775                                                              (line  52)
26776* gcc_struct:                            Type Attributes.     (line 266)
26777* gcc_struct attribute:                  Variable Attributes. (line 296)
26778* generalized lvalues:                   Lvalues.             (line   6)
26779* gettext:                               Other Builtins.      (line   6)
26780* global offset table:                   Code Gen Options.    (line 170)
26781* global register after longjmp:         Global Reg Vars.     (line  66)
26782* global register variables:             Global Reg Vars.     (line   6)
26783* GNAT:                                  G++ and GCC.         (line  30)
26784* GNU C Compiler:                        G++ and GCC.         (line   6)
26785* GNU Compiler Collection:               G++ and GCC.         (line   6)
26786* goto with computed label:              Labels as Values.    (line   6)
26787* gp-relative references (MIPS):         MIPS Options.        (line 177)
26788* gprof:                                 Debugging Options.   (line 122)
26789* grouping options:                      Invoking GCC.        (line  26)
26790* H in constraint:                       Simple Constraints.  (line  86)
26791* hardware models and configurations, specifying: Submodel Options.
26792                                                              (line   6)
26793* hex floats:                            Hex Floats.          (line   6)
26794* hosted environment <1>:                C Dialect Options.   (line 155)
26795* hosted environment:                    Standards.           (line   6)
26796* hosted implementation:                 Standards.           (line   6)
26797* HPPA Options:                          HPPA Options.        (line   6)
26798* hypot:                                 Other Builtins.      (line   6)
26799* hypotf:                                Other Builtins.      (line   6)
26800* hypotl:                                Other Builtins.      (line   6)
26801* I in constraint:                       Simple Constraints.  (line  69)
26802* i in constraint:                       Simple Constraints.  (line  58)
26803* i386 Options:                          i386 and x86-64 Options.
26804                                                              (line   6)
26805* IA-64 Options:                         IA-64 Options.       (line   6)
26806* IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
26807                                                              (line   6)
26808* identifier names, dollar signs in:     Dollar Signs.        (line   6)
26809* identifiers, names in assembler code:  Asm Labels.          (line   6)
26810* ilogb:                                 Other Builtins.      (line   6)
26811* ilogbf:                                Other Builtins.      (line   6)
26812* ilogbl:                                Other Builtins.      (line   6)
26813* imaxabs:                               Other Builtins.      (line   6)
26814* implementation-defined behavior, C language: C Implementation.
26815                                                              (line   6)
26816* implied #pragma implementation:        C++ Interface.       (line  46)
26817* incompatibilities of GCC:              Incompatibilities.   (line   6)
26818* increment operators:                   Bug Criteria.        (line  17)
26819* index:                                 Other Builtins.      (line   6)
26820* indirect calls on ARM:                 Function Attributes. (line 440)
26821* init_priority attribute:               C++ Attributes.      (line   9)
26822* initializations in expressions:        Compound Literals.   (line   6)
26823* initializers with labeled elements:    Designated Inits.    (line   6)
26824* initializers, non-constant:            Initializers.        (line   6)
26825* inline automatic for C++ member fns:   Inline.              (line  46)
26826* inline functions:                      Inline.              (line   6)
26827* inline functions, omission of:         Inline.              (line  51)
26828* inlining and C++ pragmas:              C++ Interface.       (line  66)
26829* installation trouble:                  Trouble.             (line   6)
26830* integrating function code:             Inline.              (line   6)
26831* Intel 386 Options:                     i386 and x86-64 Options.
26832                                                              (line   6)
26833* interface and implementation headers, C++: C++ Interface.   (line   6)
26834* intermediate C version, nonexistent:   G++ and GCC.         (line  35)
26835* interrupt handler functions:           Function Attributes. (line 461)
26836* interrupt handler functions on the m68k, H8/300 and SH processors: Function Attributes.
26837                                                              (line 483)
26838* introduction:                          Top.                 (line   6)
26839* invalid assembly code:                 Bug Criteria.        (line  12)
26840* invalid input:                         Bug Criteria.        (line  42)
26841* invoking g++:                          Invoking G++.        (line  23)
26842* ISO 9899:                              Standards.           (line   6)
26843* ISO C:                                 Standards.           (line   6)
26844* ISO C standard:                        Standards.           (line   6)
26845* ISO C90:                               Standards.           (line   6)
26846* ISO C94:                               Standards.           (line   6)
26847* ISO C95:                               Standards.           (line   6)
26848* ISO C99:                               Standards.           (line   6)
26849* ISO C9X:                               Standards.           (line   6)
26850* ISO support:                           C Dialect Options.   (line   9)
26851* ISO/IEC 9899:                          Standards.           (line   6)
26852* j0:                                    Other Builtins.      (line   6)
26853* j0f:                                   Other Builtins.      (line   6)
26854* j0l:                                   Other Builtins.      (line   6)
26855* j1:                                    Other Builtins.      (line   6)
26856* j1f:                                   Other Builtins.      (line   6)
26857* j1l:                                   Other Builtins.      (line   6)
26858* Java:                                  G++ and GCC.         (line   6)
26859* java_interface attribute:              C++ Attributes.      (line  29)
26860* jn:                                    Other Builtins.      (line   6)
26861* jnf:                                   Other Builtins.      (line   6)
26862* jnl:                                   Other Builtins.      (line   6)
26863* keywords, alternate:                   Alternate Keywords.  (line   6)
26864* known causes of trouble:               Trouble.             (line   6)
26865* labeled elements in initializers:      Designated Inits.    (line   6)
26866* labels as values:                      Labels as Values.    (line   6)
26867* labs:                                  Other Builtins.      (line   6)
26868* LANG:                                  Environment Variables.
26869                                                              (line  21)
26870* language dialect options:              C Dialect Options.   (line   6)
26871* LC_ALL:                                Environment Variables.
26872                                                              (line  21)
26873* LC_CTYPE:                              Environment Variables.
26874                                                              (line  21)
26875* LC_MESSAGES:                           Environment Variables.
26876                                                              (line  21)
26877* ldexp:                                 Other Builtins.      (line   6)
26878* ldexpf:                                Other Builtins.      (line   6)
26879* ldexpl:                                Other Builtins.      (line   6)
26880* length-zero arrays:                    Zero Length.         (line   6)
26881* lgamma:                                Other Builtins.      (line   6)
26882* lgammaf:                               Other Builtins.      (line   6)
26883* lgammal:                               Other Builtins.      (line   6)
26884* Libraries:                             Link Options.        (line  24)
26885* LIBRARY_PATH:                          Environment Variables.
26886                                                              (line  91)
26887* link options:                          Link Options.        (line   6)
26888* LL integer suffix:                     Long Long.           (line   6)
26889* llabs:                                 Other Builtins.      (line   6)
26890* llrint:                                Other Builtins.      (line   6)
26891* llrintf:                               Other Builtins.      (line   6)
26892* llrintl:                               Other Builtins.      (line   6)
26893* llround:                               Other Builtins.      (line   6)
26894* llroundf:                              Other Builtins.      (line   6)
26895* llroundl:                              Other Builtins.      (line   6)
26896* load address instruction:              Simple Constraints.  (line 142)
26897* local labels:                          Local Labels.        (line   6)
26898* local variables in macros:             Typeof.              (line  42)
26899* local variables, specifying registers: Local Reg Vars.      (line   6)
26900* locale:                                Environment Variables.
26901                                                              (line  21)
26902* locale definition:                     Environment Variables.
26903                                                              (line 100)
26904* log:                                   Other Builtins.      (line   6)
26905* log10:                                 Other Builtins.      (line   6)
26906* log10f:                                Other Builtins.      (line   6)
26907* log10l:                                Other Builtins.      (line   6)
26908* log1p:                                 Other Builtins.      (line   6)
26909* log1pf:                                Other Builtins.      (line   6)
26910* log1pl:                                Other Builtins.      (line   6)
26911* log2:                                  Other Builtins.      (line   6)
26912* log2f:                                 Other Builtins.      (line   6)
26913* log2l:                                 Other Builtins.      (line   6)
26914* logb:                                  Other Builtins.      (line   6)
26915* logbf:                                 Other Builtins.      (line   6)
26916* logbl:                                 Other Builtins.      (line   6)
26917* logf:                                  Other Builtins.      (line   6)
26918* logl:                                  Other Builtins.      (line   6)
26919* long long data types:                  Long Long.           (line   6)
26920* longjmp:                               Global Reg Vars.     (line  66)
26921* longjmp incompatibilities:             Incompatibilities.   (line  41)
26922* longjmp warnings:                      Warning Options.     (line 412)
26923* lrint:                                 Other Builtins.      (line   6)
26924* lrintf:                                Other Builtins.      (line   6)
26925* lrintl:                                Other Builtins.      (line   6)
26926* lround:                                Other Builtins.      (line   6)
26927* lroundf:                               Other Builtins.      (line   6)
26928* lroundl:                               Other Builtins.      (line   6)
26929* lvalues, generalized:                  Lvalues.             (line   6)
26930* m in constraint:                       Simple Constraints.  (line  17)
26931* M32R/D options:                        M32R/D Options.      (line   6)
26932* M680x0 options:                        M680x0 Options.      (line   6)
26933* M68hc1x options:                       M68hc1x Options.     (line   6)
26934* machine dependent options:             Submodel Options.    (line   6)
26935* machine specific constraints:          Machine Constraints. (line   6)
26936* macro with variable arguments:         Variadic Macros.     (line   6)
26937* macros containing asm:                 Extended Asm.        (line 214)
26938* macros, inline alternative:            Inline.              (line   6)
26939* macros, local labels:                  Local Labels.        (line   6)
26940* macros, local variables in:            Typeof.              (line  42)
26941* macros, statements in expressions:     Statement Exprs.     (line   6)
26942* macros, types of arguments:            Typeof.              (line   6)
26943* make:                                  Preprocessor Options.
26944                                                              (line 174)
26945* malloc:                                Other Builtins.      (line   6)
26946* malloc attribute:                      Function Attributes. (line 331)
26947* matching constraint:                   Simple Constraints.  (line 127)
26948* maximum operator:                      Min and Max.         (line  14)
26949* MCore options:                         MCore Options.       (line   6)
26950* member fns, automatically inline:      Inline.              (line  46)
26951* memcmp:                                Other Builtins.      (line   6)
26952* memcpy:                                Other Builtins.      (line   6)
26953* memory references in constraints:      Simple Constraints.  (line  17)
26954* mempcpy:                               Other Builtins.      (line   6)
26955* memset:                                Other Builtins.      (line   6)
26956* Mercury:                               G++ and GCC.         (line  23)
26957* message formatting:                    Language Independent Options.
26958                                                              (line   6)
26959* messages, warning:                     Warning Options.     (line   6)
26960* messages, warning and error:           Warnings and Errors. (line   6)
26961* middle-operands, omitted:              Conditionals.        (line   6)
26962* minimum operator:                      Min and Max.         (line  10)
26963* MIPS options:                          MIPS Options.        (line   6)
26964* misunderstandings in C++:              C++ Misunderstandings.
26965                                                              (line   6)
26966* mixed declarations and code:           Mixed Declarations.  (line   6)
26967* mktemp, and constant strings:          Incompatibilities.   (line  13)
26968* MMIX Options:                          MMIX Options.        (line   6)
26969* MN10300 options:                       MN10300 Options.     (line   6)
26970* mode attribute:                        Variable Attributes. (line 118)
26971* modf:                                  Other Builtins.      (line   6)
26972* modff:                                 Other Builtins.      (line   6)
26973* modfl:                                 Other Builtins.      (line   6)
26974* modifiers in constraints:              Modifiers.           (line   6)
26975* ms_struct:                             Type Attributes.     (line 266)
26976* ms_struct attribute:                   Variable Attributes. (line 296)
26977* multiple alternative constraints:      Multi-Alternative.   (line   6)
26978* multiprecision arithmetic:             Long Long.           (line   6)
26979* n in constraint:                       Simple Constraints.  (line  63)
26980* names used in assembler code:          Asm Labels.          (line   6)
26981* naming convention, implementation headers: C++ Interface.   (line  46)
26982* nearbyint:                             Other Builtins.      (line   6)
26983* nearbyintf:                            Other Builtins.      (line   6)
26984* nearbyintl:                            Other Builtins.      (line   6)
26985* nested functions:                      Nested Functions.    (line   6)
26986* newlines (escaped):                    Escaped Newlines.    (line   6)
26987* nextafter:                             Other Builtins.      (line   6)
26988* nextafterf:                            Other Builtins.      (line   6)
26989* nextafterl:                            Other Builtins.      (line   6)
26990* nexttoward:                            Other Builtins.      (line   6)
26991* nexttowardf:                           Other Builtins.      (line   6)
26992* nexttowardl:                           Other Builtins.      (line   6)
26993* no_instrument_function function attribute: Function Attributes.
26994                                                              (line 244)
26995* nocommon attribute:                    Variable Attributes. (line  92)
26996* noinline function attribute:           Function Attributes. (line  70)
26997* non-constant initializers:             Initializers.        (line   6)
26998* non-static inline function:            Inline.              (line  63)
26999* nonnull function attribute:            Function Attributes. (line 221)
27000* noreturn function attribute:           Function Attributes. (line  30)
27001* nothrow function attribute:            Function Attributes. (line 126)
27002* NS32K options:                         NS32K Options.       (line   6)
27003* o in constraint:                       Simple Constraints.  (line  21)
27004* OBJC_INCLUDE_PATH:                     Environment Variables.
27005                                                              (line 126)
27006* Objective-C:                           G++ and GCC.         (line   6)
27007* Objective-C options, command line:     Objective-C Dialect Options.
27008                                                              (line   6)
27009* offsettable address:                   Simple Constraints.  (line  21)
27010* old-style function definitions:        Function Prototypes. (line   6)
27011* omitted middle-operands:               Conditionals.        (line   6)
27012* open coding:                           Inline.              (line   6)
27013* operand constraints, asm:              Constraints.         (line   6)
27014* optimize options:                      Optimize Options.    (line   6)
27015* options to control diagnostics formatting: Language Independent Options.
27016                                                              (line   6)
27017* options to control warnings:           Warning Options.     (line   6)
27018* options, C++:                          C++ Dialect Options. (line   6)
27019* options, code generation:              Code Gen Options.    (line   6)
27020* options, debugging:                    Debugging Options.   (line   6)
27021* options, dialect:                      C Dialect Options.   (line   6)
27022* options, directory search:             Directory Options.   (line   6)
27023* options, GCC command:                  Invoking GCC.        (line   6)
27024* options, grouping:                     Invoking GCC.        (line  26)
27025* options, linking:                      Link Options.        (line   6)
27026* options, Objective-C:                  Objective-C Dialect Options.
27027                                                              (line   6)
27028* options, optimization:                 Optimize Options.    (line   6)
27029* options, order:                        Invoking GCC.        (line  30)
27030* options, preprocessor:                 Preprocessor Options.
27031                                                              (line   6)
27032* order of evaluation, side effects:     Non-bugs.            (line 180)
27033* order of options:                      Invoking GCC.        (line  30)
27034* other register constraints:            Simple Constraints.  (line 151)
27035* output file option:                    Overall Options.     (line 153)
27036* overloaded virtual fn, warning:        C++ Dialect Options. (line 353)
27037* p in constraint:                       Simple Constraints.  (line 142)
27038* packed attribute:                      Variable Attributes. (line 129)
27039* parameter forward declaration:         Variable Length.     (line  60)
27040* parameters, aliased:                   Code Gen Options.    (line 311)
27041* Pascal:                                G++ and GCC.         (line  23)
27042* PDP-11 Options:                        PDP-11 Options.      (line   6)
27043* PIC:                                   Code Gen Options.    (line 170)
27044* pmf:                                   Bound member functions.
27045                                                              (line   6)
27046* pointer arguments:                     Function Attributes. (line 107)
27047* pointer to member function:            Bound member functions.
27048                                                              (line   6)
27049* portions of temporary objects, pointers to: Temporaries.    (line   6)
27050* pow:                                   Other Builtins.      (line   6)
27051* pow10:                                 Other Builtins.      (line   6)
27052* pow10f:                                Other Builtins.      (line   6)
27053* pow10l:                                Other Builtins.      (line   6)
27054* powf:                                  Other Builtins.      (line   6)
27055* powl:                                  Other Builtins.      (line   6)
27056* pragma, extern_prefix:                 Tru64 Pragmas.       (line  10)
27057* pragma, long_calls:                    ARM Pragmas.         (line  11)
27058* pragma, long_calls_off:                ARM Pragmas.         (line  17)
27059* pragma, longcall:                      RS/6000 and PowerPC Pragmas.
27060                                                              (line  14)
27061* pragma, mark:                          Darwin Pragmas.      (line  11)
27062* pragma, no_long_calls:                 ARM Pragmas.         (line  14)
27063* pragma, options align:                 Darwin Pragmas.      (line  14)
27064* pragma, reason for not using:          Function Attributes. (line 654)
27065* pragma, redefine_extname:              Solaris Pragmas.     (line  10)
27066* pragma, segment:                       Darwin Pragmas.      (line  21)
27067* pragma, unused:                        Darwin Pragmas.      (line  24)
27068* pragmas:                               Pragmas.             (line   6)
27069* pragmas in C++, effect on inlining:    C++ Interface.       (line  66)
27070* pragmas, interface and implementation: C++ Interface.       (line   6)
27071* pragmas, warning of unknown:           Warning Options.     (line 427)
27072* precompiled headers:                   Precompiled Headers. (line   6)
27073* preprocessing numbers:                 Incompatibilities.   (line 175)
27074* preprocessing tokens:                  Incompatibilities.   (line 175)
27075* preprocessor options:                  Preprocessor Options.
27076                                                              (line   6)
27077* printf:                                Other Builtins.      (line   6)
27078* printf_unlocked:                       Other Builtins.      (line   6)
27079* prof:                                  Debugging Options.   (line 116)
27080* promotion of formal parameters:        Function Prototypes. (line   6)
27081* pure function attribute:               Function Attributes. (line  79)
27082* push address instruction:              Simple Constraints.  (line 142)
27083* putchar:                               Other Builtins.      (line   6)
27084* puts:                                  Other Builtins.      (line   6)
27085* qsort, and global register variables:  Global Reg Vars.     (line  42)
27086* question mark:                         Multi-Alternative.   (line  27)
27087* r in constraint:                       Simple Constraints.  (line  54)
27088* ranges in case statements:             Case Ranges.         (line   6)
27089* read-only strings:                     Incompatibilities.   (line   9)
27090* register variable after longjmp:       Global Reg Vars.     (line  66)
27091* registers:                             Extended Asm.        (line   6)
27092* registers for local variables:         Local Reg Vars.      (line   6)
27093* registers in constraints:              Simple Constraints.  (line  54)
27094* registers, global allocation:          Explicit Reg Vars.   (line   6)
27095* registers, global variables in:        Global Reg Vars.     (line   6)
27096* regparm attribute:                     Function Attributes. (line 394)
27097* relocation truncated to fit (MIPS):    MIPS Options.        (line 108)
27098* remainder:                             Other Builtins.      (line   6)
27099* remainderf:                            Other Builtins.      (line   6)
27100* remainderl:                            Other Builtins.      (line   6)
27101* remquo:                                Other Builtins.      (line   6)
27102* remquof:                               Other Builtins.      (line   6)
27103* remquol:                               Other Builtins.      (line   6)
27104* reordering, warning:                   C++ Dialect Options. (line 281)
27105* reporting bugs:                        Bugs.                (line   6)
27106* rest argument (in macro):              Variadic Macros.     (line   6)
27107* restricted pointers:                   Restricted Pointers. (line   6)
27108* restricted references:                 Restricted Pointers. (line   6)
27109* restricted this pointer:               Restricted Pointers. (line   6)
27110* rindex:                                Other Builtins.      (line   6)
27111* rint:                                  Other Builtins.      (line   6)
27112* rintf:                                 Other Builtins.      (line   6)
27113* rintl:                                 Other Builtins.      (line   6)
27114* round:                                 Other Builtins.      (line   6)
27115* roundf:                                Other Builtins.      (line   6)
27116* roundl:                                Other Builtins.      (line   6)
27117* RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
27118                                                              (line   6)
27119* RTTI:                                  Vague Linkage.       (line  43)
27120* run-time options:                      Code Gen Options.    (line   6)
27121* s in constraint:                       Simple Constraints.  (line  90)
27122* S/390 and zSeries Options:             S/390 and zSeries Options.
27123                                                              (line   6)
27124* save all registers on the H8/300, H8/300H, and H8S: Function Attributes.
27125                                                              (line 521)
27126* scalb:                                 Other Builtins.      (line   6)
27127* scalbf:                                Other Builtins.      (line   6)
27128* scalbl:                                Other Builtins.      (line   6)
27129* scalbln:                               Other Builtins.      (line   6)
27130* scalblnf:                              Other Builtins.      (line   6)
27131* scalbn:                                Other Builtins.      (line   6)
27132* scalbnf:                               Other Builtins.      (line   6)
27133* scanf, and constant strings:           Incompatibilities.   (line  17)
27134* scanfnl:                               Other Builtins.      (line   6)
27135* scope of a variable length array:      Variable Length.     (line  23)
27136* scope of declaration:                  Disappointments.     (line  21)
27137* scope of external declarations:        Incompatibilities.   (line  82)
27138* search path:                           Directory Options.   (line   6)
27139* section function attribute:            Function Attributes. (line 249)
27140* section variable attribute:            Variable Attributes. (line 144)
27141* setjmp:                                Global Reg Vars.     (line  66)
27142* setjmp incompatibilities:              Incompatibilities.   (line  41)
27143* shared strings:                        Incompatibilities.   (line   9)
27144* shared variable attribute:             Variable Attributes. (line 189)
27145* side effect in ?::                     Conditionals.        (line  20)
27146* side effects, macro argument:          Statement Exprs.     (line  35)
27147* side effects, order of evaluation:     Non-bugs.            (line 180)
27148* signal handler functions on the AVR processors: Function Attributes.
27149                                                              (line 526)
27150* signed and unsigned values, comparison warning: Warning Options.
27151                                                              (line 717)
27152* significand:                           Other Builtins.      (line   6)
27153* significandf:                          Other Builtins.      (line   6)
27154* significandl:                          Other Builtins.      (line   6)
27155* simple constraints:                    Simple Constraints.  (line   6)
27156* sin:                                   Other Builtins.      (line   6)
27157* sincos:                                Other Builtins.      (line   6)
27158* sincosf:                               Other Builtins.      (line   6)
27159* sincosl:                               Other Builtins.      (line   6)
27160* sinf:                                  Other Builtins.      (line   6)
27161* sinh:                                  Other Builtins.      (line   6)
27162* sinhf:                                 Other Builtins.      (line   6)
27163* sinhl:                                 Other Builtins.      (line   6)
27164* sinl:                                  Other Builtins.      (line   6)
27165* sizeof:                                Typeof.              (line   6)
27166* smaller data references:               M32R/D Options.      (line  57)
27167* smaller data references (MIPS):        MIPS Options.        (line 177)
27168* smaller data references (PowerPC):     RS/6000 and PowerPC Options.
27169                                                              (line 508)
27170* snprintf:                              Other Builtins.      (line   6)
27171* SPARC options:                         SPARC Options.       (line   6)
27172* Spec Files:                            Spec Files.          (line   6)
27173* specified registers:                   Explicit Reg Vars.   (line   6)
27174* specifying compiler version and target machine: Target Options.
27175                                                              (line   6)
27176* specifying hardware config:            Submodel Options.    (line   6)
27177* specifying machine version:            Target Options.      (line   6)
27178* specifying registers for local variables: Local Reg Vars.   (line   6)
27179* speed of compilation:                  Precompiled Headers. (line   6)
27180* sprintf:                               Other Builtins.      (line   6)
27181* sqrt:                                  Other Builtins.      (line   6)
27182* sqrtf:                                 Other Builtins.      (line   6)
27183* sqrtl:                                 Other Builtins.      (line   6)
27184* sscanf:                                Other Builtins.      (line   6)
27185* sscanf, and constant strings:          Incompatibilities.   (line  17)
27186* statements inside expressions:         Statement Exprs.     (line   6)
27187* static data in C++, declaring and defining: Static Definitions.
27188                                                              (line   6)
27189* stpcpy:                                Other Builtins.      (line   6)
27190* strcat:                                Other Builtins.      (line   6)
27191* strchr:                                Other Builtins.      (line   6)
27192* strcmp:                                Other Builtins.      (line   6)
27193* strcpy:                                Other Builtins.      (line   6)
27194* strcspn:                               Other Builtins.      (line   6)
27195* strdup:                                Other Builtins.      (line   6)
27196* strfmon:                               Other Builtins.      (line   6)
27197* strftime:                              Other Builtins.      (line   6)
27198* string constants:                      Incompatibilities.   (line   9)
27199* strlen:                                Other Builtins.      (line   6)
27200* strncat:                               Other Builtins.      (line   6)
27201* strncmp:                               Other Builtins.      (line   6)
27202* strncpy:                               Other Builtins.      (line   6)
27203* strpbrk:                               Other Builtins.      (line   6)
27204* strrchr:                               Other Builtins.      (line   6)
27205* strspn:                                Other Builtins.      (line   6)
27206* strstr:                                Other Builtins.      (line   6)
27207* struct:                                Unnamed Fields.      (line   6)
27208* structures:                            Incompatibilities.   (line 148)
27209* structures, constructor expression:    Compound Literals.   (line   6)
27210* submodel options:                      Submodel Options.    (line   6)
27211* subscripting:                          Subscripting.        (line   6)
27212* subscripting and function values:      Subscripting.        (line   6)
27213* suffixes for C++ source:               Invoking G++.        (line   6)
27214* SUNPRO_DEPENDENCIES:                   Environment Variables.
27215                                                              (line 166)
27216* suppressing warnings:                  Warning Options.     (line   6)
27217* surprises in C++:                      C++ Misunderstandings.
27218                                                              (line   6)
27219* syntax checking:                       Warning Options.     (line  21)
27220* synthesized methods, warning:          C++ Dialect Options. (line 383)
27221* system headers, warnings from:         Warning Options.     (line 548)
27222* tan:                                   Other Builtins.      (line   6)
27223* tanf:                                  Other Builtins.      (line   6)
27224* tanh:                                  Other Builtins.      (line   6)
27225* tanhf:                                 Other Builtins.      (line   6)
27226* tanhl:                                 Other Builtins.      (line   6)
27227* tanl:                                  Other Builtins.      (line   6)
27228* target machine, specifying:            Target Options.      (line   6)
27229* target options:                        Target Options.      (line   6)
27230* TC1:                                   Standards.           (line   6)
27231* TC2:                                   Standards.           (line   6)
27232* Technical Corrigenda:                  Standards.           (line   6)
27233* Technical Corrigendum 1:               Standards.           (line   6)
27234* Technical Corrigendum 2:               Standards.           (line   6)
27235* template instantiation:                Template Instantiation.
27236                                                              (line   6)
27237* temporaries, lifetime of:              Temporaries.         (line   6)
27238* tgamma:                                Other Builtins.      (line   6)
27239* tgammaf:                               Other Builtins.      (line   6)
27240* tgammal:                               Other Builtins.      (line   6)
27241* Thread-Local Storage:                  Thread-Local.        (line   6)
27242* thunks:                                Nested Functions.    (line   6)
27243* tiny data section on the H8/300H and H8S: Function Attributes.
27244                                                              (line 514)
27245* TLS:                                   Thread-Local.        (line   6)
27246* tls_model attribute:                   Variable Attributes. (line 213)
27247* TMPDIR:                                Environment Variables.
27248                                                              (line  45)
27249* TMS320C3x/C4x Options:                 TMS320C3x/C4x Options.
27250                                                              (line   6)
27251* traditional C language:                C Dialect Options.   (line 189)
27252* treelang <1>:                          Standards.           (line 124)
27253* treelang:                              G++ and GCC.         (line   6)
27254* trunc:                                 Other Builtins.      (line   6)
27255* truncf:                                Other Builtins.      (line   6)
27256* truncl:                                Other Builtins.      (line   6)
27257* two-stage name lookup:                 Name lookup.         (line   6)
27258* type alignment:                        Alignment.           (line   6)
27259* type attributes:                       Type Attributes.     (line   6)
27260* type_info:                             Vague Linkage.       (line  43)
27261* typedef names as function parameters:  Incompatibilities.   (line  99)
27262* typeof:                                Typeof.              (line   6)
27263* ULL integer suffix:                    Long Long.           (line   6)
27264* Ultrix calling convention:             Interoperation.      (line 197)
27265* undefined behavior:                    Bug Criteria.        (line  17)
27266* undefined function value:              Bug Criteria.        (line  17)
27267* underscores in variables in macros:    Typeof.              (line  42)
27268* union:                                 Unnamed Fields.      (line   6)
27269* union, casting to a:                   Cast to Union.       (line   6)
27270* unions:                                Incompatibilities.   (line 148)
27271* unknown pragmas, warning:              Warning Options.     (line 427)
27272* unresolved references and -nodefaultlibs: Link Options.     (line  81)
27273* unresolved references and -nostdlib:   Link Options.        (line  81)
27274* unused attribute.:                     Function Attributes. (line 276)
27275* used attribute.:                       Function Attributes. (line 281)
27276* V in constraint:                       Simple Constraints.  (line  41)
27277* V850 Options:                          V850 Options.        (line   6)
27278* vague linkage:                         Vague Linkage.       (line   6)
27279* value after longjmp:                   Global Reg Vars.     (line  66)
27280* variable addressability on the IA-64:  Function Attributes. (line 539)
27281* variable addressability on the M32R/D: Variable Attributes. (line 277)
27282* variable alignment:                    Alignment.           (line   6)
27283* variable attributes:                   Variable Attributes. (line   6)
27284* variable number of arguments:          Variadic Macros.     (line   6)
27285* variable-length array scope:           Variable Length.     (line  23)
27286* variable-length arrays:                Variable Length.     (line   6)
27287* variables in specified registers:      Explicit Reg Vars.   (line   6)
27288* variables, local, in macros:           Typeof.              (line  42)
27289* variadic macros:                       Variadic Macros.     (line   6)
27290* VAX calling convention:                Interoperation.      (line 197)
27291* VAX options:                           VAX Options.         (line   6)
27292* vfprintf:                              Other Builtins.      (line   6)
27293* vfscanf:                               Other Builtins.      (line   6)
27294* visibility attribute:                  Function Attributes. (line 353)
27295* VLAs:                                  Variable Length.     (line   6)
27296* void pointers, arithmetic:             Pointer Arith.       (line   6)
27297* void, size of pointer to:              Pointer Arith.       (line   6)
27298* volatile access:                       Volatiles.           (line   6)
27299* volatile applied to function:          Function Attributes. (line   6)
27300* volatile read:                         Volatiles.           (line   6)
27301* volatile write:                        Volatiles.           (line   6)
27302* vprintf:                               Other Builtins.      (line   6)
27303* vscanf:                                Other Builtins.      (line   6)
27304* vsnprintf:                             Other Builtins.      (line   6)
27305* vsprintf:                              Other Builtins.      (line   6)
27306* vsscanf:                               Other Builtins.      (line   6)
27307* vtable:                                Vague Linkage.       (line  28)
27308* warn_unused_result attribute:          Function Attributes. (line 306)
27309* warning for comparison of signed and unsigned values: Warning Options.
27310                                                              (line 717)
27311* warning for overloaded virtual fn:     C++ Dialect Options. (line 353)
27312* warning for reordering of member initializers: C++ Dialect Options.
27313                                                              (line 281)
27314* warning for synthesized methods:       C++ Dialect Options. (line 383)
27315* warning for unknown pragmas:           Warning Options.     (line 427)
27316* warning messages:                      Warning Options.     (line   6)
27317* warnings from system headers:          Warning Options.     (line 548)
27318* warnings vs errors:                    Warnings and Errors. (line   6)
27319* weak attribute:                        Function Attributes. (line 323)
27320* whitespace:                            Incompatibilities.   (line 114)
27321* X in constraint:                       Simple Constraints.  (line 112)
27322* X3.159-1989:                           Standards.           (line   6)
27323* x86-64 Options:                        i386 and x86-64 Options.
27324                                                              (line   6)
27325* Xstormy16 Options:                     Xstormy16 Options.   (line   6)
27326* Xtensa Options:                        Xtensa Options.      (line   6)
27327* y0:                                    Other Builtins.      (line   6)
27328* y0f:                                   Other Builtins.      (line   6)
27329* y0l:                                   Other Builtins.      (line   6)
27330* y1:                                    Other Builtins.      (line   6)
27331* y1f:                                   Other Builtins.      (line   6)
27332* y1l:                                   Other Builtins.      (line   6)
27333* yn:                                    Other Builtins.      (line   6)
27334* ynf:                                   Other Builtins.      (line   6)
27335* ynl:                                   Other Builtins.      (line   6)
27336* zero-length arrays:                    Zero Length.         (line   6)
27337* zero-size structures:                  Empty Structures.    (line   6)
27338
27339
27340
27341Tag Table:
27342Node: Top2030
27343Node: G++ and GCC3712
27344Node: Standards5748
27345Node: Invoking GCC12910
27346Node: Option Summary16620
27347Node: Overall Options40553
27348Node: Invoking G++47682
27349Node: C Dialect Options49304
27350Node: C++ Dialect Options59990
27351Node: Objective-C Dialect Options76269
27352Node: Language Independent Options85342
27353Node: Warning Options87135
27354Node: Debugging Options125575
27355Node: Optimize Options146564
27356Node: Preprocessor Options199595
27357Ref: Wtrigraphs203620
27358Ref: dashMF208377
27359Ref: fdollars-in-identifiers216197
27360Node: Assembler Options224057
27361Node: Link Options224762
27362Ref: Link Options-Footnote-1233137
27363Node: Directory Options233471
27364Node: Spec Files238466
27365Node: Target Options257827
27366Node: Submodel Options259133
27367Node: M680x0 Options260841
27368Node: M68hc1x Options267891
27369Node: VAX Options269455
27370Node: SPARC Options270002
27371Node: ARM Options281801
27372Node: MN10300 Options294261
27373Node: M32R/D Options295319
27374Node: RS/6000 and PowerPC Options298920
27375Node: Darwin Options323029
27376Node: MIPS Options325126
27377Node: i386 and x86-64 Options336360
27378Node: HPPA Options354092
27379Node: Intel 960 Options361988
27380Node: DEC Alpha Options364944
27381Node: DEC Alpha/VMS Options376427
27382Node: H8/300 Options376817
27383Node: SH Options377882
27384Node: System V Options380252
27385Node: TMS320C3x/C4x Options381083
27386Node: V850 Options386608
27387Node: ARC Options389753
27388Node: NS32K Options390968
27389Node: AVR Options395506
27390Node: MCore Options397320
27391Node: IA-64 Options398338
27392Node: D30V Options401315
27393Node: S/390 and zSeries Options402571
27394Node: CRIS Options405911
27395Node: MMIX Options410142
27396Node: PDP-11 Options412623
27397Node: Xstormy16 Options414461
27398Node: FRV Options414750
27399Node: Xtensa Options418711
27400Node: Code Gen Options422547
27401Node: Environment Variables438183
27402Node: Precompiled Headers445832
27403Node: Running Protoize451064
27404Node: C Implementation457401
27405Node: Translation implementation458336
27406Node: Environment implementation458779
27407Node: Identifiers implementation459077
27408Node: Characters implementation459698
27409Node: Integers implementation461563
27410Node: Floating point implementation462526
27411Node: Arrays and pointers implementation464383
27412Ref: Arrays and pointers implementation-Footnote-1465692
27413Node: Hints implementation465816
27414Node: Structures unions enumerations and bit-fields implementation467263
27415Node: Qualifiers implementation468080
27416Node: Preprocessing directives implementation468401
27417Node: Library functions implementation470210
27418Node: Architecture implementation470542
27419Node: Locale-specific behavior implementation471117
27420Node: C Extensions471422
27421Node: Statement Exprs475524
27422Node: Local Labels479001
27423Node: Labels as Values481979
27424Ref: Labels as Values-Footnote-1484033
27425Node: Nested Functions484216
27426Node: Constructing Calls488082
27427Node: Typeof490418
27428Node: Lvalues493579
27429Node: Conditionals496079
27430Node: Long Long496971
27431Node: Complex498472
27432Node: Hex Floats501040
27433Node: Zero Length502075
27434Node: Empty Structures505352
27435Node: Variable Length505768
27436Node: Variadic Macros508535
27437Node: Escaped Newlines510917
27438Node: Subscripting511756
27439Node: Pointer Arith512479
27440Node: Initializers513047
27441Node: Compound Literals513543
27442Node: Designated Inits515705
27443Node: Case Ranges519360
27444Node: Cast to Union520043
27445Node: Mixed Declarations521139
27446Node: Function Attributes521645
27447Node: Attribute Syntax552738
27448Node: Function Prototypes563346
27449Node: C++ Comments565127
27450Node: Dollar Signs565646
27451Node: Character Escapes566111
27452Node: Alignment566405
27453Node: Variable Attributes567722
27454Node: Type Attributes580704
27455Node: Inline593419
27456Node: Extended Asm598123
27457Node: Constraints617160
27458Node: Simple Constraints618010
27459Node: Multi-Alternative624529
27460Node: Modifiers626246
27461Node: Machine Constraints628788
27462Node: Asm Labels650995
27463Node: Explicit Reg Vars652671
27464Node: Global Reg Vars654132
27465Node: Local Reg Vars658682
27466Node: Alternate Keywords660483
27467Node: Incomplete Enums661911
27468Node: Function Names662668
27469Node: Return Address664858
27470Node: Vector Extensions667653
27471Node: Other Builtins671255
27472Node: Target Builtins691341
27473Node: Alpha Built-in Functions691905
27474Node: ARM Built-in Functions694897
27475Node: X86 Built-in Functions701599
27476Node: PowerPC AltiVec Built-in Functions711998
27477Node: Pragmas813172
27478Node: ARM Pragmas813677
27479Node: RS/6000 and PowerPC Pragmas814295
27480Node: Darwin Pragmas815036
27481Node: Solaris Pragmas816103
27482Node: Tru64 Pragmas816677
27483Node: Unnamed Fields817429
27484Node: Thread-Local818522
27485Node: C99 Thread-Local Edits820606
27486Node: C++98 Thread-Local Edits822618
27487Node: C++ Extensions826063
27488Node: Min and Max827755
27489Node: Volatiles829138
27490Node: Restricted Pointers832504
27491Node: Vague Linkage834098
27492Node: C++ Interface837754
27493Ref: C++ Interface-Footnote-1842046
27494Node: Template Instantiation842183
27495Node: Bound member functions849195
27496Node: C++ Attributes850738
27497Node: Strong Using852378
27498Node: Offsetof853620
27499Node: Java Exceptions854236
27500Node: Deprecated Features855630
27501Node: Backwards Compatibility857633
27502Node: Objective-C858988
27503Node: Executing code before main859569
27504Node: What you can and what you cannot do in +load862175
27505Node: Type encoding864342
27506Node: Garbage Collection867585
27507Node: Constant string objects870209
27508Node: compatibility_alias872717
27509Node: Compatibility873595
27510Node: Gcov880162
27511Node: Gcov Intro880632
27512Node: Invoking Gcov883348
27513Node: Gcov and Optimization894693
27514Node: Gcov Data Files897346
27515Node: Trouble898460
27516Node: Actual Bugs900055
27517Node: Cross-Compiler Problems900973
27518Node: Interoperation902490
27519Node: External Bugs912575
27520Node: Incompatibilities914018
27521Node: Fixed Headers922325
27522Node: Standard Libraries924639
27523Node: Disappointments926011
27524Node: C++ Misunderstandings930492
27525Node: Static Definitions931311
27526Node: Name lookup932364
27527Ref: Name lookup-Footnote-1937141
27528Node: Temporaries937328
27529Node: Copy Assignment939304
27530Node: Protoize Caveats941111
27531Node: Non-bugs945075
27532Node: Warnings and Errors955258
27533Node: Bugs957022
27534Node: Bug Criteria957586
27535Node: Bug Reporting959796
27536Node: Service960188
27537Node: Contributing961007
27538Node: Funding961747
27539Node: GNU Project964236
27540Node: Copying964882
27541Node: GNU Free Documentation License984032
27542Node: Contributors1006428
27543Node: Option Index1033954
27544Node: Keyword Index1149646
27545
27546End Tag Table
27547