Work around MinGW mangling of "host:/path"
[msysgit/historical-msysgit.git] / mingw / info / gcc.info
blobc0b1a844ab60b03def64de2bab194f2a6e4f5043
1 This is doc/gcc.info, produced by makeinfo version 4.2 from
2 ../../gcc/gcc/doc/gcc.texi.
4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
7  Permission is granted to copy, distribute and/or modify this document
8 under the terms of the GNU Free Documentation License, Version 1.2 or
9 any later version published by the Free Software Foundation; with the
10 Invariant Sections being "GNU General Public License" and "Funding Free
11 Software", the Front-Cover texts being (a) (see below), and with the
12 Back-Cover Texts being (b) (see below).  A copy of the license is
13 included in the section entitled "GNU Free Documentation License".
15  (a) The FSF's Front-Cover Text is:
17  A GNU Manual
19  (b) The FSF's Back-Cover Text is:
21  You have freedom to copy and modify this GNU Manual, like GNU
22 software.  Copies published by the Free Software Foundation raise
23 funds for GNU development.
24 INFO-DIR-SECTION Programming
25 START-INFO-DIR-ENTRY
26 * gcc: (gcc).                  The GNU Compiler Collection.
27 END-INFO-DIR-ENTRY
28  This file documents the use of the GNU compilers.
30 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
31 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
33  Permission is granted to copy, distribute and/or modify this document
34 under the terms of the GNU Free Documentation License, Version 1.2 or
35 any later version published by the Free Software Foundation; with the
36 Invariant Sections being "GNU General Public License" and "Funding Free
37 Software", the Front-Cover texts being (a) (see below), and with the
38 Back-Cover Texts being (b) (see below).  A copy of the license is
39 included in the section entitled "GNU Free Documentation License".
41  (a) The FSF's Front-Cover Text is:
43  A GNU Manual
45  (b) The FSF's Back-Cover Text is:
47  You have freedom to copy and modify this GNU Manual, like GNU
48 software.  Copies published by the Free Software Foundation raise
49 funds for GNU development.
51 \x1f
52 File: gcc.info,  Node: Top,  Next: G++ and GCC,  Up: (DIR)
54 Introduction
55 ************
57  This manual documents how to use the GNU compilers, as well as their
58 features and incompatibilities, and how to report bugs.  It corresponds
59 to GCC version 3.4.2.  The internals of the GNU compilers, including
60 how to port them to new targets and some information about how to write
61 front ends for new languages, are documented in a separate manual.
62 *Note Introduction: (gccint)Top.
64 * Menu:
66 * G++ and GCC::     You can compile C or C++ programs.
67 * Standards::       Language standards supported by GCC.
68 * Invoking GCC::    Command options supported by `gcc'.
69 * C Implementation:: How GCC implements the ISO C specification.
70 * C Extensions::    GNU extensions to the C language family.
71 * C++ Extensions::  GNU extensions to the C++ language.
72 * Objective-C::     GNU Objective-C runtime features.
73 * Compatibility::   Binary Compatibility
74 * Gcov::            `gcov'---a test coverage program.
75 * Trouble::         If you have trouble using GCC.
76 * Bugs::            How, why and where to report bugs.
77 * Service::         How to find suppliers of support for GCC.
78 * Contributing::    How to contribute to testing and developing GCC.
80 * Funding::         How to help assure funding for free software.
81 * GNU Project::     The GNU Project and GNU/Linux.
83 * Copying::         GNU General Public License says
84                      how you can copy and share GCC.
85 * GNU Free Documentation License:: How you can copy and share this manual.
86 * Contributors::    People who have contributed to GCC.
88 * Option Index::    Index to command line options.
89 * Keyword Index::    Index of concepts and symbol names.
91 \x1f
92 File: gcc.info,  Node: G++ and GCC,  Next: Standards,  Prev: Top,  Up: Top
94 Programming Languages Supported by GCC
95 **************************************
97  GCC stands for "GNU Compiler Collection".  GCC is an integrated
98 distribution of compilers for several major programming languages.
99 These languages currently include C, C++, Objective-C, Java, Fortran,
100 and Ada.
102  The abbreviation "GCC" has multiple meanings in common use.  The
103 current official meaning is "GNU Compiler Collection", which refers
104 generically to the complete suite of tools.  The name historically stood
105 for "GNU C Compiler", and this usage is still common when the emphasis
106 is on compiling C programs.  Finally, the name is also used when
107 speaking of the "language-independent" component of GCC: code shared
108 among the compilers for all supported languages.
110  The language-independent component of GCC includes the majority of the
111 optimizers, as well as the "back ends" that generate machine code for
112 various processors.
114  The part of a compiler that is specific to a particular language is
115 called the "front end".  In addition to the front ends that are
116 integrated components of GCC, there are several other front ends that
117 are maintained separately.  These support languages such as Pascal,
118 Mercury, and COBOL.  To use these, they must be built together with GCC
119 proper.
121  Most of the compilers for languages other than C have their own names.
122 The C++ compiler is G++, the Ada compiler is GNAT, and so on.  When we
123 talk about compiling one of those languages, we might refer to that
124 compiler by its own name, or as GCC.  Either is correct.
126  Historically, compilers for many languages, including C++ and Fortran,
127 have been implemented as "preprocessors" which emit another high level
128 language such as C.  None of the compilers included in GCC are
129 implemented this way; they all generate machine code directly.  This
130 sort of preprocessor should not be confused with the "C preprocessor",
131 which is an integral feature of the C, C++, and Objective-C languages.
133 \x1f
134 File: gcc.info,  Node: Standards,  Next: Invoking GCC,  Prev: G++ and GCC,  Up: Top
136 Language Standards Supported by GCC
137 ***********************************
139  For each language compiled by GCC for which there is a standard, GCC
140 attempts to follow one or more versions of that standard, possibly with
141 some exceptions, and possibly with some extensions.
143  GCC supports three versions of the C standard, although support for
144 the most recent version is not yet complete.
146  The original ANSI C standard (X3.159-1989) was ratified in 1989 and
147 published in 1990.  This standard was ratified as an ISO standard
148 (ISO/IEC 9899:1990) later in 1990.  There were no technical differences
149 between these publications, although the sections of the ANSI standard
150 were renumbered and became clauses in the ISO standard.  This standard,
151 in both its forms, is commonly known as "C89", or occasionally as
152 "C90", from the dates of ratification.  The ANSI standard, but not the
153 ISO standard, also came with a Rationale document.  To select this
154 standard in GCC, use one of the options `-ansi', `-std=c89' or
155 `-std=iso9899:1990'; to obtain all the diagnostics required by the
156 standard, you should also specify `-pedantic' (or `-pedantic-errors' if
157 you want them to be errors rather than warnings).  *Note Options
158 Controlling C Dialect: C Dialect Options.
160  Errors in the 1990 ISO C standard were corrected in two Technical
161 Corrigenda published in 1994 and 1996.  GCC does not support the
162 uncorrected version.
164  An amendment to the 1990 standard was published in 1995.  This
165 amendment added digraphs and `__STDC_VERSION__' to the language, but
166 otherwise concerned the library.  This amendment is commonly known as
167 "AMD1"; the amended standard is sometimes known as "C94" or "C95".  To
168 select this standard in GCC, use the option `-std=iso9899:199409'
169 (with, as for other standard versions, `-pedantic' to receive all
170 required diagnostics).
172  A new edition of the ISO C standard was published in 1999 as ISO/IEC
173 9899:1999, and is commonly known as "C99".  GCC has incomplete support
174 for this standard version; see
175 `http://gcc.gnu.org/gcc-3.4/c99status.html' for details.  To select this
176 standard, use `-std=c99' or `-std=iso9899:1999'.  (While in
177 development, drafts of this standard version were referred to as "C9X".)
179  Errors in the 1999 ISO C standard were corrected in a Technical
180 Corrigendum published in 2001.  GCC does not support the uncorrected
181 version.
183  By default, GCC provides some extensions to the C language that on
184 rare occasions conflict with the C standard.  *Note Extensions to the C
185 Language Family: C Extensions.  Use of the `-std' options listed above
186 will disable these extensions where they conflict with the C standard
187 version selected.  You may also select an extended version of the C
188 language explicitly with `-std=gnu89' (for C89 with GNU extensions) or
189 `-std=gnu99' (for C99 with GNU extensions).  The default, if no C
190 language dialect options are given, is `-std=gnu89'; this will change to
191 `-std=gnu99' in some future release when the C99 support is complete.
192 Some features that are part of the C99 standard are accepted as
193 extensions in C89 mode.
195  The ISO C standard defines (in clause 4) two classes of conforming
196 implementation.  A "conforming hosted implementation" supports the
197 whole standard including all the library facilities; a "conforming
198 freestanding implementation" is only required to provide certain
199 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
200 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
201 also those in `<stdbool.h>' and `<stdint.h>'.  In addition, complex
202 types, added in C99, are not required for freestanding implementations.
203 The standard also defines two environments for programs, a
204 "freestanding environment", required of all implementations and which
205 may not have library facilities beyond those required of freestanding
206 implementations, where the handling of program startup and termination
207 are implementation-defined, and a "hosted environment", which is not
208 required, in which all the library facilities are provided and startup
209 is through a function `int main (void)' or `int main (int, char *[])'.
210 An OS kernel would be a freestanding environment; a program using the
211 facilities of an operating system would normally be in a hosted
212 implementation.
214  GCC aims towards being usable as a conforming freestanding
215 implementation, or as the compiler for a conforming hosted
216 implementation.  By default, it will act as the compiler for a hosted
217 implementation, defining `__STDC_HOSTED__' as `1' and presuming that
218 when the names of ISO C functions are used, they have the semantics
219 defined in the standard.  To make it act as a conforming freestanding
220 implementation for a freestanding environment, use the option
221 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
222 make assumptions about the meanings of function names from the standard
223 library, with exceptions noted below.  To build an OS kernel, you may
224 well still need to make your own arrangements for linking and startup.
225 *Note Options Controlling C Dialect: C Dialect Options.
227  GCC does not provide the library facilities required only of hosted
228 implementations, nor yet all the facilities required by C99 of
229 freestanding implementations; to use the facilities of a hosted
230 environment, you will need to find them elsewhere (for example, in the
231 GNU C library).  *Note Standard Libraries: Standard Libraries.
233  Most of the compiler support routines used by GCC are present in
234 `libgcc', but there are a few exceptions.  GCC requires the
235 freestanding environment provide `memcpy', `memmove', `memset' and
236 `memcmp'.  Some older ports of GCC are configured to use the BSD
237 `bcopy', `bzero' and `bcmp' functions instead, but this is deprecated
238 for new ports.  Finally, if `__builtin_trap' is used, and the target
239 does not implement the `trap' pattern, then GCC will emit a call to
240 `abort'.
242  For references to Technical Corrigenda, Rationale documents and
243 information concerning the history of C that is available online, see
244 `http://gcc.gnu.org/readings.html'
246  There is no formal written standard for Objective-C.  The most
247 authoritative manual is "Object-Oriented Programming and the
248 Objective-C Language", available at a number of web sites
250    * `http://developer.apple.com/techpubs/macosx/Cocoa/ObjectiveC/' is
251      a recent version
253    * `http://www.toodarkpark.org/computers/objc/' is an older example
255    * `http://www.gnustep.org' has additional useful information
257  There is no standard for treelang, which is a sample language front end
258 for GCC. Its only purpose is as a sample for people wishing to write a
259 new language for GCC. The language is documented in
260 `gcc/treelang/treelang.texi' which can be turned into info or HTML
261 format.
263  *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
264 conformance and compatibility of the Ada compiler.
266  *Note The GNU Fortran Language: (g77)Language, for details of the
267 Fortran language supported by GCC.
269  *Note Compatibility with the Java Platform: (gcj)Compatibility, for
270 details of compatibility between `gcj' and the Java Platform.
272 \x1f
273 File: gcc.info,  Node: Invoking GCC,  Next: C Implementation,  Prev: Standards,  Up: Top
275 GCC Command Options
276 *******************
278  When you invoke GCC, it normally does preprocessing, compilation,
279 assembly and linking.  The "overall options" allow you to stop this
280 process at an intermediate stage.  For example, the `-c' option says
281 not to run the linker.  Then the output consists of object files output
282 by the assembler.
284  Other options are passed on to one stage of processing.  Some options
285 control the preprocessor and others the compiler itself.  Yet other
286 options control the assembler and linker; most of these are not
287 documented here, since you rarely need to use any of them.
289  Most of the command line options that you can use with GCC are useful
290 for C programs; when an option is only useful with another language
291 (usually C++), the explanation says so explicitly.  If the description
292 for a particular option does not mention a source language, you can use
293 that option with all supported languages.
295  *Note Compiling C++ Programs: Invoking G++, for a summary of special
296 options for compiling C++ programs.
298  The `gcc' program accepts options and file names as operands.  Many
299 options have multi-letter names; therefore multiple single-letter
300 options may _not_ be grouped: `-dr' is very different from `-d -r'.
302  You can mix options and other arguments.  For the most part, the order
303 you use doesn't matter.  Order does matter when you use several options
304 of the same kind; for example, if you specify `-L' more than once, the
305 directories are searched in the order specified.
307  Many options have long names starting with `-f' or with `-W'--for
308 example, `-fforce-mem', `-fstrength-reduce', `-Wformat' and so on.
309 Most of these have both positive and negative forms; the negative form
310 of `-ffoo' would be `-fno-foo'.  This manual documents only one of
311 these two forms, whichever one is not the default.
313  *Note Option Index::, for an index to GCC's options.
315 * Menu:
317 * Option Summary::      Brief list of all options, without explanations.
318 * Overall Options::     Controlling the kind of output:
319                         an executable, object files, assembler files,
320                         or preprocessed source.
321 * Invoking G++::        Compiling C++ programs.
322 * C Dialect Options::   Controlling the variant of C language compiled.
323 * C++ Dialect Options:: Variations on C++.
324 * Objective-C Dialect Options:: Variations on Objective-C.
325 * Language Independent Options:: Controlling how diagnostics should be
326                         formatted.
327 * Warning Options::     How picky should the compiler be?
328 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
329 * Optimize Options::    How much optimization?
330 * Preprocessor Options:: Controlling header files and macro definitions.
331                          Also, getting dependency information for Make.
332 * Assembler Options::   Passing options to the assembler.
333 * Link Options::        Specifying libraries and so on.
334 * Directory Options::   Where to find header files and libraries.
335                         Where to find the compiler executable files.
336 * Spec Files::          How to pass switches to sub-processes.
337 * Target Options::      Running a cross-compiler, or an old version of GCC.
338 * Submodel Options::    Specifying minor hardware or convention variations,
339                         such as 68010 vs 68020.
340 * Code Gen Options::    Specifying conventions for function calls, data layout
341                         and register usage.
342 * Environment Variables:: Env vars that affect GCC.
343 * Precompiled Headers:: Compiling a header once, and using it many times.
344 * Running Protoize::    Automatically adding or removing function prototypes.
346 \x1f
347 File: gcc.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking GCC
349 Option Summary
350 ==============
352  Here is a summary of all the options, grouped by type.  Explanations
353 are in the following sections.
355 _Overall Options_
356      *Note Options Controlling the Kind of Output: Overall Options.
357           -c  -S  -E  -o FILE  -pipe  -pass-exit-codes  
358           -x LANGUAGE  -v  -###  --help  --target-help  --version
360 _C Language Options_
361      *Note Options Controlling C Dialect: C Dialect Options.
362           -ansi  -std=STANDARD  -aux-info FILENAME 
363           -fno-asm  -fno-builtin  -fno-builtin-FUNCTION 
364           -fhosted  -ffreestanding  -fms-extensions 
365           -trigraphs  -no-integrated-cpp  -traditional  -traditional-cpp 
366           -fallow-single-precision  -fcond-mismatch 
367           -fsigned-bitfields  -fsigned-char 
368           -funsigned-bitfields  -funsigned-char 
369           -fwritable-strings
371 _C++ Language Options_
372      *Note Options Controlling C++ Dialect: C++ Dialect Options.
373           -fabi-version=N  -fno-access-control  -fcheck-new 
374           -fconserve-space  -fno-const-strings 
375           -fno-elide-constructors 
376           -fno-enforce-eh-specs 
377           -ffor-scope  -fno-for-scope  -fno-gnu-keywords 
378           -fno-implicit-templates 
379           -fno-implicit-inline-templates 
380           -fno-implement-inlines  -fms-extensions 
381           -fno-nonansi-builtins  -fno-operator-names 
382           -fno-optional-diags  -fpermissive 
383           -frepo  -fno-rtti  -fstats  -ftemplate-depth-N 
384           -fuse-cxa-atexit  -fno-weak  -nostdinc++ 
385           -fno-default-inline  -Wabi  -Wctor-dtor-privacy 
386           -Wnon-virtual-dtor  -Wreorder 
387           -Weffc++  -Wno-deprecated 
388           -Wno-non-template-friend  -Wold-style-cast 
389           -Woverloaded-virtual  -Wno-pmf-conversions 
390           -Wsign-promo  -Wsynth
392 _Objective-C Language Options_
393      *Note Options Controlling Objective-C Dialect: Objective-C Dialect
394      Options.
395           -fconstant-string-class=CLASS-NAME 
396           -fgnu-runtime  -fnext-runtime 
397           -fno-nil-receivers 
398           -fobjc-exceptions 
399           -freplace-objc-classes 
400           -fzero-link 
401           -gen-decls 
402           -Wno-protocol  -Wselector -Wundeclared-selector
404 _Language Independent Options_
405      *Note Options to Control Diagnostic Messages Formatting: Language
406      Independent Options.
407           -fmessage-length=N  
408           -fdiagnostics-show-location=[once|every-line]
410 _Warning Options_
411      *Note Options to Request or Suppress Warnings: Warning Options.
412           -fsyntax-only  -pedantic  -pedantic-errors 
413           -w  -Wextra  -Wall  -Waggregate-return 
414           -Wcast-align  -Wcast-qual  -Wchar-subscripts  -Wcomment 
415           -Wconversion  -Wno-deprecated-declarations 
416           -Wdisabled-optimization  -Wno-div-by-zero  -Wendif-labels 
417           -Werror  -Werror-implicit-function-declaration 
418           -Wfloat-equal  -Wformat  -Wformat=2 
419           -Wno-format-extra-args -Wformat-nonliteral 
420           -Wformat-security  -Wformat-y2k 
421           -Wimplicit  -Wimplicit-function-declaration  -Wimplicit-int 
422           -Wimport  -Wno-import  -Winit-self  -Winline 
423           -Wno-invalid-offsetof  -Winvalid-pch 
424           -Wlarger-than-LEN  -Wlong-long 
425           -Wmain  -Wmissing-braces 
426           -Wmissing-format-attribute  -Wmissing-noreturn 
427           -Wno-multichar  -Wnonnull  -Wpacked  -Wpadded 
428           -Wparentheses  -Wpointer-arith  -Wredundant-decls 
429           -Wreturn-type  -Wsequence-point  -Wshadow 
430           -Wsign-compare  -Wstrict-aliasing 
431           -Wswitch  -Wswitch-default  -Wswitch-enum 
432           -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized 
433           -Wunknown-pragmas  -Wunreachable-code 
434           -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter 
435           -Wunused-value  -Wunused-variable  -Wwrite-strings
437 _C-only Warning Options_
438           -Wbad-function-cast  -Wmissing-declarations 
439           -Wmissing-prototypes  -Wnested-externs  -Wold-style-definition 
440           -Wstrict-prototypes  -Wtraditional 
441           -Wdeclaration-after-statement
443 _Debugging Options_
444      *Note Options for Debugging Your Program or GCC: Debugging Options.
445           -dLETTERS  -dumpspecs  -dumpmachine  -dumpversion 
446           -fdump-unnumbered  -fdump-translation-unit[-N] 
447           -fdump-class-hierarchy[-N] 
448           -fdump-tree-original[-N]  
449           -fdump-tree-optimized[-N] 
450           -fdump-tree-inlined[-N] 
451           -feliminate-dwarf2-dups -feliminate-unused-debug-types 
452           -feliminate-unused-debug-symbols -fmem-report -fprofile-arcs 
453           -frandom-seed=STRING -fsched-verbose=N 
454           -ftest-coverage  -ftime-report 
455           -g  -gLEVEL  -gcoff -gdwarf-2 
456           -ggdb  -gstabs  -gstabs+  -gvms  -gxcoff  -gxcoff+ 
457           -p  -pg  -print-file-name=LIBRARY  -print-libgcc-file-name 
458           -print-multi-directory  -print-multi-lib 
459           -print-prog-name=PROGRAM  -print-search-dirs  -Q 
460           -save-temps  -time
462 _Optimization Options_
463      *Note Options that Control Optimization: Optimize Options.
464           -falign-functions=N  -falign-jumps=N 
465           -falign-labels=N  -falign-loops=N  
466           -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize 
467           -fbranch-target-load-optimize2 -fcaller-saves  -fcprop-registers 
468           -fcse-follow-jumps  -fcse-skip-blocks  -fdata-sections 
469           -fdelayed-branch  -fdelete-null-pointer-checks 
470           -fexpensive-optimizations  -ffast-math  -ffloat-store 
471           -fforce-addr  -fforce-mem  -ffunction-sections 
472           -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las  -floop-optimize 
473           -fcrossjumping  -fif-conversion  -fif-conversion2 
474           -finline-functions  -finline-limit=N  -fkeep-inline-functions 
475           -fkeep-static-consts  -fmerge-constants  -fmerge-all-constants 
476           -fmove-all-movables  -fnew-ra  -fno-branch-count-reg 
477           -fno-default-inline  -fno-defer-pop 
478           -fno-function-cse  -fno-guess-branch-probability 
479           -fno-inline  -fno-math-errno  -fno-peephole  -fno-peephole2 
480           -funsafe-math-optimizations  -ffinite-math-only 
481           -fno-trapping-math  -fno-zero-initialized-in-bss 
482           -fomit-frame-pointer  -foptimize-register-move 
483           -foptimize-sibling-calls  -fprefetch-loop-arrays 
484           -fprofile-generate -fprofile-use 
485           -freduce-all-givs  -fregmove  -frename-registers 
486           -freorder-blocks  -freorder-functions 
487           -frerun-cse-after-loop  -frerun-loop-opt 
488           -frounding-math -fschedule-insns  -fschedule-insns2 
489           -fno-sched-interblock  -fno-sched-spec  -fsched-spec-load 
490           -fsched-spec-load-dangerous  
491           -fsched-stalled-insns=N -sched-stalled-insns-dep=N 
492           -fsched2-use-superblocks 
493           -fsched2-use-traces  -fsignaling-nans 
494           -fsingle-precision-constant  
495           -fstrength-reduce  -fstrict-aliasing  -ftracer  -fthread-jumps 
496           -funroll-all-loops  -funroll-loops  -fpeel-loops 
497           -funswitch-loops  -fold-unroll-loops  -fold-unroll-all-loops 
498           --param NAME=VALUE
499           -O  -O0  -O1  -O2  -O3  -Os
501 _Preprocessor Options_
502      *Note Options Controlling the Preprocessor: Preprocessor Options.
503           -AQUESTION=ANSWER 
504           -A-QUESTION[=ANSWER] 
505           -C  -dD  -dI  -dM  -dN 
506           -DMACRO[=DEFN]  -E  -H 
507           -idirafter DIR 
508           -include FILE  -imacros FILE 
509           -iprefix FILE  -iwithprefix DIR 
510           -iwithprefixbefore DIR  -isystem DIR 
511           -M  -MM  -MF  -MG  -MP  -MQ  -MT  -nostdinc  
512           -P  -fworking-directory  -remap 
513           -trigraphs  -undef  -UMACRO  -Wp,OPTION 
514           -Xpreprocessor OPTION
516 _Assembler Option_
517      *Note Passing Options to the Assembler: Assembler Options.
518           -Wa,OPTION  -Xassembler OPTION
520 _Linker Options_
521      *Note Options for Linking: Link Options.
522           OBJECT-FILE-NAME  -lLIBRARY 
523           -nostartfiles  -nodefaultlibs  -nostdlib -pie 
524           -s  -static  -static-libgcc  -shared  -shared-libgcc  -symbolic 
525           -Wl,OPTION  -Xlinker OPTION 
526           -u SYMBOL
528 _Directory Options_
529      *Note Options for Directory Search: Directory Options.
530           -BPREFIX  -IDIR  -I-  -LDIR  -specs=FILE
532 _Target Options_
533      *Note Target Options::.
534           -V VERSION  -b MACHINE
536 _Machine Dependent Options_
537      *Note Hardware Models and Configurations: Submodel Options.
539      _M680x0 Options_
540           -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040 
541           -m68060  -mcpu32  -m5200  -m68881  -mbitfield  -mc68000  -mc68020   
542           -mnobitfield  -mrtd  -mshort  -msoft-float  -mpcrel 
543           -malign-int  -mstrict-align  -msep-data  -mno-sep-data 
544           -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
546      _M68hc1x Options_
547           -m6811  -m6812  -m68hc11  -m68hc12   -m68hcs12 
548           -mauto-incdec  -minmax  -mlong-calls  -mshort 
549           -msoft-reg-count=COUNT
551      _VAX Options_
552           -mg  -mgnu  -munix
554      _SPARC Options_
555           -mcpu=CPU-TYPE 
556           -mtune=CPU-TYPE 
557           -mcmodel=CODE-MODEL 
558           -m32  -m64  -mapp-regs  -mno-app-regs 
559           -mfaster-structs  -mno-faster-structs 
560           -mflat  -mno-flat  -mfpu  -mno-fpu 
561           -mhard-float  -msoft-float 
562           -mhard-quad-float  -msoft-quad-float 
563           -mimpure-text  -mno-impure-text  -mlittle-endian 
564           -mstack-bias  -mno-stack-bias 
565           -munaligned-doubles  -mno-unaligned-doubles 
566           -mv8plus  -mno-v8plus  -mvis  -mno-vis 
567           -mcypress  -mf930  -mf934 
568           -msparclite  -msupersparc  -mv8
569           -threads -pthreads
571      _ARM Options_
572           -mapcs-frame  -mno-apcs-frame 
573           -mapcs-26  -mapcs-32 
574           -mapcs-stack-check  -mno-apcs-stack-check 
575           -mapcs-float  -mno-apcs-float 
576           -mapcs-reentrant  -mno-apcs-reentrant 
577           -msched-prolog  -mno-sched-prolog 
578           -mlittle-endian  -mbig-endian  -mwords-little-endian 
579           -malignment-traps  -mno-alignment-traps 
580           -msoft-float  -mhard-float  -mfpe 
581           -mthumb-interwork  -mno-thumb-interwork 
582           -mcpu=NAME  -march=NAME  -mfpe=NAME  
583           -mstructure-size-boundary=N 
584           -mabort-on-noreturn 
585           -mlong-calls  -mno-long-calls 
586           -msingle-pic-base  -mno-single-pic-base 
587           -mpic-register=REG 
588           -mnop-fun-dllimport 
589           -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns 
590           -mpoke-function-name 
591           -mthumb  -marm 
592           -mtpcs-frame  -mtpcs-leaf-frame 
593           -mcaller-super-interworking  -mcallee-super-interworking
595      _MN10300 Options_
596           -mmult-bug  -mno-mult-bug 
597           -mam33  -mno-am33 
598           -mam33-2  -mno-am33-2 
599           -mno-crt0  -mrelax
601      _M32R/D Options_
602           -m32r2 -m32rx -m32r 
603           -mdebug 
604           -malign-loops -mno-align-loops 
605           -missue-rate=NUMBER 
606           -mbranch-cost=NUMBER 
607           -mmodel=CODE-SIZE-MODEL-TYPE 
608           -msdata=SDATA-TYPE 
609           -mno-flush-func -mflush-func=NAME 
610           -mno-flush-trap -mflush-trap=NUMBER 
611           -G NUM
613      _RS/6000 and PowerPC Options_
614           -mcpu=CPU-TYPE 
615           -mtune=CPU-TYPE 
616           -mpower  -mno-power  -mpower2  -mno-power2 
617           -mpowerpc  -mpowerpc64  -mno-powerpc 
618           -maltivec  -mno-altivec 
619           -mpowerpc-gpopt  -mno-powerpc-gpopt 
620           -mpowerpc-gfxopt  -mno-powerpc-gfxopt 
621           -mnew-mnemonics  -mold-mnemonics 
622           -mfull-toc   -mminimal-toc  -mno-fp-in-toc  -mno-sum-in-toc 
623           -m64  -m32  -mxl-call  -mno-xl-call  -mpe 
624           -malign-power  -malign-natural 
625           -msoft-float  -mhard-float  -mmultiple  -mno-multiple 
626           -mstring  -mno-string  -mupdate  -mno-update 
627           -mfused-madd  -mno-fused-madd  -mbit-align  -mno-bit-align 
628           -mstrict-align  -mno-strict-align  -mrelocatable 
629           -mno-relocatable  -mrelocatable-lib  -mno-relocatable-lib 
630           -mtoc  -mno-toc  -mlittle  -mlittle-endian  -mbig  -mbig-endian 
631           -mdynamic-no-pic 
632           -mprioritize-restricted-insns=PRIORITY 
633           -msched-costly-dep=DEPENDENCE_TYPE 
634           -minsert-sched-nops=SCHEME 
635           -mcall-sysv  -mcall-netbsd 
636           -maix-struct-return  -msvr4-struct-return 
637           -mabi=altivec  -mabi=no-altivec 
638           -mabi=spe  -mabi=no-spe 
639           -misel=yes  -misel=no 
640           -mspe=yes  -mspe=no 
641           -mfloat-gprs=yes  -mfloat-gprs=no 
642           -mprototype  -mno-prototype 
643           -msim  -mmvme  -mads  -myellowknife  -memb  -msdata 
644           -msdata=OPT  -mvxworks  -mwindiss  -G NUM  -pthread
646      _Darwin Options_
647           -all_load  -allowable_client  -arch  -arch_errors_fatal 
648           -arch_only  -bind_at_load  -bundle  -bundle_loader 
649           -client_name  -compatibility_version  -current_version 
650           -dependency-file  -dylib_file  -dylinker_install_name 
651           -dynamic  -dynamiclib  -exported_symbols_list 
652           -filelist  -flat_namespace  -force_cpusubtype_ALL 
653           -force_flat_namespace  -headerpad_max_install_names 
654           -image_base  -init  -install_name  -keep_private_externs 
655           -multi_module  -multiply_defined  -multiply_defined_unused 
656           -noall_load  -nofixprebinding -nomultidefs  -noprebind  -noseglinkedit 
657           -pagezero_size  -prebind  -prebind_all_twolevel_modules 
658           -private_bundle  -read_only_relocs  -sectalign 
659           -sectobjectsymbols  -whyload  -seg1addr 
660           -sectcreate  -sectobjectsymbols  -sectorder 
661           -seg_addr_table  -seg_addr_table_filename  -seglinkedit 
662           -segprot  -segs_read_only_addr  -segs_read_write_addr 
663           -single_module  -static  -sub_library  -sub_umbrella 
664           -twolevel_namespace  -umbrella  -undefined 
665           -unexported_symbols_list  -weak_reference_mismatches 
666           -whatsloaded
668      _MIPS Options_
669           -EL  -EB  -march=ARCH  -mtune=ARCH 
670           -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips64 
671           -mips16  -mno-mips16  -mabi=ABI  -mabicalls  -mno-abicalls 
672           -mxgot  -mno-xgot  -membedded-pic  -mno-embedded-pic 
673           -mgp32  -mgp64  -mfp32  -mfp64  -mhard-float  -msoft-float 
674           -msingle-float  -mdouble-float  -mint64  -mlong64  -mlong32 
675           -GNUM  -membedded-data  -mno-embedded-data 
676           -muninit-const-in-rodata  -mno-uninit-const-in-rodata 
677           -msplit-addresses  -mno-split-addresses  
678           -mexplicit-relocs  -mno-explicit-relocs  
679           -mrnames  -mno-rnames 
680           -mcheck-zero-division  -mno-check-zero-division 
681           -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls 
682           -mmad  -mno-mad  -mfused-madd  -mno-fused-madd  -nocpp 
683           -mfix-sb1  -mno-fix-sb1  -mflush-func=FUNC 
684           -mno-flush-func  -mbranch-likely  -mno-branch-likely
686      _i386 and x86-64 Options_
687           -mtune=CPU-TYPE  -march=CPU-TYPE 
688           -mfpmath=UNIT 
689           -masm=DIALECT  -mno-fancy-math-387 
690           -mno-fp-ret-in-387  -msoft-float  -msvr3-shlib 
691           -mno-wide-multiply  -mrtd  -malign-double 
692           -mpreferred-stack-boundary=NUM 
693           -mmmx  -msse  -msse2 -msse3 -m3dnow 
694           -mthreads  -mno-align-stringops  -minline-all-stringops 
695           -mpush-args  -maccumulate-outgoing-args  -m128bit-long-double 
696           -m96bit-long-double  -mregparm=NUM  -momit-leaf-frame-pointer 
697           -mno-red-zone -mno-tls-direct-seg-refs 
698           -mcmodel=CODE-MODEL 
699           -m32  -m64 -mstack-arg-probe
701      _HPPA Options_
702           -march=ARCHITECTURE-TYPE 
703           -mbig-switch  -mdisable-fpregs  -mdisable-indexing 
704           -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld 
705           -mjump-in-delay -mlinker-opt -mlong-calls 
706           -mlong-load-store  -mno-big-switch  -mno-disable-fpregs 
707           -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas 
708           -mno-jump-in-delay  -mno-long-load-store 
709           -mno-portable-runtime  -mno-soft-float 
710           -mno-space-regs  -msoft-float  -mpa-risc-1-0 
711           -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime 
712           -mschedule=CPU-TYPE  -mspace-regs  -msio  -mwsio 
713           -nolibdld  -static  -threads
715      _Intel 960 Options_
716           -mCPU-TYPE  -masm-compat  -mclean-linkage 
717           -mcode-align  -mcomplex-addr  -mleaf-procedures 
718           -mic-compat  -mic2.0-compat  -mic3.0-compat 
719           -mintel-asm  -mno-clean-linkage  -mno-code-align 
720           -mno-complex-addr  -mno-leaf-procedures 
721           -mno-old-align  -mno-strict-align  -mno-tail-call 
722           -mnumerics  -mold-align  -msoft-float  -mstrict-align 
723           -mtail-call
725      _DEC Alpha Options_
726           -mno-fp-regs  -msoft-float  -malpha-as  -mgas 
727           -mieee  -mieee-with-inexact  -mieee-conformant 
728           -mfp-trap-mode=MODE  -mfp-rounding-mode=MODE 
729           -mtrap-precision=MODE  -mbuild-constants 
730           -mcpu=CPU-TYPE  -mtune=CPU-TYPE 
731           -mbwx  -mmax  -mfix  -mcix 
732           -mfloat-vax  -mfloat-ieee 
733           -mexplicit-relocs  -msmall-data  -mlarge-data 
734           -msmall-text  -mlarge-text 
735           -mmemory-latency=TIME
737      _DEC Alpha/VMS Options_
738           -mvms-return-codes
740      _H8/300 Options_
741           -mrelax  -mh  -ms  -mn  -mint32  -malign-300
743      _SH Options_
744           -m1  -m2  -m2e  -m3  -m3e 
745           -m4-nofpu  -m4-single-only  -m4-single  -m4 
746           -m5-64media  -m5-64media-nofpu 
747           -m5-32media  -m5-32media-nofpu 
748           -m5-compact  -m5-compact-nofpu 
749           -mb  -ml  -mdalign  -mrelax 
750           -mbigtable  -mfmovd  -mhitachi  -mnomacsave 
751           -mieee  -misize  -mpadstruct  -mspace 
752           -mprefergot  -musermode
754      _System V Options_
755           -Qy  -Qn  -YP,PATHS  -Ym,DIR
757      _ARC Options_
758           -EB  -EL 
759           -mmangle-cpu  -mcpu=CPU  -mtext=TEXT-SECTION 
760           -mdata=DATA-SECTION  -mrodata=READONLY-DATA-SECTION
762      _TMS320C3x/C4x Options_
763           -mcpu=CPU  -mbig  -msmall  -mregparm  -mmemparm 
764           -mfast-fix  -mmpyi  -mbk  -mti  -mdp-isr-reload 
765           -mrpts=COUNT  -mrptb  -mdb  -mloop-unsigned 
766           -mparallel-insns  -mparallel-mpy  -mpreserve-float
768      _V850 Options_
769           -mlong-calls  -mno-long-calls  -mep  -mno-ep 
770           -mprolog-function  -mno-prolog-function  -mspace 
771           -mtda=N  -msda=N  -mzda=N 
772           -mapp-regs  -mno-app-regs 
773           -mdisable-callt  -mno-disable-callt 
774           -mv850e1 
775           -mv850e 
776           -mv850  -mbig-switch
778      _NS32K Options_
779           -m32032  -m32332  -m32532  -m32081  -m32381 
780           -mmult-add  -mnomult-add  -msoft-float  -mrtd  -mnortd 
781           -mregparam  -mnoregparam  -msb  -mnosb 
782           -mbitfield  -mnobitfield  -mhimem  -mnohimem
784      _AVR Options_
785           -mmcu=MCU  -msize  -minit-stack=N  -mno-interrupts 
786           -mcall-prologues  -mno-tablejump  -mtiny-stack
788      _MCore Options_
789           -mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates 
790           -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields 
791           -m4byte-functions  -mno-4byte-functions  -mcallgraph-data 
792           -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim 
793           -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment
795      _MMIX Options_
796           -mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu 
797           -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols 
798           -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses 
799           -mno-base-addresses  -msingle-exit  -mno-single-exit
801      _IA-64 Options_
802           -mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic 
803           -mvolatile-asm-stop  -mb-step  -mregister-names  -mno-sdata 
804           -mconstant-gp  -mauto-pic  -minline-float-divide-min-latency 
805           -minline-float-divide-max-throughput 
806           -minline-int-divide-min-latency 
807           -minline-int-divide-max-throughput  -mno-dwarf2-asm 
808           -mfixed-range=REGISTER-RANGE
810      _D30V Options_
811           -mextmem  -mextmemory  -monchip  -mno-asm-optimize 
812           -masm-optimize  -mbranch-cost=N  -mcond-exec=N
814      _S/390 and zSeries Options_
815           -mtune=CPU-TYPE  -march=CPU-TYPE 
816           -mhard-float  -msoft-float  -mbackchain  -mno-backchain 
817           -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle 
818           -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch  -mfused-madd  -mno-fused-madd
820      _CRIS Options_
821           -mcpu=CPU  -march=CPU  -mtune=CPU 
822           -mmax-stack-frame=N  -melinux-stacksize=N 
823           -metrax4  -metrax100  -mpdebug  -mcc-init  -mno-side-effects 
824           -mstack-align  -mdata-align  -mconst-align 
825           -m32-bit  -m16-bit  -m8-bit  -mno-prologue-epilogue  -mno-gotplt 
826           -melf  -maout  -melinux  -mlinux  -sim  -sim2 
827           -mmul-bug-workaround  -mno-mul-bug-workaround
829      _PDP-11 Options_
830           -mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10 
831           -mbcopy  -mbcopy-builtin  -mint32  -mno-int16 
832           -mint16  -mno-int32  -mfloat32  -mno-float64 
833           -mfloat64  -mno-float32  -mabshi  -mno-abshi 
834           -mbranch-expensive  -mbranch-cheap 
835           -msplit  -mno-split  -munix-asm  -mdec-asm
837      _Xstormy16 Options_
838           -msim
840      _Xtensa Options_
841           -mconst16 -mno-const16 
842           -mfused-madd  -mno-fused-madd 
843           -mtext-section-literals  -mno-text-section-literals 
844           -mtarget-align  -mno-target-align 
845           -mlongcalls  -mno-longcalls
847      _FRV Options_
848           -mgpr-32  -mgpr-64  -mfpr-32  -mfpr-64 
849           -mhard-float  -msoft-float 
850           -malloc-cc  -mfixed-cc  -mdword  -mno-dword 
851           -mdouble  -mno-double 
852           -mmedia  -mno-media  -mmuladd  -mno-muladd 
853           -mlibrary-pic  -macc-4 -macc-8 
854           -mpack  -mno-pack  -mno-eflags  -mcond-move  -mno-cond-move 
855           -mscc  -mno-scc  -mcond-exec  -mno-cond-exec 
856           -mvliw-branch  -mno-vliw-branch 
857           -mmulti-cond-exec  -mno-multi-cond-exec  -mnested-cond-exec 
858           -mno-nested-cond-exec  -mtomcat-stats 
859           -mcpu=CPU
861 _Code Generation Options_
862      *Note Options for Code Generation Conventions: Code Gen Options.
863           -fcall-saved-REG  -fcall-used-REG 
864           -ffixed-REG  -fexceptions 
865           -fnon-call-exceptions  -funwind-tables 
866           -fasynchronous-unwind-tables 
867           -finhibit-size-directive  -finstrument-functions 
868           -fno-common  -fno-ident 
869           -fpcc-struct-return  -fpic  -fPIC -fpie -fPIE 
870           -freg-struct-return  -fshared-data  -fshort-enums 
871           -fshort-double  -fshort-wchar 
872           -fverbose-asm  -fpack-struct  -fstack-check 
873           -fstack-limit-register=REG  -fstack-limit-symbol=SYM 
874           -fargument-alias  -fargument-noalias 
875           -fargument-noalias-global  -fleading-underscore 
876           -ftls-model=MODEL 
877           -ftrapv  -fwrapv  -fbounds-check
879 * Menu:
881 * Overall Options::     Controlling the kind of output:
882                         an executable, object files, assembler files,
883                         or preprocessed source.
884 * C Dialect Options::   Controlling the variant of C language compiled.
885 * C++ Dialect Options:: Variations on C++.
886 * Objective-C Dialect Options:: Variations on Objective-C.
887 * Language Independent Options:: Controlling how diagnostics should be
888                         formatted.
889 * Warning Options::     How picky should the compiler be?
890 * Debugging Options::   Symbol tables, measurements, and debugging dumps.
891 * Optimize Options::    How much optimization?
892 * Preprocessor Options:: Controlling header files and macro definitions.
893                          Also, getting dependency information for Make.
894 * Assembler Options::   Passing options to the assembler.
895 * Link Options::        Specifying libraries and so on.
896 * Directory Options::   Where to find header files and libraries.
897                         Where to find the compiler executable files.
898 * Spec Files::          How to pass switches to sub-processes.
899 * Target Options::      Running a cross-compiler, or an old version of GCC.
901 \x1f
902 File: gcc.info,  Node: Overall Options,  Next: Invoking G++,  Prev: Option Summary,  Up: Invoking GCC
904 Options Controlling the Kind of Output
905 ======================================
907  Compilation can involve up to four stages: preprocessing, compilation
908 proper, assembly and linking, always in that order.  GCC is capable of
909 preprocessing and compiling several files either into several assembler
910 input files, or into one assembler input file; then each assembler
911 input file produces an object file, and linking combines all the object
912 files (those newly compiled, and those specified as input) into an
913 executable file.
915  For any given input file, the file name suffix determines what kind of
916 compilation is done:
918 `FILE.c'
919      C source code which must be preprocessed.
921 `FILE.i'
922      C source code which should not be preprocessed.
924 `FILE.ii'
925      C++ source code which should not be preprocessed.
927 `FILE.m'
928      Objective-C source code.  Note that you must link with the library
929      `libobjc.a' to make an Objective-C program work.
931 `FILE.mi'
932      Objective-C source code which should not be preprocessed.
934 `FILE.h'
935      C or C++ header file to be turned into a precompiled header.
937 `FILE.cc'
938 `FILE.cp'
939 `FILE.cxx'
940 `FILE.cpp'
941 `FILE.CPP'
942 `FILE.c++'
943 `FILE.C'
944      C++ source code which must be preprocessed.  Note that in `.cxx',
945      the last two letters must both be literally `x'.  Likewise, `.C'
946      refers to a literal capital C.
948 `FILE.hh'
949 `FILE.H'
950      C++ header file to be turned into a precompiled header.
952 `FILE.f'
953 `FILE.for'
954 `FILE.FOR'
955      Fortran source code which should not be preprocessed.
957 `FILE.F'
958 `FILE.fpp'
959 `FILE.FPP'
960      Fortran source code which must be preprocessed (with the
961      traditional preprocessor).
963 `FILE.r'
964      Fortran source code which must be preprocessed with a RATFOR
965      preprocessor (not included with GCC).
967      *Note Options Controlling the Kind of Output: (g77)Overall
968      Options, for more details of the handling of Fortran input files.
970 `FILE.ads'
971      Ada source code file which contains a library unit declaration (a
972      declaration of a package, subprogram, or generic, or a generic
973      instantiation), or a library unit renaming declaration (a package,
974      generic, or subprogram renaming declaration).  Such files are also
975      called "specs".
977 `FILE.adb'
978      Ada source code file containing a library unit body (a subprogram
979      or package body).  Such files are also called "bodies".
981 `FILE.s'
982      Assembler code.
984 `FILE.S'
985      Assembler code which must be preprocessed.
987 `OTHER'
988      An object file to be fed straight into linking.  Any file name
989      with no recognized suffix is treated this way.
991  You can specify the input language explicitly with the `-x' option:
993 `-x LANGUAGE'
994      Specify explicitly the LANGUAGE for the following input files
995      (rather than letting the compiler choose a default based on the
996      file name suffix).  This option applies to all following input
997      files until the next `-x' option.  Possible values for LANGUAGE
998      are:
999           c  c-header  cpp-output
1000           c++  c++-header  c++-cpp-output
1001           objective-c  objective-c-header  objc-cpp-output
1002           assembler  assembler-with-cpp
1003           ada
1004           f77  f77-cpp-input  ratfor
1005           java
1006           treelang
1008 `-x none'
1009      Turn off any specification of a language, so that subsequent files
1010      are handled according to their file name suffixes (as they are if
1011      `-x' has not been used at all).
1013 `-pass-exit-codes'
1014      Normally the `gcc' program will exit with the code of 1 if any
1015      phase of the compiler returns a non-success return code.  If you
1016      specify `-pass-exit-codes', the `gcc' program will instead return
1017      with numerically highest error produced by any phase that returned
1018      an error indication.
1020  If you only want some of the stages of compilation, you can use `-x'
1021 (or filename suffixes) to tell `gcc' where to start, and one of the
1022 options `-c', `-S', or `-E' to say where `gcc' is to stop.  Note that
1023 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1024 do nothing at all.
1026 `-c'
1027      Compile or assemble the source files, but do not link.  The linking
1028      stage simply is not done.  The ultimate output is in the form of an
1029      object file for each source file.
1031      By default, the object file name for a source file is made by
1032      replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1034      Unrecognized input files, not requiring compilation or assembly,
1035      are ignored.
1037 `-S'
1038      Stop after the stage of compilation proper; do not assemble.  The
1039      output is in the form of an assembler code file for each
1040      non-assembler input file specified.
1042      By default, the assembler file name for a source file is made by
1043      replacing the suffix `.c', `.i', etc., with `.s'.
1045      Input files that don't require compilation are ignored.
1047 `-E'
1048      Stop after the preprocessing stage; do not run the compiler
1049      proper.  The output is in the form of preprocessed source code,
1050      which is sent to the standard output.
1052      Input files which don't require preprocessing are ignored.
1054 `-o FILE'
1055      Place output in file FILE.  This applies regardless to whatever
1056      sort of output is being produced, whether it be an executable file,
1057      an object file, an assembler file or preprocessed C code.
1059      If you specify `-o' when compiling more than one input file, or
1060      you are producing an executable file as output, all the source
1061      files on the command line will be compiled at once.
1063      If `-o' is not specified, the default is to put an executable file
1064      in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1065      assembler file in `SOURCE.s', and all preprocessed C source on
1066      standard output.
1068 `-v'
1069      Print (on standard error output) the commands executed to run the
1070      stages of compilation.  Also print the version number of the
1071      compiler driver program and of the preprocessor and the compiler
1072      proper.
1074 `-###'
1075      Like `-v' except the commands are not executed and all command
1076      arguments are quoted.  This is useful for shell scripts to capture
1077      the driver-generated command lines.
1079 `-pipe'
1080      Use pipes rather than temporary files for communication between the
1081      various stages of compilation.  This fails to work on some systems
1082      where the assembler is unable to read from a pipe; but the GNU
1083      assembler has no trouble.
1085 `--help'
1086      Print (on the standard output) a description of the command line
1087      options understood by `gcc'.  If the `-v' option is also specified
1088      then `--help' will also be passed on to the various processes
1089      invoked by `gcc', so that they can display the command line options
1090      they accept.  If the `-Wextra' option is also specified then
1091      command line options which have no documentation associated with
1092      them will also be displayed.
1094 `--target-help'
1095      Print (on the standard output) a description of target specific
1096      command line options for each tool.
1098 `--version'
1099      Display the version number and copyrights of the invoked GCC.
1101 \x1f
1102 File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
1104 Compiling C++ Programs
1105 ======================
1107  C++ source files conventionally use one of the suffixes `.C', `.cc',
1108 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1109 `.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'.  GCC
1110 recognizes files with these names and compiles them as C++ programs
1111 even if you call the compiler the same way as for compiling C programs
1112 (usually with the name `gcc').
1114  However, C++ programs often require class libraries as well as a
1115 compiler that understands the C++ language--and under some
1116 circumstances, you might want to compile programs or header files from
1117 standard input, or otherwise without a suffix that flags them as C++
1118 programs.  You might also like to precompile a C header file with a
1119 `.h' extension to be used in C++ compilations.  `g++' is a program that
1120 calls GCC with the default language set to C++, and automatically
1121 specifies linking against the C++ library.  On many systems, `g++' is
1122 also installed with the name `c++'.
1124  When you compile C++ programs, you may specify many of the same
1125 command-line options that you use for compiling programs in any
1126 language; or command-line options meaningful for C and related
1127 languages; or options that are meaningful only for C++ programs.  *Note
1128 Options Controlling C Dialect: C Dialect Options, for explanations of
1129 options for languages related to C.  *Note Options Controlling C++
1130 Dialect: C++ Dialect Options, for explanations of options that are
1131 meaningful only for C++ programs.
1133 \x1f
1134 File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
1136 Options Controlling C Dialect
1137 =============================
1139  The following options control the dialect of C (or languages derived
1140 from C, such as C++ and Objective-C) that the compiler accepts:
1142 `-ansi'
1143      In C mode, support all ISO C90 programs.  In C++ mode, remove GNU
1144      extensions that conflict with ISO C++.
1146      This turns off certain features of GCC that are incompatible with
1147      ISO C90 (when compiling C code), or of standard C++ (when
1148      compiling C++ code), such as the `asm' and `typeof' keywords, and
1149      predefined macros such as `unix' and `vax' that identify the type
1150      of system you are using.  It also enables the undesirable and
1151      rarely used ISO trigraph feature.  For the C compiler, it disables
1152      recognition of C++ style `//' comments as well as the `inline'
1153      keyword.
1155      The alternate keywords `__asm__', `__extension__', `__inline__'
1156      and `__typeof__' continue to work despite `-ansi'.  You would not
1157      want to use them in an ISO C program, of course, but it is useful
1158      to put them in header files that might be included in compilations
1159      done with `-ansi'.  Alternate predefined macros such as `__unix__'
1160      and `__vax__' are also available, with or without `-ansi'.
1162      The `-ansi' option does not cause non-ISO programs to be rejected
1163      gratuitously.  For that, `-pedantic' is required in addition to
1164      `-ansi'.  *Note Warning Options::.
1166      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1167      is used.  Some header files may notice this macro and refrain from
1168      declaring certain functions or defining certain macros that the
1169      ISO standard doesn't call for; this is to avoid interfering with
1170      any programs that might use these names for other things.
1172      Functions which would normally be built in but do not have
1173      semantics defined by ISO C (such as `alloca' and `ffs') are not
1174      built-in functions with `-ansi' is used.  *Note Other built-in
1175      functions provided by GCC: Other Builtins, for details of the
1176      functions affected.
1178 `-std='
1179      Determine the language standard.  This option is currently only
1180      supported when compiling C or C++.  A value for this option must be
1181      provided; possible values are
1183     `c89'
1184     `iso9899:1990'
1185           ISO C90 (same as `-ansi').
1187     `iso9899:199409'
1188           ISO C90 as modified in amendment 1.
1190     `c99'
1191     `c9x'
1192     `iso9899:1999'
1193     `iso9899:199x'
1194           ISO C99.  Note that this standard is not yet fully supported;
1195           see `http://gcc.gnu.org/gcc-3.4/c99status.html' for more
1196           information.  The names `c9x' and `iso9899:199x' are
1197           deprecated.
1199     `gnu89'
1200           Default, ISO C90 plus GNU extensions (including some C99
1201           features).
1203     `gnu99'
1204     `gnu9x'
1205           ISO C99 plus GNU extensions.  When ISO C99 is fully
1206           implemented in GCC, this will become the default.  The name
1207           `gnu9x' is deprecated.
1209     `c++98'
1210           The 1998 ISO C++ standard plus amendments.
1212     `gnu++98'
1213           The same as `-std=c++98' plus GNU extensions.  This is the
1214           default for C++ code.
1216      Even when this option is not specified, you can still use some of
1217      the features of newer standards in so far as they do not conflict
1218      with previous C standards.  For example, you may use
1219      `__restrict__' even when `-std=c99' is not specified.
1221      The `-std' options specifying some version of ISO C have the same
1222      effects as `-ansi', except that features that were not in ISO C90
1223      but are in the specified version (for example, `//' comments and
1224      the `inline' keyword in ISO C99) are not disabled.
1226      *Note Language Standards Supported by GCC: Standards, for details
1227      of these standard versions.
1229 `-aux-info FILENAME'
1230      Output to the given filename prototyped declarations for all
1231      functions declared and/or defined in a translation unit, including
1232      those in header files.  This option is silently ignored in any
1233      language other than C.
1235      Besides declarations, the file indicates, in comments, the origin
1236      of each declaration (source file and line), whether the
1237      declaration was implicit, prototyped or unprototyped (`I', `N' for
1238      new or `O' for old, respectively, in the first character after the
1239      line number and the colon), and whether it came from a declaration
1240      or a definition (`C' or `F', respectively, in the following
1241      character).  In the case of function definitions, a K&R-style list
1242      of arguments followed by their declarations is also provided,
1243      inside comments, after the declaration.
1245 `-fno-asm'
1246      Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1247      code can use these words as identifiers.  You can use the keywords
1248      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
1249      `-fno-asm'.
1251      In C++, this switch only affects the `typeof' keyword, since `asm'
1252      and `inline' are standard keywords.  You may want to use the
1253      `-fno-gnu-keywords' flag instead, which has the same effect.  In
1254      C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1255      the `asm' and `typeof' keywords, since `inline' is a standard
1256      keyword in ISO C99.
1258 `-fno-builtin'
1259 `-fno-builtin-FUNCTION'
1260      Don't recognize built-in functions that do not begin with
1261      `__builtin_' as prefix.  *Note Other built-in functions provided
1262      by GCC: Other Builtins, for details of the functions affected,
1263      including those which are not built-in functions when `-ansi' or
1264      `-std' options for strict ISO C conformance are used because they
1265      do not have an ISO standard meaning.
1267      GCC normally generates special code to handle certain built-in
1268      functions more efficiently; for instance, calls to `alloca' may
1269      become single instructions that adjust the stack directly, and
1270      calls to `memcpy' may become inline copy loops.  The resulting
1271      code is often both smaller and faster, but since the function
1272      calls no longer appear as such, you cannot set a breakpoint on
1273      those calls, nor can you change the behavior of the functions by
1274      linking with a different library.
1276      With the `-fno-builtin-FUNCTION' option only the built-in function
1277      FUNCTION is disabled.  FUNCTION must not begin with `__builtin_'.
1278      If a function is named this is not built-in in this version of
1279      GCC, this option is ignored.  There is no corresponding
1280      `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1281      functions selectively when using `-fno-builtin' or
1282      `-ffreestanding', you may define macros such as:
1284           #define abs(n)          __builtin_abs ((n))
1285           #define strcpy(d, s)    __builtin_strcpy ((d), (s))
1287 `-fhosted'
1288      Assert that compilation takes place in a hosted environment.  This
1289      implies `-fbuiltin'.  A hosted environment is one in which the
1290      entire standard library is available, and in which `main' has a
1291      return type of `int'.  Examples are nearly everything except a
1292      kernel.  This is equivalent to `-fno-freestanding'.
1294 `-ffreestanding'
1295      Assert that compilation takes place in a freestanding environment.
1296      This implies `-fno-builtin'.  A freestanding environment is one
1297      in which the standard library may not exist, and program startup
1298      may not necessarily be at `main'.  The most obvious example is an
1299      OS kernel.  This is equivalent to `-fno-hosted'.
1301      *Note Language Standards Supported by GCC: Standards, for details
1302      of freestanding and hosted environments.
1304 `-fms-extensions'
1305      Accept some non-standard constructs used in Microsoft header files.
1307 `-trigraphs'
1308      Support ISO C trigraphs.  The `-ansi' option (and `-std' options
1309      for strict ISO C conformance) implies `-trigraphs'.
1311 `-no-integrated-cpp'
1312      Performs a compilation in two passes: preprocessing and compiling.
1313      This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1314      via the `-B' option. The user supplied compilation step can then
1315      add in an additional preprocessing step after normal preprocessing
1316      but before compiling. The default is to use the integrated cpp
1317      (internal cpp)
1319      The semantics of this option will change if "cc1", "cc1plus", and
1320      "cc1obj" are merged.
1322 `-traditional'
1323 `-traditional-cpp'
1324      Formerly, these options caused GCC to attempt to emulate a
1325      pre-standard C compiler.  They are now only supported with the
1326      `-E' switch.  The preprocessor continues to support a pre-standard
1327      mode.  See the GNU CPP manual for details.
1329 `-fcond-mismatch'
1330      Allow conditional expressions with mismatched types in the second
1331      and third arguments.  The value of such an expression is void.
1332      This option is not supported for C++.
1334 `-funsigned-char'
1335      Let the type `char' be unsigned, like `unsigned char'.
1337      Each kind of machine has a default for what `char' should be.  It
1338      is either like `unsigned char' by default or like `signed char' by
1339      default.
1341      Ideally, a portable program should always use `signed char' or
1342      `unsigned char' when it depends on the signedness of an object.
1343      But many programs have been written to use plain `char' and expect
1344      it to be signed, or expect it to be unsigned, depending on the
1345      machines they were written for.  This option, and its inverse, let
1346      you make such a program work with the opposite default.
1348      The type `char' is always a distinct type from each of `signed
1349      char' or `unsigned char', even though its behavior is always just
1350      like one of those two.
1352 `-fsigned-char'
1353      Let the type `char' be signed, like `signed char'.
1355      Note that this is equivalent to `-fno-unsigned-char', which is the
1356      negative form of `-funsigned-char'.  Likewise, the option
1357      `-fno-signed-char' is equivalent to `-funsigned-char'.
1359 `-fsigned-bitfields'
1360 `-funsigned-bitfields'
1361 `-fno-signed-bitfields'
1362 `-fno-unsigned-bitfields'
1363      These options control whether a bit-field is signed or unsigned,
1364      when the declaration does not use either `signed' or `unsigned'.
1365      By default, such a bit-field is signed, because this is
1366      consistent: the basic integer types such as `int' are signed types.
1368 `-fwritable-strings'
1369      Store string constants in the writable data segment and don't
1370      uniquize them.  This is for compatibility with old programs which
1371      assume they can write into string constants.
1373      Writing into string constants is a very bad idea; "constants"
1374      should be constant.
1376      This option is deprecated.
1378 \x1f
1379 File: gcc.info,  Node: C++ Dialect Options,  Next: Objective-C Dialect Options,  Prev: C Dialect Options,  Up: Invoking GCC
1381 Options Controlling C++ Dialect
1382 ===============================
1384  This section describes the command-line options that are only
1385 meaningful for C++ programs; but you can also use most of the GNU
1386 compiler options regardless of what language your program is in.  For
1387 example, you might compile a file `firstClass.C' like this:
1389      g++ -g -frepo -O -c firstClass.C
1391 In this example, only `-frepo' is an option meant only for C++
1392 programs; you can use the other options with any language supported by
1393 GCC.
1395  Here is a list of options that are _only_ for compiling C++ programs:
1397 `-fabi-version=N'
1398      Use version N of the C++ ABI.  Version 2 is the version of the C++
1399      ABI that first appeared in G++ 3.4.  Version 1 is the version of
1400      the C++ ABI that first appeared in G++ 3.2.  Version 0 will always
1401      be the version that conforms most closely to the C++ ABI
1402      specification.  Therefore, the ABI obtained using version 0 will
1403      change as ABI bugs are fixed.
1405      The default is version 2.
1407 `-fno-access-control'
1408      Turn off all access checking.  This switch is mainly useful for
1409      working around bugs in the access control code.
1411 `-fcheck-new'
1412      Check that the pointer returned by `operator new' is non-null
1413      before attempting to modify the storage allocated.  This check is
1414      normally unnecessary because the C++ standard specifies that
1415      `operator new' will only return `0' if it is declared `throw()',
1416      in which case the compiler will always check the return value even
1417      without this option.  In all other cases, when `operator new' has
1418      a non-empty exception specification, memory exhaustion is
1419      signalled by throwing `std::bad_alloc'.  See also `new (nothrow)'.
1421 `-fconserve-space'
1422      Put uninitialized or runtime-initialized global variables into the
1423      common segment, as C does.  This saves space in the executable at
1424      the cost of not diagnosing duplicate definitions.  If you compile
1425      with this flag and your program mysteriously crashes after
1426      `main()' has completed, you may have an object that is being
1427      destroyed twice because two definitions were merged.
1429      This option is no longer useful on most targets, now that support
1430      has been added for putting variables into BSS without making them
1431      common.
1433 `-fno-const-strings'
1434      Give string constants type `char *' instead of type `const char
1435      *'.  By default, G++ uses type `const char *' as required by the
1436      standard.  Even if you use `-fno-const-strings', you cannot
1437      actually modify the value of a string constant, unless you also use
1438      `-fwritable-strings'.
1440      This option might be removed in a future release of G++.  For
1441      maximum portability, you should structure your code so that it
1442      works with string constants that have type `const char *'.
1444 `-fno-elide-constructors'
1445      The C++ standard allows an implementation to omit creating a
1446      temporary which is only used to initialize another object of the
1447      same type.  Specifying this option disables that optimization, and
1448      forces G++ to call the copy constructor in all cases.
1450 `-fno-enforce-eh-specs'
1451      Don't check for violation of exception specifications at runtime.
1452      This option violates the C++ standard, but may be useful for
1453      reducing code size in production builds, much like defining
1454      `NDEBUG'.  The compiler will still optimize based on the exception
1455      specifications.
1457 `-ffor-scope'
1458 `-fno-for-scope'
1459      If `-ffor-scope' is specified, the scope of variables declared in
1460      a for-init-statement is limited to the `for' loop itself, as
1461      specified by the C++ standard.  If `-fno-for-scope' is specified,
1462      the scope of variables declared in a for-init-statement extends to
1463      the end of the enclosing scope, as was the case in old versions of
1464      G++, and other (traditional) implementations of C++.
1466      The default if neither flag is given to follow the standard, but
1467      to allow and give a warning for old-style code that would
1468      otherwise be invalid, or have different behavior.
1470 `-fno-gnu-keywords'
1471      Do not recognize `typeof' as a keyword, so that code can use this
1472      word as an identifier.  You can use the keyword `__typeof__'
1473      instead.  `-ansi' implies `-fno-gnu-keywords'.
1475 `-fno-implicit-templates'
1476      Never emit code for non-inline templates which are instantiated
1477      implicitly (i.e. by use); only emit code for explicit
1478      instantiations.  *Note Template Instantiation::, for more
1479      information.
1481 `-fno-implicit-inline-templates'
1482      Don't emit code for implicit instantiations of inline templates,
1483      either.  The default is to handle inlines differently so that
1484      compiles with and without optimization will need the same set of
1485      explicit instantiations.
1487 `-fno-implement-inlines'
1488      To save space, do not emit out-of-line copies of inline functions
1489      controlled by `#pragma implementation'.  This will cause linker
1490      errors if these functions are not inlined everywhere they are
1491      called.
1493 `-fms-extensions'
1494      Disable pedantic warnings about constructs used in MFC, such as
1495      implicit int and getting a pointer to member function via
1496      non-standard syntax.
1498 `-fno-nonansi-builtins'
1499      Disable built-in declarations of functions that are not mandated by
1500      ANSI/ISO C.  These include `ffs', `alloca', `_exit', `index',
1501      `bzero', `conjf', and other related functions.
1503 `-fno-operator-names'
1504      Do not treat the operator name keywords `and', `bitand', `bitor',
1505      `compl', `not', `or' and `xor' as synonyms as keywords.
1507 `-fno-optional-diags'
1508      Disable diagnostics that the standard says a compiler does not
1509      need to issue.  Currently, the only such diagnostic issued by G++
1510      is the one for a name having multiple meanings within a class.
1512 `-fpermissive'
1513      Downgrade some diagnostics about nonconformant code from errors to
1514      warnings.  Thus, using `-fpermissive' will allow some
1515      nonconforming code to compile.
1517 `-frepo'
1518      Enable automatic template instantiation at link time.  This option
1519      also implies `-fno-implicit-templates'.  *Note Template
1520      Instantiation::, for more information.
1522 `-fno-rtti'
1523      Disable generation of information about every class with virtual
1524      functions for use by the C++ runtime type identification features
1525      (`dynamic_cast' and `typeid').  If you don't use those parts of
1526      the language, you can save some space by using this flag.  Note
1527      that exception handling uses the same information, but it will
1528      generate it as needed.
1530 `-fstats'
1531      Emit statistics about front-end processing at the end of the
1532      compilation.  This information is generally only useful to the G++
1533      development team.
1535 `-ftemplate-depth-N'
1536      Set the maximum instantiation depth for template classes to N.  A
1537      limit on the template instantiation depth is needed to detect
1538      endless recursions during template class instantiation.  ANSI/ISO
1539      C++ conforming programs must not rely on a maximum depth greater
1540      than 17.
1542 `-fuse-cxa-atexit'
1543      Register destructors for objects with static storage duration with
1544      the `__cxa_atexit' function rather than the `atexit' function.
1545      This option is required for fully standards-compliant handling of
1546      static destructors, but will only work if your C library supports
1547      `__cxa_atexit'.
1549 `-fno-weak'
1550      Do not use weak symbol support, even if it is provided by the
1551      linker.  By default, G++ will use weak symbols if they are
1552      available.  This option exists only for testing, and should not be
1553      used by end-users; it will result in inferior code and has no
1554      benefits.  This option may be removed in a future release of G++.
1556 `-nostdinc++'
1557      Do not search for header files in the standard directories
1558      specific to C++, but do still search the other standard
1559      directories.  (This option is used when building the C++ library.)
1561  In addition, these optimization, warning, and code generation options
1562 have meanings only for C++ programs:
1564 `-fno-default-inline'
1565      Do not assume `inline' for functions defined inside a class scope.
1566      *Note Options That Control Optimization: Optimize Options.  Note
1567      that these functions will have linkage like inline functions; they
1568      just won't be inlined by default.
1570 `-Wabi (C++ only)'
1571      Warn when G++ generates code that is probably not compatible with
1572      the vendor-neutral C++ ABI.  Although an effort has been made to
1573      warn about all such cases, there are probably some cases that are
1574      not warned about, even though G++ is generating incompatible code.
1575      There may also be cases where warnings are emitted even though
1576      the code that is generated will be compatible.
1578      You should rewrite your code to avoid these warnings if you are
1579      concerned about the fact that code generated by G++ may not be
1580      binary compatible with code generated by other compilers.
1582      The known incompatibilities at this point include:
1584         * Incorrect handling of tail-padding for bit-fields.  G++ may
1585           attempt to pack data into the same byte as a base class.  For
1586           example:
1588                struct A { virtual void f(); int f1 : 1; };
1589                struct B : public A { int f2 : 1; };
1591           In this case, G++ will place `B::f2' into the same byte
1592           as`A::f1'; other compilers will not.  You can avoid this
1593           problem by explicitly padding `A' so that its size is a
1594           multiple of the byte size on your platform; that will cause
1595           G++ and other compilers to layout `B' identically.
1597         * Incorrect handling of tail-padding for virtual bases.  G++
1598           does not use tail padding when laying out virtual bases.  For
1599           example:
1601                struct A { virtual void f(); char c1; };
1602                struct B { B(); char c2; };
1603                struct C : public A, public virtual B {};
1605           In this case, G++ will not place `B' into the tail-padding for
1606           `A'; other compilers will.  You can avoid this problem by
1607           explicitly padding `A' so that its size is a multiple of its
1608           alignment (ignoring virtual base classes); that will cause
1609           G++ and other compilers to layout `C' identically.
1611         * Incorrect handling of bit-fields with declared widths greater
1612           than that of their underlying types, when the bit-fields
1613           appear in a union.  For example:
1615                union U { int i : 4096; };
1617           Assuming that an `int' does not have 4096 bits, G++ will make
1618           the union too small by the number of bits in an `int'.
1620         * Empty classes can be placed at incorrect offsets.  For
1621           example:
1623                struct A {};
1624                
1625                struct B {
1626                  A a;
1627                  virtual void f ();
1628                };
1629                
1630                struct C : public B, public A {};
1632           G++ will place the `A' base class of `C' at a nonzero offset;
1633           it should be placed at offset zero.  G++ mistakenly believes
1634           that the `A' data member of `B' is already at offset zero.
1636         * Names of template functions whose types involve `typename' or
1637           template template parameters can be mangled incorrectly.
1639                template <typename Q>
1640                void f(typename Q::X) {}
1641                
1642                template <template <typename> class Q>
1643                void f(typename Q<int>::X) {}
1645           Instantiations of these templates may be mangled incorrectly.
1648 `-Wctor-dtor-privacy (C++ only)'
1649      Warn when a class seems unusable because all the constructors or
1650      destructors in that class are private, and it has neither friends
1651      nor public static member functions.
1653 `-Wnon-virtual-dtor (C++ only)'
1654      Warn when a class appears to be polymorphic, thereby requiring a
1655      virtual destructor, yet it declares a non-virtual one.  This
1656      warning is enabled by `-Wall'.
1658 `-Wreorder (C++ only)'
1659      Warn when the order of member initializers given in the code does
1660      not match the order in which they must be executed.  For instance:
1662           struct A {
1663             int i;
1664             int j;
1665             A(): j (0), i (1) { }
1666           };
1668      The compiler will rearrange the member initializers for `i' and
1669      `j' to match the declaration order of the members, emitting a
1670      warning to that effect.  This warning is enabled by `-Wall'.
1672  The following `-W...' options are not affected by `-Wall'.
1674 `-Weffc++ (C++ only)'
1675      Warn about violations of the following style guidelines from Scott
1676      Meyers' `Effective C++' book:
1678         * Item 11:  Define a copy constructor and an assignment
1679           operator for classes with dynamically allocated memory.
1681         * Item 12:  Prefer initialization to assignment in constructors.
1683         * Item 14:  Make destructors virtual in base classes.
1685         * Item 15:  Have `operator=' return a reference to `*this'.
1687         * Item 23:  Don't try to return a reference when you must
1688           return an object.
1691      Also warn about violations of the following style guidelines from
1692      Scott Meyers' `More Effective C++' book:
1694         * Item 6:  Distinguish between prefix and postfix forms of
1695           increment and decrement operators.
1697         * Item 7:  Never overload `&&', `||', or `,'.
1700      When selecting this option, be aware that the standard library
1701      headers do not obey all of these guidelines; use `grep -v' to
1702      filter out those warnings.
1704 `-Wno-deprecated (C++ only)'
1705      Do not warn about usage of deprecated features.  *Note Deprecated
1706      Features::.
1708 `-Wno-non-template-friend (C++ only)'
1709      Disable warnings when non-templatized friend functions are declared
1710      within a template.  Since the advent of explicit template
1711      specification support in G++, if the name of the friend is an
1712      unqualified-id (i.e., `friend foo(int)'), the C++ language
1713      specification demands that the friend declare or define an
1714      ordinary, nontemplate function.  (Section 14.5.3).  Before G++
1715      implemented explicit specification, unqualified-ids could be
1716      interpreted as a particular specialization of a templatized
1717      function.  Because this non-conforming behavior is no longer the
1718      default behavior for G++, `-Wnon-template-friend' allows the
1719      compiler to check existing code for potential trouble spots and is
1720      on by default.  This new compiler behavior can be turned off with
1721      `-Wno-non-template-friend' which keeps the conformant compiler code
1722      but disables the helpful warning.
1724 `-Wold-style-cast (C++ only)'
1725      Warn if an old-style (C-style) cast to a non-void type is used
1726      within a C++ program.  The new-style casts (`static_cast',
1727      `reinterpret_cast', and `const_cast') are less vulnerable to
1728      unintended effects and much easier to search for.
1730 `-Woverloaded-virtual (C++ only)'
1731      Warn when a function declaration hides virtual functions from a
1732      base class.  For example, in:
1734           struct A {
1735             virtual void f();
1736           };
1737           
1738           struct B: public A {
1739             void f(int);
1740           };
1742      the `A' class version of `f' is hidden in `B', and code like:
1744           B* b;
1745           b->f();
1747      will fail to compile.
1749 `-Wno-pmf-conversions (C++ only)'
1750      Disable the diagnostic for converting a bound pointer to member
1751      function to a plain pointer.
1753 `-Wsign-promo (C++ only)'
1754      Warn when overload resolution chooses a promotion from unsigned or
1755      enumerated type to a signed type, over a conversion to an unsigned
1756      type of the same size.  Previous versions of G++ would try to
1757      preserve unsignedness, but the standard mandates the current
1758      behavior.
1760 `-Wsynth (C++ only)'
1761      Warn when G++'s synthesis behavior does not match that of cfront.
1762      For instance:
1764           struct A {
1765             operator int ();
1766             A& operator = (int);
1767           };
1768           
1769           main ()
1770           {
1771             A a,b;
1772             a = b;
1773           }
1775      In this example, G++ will synthesize a default `A& operator =
1776      (const A&);', while cfront will use the user-defined `operator ='.
1778 \x1f
1779 File: gcc.info,  Node: Objective-C Dialect Options,  Next: Language Independent Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
1781 Options Controlling Objective-C Dialect
1782 =======================================
1784  (NOTE: This manual does not describe the Objective-C language itself.
1785 See `http://gcc.gnu.org/readings.html' for references.)
1787  This section describes the command-line options that are only
1788 meaningful for Objective-C programs, but you can also use most of the
1789 GNU compiler options regardless of what language your program is in.
1790 For example, you might compile a file `some_class.m' like this:
1792      gcc -g -fgnu-runtime -O -c some_class.m
1794 In this example, `-fgnu-runtime' is an option meant only for
1795 Objective-C programs; you can use the other options with any language
1796 supported by GCC.
1798  Here is a list of options that are _only_ for compiling Objective-C
1799 programs:
1801 `-fconstant-string-class=CLASS-NAME'
1802      Use CLASS-NAME as the name of the class to instantiate for each
1803      literal string specified with the syntax `@"..."'.  The default
1804      class name is `NXConstantString' if the GNU runtime is being used,
1805      and `NSConstantString' if the NeXT runtime is being used (see
1806      below).  The `-fconstant-cfstrings' option, if also present, will
1807      override the `-fconstant-string-class' setting and cause `@"..."'
1808      literals to be laid out as constant CoreFoundation strings.
1810 `-fgnu-runtime'
1811      Generate object code compatible with the standard GNU Objective-C
1812      runtime.  This is the default for most types of systems.
1814 `-fnext-runtime'
1815      Generate output compatible with the NeXT runtime.  This is the
1816      default for NeXT-based systems, including Darwin and Mac OS X.
1817      The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
1818      option is used.
1820 `-fno-nil-receivers'
1821      Assume that all Objective-C message dispatches (e.g., `[receiver
1822      message:arg]') in this translation unit ensure that the receiver
1823      is not `nil'.  This allows for more efficient entry points in the
1824      runtime to be used.  Currently, this option is only available in
1825      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1827 `-fobjc-exceptions'
1828      Enable syntactic support for structured exception handling in
1829      Objective-C, similar to what is offered by C++ and Java.
1830      Currently, this option is only available in conjunction with the
1831      NeXT runtime on Mac OS X 10.3 and later.
1833             @try {
1834               ...
1835                  @throw expr;
1836               ...
1837             }
1838             @catch (AnObjCClass *exc) {
1839               ...
1840                 @throw expr;
1841               ...
1842                 @throw;
1843               ...
1844             }
1845             @catch (AnotherClass *exc) {
1846               ...
1847             }
1848             @catch (id allOthers) {
1849               ...
1850             }
1851             @finally {
1852               ...
1853                 @throw expr;
1854               ...
1855             }
1857      The `@throw' statement may appear anywhere in an Objective-C or
1858      Objective-C++ program; when used inside of a `@catch' block, the
1859      `@throw' may appear without an argument (as shown above), in which
1860      case the object caught by the `@catch' will be rethrown.
1862      Note that only (pointers to) Objective-C objects may be thrown and
1863      caught using this scheme.  When an object is thrown, it will be
1864      caught by the nearest `@catch' clause capable of handling objects
1865      of that type, analogously to how `catch' blocks work in C++ and
1866      Java.  A `@catch(id ...)' clause (as shown above) may also be
1867      provided to catch any and all Objective-C exceptions not caught by
1868      previous `@catch' clauses (if any).
1870      The `@finally' clause, if present, will be executed upon exit from
1871      the immediately preceding `@try ... @catch' section.  This will
1872      happen regardless of whether any exceptions are thrown, caught or
1873      rethrown inside the `@try ... @catch' section, analogously to the
1874      behavior of the `finally' clause in Java.
1876      There are several caveats to using the new exception mechanism:
1878         * Although currently designed to be binary compatible with
1879           `NS_HANDLER'-style idioms provided by the `NSException'
1880           class, the new exceptions can only be used on Mac OS X 10.3
1881           (Panther) and later systems, due to additional functionality
1882           needed in the (NeXT) Objective-C runtime.
1884         * As mentioned above, the new exceptions do not support handling
1885           types other than Objective-C objects.   Furthermore, when
1886           used from Objective-C++, the Objective-C exception model does
1887           not interoperate with C++ exceptions at this time.  This
1888           means you cannot `@throw' an exception from Objective-C and
1889           `catch' it in C++, or vice versa (i.e., `throw ... @catch').
1891      The `-fobjc-exceptions' switch also enables the use of
1892      synchronization blocks for thread-safe execution:
1894             @synchronized (ObjCClass *guard) {
1895               ...
1896             }
1898      Upon entering the `@synchronized' block, a thread of execution
1899      shall first check whether a lock has been placed on the
1900      corresponding `guard' object by another thread.  If it has, the
1901      current thread shall wait until the other thread relinquishes its
1902      lock.  Once `guard' becomes available, the current thread will
1903      place its own lock on it, execute the code contained in the
1904      `@synchronized' block, and finally relinquish the lock (thereby
1905      making `guard' available to other threads).
1907      Unlike Java, Objective-C does not allow for entire methods to be
1908      marked `@synchronized'.  Note that throwing exceptions out of
1909      `@synchronized' blocks is allowed, and will cause the guarding
1910      object to be unlocked properly.
1912 `-freplace-objc-classes'
1913      Emit a special marker instructing `ld(1)' not to statically link in
1914      the resulting object file, and allow `dyld(1)' to load it in at
1915      run time instead.  This is used in conjunction with the
1916      Fix-and-Continue debugging mode, where the object file in question
1917      may be recompiled and dynamically reloaded in the course of
1918      program execution, without the need to restart the program itself.
1919      Currently, Fix-and-Continue functionality is only available in
1920      conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1922 `-fzero-link'
1923      When compiling for the NeXT runtime, the compiler ordinarily
1924      replaces calls to `objc_getClass("...")' (when the name of the
1925      class is known at compile time) with static class references that
1926      get initialized at load time, which improves run-time performance.
1927      Specifying the `-fzero-link' flag suppresses this behavior and
1928      causes calls to `objc_getClass("...")' to be retained.  This is
1929      useful in Zero-Link debugging mode, since it allows for individual
1930      class implementations to be modified during program execution.
1932 `-gen-decls'
1933      Dump interface declarations for all classes seen in the source
1934      file to a file named `SOURCENAME.decl'.
1936 `-Wno-protocol'
1937      If a class is declared to implement a protocol, a warning is
1938      issued for every method in the protocol that is not implemented by
1939      the class.  The default behavior is to issue a warning for every
1940      method not explicitly implemented in the class, even if a method
1941      implementation is inherited from the superclass.  If you use the
1942      `-Wno-protocol' option, then methods inherited from the superclass
1943      are considered to be implemented, and no warning is issued for
1944      them.
1946 `-Wselector'
1947      Warn if multiple methods of different types for the same selector
1948      are found during compilation.  The check is performed on the list
1949      of methods in the final stage of compilation.  Additionally, a
1950      check is performed for each selector appearing in a
1951      `@selector(...)'  expression, and a corresponding method for that
1952      selector has been found during compilation.  Because these checks
1953      scan the method table only at the end of compilation, these
1954      warnings are not produced if the final stage of compilation is not
1955      reached, for example because an error is found during compilation,
1956      or because the `-fsyntax-only' option is being used.
1958 `-Wundeclared-selector'
1959      Warn if a `@selector(...)' expression referring to an undeclared
1960      selector is found.  A selector is considered undeclared if no
1961      method with that name has been declared before the
1962      `@selector(...)' expression, either explicitly in an `@interface'
1963      or `@protocol' declaration, or implicitly in an `@implementation'
1964      section.  This option always performs its checks as soon as a
1965      `@selector(...)' expression is found, while `-Wselector' only
1966      performs its checks in the final stage of compilation.  This also
1967      enforces the coding style convention that methods and selectors
1968      must be declared before being used.
1970 `-print-objc-runtime-info'
1971      Generate C header describing the largest structure that is passed
1972      by value, if any.
1974 \x1f
1975 File: gcc.info,  Node: Language Independent Options,  Next: Warning Options,  Prev: Objective-C Dialect Options,  Up: Invoking GCC
1977 Options to Control Diagnostic Messages Formatting
1978 =================================================
1980  Traditionally, diagnostic messages have been formatted irrespective of
1981 the output device's aspect (e.g. its width, ...).  The options described
1982 below can be used to control the diagnostic messages formatting
1983 algorithm, e.g. how many characters per line, how often source location
1984 information should be reported.  Right now, only the C++ front end can
1985 honor these options.  However it is expected, in the near future, that
1986 the remaining front ends would be able to digest them correctly.
1988 `-fmessage-length=N'
1989      Try to format error messages so that they fit on lines of about N
1990      characters.  The default is 72 characters for `g++' and 0 for the
1991      rest of the front ends supported by GCC.  If N is zero, then no
1992      line-wrapping will be done; each error message will appear on a
1993      single line.
1995 `-fdiagnostics-show-location=once'
1996      Only meaningful in line-wrapping mode.  Instructs the diagnostic
1997      messages reporter to emit _once_ source location information; that
1998      is, in case the message is too long to fit on a single physical
1999      line and has to be wrapped, the source location won't be emitted
2000      (as prefix) again, over and over, in subsequent continuation
2001      lines.  This is the default behavior.
2003 `-fdiagnostics-show-location=every-line'
2004      Only meaningful in line-wrapping mode.  Instructs the diagnostic
2005      messages reporter to emit the same source location information (as
2006      prefix) for physical lines that result from the process of breaking
2007      a message which is too long to fit on a single line.
2009 \x1f
2010 File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Language Independent Options,  Up: Invoking GCC
2012 Options to Request or Suppress Warnings
2013 =======================================
2015  Warnings are diagnostic messages that report constructions which are
2016 not inherently erroneous but which are risky or suggest there may have
2017 been an error.
2019  You can request many specific warnings with options beginning `-W',
2020 for example `-Wimplicit' to request warnings on implicit declarations.
2021 Each of these specific warning options also has a negative form
2022 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2023 This manual lists only one of the two forms, whichever is not the
2024 default.
2026  The following options control the amount and kinds of warnings produced
2027 by GCC; for further, language-specific options also refer to *Note C++
2028 Dialect Options:: and *Note Objective-C Dialect Options::.
2030 `-fsyntax-only'
2031      Check the code for syntax errors, but don't do anything beyond
2032      that.
2034 `-pedantic'
2035      Issue all the warnings demanded by strict ISO C and ISO C++;
2036      reject all programs that use forbidden extensions, and some other
2037      programs that do not follow ISO C and ISO C++.  For ISO C, follows
2038      the version of the ISO C standard specified by any `-std' option
2039      used.
2041      Valid ISO C and ISO C++ programs should compile properly with or
2042      without this option (though a rare few will require `-ansi' or a
2043      `-std' option specifying the required version of ISO C).  However,
2044      without this option, certain GNU extensions and traditional C and
2045      C++ features are supported as well.  With this option, they are
2046      rejected.
2048      `-pedantic' does not cause warning messages for use of the
2049      alternate keywords whose names begin and end with `__'.  Pedantic
2050      warnings are also disabled in the expression that follows
2051      `__extension__'.  However, only system header files should use
2052      these escape routes; application programs should avoid them.
2053      *Note Alternate Keywords::.
2055      Some users try to use `-pedantic' to check programs for strict ISO
2056      C conformance.  They soon find that it does not do quite what they
2057      want: it finds some non-ISO practices, but not all--only those for
2058      which ISO C _requires_ a diagnostic, and some others for which
2059      diagnostics have been added.
2061      A feature to report any failure to conform to ISO C might be
2062      useful in some instances, but would require considerable
2063      additional work and would be quite different from `-pedantic'.  We
2064      don't have plans to support such a feature in the near future.
2066      Where the standard specified with `-std' represents a GNU extended
2067      dialect of C, such as `gnu89' or `gnu99', there is a corresponding
2068      "base standard", the version of ISO C on which the GNU extended
2069      dialect is based.  Warnings from `-pedantic' are given where they
2070      are required by the base standard.  (It would not make sense for
2071      such warnings to be given only for features not in the specified
2072      GNU C dialect, since by definition the GNU dialects of C include
2073      all features the compiler supports with the given option, and
2074      there would be nothing to warn about.)
2076 `-pedantic-errors'
2077      Like `-pedantic', except that errors are produced rather than
2078      warnings.
2080 `-w'
2081      Inhibit all warning messages.
2083 `-Wno-import'
2084      Inhibit warning messages about the use of `#import'.
2086 `-Wchar-subscripts'
2087      Warn if an array subscript has type `char'.  This is a common cause
2088      of error, as programmers often forget that this type is signed on
2089      some machines.
2091 `-Wcomment'
2092      Warn whenever a comment-start sequence `/*' appears in a `/*'
2093      comment, or whenever a Backslash-Newline appears in a `//' comment.
2095 `-Wformat'
2096      Check calls to `printf' and `scanf', etc., to make sure that the
2097      arguments supplied have types appropriate to the format string
2098      specified, and that the conversions specified in the format string
2099      make sense.  This includes standard functions, and others
2100      specified by format attributes (*note Function Attributes::), in
2101      the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2102      extension, not in the C standard) families.
2104      The formats are checked against the format features supported by
2105      GNU libc version 2.2.  These include all ISO C90 and C99 features,
2106      as well as features from the Single Unix Specification and some
2107      BSD and GNU extensions.  Other library implementations may not
2108      support all these features; GCC does not support warning about
2109      features that go beyond a particular library's limitations.
2110      However, if `-pedantic' is used with `-Wformat', warnings will be
2111      given about format features not in the selected standard version
2112      (but not for `strfmon' formats, since those are not in any version
2113      of the C standard).  *Note Options Controlling C Dialect: C
2114      Dialect Options.
2116      Since `-Wformat' also checks for null format arguments for several
2117      functions, `-Wformat' also implies `-Wnonnull'.
2119      `-Wformat' is included in `-Wall'.  For more control over some
2120      aspects of format checking, the options `-Wformat-y2k',
2121      `-Wno-format-extra-args', `-Wno-format-zero-length',
2122      `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2123      available, but are not included in `-Wall'.
2125 `-Wformat-y2k'
2126      If `-Wformat' is specified, also warn about `strftime' formats
2127      which may yield only a two-digit year.
2129 `-Wno-format-extra-args'
2130      If `-Wformat' is specified, do not warn about excess arguments to a
2131      `printf' or `scanf' format function.  The C standard specifies
2132      that such arguments are ignored.
2134      Where the unused arguments lie between used arguments that are
2135      specified with `$' operand number specifications, normally
2136      warnings are still given, since the implementation could not know
2137      what type to pass to `va_arg' to skip the unused arguments.
2138      However, in the case of `scanf' formats, this option will suppress
2139      the warning if the unused arguments are all pointers, since the
2140      Single Unix Specification says that such unused arguments are
2141      allowed.
2143 `-Wno-format-zero-length'
2144      If `-Wformat' is specified, do not warn about zero-length formats.
2145      The C standard specifies that zero-length formats are allowed.
2147 `-Wformat-nonliteral'
2148      If `-Wformat' is specified, also warn if the format string is not a
2149      string literal and so cannot be checked, unless the format function
2150      takes its format arguments as a `va_list'.
2152 `-Wformat-security'
2153      If `-Wformat' is specified, also warn about uses of format
2154      functions that represent possible security problems.  At present,
2155      this warns about calls to `printf' and `scanf' functions where the
2156      format string is not a string literal and there are no format
2157      arguments, as in `printf (foo);'.  This may be a security hole if
2158      the format string came from untrusted input and contains `%n'.
2159      (This is currently a subset of what `-Wformat-nonliteral' warns
2160      about, but in future warnings may be added to `-Wformat-security'
2161      that are not included in `-Wformat-nonliteral'.)
2163 `-Wformat=2'
2164      Enable `-Wformat' plus format checks not included in `-Wformat'.
2165      Currently equivalent to `-Wformat -Wformat-nonliteral
2166      -Wformat-security -Wformat-y2k'.
2168 `-Wnonnull'
2169      Warn about passing a null pointer for arguments marked as
2170      requiring a non-null value by the `nonnull' function attribute.
2172      `-Wnonnull' is included in `-Wall' and `-Wformat'.  It can be
2173      disabled with the `-Wno-nonnull' option.
2175 `-Winit-self (C, C++, and Objective-C only)'
2176      Warn about uninitialized variables which are initialized with
2177      themselves.  Note this option can only be used with the
2178      `-Wuninitialized' option, which in turn only works with `-O1' and
2179      above.
2181      For example, GCC will warn about `i' being uninitialized in the
2182      following snippet only when `-Winit-self' has been specified:
2183           int f()
2184           {
2185             int i = i;
2186             return i;
2187           }
2189 `-Wimplicit-int'
2190      Warn when a declaration does not specify a type.
2192 `-Wimplicit-function-declaration'
2193 `-Werror-implicit-function-declaration'
2194      Give a warning (or error) whenever a function is used before being
2195      declared.
2197 `-Wimplicit'
2198      Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
2200 `-Wmain'
2201      Warn if the type of `main' is suspicious.  `main' should be a
2202      function with external linkage, returning int, taking either zero
2203      arguments, two, or three arguments of appropriate types.
2205 `-Wmissing-braces'
2206      Warn if an aggregate or union initializer is not fully bracketed.
2207      In the following example, the initializer for `a' is not fully
2208      bracketed, but that for `b' is fully bracketed.
2210           int a[2][2] = { 0, 1, 2, 3 };
2211           int b[2][2] = { { 0, 1 }, { 2, 3 } };
2213 `-Wparentheses'
2214      Warn if parentheses are omitted in certain contexts, such as when
2215      there is an assignment in a context where a truth value is
2216      expected, or when operators are nested whose precedence people
2217      often get confused about.
2219      Also warn about constructions where there may be confusion to which
2220      `if' statement an `else' branch belongs.  Here is an example of
2221      such a case:
2223           {
2224             if (a)
2225               if (b)
2226                 foo ();
2227             else
2228               bar ();
2229           }
2231      In C, every `else' branch belongs to the innermost possible `if'
2232      statement, which in this example is `if (b)'.  This is often not
2233      what the programmer expected, as illustrated in the above example
2234      by indentation the programmer chose.  When there is the potential
2235      for this confusion, GCC will issue a warning when this flag is
2236      specified.  To eliminate the warning, add explicit braces around
2237      the innermost `if' statement so there is no way the `else' could
2238      belong to the enclosing `if'.  The resulting code would look like
2239      this:
2241           {
2242             if (a)
2243               {
2244                 if (b)
2245                   foo ();
2246                 else
2247                   bar ();
2248               }
2249           }
2251 `-Wsequence-point'
2252      Warn about code that may have undefined semantics because of
2253      violations of sequence point rules in the C standard.
2255      The C standard defines the order in which expressions in a C
2256      program are evaluated in terms of "sequence points", which
2257      represent a partial ordering between the execution of parts of the
2258      program: those executed before the sequence point, and those
2259      executed after it.  These occur after the evaluation of a full
2260      expression (one which is not part of a larger expression), after
2261      the evaluation of the first operand of a `&&', `||', `? :' or `,'
2262      (comma) operator, before a function is called (but after the
2263      evaluation of its arguments and the expression denoting the called
2264      function), and in certain other places.  Other than as expressed
2265      by the sequence point rules, the order of evaluation of
2266      subexpressions of an expression is not specified.  All these rules
2267      describe only a partial order rather than a total order, since,
2268      for example, if two functions are called within one expression
2269      with no sequence point between them, the order in which the
2270      functions are called is not specified.  However, the standards
2271      committee have ruled that function calls do not overlap.
2273      It is not specified when between sequence points modifications to
2274      the values of objects take effect.  Programs whose behavior
2275      depends on this have undefined behavior; the C standard specifies
2276      that "Between the previous and next sequence point an object shall
2277      have its stored value modified at most once by the evaluation of
2278      an expression.  Furthermore, the prior value shall be read only to
2279      determine the value to be stored.".  If a program breaks these
2280      rules, the results on any particular implementation are entirely
2281      unpredictable.
2283      Examples of code with undefined behavior are `a = a++;', `a[n] =
2284      b[n++]' and `a[i++] = i;'.  Some more complicated cases are not
2285      diagnosed by this option, and it may give an occasional false
2286      positive result, but in general it has been found fairly effective
2287      at detecting this sort of problem in programs.
2289      The present implementation of this option only works for C
2290      programs.  A future implementation may also work for C++ programs.
2292      The C standard is worded confusingly, therefore there is some
2293      debate over the precise meaning of the sequence point rules in
2294      subtle cases.  Links to discussions of the problem, including
2295      proposed formal definitions, may be found on the GCC readings
2296      page, at `http://gcc.gnu.org/readings.html'.
2298 `-Wreturn-type'
2299      Warn whenever a function is defined with a return-type that
2300      defaults to `int'.  Also warn about any `return' statement with no
2301      return-value in a function whose return-type is not `void'.
2303      For C++, a function without return type always produces a
2304      diagnostic message, even when `-Wno-return-type' is specified.
2305      The only exceptions are `main' and functions defined in system
2306      headers.
2308 `-Wswitch'
2309      Warn whenever a `switch' statement has an index of enumerated type
2310      and lacks a `case' for one or more of the named codes of that
2311      enumeration.  (The presence of a `default' label prevents this
2312      warning.)  `case' labels outside the enumeration range also
2313      provoke warnings when this option is used.
2315 `-Wswitch-default'
2316      Warn whenever a `switch' statement does not have a `default' case.
2318 `-Wswitch-enum'
2319      Warn whenever a `switch' statement has an index of enumerated type
2320      and lacks a `case' for one or more of the named codes of that
2321      enumeration.  `case' labels outside the enumeration range also
2322      provoke warnings when this option is used.
2324 `-Wtrigraphs'
2325      Warn if any trigraphs are encountered that might change the
2326      meaning of the program (trigraphs within comments are not warned
2327      about).
2329 `-Wunused-function'
2330      Warn whenever a static function is declared but not defined or a
2331      non\-inline static function is unused.
2333 `-Wunused-label'
2334      Warn whenever a label is declared but not used.
2336      To suppress this warning use the `unused' attribute (*note
2337      Variable Attributes::).
2339 `-Wunused-parameter'
2340      Warn whenever a function parameter is unused aside from its
2341      declaration.
2343      To suppress this warning use the `unused' attribute (*note
2344      Variable Attributes::).
2346 `-Wunused-variable'
2347      Warn whenever a local variable or non-constant static variable is
2348      unused aside from its declaration
2350      To suppress this warning use the `unused' attribute (*note
2351      Variable Attributes::).
2353 `-Wunused-value'
2354      Warn whenever a statement computes a result that is explicitly not
2355      used.
2357      To suppress this warning cast the expression to `void'.
2359 `-Wunused'
2360      All the above `-Wunused' options combined.
2362      In order to get a warning about an unused function parameter, you
2363      must either specify `-Wextra -Wunused' (note that `-Wall' implies
2364      `-Wunused'), or separately specify `-Wunused-parameter'.
2366 `-Wuninitialized'
2367      Warn if an automatic variable is used without first being
2368      initialized or if a variable may be clobbered by a `setjmp' call.
2370      These warnings are possible only in optimizing compilation,
2371      because they require data flow information that is computed only
2372      when optimizing.  If you don't specify `-O', you simply won't get
2373      these warnings.
2375      If you want to warn about code which uses the uninitialized value
2376      of the variable in its own initializer, use the `-Winit-self'
2377      option.
2379      These warnings occur only for variables that are candidates for
2380      register allocation.  Therefore, they do not occur for a variable
2381      that is declared `volatile', or whose address is taken, or whose
2382      size is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
2383      structures, unions or arrays, even when they are in registers.
2385      Note that there may be no warning about a variable that is used
2386      only to compute a value that itself is never used, because such
2387      computations may be deleted by data flow analysis before the
2388      warnings are printed.
2390      These warnings are made optional because GCC is not smart enough
2391      to see all the reasons why the code might be correct despite
2392      appearing to have an error.  Here is one example of how this can
2393      happen:
2395           {
2396             int x;
2397             switch (y)
2398               {
2399               case 1: x = 1;
2400                 break;
2401               case 2: x = 4;
2402                 break;
2403               case 3: x = 5;
2404               }
2405             foo (x);
2406           }
2408      If the value of `y' is always 1, 2 or 3, then `x' is always
2409      initialized, but GCC doesn't know this.  Here is another common
2410      case:
2412           {
2413             int save_y;
2414             if (change_y) save_y = y, y = new_y;
2415             ...
2416             if (change_y) y = save_y;
2417           }
2419      This has no bug because `save_y' is used only if it is set.
2421      This option also warns when a non-volatile automatic variable
2422      might be changed by a call to `longjmp'.  These warnings as well
2423      are possible only in optimizing compilation.
2425      The compiler sees only the calls to `setjmp'.  It cannot know
2426      where `longjmp' will be called; in fact, a signal handler could
2427      call it at any point in the code.  As a result, you may get a
2428      warning even when there is in fact no problem because `longjmp'
2429      cannot in fact be called at the place which would cause a problem.
2431      Some spurious warnings can be avoided if you declare all the
2432      functions you use that never return as `noreturn'.  *Note Function
2433      Attributes::.
2435 `-Wunknown-pragmas'
2436      Warn when a #pragma directive is encountered which is not
2437      understood by GCC.  If this command line option is used, warnings
2438      will even be issued for unknown pragmas in system header files.
2439      This is not the case if the warnings were only enabled by the
2440      `-Wall' command line option.
2442 `-Wstrict-aliasing'
2443      This option is only active when `-fstrict-aliasing' is active.  It
2444      warns about code which might break the strict aliasing rules that
2445      the compiler is using for optimization. The warning does not catch
2446      all cases, but does attempt to catch the more common pitfalls. It
2447      is included in `-Wall'.
2449 `-Wall'
2450      All of the above `-W' options combined.  This enables all the
2451      warnings about constructions that some users consider
2452      questionable, and that are easy to avoid (or modify to prevent the
2453      warning), even in conjunction with macros.  This also enables some
2454      language-specific warnings described in *Note C++ Dialect
2455      Options:: and *Note Objective-C Dialect Options::.
2457  The following `-W...' options are not implied by `-Wall'.  Some of
2458 them warn about constructions that users generally do not consider
2459 questionable, but which occasionally you might wish to check for;
2460 others warn about constructions that are necessary or hard to avoid in
2461 some cases, and there is no simple way to modify the code to suppress
2462 the warning.
2464 `-Wextra'
2465      (This option used to be called `-W'.  The older name is still
2466      supported, but the newer name is more descriptive.)  Print extra
2467      warning messages for these events:
2469         * A function can return either with or without a value.
2470           (Falling off the end of the function body is considered
2471           returning without a value.)  For example, this function would
2472           evoke such a warning:
2474                foo (a)
2475                {
2476                  if (a > 0)
2477                    return a;
2478                }
2480         * An expression-statement or the left-hand side of a comma
2481           expression contains no side effects.  To suppress the
2482           warning, cast the unused expression to void.  For example, an
2483           expression such as `x[i,j]' will cause a warning, but
2484           `x[(void)i,j]' will not.
2486         * An unsigned value is compared against zero with `<' or `>='.
2488         * A comparison like `x<=y<=z' appears; this is equivalent to
2489           `(x<=y ? 1 : 0) <= z', which is a different interpretation
2490           from that of ordinary mathematical notation.
2492         * Storage-class specifiers like `static' are not the first
2493           things in a declaration.  According to the C Standard, this
2494           usage is obsolescent.
2496         * The return type of a function has a type qualifier such as
2497           `const'.  Such a type qualifier has no effect, since the
2498           value returned by a function is not an lvalue.  (But don't
2499           warn about the GNU extension of `volatile void' return types.
2500           That extension will be warned about if `-pedantic' is
2501           specified.)
2503         * If `-Wall' or `-Wunused' is also specified, warn about unused
2504           arguments.
2506         * A comparison between signed and unsigned values could produce
2507           an incorrect result when the signed value is converted to
2508           unsigned.  (But don't warn if `-Wno-sign-compare' is also
2509           specified.)
2511         * An aggregate has an initializer which does not initialize all
2512           members.  For example, the following code would cause such a
2513           warning, because `x.h' would be implicitly initialized to
2514           zero:
2516                struct s { int f, g, h; };
2517                struct s x = { 3, 4 };
2519         * A function parameter is declared without a type specifier in
2520           K&R-style functions:
2522                void foo(bar) { }
2524         * An empty body occurs in an `if' or `else' statement.
2526         * A pointer is compared against integer zero with `<', `<=',
2527           `>', or `>='.
2529         * A variable might be changed by `longjmp' or `vfork'.
2531         * Any of several floating-point events that often indicate
2532           errors, such as overflow, underflow, loss of precision, etc.
2534         * (C++ only) An enumerator and a non-enumerator both appear in
2535           a conditional expression.
2537         * (C++ only) A non-static reference or non-static `const'
2538           member appears in a class without constructors.
2540         * (C++ only) Ambiguous virtual bases.
2542         * (C++ only) Subscripting an array which has been declared
2543           `register'.
2545         * (C++ only) Taking the address of a variable which has been
2546           declared `register'.
2548         * (C++ only) A base class is not initialized in a derived
2549           class' copy constructor.
2551 `-Wno-div-by-zero'
2552      Do not warn about compile-time integer division by zero.  Floating
2553      point division by zero is not warned about, as it can be a
2554      legitimate way of obtaining infinities and NaNs.
2556 `-Wsystem-headers'
2557      Print warning messages for constructs found in system header files.
2558      Warnings from system headers are normally suppressed, on the
2559      assumption that they usually do not indicate real problems and
2560      would only make the compiler output harder to read.  Using this
2561      command line option tells GCC to emit warnings from system headers
2562      as if they occurred in user code.  However, note that using
2563      `-Wall' in conjunction with this option will _not_ warn about
2564      unknown pragmas in system headers--for that, `-Wunknown-pragmas'
2565      must also be used.
2567 `-Wfloat-equal'
2568      Warn if floating point values are used in equality comparisons.
2570      The idea behind this is that sometimes it is convenient (for the
2571      programmer) to consider floating-point values as approximations to
2572      infinitely precise real numbers.  If you are doing this, then you
2573      need to compute (by analyzing the code, or in some other way) the
2574      maximum or likely maximum error that the computation introduces,
2575      and allow for it when performing comparisons (and when producing
2576      output, but that's a different problem).  In particular, instead
2577      of testing for equality, you would check to see whether the two
2578      values have ranges that overlap; and this is done with the
2579      relational operators, so equality comparisons are probably
2580      mistaken.
2582 `-Wtraditional (C only)'
2583      Warn about certain constructs that behave differently in
2584      traditional and ISO C.  Also warn about ISO C constructs that have
2585      no traditional C equivalent, and/or problematic constructs which
2586      should be avoided.
2588         * Macro parameters that appear within string literals in the
2589           macro body.  In traditional C macro replacement takes place
2590           within string literals, but does not in ISO C.
2592         * In traditional C, some preprocessor directives did not exist.
2593           Traditional preprocessors would only consider a line to be a
2594           directive if the `#' appeared in column 1 on the line.
2595           Therefore `-Wtraditional' warns about directives that
2596           traditional C understands but would ignore because the `#'
2597           does not appear as the first character on the line.  It also
2598           suggests you hide directives like `#pragma' not understood by
2599           traditional C by indenting them.  Some traditional
2600           implementations would not recognize `#elif', so it suggests
2601           avoiding it altogether.
2603         * A function-like macro that appears without arguments.
2605         * The unary plus operator.
2607         * The `U' integer constant suffix, or the `F' or `L' floating
2608           point constant suffixes.  (Traditional C does support the `L'
2609           suffix on integer constants.)  Note, these suffixes appear in
2610           macros defined in the system headers of most modern systems,
2611           e.g. the `_MIN'/`_MAX' macros in `<limits.h>'.  Use of these
2612           macros in user code might normally lead to spurious warnings,
2613           however GCC's integrated preprocessor has enough context to
2614           avoid warning in these cases.
2616         * A function declared external in one block and then used after
2617           the end of the block.
2619         * A `switch' statement has an operand of type `long'.
2621         * A non-`static' function declaration follows a `static' one.
2622           This construct is not accepted by some traditional C
2623           compilers.
2625         * The ISO type of an integer constant has a different width or
2626           signedness from its traditional type.  This warning is only
2627           issued if the base of the constant is ten.  I.e. hexadecimal
2628           or octal values, which typically represent bit patterns, are
2629           not warned about.
2631         * Usage of ISO string concatenation is detected.
2633         * Initialization of automatic aggregates.
2635         * Identifier conflicts with labels.  Traditional C lacks a
2636           separate namespace for labels.
2638         * Initialization of unions.  If the initializer is zero, the
2639           warning is omitted.  This is done under the assumption that
2640           the zero initializer in user code appears conditioned on e.g.
2641           `__STDC__' to avoid missing initializer warnings and relies
2642           on default initialization to zero in the traditional C case.
2644         * Conversions by prototypes between fixed/floating point values
2645           and vice versa.  The absence of these prototypes when
2646           compiling with traditional C would cause serious problems.
2647           This is a subset of the possible conversion warnings, for the
2648           full set use `-Wconversion'.
2650         * Use of ISO C style function definitions.  This warning
2651           intentionally is _not_ issued for prototype declarations or
2652           variadic functions because these ISO C features will appear
2653           in your code when using libiberty's traditional C
2654           compatibility macros, `PARAMS' and `VPARAMS'.  This warning
2655           is also bypassed for nested functions because that feature is
2656           already a GCC extension and thus not relevant to traditional
2657           C compatibility.
2659 `-Wdeclaration-after-statement (C only)'
2660      Warn when a declaration is found after a statement in a block.
2661      This construct, known from C++, was introduced with ISO C99 and is
2662      by default allowed in GCC.  It is not supported by ISO C90 and was
2663      not supported by GCC versions before GCC 3.0.  *Note Mixed
2664      Declarations::.
2666 `-Wundef'
2667      Warn if an undefined identifier is evaluated in an `#if' directive.
2669 `-Wendif-labels'
2670      Warn whenever an `#else' or an `#endif' are followed by text.
2672 `-Wshadow'
2673      Warn whenever a local variable shadows another local variable,
2674      parameter or global variable or whenever a built-in function is
2675      shadowed.
2677 `-Wlarger-than-LEN'
2678      Warn whenever an object of larger than LEN bytes is defined.
2680 `-Wpointer-arith'
2681      Warn about anything that depends on the "size of" a function type
2682      or of `void'.  GNU C assigns these types a size of 1, for
2683      convenience in calculations with `void *' pointers and pointers to
2684      functions.
2686 `-Wbad-function-cast (C only)'
2687      Warn whenever a function call is cast to a non-matching type.  For
2688      example, warn if `int malloc()' is cast to `anything *'.
2690 `-Wcast-qual'
2691      Warn whenever a pointer is cast so as to remove a type qualifier
2692      from the target type.  For example, warn if a `const char *' is
2693      cast to an ordinary `char *'.
2695 `-Wcast-align'
2696      Warn whenever a pointer is cast such that the required alignment
2697      of the target is increased.  For example, warn if a `char *' is
2698      cast to an `int *' on machines where integers can only be accessed
2699      at two- or four-byte boundaries.
2701 `-Wwrite-strings'
2702      When compiling C, give string constants the type `const
2703      char[LENGTH]' so that copying the address of one into a
2704      non-`const' `char *' pointer will get a warning; when compiling
2705      C++, warn about the deprecated conversion from string constants to
2706      `char *'.  These warnings will help you find at compile time code
2707      that can try to write into a string constant, but only if you have
2708      been very careful about using `const' in declarations and
2709      prototypes.  Otherwise, it will just be a nuisance; this is why we
2710      did not make `-Wall' request these warnings.
2712 `-Wconversion'
2713      Warn if a prototype causes a type conversion that is different
2714      from what would happen to the same argument in the absence of a
2715      prototype.  This includes conversions of fixed point to floating
2716      and vice versa, and conversions changing the width or signedness
2717      of a fixed point argument except when the same as the default
2718      promotion.
2720      Also, warn if a negative integer constant expression is implicitly
2721      converted to an unsigned type.  For example, warn about the
2722      assignment `x = -1' if `x' is unsigned.  But do not warn about
2723      explicit casts like `(unsigned) -1'.
2725 `-Wsign-compare'
2726      Warn when a comparison between signed and unsigned values could
2727      produce an incorrect result when the signed value is converted to
2728      unsigned.  This warning is also enabled by `-Wextra'; to get the
2729      other warnings of `-Wextra' without this warning, use `-Wextra
2730      -Wno-sign-compare'.
2732 `-Waggregate-return'
2733      Warn if any functions that return structures or unions are defined
2734      or called.  (In languages where you can return an array, this also
2735      elicits a warning.)
2737 `-Wstrict-prototypes (C only)'
2738      Warn if a function is declared or defined without specifying the
2739      argument types.  (An old-style function definition is permitted
2740      without a warning if preceded by a declaration which specifies the
2741      argument types.)
2743 `-Wold-style-definition (C only)'
2744      Warn if an old-style function definition is used.  A warning is
2745      given even if there is a previous prototype.
2747 `-Wmissing-prototypes (C only)'
2748      Warn if a global function is defined without a previous prototype
2749      declaration.  This warning is issued even if the definition itself
2750      provides a prototype.  The aim is to detect global functions that
2751      fail to be declared in header files.
2753 `-Wmissing-declarations (C only)'
2754      Warn if a global function is defined without a previous
2755      declaration.  Do so even if the definition itself provides a
2756      prototype.  Use this option to detect global functions that are
2757      not declared in header files.
2759 `-Wmissing-noreturn'
2760      Warn about functions which might be candidates for attribute
2761      `noreturn'.  Note these are only possible candidates, not absolute
2762      ones.  Care should be taken to manually verify functions actually
2763      do not ever return before adding the `noreturn' attribute,
2764      otherwise subtle code generation bugs could be introduced.  You
2765      will not get a warning for `main' in hosted C environments.
2767 `-Wmissing-format-attribute'
2768      If `-Wformat' is enabled, also warn about functions which might be
2769      candidates for `format' attributes.  Note these are only possible
2770      candidates, not absolute ones.  GCC will guess that `format'
2771      attributes might be appropriate for any function that calls a
2772      function like `vprintf' or `vscanf', but this might not always be
2773      the case, and some functions for which `format' attributes are
2774      appropriate may not be detected.  This option has no effect unless
2775      `-Wformat' is enabled (possibly by `-Wall').
2777 `-Wno-multichar'
2778      Do not warn if a multicharacter constant (`'FOOF'') is used.
2779      Usually they indicate a typo in the user's code, as they have
2780      implementation-defined values, and should not be used in portable
2781      code.
2783 `-Wno-deprecated-declarations'
2784      Do not warn about uses of functions, variables, and types marked as
2785      deprecated by using the `deprecated' attribute.  (*note Function
2786      Attributes::, *note Variable Attributes::, *note Type
2787      Attributes::.)
2789 `-Wpacked'
2790      Warn if a structure is given the packed attribute, but the packed
2791      attribute has no effect on the layout or size of the structure.
2792      Such structures may be mis-aligned for little benefit.  For
2793      instance, in this code, the variable `f.x' in `struct bar' will be
2794      misaligned even though `struct bar' does not itself have the
2795      packed attribute:
2797           struct foo {
2798             int x;
2799             char a, b, c, d;
2800           } __attribute__((packed));
2801           struct bar {
2802             char z;
2803             struct foo f;
2804           };
2806 `-Wpadded'
2807      Warn if padding is included in a structure, either to align an
2808      element of the structure or to align the whole structure.
2809      Sometimes when this happens it is possible to rearrange the fields
2810      of the structure to reduce the padding and so make the structure
2811      smaller.
2813 `-Wredundant-decls'
2814      Warn if anything is declared more than once in the same scope,
2815      even in cases where multiple declaration is valid and changes
2816      nothing.
2818 `-Wnested-externs (C only)'
2819      Warn if an `extern' declaration is encountered within a function.
2821 `-Wunreachable-code'
2822      Warn if the compiler detects that code will never be executed.
2824      This option is intended to warn when the compiler detects that at
2825      least a whole line of source code will never be executed, because
2826      some condition is never satisfied or because it is after a
2827      procedure that never returns.
2829      It is possible for this option to produce a warning even though
2830      there are circumstances under which part of the affected line can
2831      be executed, so care should be taken when removing
2832      apparently-unreachable code.
2834      For instance, when a function is inlined, a warning may mean that
2835      the line is unreachable in only one inlined copy of the function.
2837      This option is not made part of `-Wall' because in a debugging
2838      version of a program there is often substantial code which checks
2839      correct functioning of the program and is, hopefully, unreachable
2840      because the program does work.  Another common use of unreachable
2841      code is to provide behavior which is selectable at compile-time.
2843 `-Winline'
2844      Warn if a function can not be inlined and it was declared as
2845      inline.  Even with this option, the compiler will not warn about
2846      failures to inline functions declared in system headers.
2848      The compiler uses a variety of heuristics to determine whether or
2849      not to inline a function.  For example, the compiler takes into
2850      account the size of the function being inlined and the the amount
2851      of inlining that has already been done in the current function.
2852      Therefore, seemingly insignificant changes in the source program
2853      can cause the warnings produced by `-Winline' to appear or
2854      disappear.
2856 `-Wno-invalid-offsetof (C++ only)'
2857      Suppress warnings from applying the `offsetof' macro to a non-POD
2858      type.  According to the 1998 ISO C++ standard, applying `offsetof'
2859      to a non-POD type is undefined.  In existing C++ implementations,
2860      however, `offsetof' typically gives meaningful results even when
2861      applied to certain kinds of non-POD types. (Such as a simple
2862      `struct' that fails to be a POD type only by virtue of having a
2863      constructor.)  This flag is for users who are aware that they are
2864      writing nonportable code and who have deliberately chosen to
2865      ignore the warning about it.
2867      The restrictions on `offsetof' may be relaxed in a future version
2868      of the C++ standard.
2870 `-Winvalid-pch'
2871      Warn if a precompiled header (*note Precompiled Headers::) is
2872      found in the search path but can't be used.
2874 `-Wlong-long'
2875      Warn if `long long' type is used.  This is default.  To inhibit
2876      the warning messages, use `-Wno-long-long'.  Flags `-Wlong-long'
2877      and `-Wno-long-long' are taken into account only when `-pedantic'
2878      flag is used.
2880 `-Wdisabled-optimization'
2881      Warn if a requested optimization pass is disabled.  This warning
2882      does not generally indicate that there is anything wrong with your
2883      code; it merely indicates that GCC's optimizers were unable to
2884      handle the code effectively.  Often, the problem is that your code
2885      is too big or too complex; GCC will refuse to optimize programs
2886      when the optimization itself is likely to take inordinate amounts
2887      of time.
2889 `-Werror'
2890      Make all warnings into errors.
2892 \x1f
2893 File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
2895 Options for Debugging Your Program or GCC
2896 =========================================
2898  GCC has various special options that are used for debugging either
2899 your program or GCC:
2901 `-g'
2902      Produce debugging information in the operating system's native
2903      format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
2904      debugging information.
2906      On most systems that use stabs format, `-g' enables use of extra
2907      debugging information that only GDB can use; this extra information
2908      makes debugging work better in GDB but will probably make other
2909      debuggers crash or refuse to read the program.  If you want to
2910      control for certain whether to generate the extra information, use
2911      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
2912      below).
2914      Unlike most other C compilers, GCC allows you to use `-g' with
2915      `-O'.  The shortcuts taken by optimized code may occasionally
2916      produce surprising results: some variables you declared may not
2917      exist at all; flow of control may briefly move where you did not
2918      expect it; some statements may not be executed because they
2919      compute constant results or their values were already at hand;
2920      some statements may execute in different places because they were
2921      moved out of loops.
2923      Nevertheless it proves possible to debug optimized output.  This
2924      makes it reasonable to use the optimizer for programs that might
2925      have bugs.
2927      The following options are useful when GCC is generated with the
2928      capability for more than one debugging format.
2930 `-ggdb'
2931      Produce debugging information for use by GDB.  This means to use
2932      the most expressive format available (DWARF 2, stabs, or the
2933      native format if neither of those are supported), including GDB
2934      extensions if at all possible.
2936 `-gstabs'
2937      Produce debugging information in stabs format (if that is
2938      supported), without GDB extensions.  This is the format used by
2939      DBX on most BSD systems.  On MIPS, Alpha and System V Release 4
2940      systems this option produces stabs debugging output which is not
2941      understood by DBX or SDB.  On System V Release 4 systems this
2942      option requires the GNU assembler.
2944 `-feliminate-unused-debug-symbols'
2945      Produce debugging information in stabs format (if that is
2946      supported), for only symbols that are actually used.
2948 `-gstabs+'
2949      Produce debugging information in stabs format (if that is
2950      supported), using GNU extensions understood only by the GNU
2951      debugger (GDB).  The use of these extensions is likely to make
2952      other debuggers crash or refuse to read the program.
2954 `-gcoff'
2955      Produce debugging information in COFF format (if that is
2956      supported).  This is the format used by SDB on most System V
2957      systems prior to System V Release 4.
2959 `-gxcoff'
2960      Produce debugging information in XCOFF format (if that is
2961      supported).  This is the format used by the DBX debugger on IBM
2962      RS/6000 systems.
2964 `-gxcoff+'
2965      Produce debugging information in XCOFF format (if that is
2966      supported), using GNU extensions understood only by the GNU
2967      debugger (GDB).  The use of these extensions is likely to make
2968      other debuggers crash or refuse to read the program, and may cause
2969      assemblers other than the GNU assembler (GAS) to fail with an
2970      error.
2972 `-gdwarf-2'
2973      Produce debugging information in DWARF version 2 format (if that is
2974      supported).  This is the format used by DBX on IRIX 6.
2976 `-gvms'
2977      Produce debugging information in VMS debug format (if that is
2978      supported).  This is the format used by DEBUG on VMS systems.
2980 `-gLEVEL'
2981 `-ggdbLEVEL'
2982 `-gstabsLEVEL'
2983 `-gcoffLEVEL'
2984 `-gxcoffLEVEL'
2985 `-gvmsLEVEL'
2986      Request debugging information and also use LEVEL to specify how
2987      much information.  The default level is 2.
2989      Level 1 produces minimal information, enough for making backtraces
2990      in parts of the program that you don't plan to debug.  This
2991      includes descriptions of functions and external variables, but no
2992      information about local variables and no line numbers.
2994      Level 3 includes extra information, such as all the macro
2995      definitions present in the program.  Some debuggers support macro
2996      expansion when you use `-g3'.
2998      Note that in order to avoid confusion between DWARF1 debug level 2,
2999      and DWARF2 `-gdwarf-2' does not accept a concatenated debug level.
3000      Instead use an additional `-gLEVEL' option to change the debug
3001      level for DWARF2.
3003 `-feliminate-dwarf2-dups'
3004      Compress DWARF2 debugging information by eliminating duplicated
3005      information about each symbol.  This option only makes sense when
3006      generating DWARF2 debugging information with `-gdwarf-2'.
3008 `-p'
3009      Generate extra code to write profile information suitable for the
3010      analysis program `prof'.  You must use this option when compiling
3011      the source files you want data about, and you must also use it when
3012      linking.
3014 `-pg'
3015      Generate extra code to write profile information suitable for the
3016      analysis program `gprof'.  You must use this option when compiling
3017      the source files you want data about, and you must also use it when
3018      linking.
3020 `-Q'
3021      Makes the compiler print out each function name as it is compiled,
3022      and print some statistics about each pass when it finishes.
3024 `-ftime-report'
3025      Makes the compiler print some statistics about the time consumed
3026      by each pass when it finishes.
3028 `-fmem-report'
3029      Makes the compiler print some statistics about permanent memory
3030      allocation when it finishes.
3032 `-fprofile-arcs'
3033      Add code so that program flow "arcs" are instrumented.  During
3034      execution the program records how many times each branch and call
3035      is executed and how many times it is taken or returns.  When the
3036      compiled program exits it saves this data to a file called
3037      `AUXNAME.gcda' for each source file. The data may be used for
3038      profile-directed optimizations (`-fbranch-probabilities'), or for
3039      test coverage analysis (`-ftest-coverage'). Each object file's
3040      AUXNAME is generated from the name of the output file, if
3041      explicitly specified and it is not the final executable, otherwise
3042      it is the basename of the source file. In both cases any suffix is
3043      removed (e.g.  `foo.gcda' for input file `dir/foo.c', or
3044      `dir/foo.gcda' for output file specified as `-o dir/foo.o').
3046         * Compile the source files with `-fprofile-arcs' plus
3047           optimization and code generation options. For test coverage
3048           analysis, use the additional `-ftest-coverage' option. You do
3049           not need to profile every source file in a program.
3051         * Link your object files with `-lgcov' or `-fprofile-arcs' (the
3052           latter implies the former).
3054         * Run the program on a representative workload to generate the
3055           arc profile information. This may be repeated any number of
3056           times. You can run concurrent instances of your program, and
3057           provided that the file system supports locking, the data
3058           files will be correctly updated. Also `fork' calls are
3059           detected and correctly handled (double counting will not
3060           happen).
3062         * For profile-directed optimizations, compile the source files
3063           again with the same optimization and code generation options
3064           plus `-fbranch-probabilities' (*note Options that Control
3065           Optimization: Optimize Options.).
3067         * For test coverage analysis, use `gcov' to produce human
3068           readable information from the `.gcno' and `.gcda' files.
3069           Refer to the `gcov' documentation for further information.
3072      With `-fprofile-arcs', for each function of your program GCC
3073      creates a program flow graph, then finds a spanning tree for the
3074      graph.  Only arcs that are not on the spanning tree have to be
3075      instrumented: the compiler adds code to count the number of times
3076      that these arcs are executed.  When an arc is the only exit or
3077      only entrance to a block, the instrumentation code can be added to
3078      the block; otherwise, a new basic block must be created to hold
3079      the instrumentation code.
3081 `-ftest-coverage'
3082      Produce a notes file that the `gcov' code-coverage utility (*note
3083      `gcov'--a Test Coverage Program: Gcov.) can use to show program
3084      coverage. Each source file's note file is called `AUXNAME.gcno'.
3085      Refer to the `-fprofile-arcs' option above for a description of
3086      AUXNAME and instructions on how to generate test coverage data.
3087      Coverage data will match the source files more closely, if you do
3088      not optimize.
3090 `-dLETTERS'
3091      Says to make debugging dumps during compilation at times specified
3092      by LETTERS.  This is used for debugging the compiler.  The file
3093      names for most of the dumps are made by appending a pass number
3094      and a word to the DUMPNAME. DUMPNAME is generated from the name of
3095      the output file, if explicitly specified and it is not an
3096      executable, otherwise it is the basename of the source file. In
3097      both cases any suffix is removed (e.g.  `foo.01.rtl' or
3098      `foo.02.sibling').  Here are the possible letters for use in
3099      LETTERS, and their meanings:
3101     `A'
3102           Annotate the assembler output with miscellaneous debugging
3103           information.
3105     `b'
3106           Dump after computing branch probabilities, to `FILE.12.bp'.
3108     `B'
3109           Dump after block reordering, to `FILE.31.bbro'.
3111     `c'
3112           Dump after instruction combination, to the file
3113           `FILE.20.combine'.
3115     `C'
3116           Dump after the first if conversion, to the file `FILE.14.ce1'.
3117           Also dump after the second if conversion, to the file
3118           `FILE.21.ce2'.
3120     `d'
3121           Dump after branch target load optimization, to to
3122           `FILE.32.btl'.  Also dump after delayed branch scheduling, to
3123           `FILE.36.dbr'.
3125     `D'
3126           Dump all macro definitions, at the end of preprocessing, in
3127           addition to normal output.
3129     `E'
3130           Dump after the third if conversion, to `FILE.30.ce3'.
3132     `f'
3133           Dump after control and data flow analysis, to `FILE.11.cfg'.
3134           Also dump after life analysis, to `FILE.19.life'.
3136     `F'
3137           Dump after purging `ADDRESSOF' codes, to `FILE.07.addressof'.
3139     `g'
3140           Dump after global register allocation, to `FILE.25.greg'.
3142     `G'
3143           Dump after GCSE, to `FILE.08.gcse'.  Also dump after jump
3144           bypassing and control flow optimizations, to `FILE.10.bypass'.
3146     `h'
3147           Dump after finalization of EH handling code, to `FILE.03.eh'.
3149     `i'
3150           Dump after sibling call optimizations, to `FILE.02.sibling'.
3152     `j'
3153           Dump after the first jump optimization, to `FILE.04.jump'.
3155     `k'
3156           Dump after conversion from registers to stack, to
3157           `FILE.34.stack'.
3159     `l'
3160           Dump after local register allocation, to `FILE.24.lreg'.
3162     `L'
3163           Dump after loop optimization passes, to `FILE.09.loop' and
3164           `FILE.16.loop2'.
3166     `M'
3167           Dump after performing the machine dependent reorganization
3168           pass, to `FILE.35.mach'.
3170     `n'
3171           Dump after register renumbering, to `FILE.29.rnreg'.
3173     `N'
3174           Dump after the register move pass, to `FILE.22.regmove'.
3176     `o'
3177           Dump after post-reload optimizations, to `FILE.26.postreload'.
3179     `r'
3180           Dump after RTL generation, to `FILE.01.rtl'.
3182     `R'
3183           Dump after the second scheduling pass, to `FILE.33.sched2'.
3185     `s'
3186           Dump after CSE (including the jump optimization that
3187           sometimes follows CSE), to `FILE.06.cse'.
3189     `S'
3190           Dump after the first scheduling pass, to `FILE.23.sched'.
3192     `t'
3193           Dump after the second CSE pass (including the jump
3194           optimization that sometimes follows CSE), to `FILE.18.cse2'.
3196     `T'
3197           Dump after running tracer, to `FILE.15.tracer'.
3199     `u'
3200           Dump after null pointer elimination pass to `FILE.05.null'.
3202     `U'
3203           Dump callgraph and unit-at-a-time optimization `FILE.00.unit'.
3205     `V'
3206           Dump after the value profile transformations, to
3207           `FILE.13.vpt'.
3209     `w'
3210           Dump after the second flow pass, to `FILE.27.flow2'.
3212     `z'
3213           Dump after the peephole pass, to `FILE.28.peephole2'.
3215     `Z'
3216           Dump after constructing the web, to `FILE.17.web'.
3218     `a'
3219           Produce all the dumps listed above.
3221     `H'
3222           Produce a core dump whenever an error occurs.
3224     `m'
3225           Print statistics on memory usage, at the end of the run, to
3226           standard error.
3228     `p'
3229           Annotate the assembler output with a comment indicating which
3230           pattern and alternative was used.  The length of each
3231           instruction is also printed.
3233     `P'
3234           Dump the RTL in the assembler output as a comment before each
3235           instruction.  Also turns on `-dp' annotation.
3237     `v'
3238           For each of the other indicated dump files (except for
3239           `FILE.01.rtl'), dump a representation of the control flow
3240           graph suitable for viewing with VCG to `FILE.PASS.vcg'.
3242     `x'
3243           Just generate RTL for a function instead of compiling it.
3244           Usually used with `r'.
3246     `y'
3247           Dump debugging information during parsing, to standard error.
3249 `-fdump-unnumbered'
3250      When doing debugging dumps (see `-d' option above), suppress
3251      instruction numbers and line number note output.  This makes it
3252      more feasible to use diff on debugging dumps for compiler
3253      invocations with different options, in particular with and without
3254      `-g'.
3256 `-fdump-translation-unit (C and C++ only)'
3257 `-fdump-translation-unit-OPTIONS (C and C++ only)'
3258      Dump a representation of the tree structure for the entire
3259      translation unit to a file.  The file name is made by appending
3260      `.tu' to the source file name.  If the `-OPTIONS' form is used,
3261      OPTIONS controls the details of the dump as described for the
3262      `-fdump-tree' options.
3264 `-fdump-class-hierarchy (C++ only)'
3265 `-fdump-class-hierarchy-OPTIONS (C++ only)'
3266      Dump a representation of each class's hierarchy and virtual
3267      function table layout to a file.  The file name is made by
3268      appending `.class' to the source file name.  If the `-OPTIONS'
3269      form is used, OPTIONS controls the details of the dump as
3270      described for the `-fdump-tree' options.
3272 `-fdump-tree-SWITCH (C++ only)'
3273 `-fdump-tree-SWITCH-OPTIONS (C++ only)'
3274      Control the dumping at various stages of processing the
3275      intermediate language tree to a file.  The file name is generated
3276      by appending a switch specific suffix to the source file name.  If
3277      the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
3278      options that control the details of the dump. Not all options are
3279      applicable to all dumps, those which are not meaningful will be
3280      ignored. The following options are available
3282     `address'
3283           Print the address of each node.  Usually this is not
3284           meaningful as it changes according to the environment and
3285           source file. Its primary use is for tying up a dump file with
3286           a debug environment.
3288     `slim'
3289           Inhibit dumping of members of a scope or body of a function
3290           merely because that scope has been reached. Only dump such
3291           items when they are directly reachable by some other path.
3293     `all'
3294           Turn on all options.
3296      The following tree dumps are possible:
3297     `original'
3298           Dump before any tree based optimization, to `FILE.original'.
3300     `optimized'
3301           Dump after all tree based optimization, to `FILE.optimized'.
3303     `inlined'
3304           Dump after function inlining, to `FILE.inlined'.
3306 `-frandom-seed=STRING'
3307      This option provides a seed that GCC uses when it would otherwise
3308      use random numbers.  It is used to generate certain symbol names
3309      that have to be different in every compiled file. It is also used
3310      to place unique stamps in coverage data files and the object files
3311      that produce them. You can use the `-frandom-seed' option to
3312      produce reproducibly identical object files.
3314      The STRING should be different for every file you compile.
3316 `-fsched-verbose=N'
3317      On targets that use instruction scheduling, this option controls
3318      the amount of debugging output the scheduler prints.  This
3319      information is written to standard error, unless `-dS' or `-dR' is
3320      specified, in which case it is output to the usual dump listing
3321      file, `.sched' or `.sched2' respectively.  However for N greater
3322      than nine, the output is always printed to standard error.
3324      For N greater than zero, `-fsched-verbose' outputs the same
3325      information as `-dRS'.  For N greater than one, it also output
3326      basic block probabilities, detailed ready list information and
3327      unit/insn info.  For N greater than two, it includes RTL at abort
3328      point, control-flow and regions info.  And for N over four,
3329      `-fsched-verbose' also includes dependence info.
3331 `-save-temps'
3332      Store the usual "temporary" intermediate files permanently; place
3333      them in the current directory and name them based on the source
3334      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
3335      files `foo.i' and `foo.s', as well as `foo.o'.  This creates a
3336      preprocessed `foo.i' output file even though the compiler now
3337      normally uses an integrated preprocessor.
3339 `-time'
3340      Report the CPU time taken by each subprocess in the compilation
3341      sequence.  For C source files, this is the compiler proper and
3342      assembler (plus the linker if linking is done).  The output looks
3343      like this:
3345           # cc1 0.12 0.01
3346           # as 0.00 0.01
3348      The first number on each line is the "user time," that is time
3349      spent executing the program itself.  The second number is "system
3350      time," time spent executing operating system routines on behalf of
3351      the program.  Both numbers are in seconds.
3353 `-print-file-name=LIBRARY'
3354      Print the full absolute name of the library file LIBRARY that
3355      would be used when linking--and don't do anything else.  With this
3356      option, GCC does not compile or link anything; it just prints the
3357      file name.
3359 `-print-multi-directory'
3360      Print the directory name corresponding to the multilib selected by
3361      any other switches present in the command line.  This directory is
3362      supposed to exist in `GCC_EXEC_PREFIX'.
3364 `-print-multi-lib'
3365      Print the mapping from multilib directory names to compiler
3366      switches that enable them.  The directory name is separated from
3367      the switches by `;', and each switch starts with an `@' instead of
3368      the `-', without spaces between multiple switches.  This is
3369      supposed to ease shell-processing.
3371 `-print-prog-name=PROGRAM'
3372      Like `-print-file-name', but searches for a program such as `cpp'.
3374 `-print-libgcc-file-name'
3375      Same as `-print-file-name=libgcc.a'.
3377      This is useful when you use `-nostdlib' or `-nodefaultlibs' but
3378      you do want to link with `libgcc.a'.  You can do
3380           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
3382 `-print-search-dirs'
3383      Print the name of the configured installation directory and a list
3384      of program and library directories `gcc' will search--and don't do
3385      anything else.
3387      This is useful when `gcc' prints the error message `installation
3388      problem, cannot exec cpp0: No such file or directory'.  To resolve
3389      this you either need to put `cpp0' and the other compiler
3390      components where `gcc' expects to find them, or you can set the
3391      environment variable `GCC_EXEC_PREFIX' to the directory where you
3392      installed them.  Don't forget the trailing '/'.  *Note Environment
3393      Variables::.
3395 `-dumpmachine'
3396      Print the compiler's target machine (for example,
3397      `i686-pc-linux-gnu')--and don't do anything else.
3399 `-dumpversion'
3400      Print the compiler version (for example, `3.0')--and don't do
3401      anything else.
3403 `-dumpspecs'
3404      Print the compiler's built-in specs--and don't do anything else.
3405      (This is used when GCC itself is being built.)  *Note Spec Files::.
3407 `-feliminate-unused-debug-types'
3408      Normally, when producing DWARF2 output, GCC will emit debugging
3409      information for all types declared in a compilation unit,
3410      regardless of whether or not they are actually used in that
3411      compilation unit.  Sometimes this is useful, such as if, in the
3412      debugger, you want to cast a value to a type that is not actually
3413      used in your program (but is declared).  More often, however, this
3414      results in a significant amount of wasted space.  With this
3415      option, GCC will avoid producing debug symbol output for types
3416      that are nowhere used in the source file being compiled.
3418 \x1f
3419 File: gcc.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking GCC
3421 Options That Control Optimization
3422 =================================
3424  These options control various sorts of optimizations.
3426  Without any optimization option, the compiler's goal is to reduce the
3427 cost of compilation and to make debugging produce the expected results.
3428 Statements are independent: if you stop the program with a breakpoint
3429 between statements, you can then assign a new value to any variable or
3430 change the program counter to any other statement in the function and
3431 get exactly the results you would expect from the source code.
3433  Turning on optimization flags makes the compiler attempt to improve
3434 the performance and/or code size at the expense of compilation time and
3435 possibly the ability to debug the program.
3437  The compiler performs optimization based on the knowledge it has of
3438 the program.  Using the `-funit-at-a-time' flag will allow the compiler
3439 to consider information gained from later functions in the file when
3440 compiling a function.  Compiling multiple files at once to a single
3441 output file (and using `-funit-at-a-time') will allow the compiler to
3442 use information gained from all of the files when compiling each of
3443 them.
3445  Not all optimizations are controlled directly by a flag.  Only
3446 optimizations that have a flag are listed.
3448 `-O'
3449 `-O1'
3450      Optimize.  Optimizing compilation takes somewhat more time, and a
3451      lot more memory for a large function.
3453      With `-O', the compiler tries to reduce code size and execution
3454      time, without performing any optimizations that take a great deal
3455      of compilation time.
3457      `-O' turns on the following optimization flags:
3458           -fdefer-pop 
3459           -fmerge-constants 
3460           -fthread-jumps 
3461           -floop-optimize 
3462           -fif-conversion 
3463           -fif-conversion2 
3464           -fdelayed-branch 
3465           -fguess-branch-probability 
3466           -fcprop-registers
3468      `-O' also turns on `-fomit-frame-pointer' on machines where doing
3469      so does not interfere with debugging.
3471 `-O2'
3472      Optimize even more.  GCC performs nearly all supported
3473      optimizations that do not involve a space-speed tradeoff.  The
3474      compiler does not perform loop unrolling or function inlining when
3475      you specify `-O2'.  As compared to `-O', this option increases
3476      both compilation time and the performance of the generated code.
3478      `-O2' turns on all optimization flags specified by `-O'.  It also
3479      turns on the following optimization flags:
3480           -fforce-mem 
3481           -foptimize-sibling-calls 
3482           -fstrength-reduce 
3483           -fcse-follow-jumps  -fcse-skip-blocks 
3484           -frerun-cse-after-loop  -frerun-loop-opt 
3485           -fgcse  -fgcse-lm  -fgcse-sm  -fgcse-las 
3486           -fdelete-null-pointer-checks 
3487           -fexpensive-optimizations 
3488           -fregmove 
3489           -fschedule-insns  -fschedule-insns2 
3490           -fsched-interblock  -fsched-spec 
3491           -fcaller-saves 
3492           -fpeephole2 
3493           -freorder-blocks  -freorder-functions 
3494           -fstrict-aliasing 
3495           -funit-at-a-time 
3496           -falign-functions  -falign-jumps 
3497           -falign-loops  -falign-labels 
3498           -fcrossjumping
3500      Please note the warning under `-fgcse' about invoking `-O2' on
3501      programs that use computed gotos.
3503 `-O3'
3504      Optimize yet more.  `-O3' turns on all optimizations specified by
3505      `-O2' and also turns on the `-finline-functions', `-fweb' and
3506      `-frename-registers' options.
3508 `-O0'
3509      Do not optimize.  This is the default.
3511 `-Os'
3512      Optimize for size.  `-Os' enables all `-O2' optimizations that do
3513      not typically increase code size.  It also performs further
3514      optimizations designed to reduce code size.
3516      `-Os' disables the following optimization flags:
3517           -falign-functions  -falign-jumps  -falign-loops 
3518           -falign-labels  -freorder-blocks  -fprefetch-loop-arrays
3520      If you use multiple `-O' options, with or without level numbers,
3521      the last such option is the one that is effective.
3523  Options of the form `-fFLAG' specify machine-independent flags.  Most
3524 flags have both positive and negative forms; the negative form of
3525 `-ffoo' would be `-fno-foo'.  In the table below, only one of the forms
3526 is listed--the one you typically will use.  You can figure out the
3527 other form by either removing `no-' or adding it.
3529  The following options control specific optimizations.  They are either
3530 activated by `-O' options or are related to ones that are.  You can use
3531 the following flags in the rare cases when "fine-tuning" of
3532 optimizations to be performed is desired.
3534 `-fno-default-inline'
3535      Do not make member functions inline by default merely because they
3536      are defined inside the class scope (C++ only).  Otherwise, when
3537      you specify `-O', member functions defined inside class scope are
3538      compiled inline by default; i.e., you don't need to add `inline'
3539      in front of the member function name.
3541 `-fno-defer-pop'
3542      Always pop the arguments to each function call as soon as that
3543      function returns.  For machines which must pop arguments after a
3544      function call, the compiler normally lets arguments accumulate on
3545      the stack for several function calls and pops them all at once.
3547      Disabled at levels `-O', `-O2', `-O3', `-Os'.
3549 `-fforce-mem'
3550      Force memory operands to be copied into registers before doing
3551      arithmetic on them.  This produces better code by making all memory
3552      references potential common subexpressions.  When they are not
3553      common subexpressions, instruction combination should eliminate
3554      the separate register-load.
3556      Enabled at levels `-O2', `-O3', `-Os'.
3558 `-fforce-addr'
3559      Force memory address constants to be copied into registers before
3560      doing arithmetic on them.  This may produce better code just as
3561      `-fforce-mem' may.
3563 `-fomit-frame-pointer'
3564      Don't keep the frame pointer in a register for functions that
3565      don't need one.  This avoids the instructions to save, set up and
3566      restore frame pointers; it also makes an extra register available
3567      in many functions.  *It also makes debugging impossible on some
3568      machines.*
3570      On some machines, such as the VAX, this flag has no effect, because
3571      the standard calling sequence automatically handles the frame
3572      pointer and nothing is saved by pretending it doesn't exist.  The
3573      machine-description macro `FRAME_POINTER_REQUIRED' controls
3574      whether a target machine supports this flag.  *Note Register
3575      Usage: (gccint)Registers.
3577      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3579 `-foptimize-sibling-calls'
3580      Optimize sibling and tail recursive calls.
3582      Enabled at levels `-O2', `-O3', `-Os'.
3584 `-fno-inline'
3585      Don't pay attention to the `inline' keyword.  Normally this option
3586      is used to keep the compiler from expanding any functions inline.
3587      Note that if you are not optimizing, no functions can be expanded
3588      inline.
3590 `-finline-functions'
3591      Integrate all simple functions into their callers.  The compiler
3592      heuristically decides which functions are simple enough to be worth
3593      integrating in this way.
3595      If all calls to a given function are integrated, and the function
3596      is declared `static', then the function is normally not output as
3597      assembler code in its own right.
3599      Enabled at level `-O3'.
3601 `-finline-limit=N'
3602      By default, GCC limits the size of functions that can be inlined.
3603      This flag allows the control of this limit for functions that are
3604      explicitly marked as inline (i.e., marked with the inline keyword
3605      or defined within the class definition in c++).  N is the size of
3606      functions that can be inlined in number of pseudo instructions
3607      (not counting parameter handling).  The default value of N is 600.
3608      Increasing this value can result in more inlined code at the cost
3609      of compilation time and memory consumption.  Decreasing usually
3610      makes the compilation faster and less code will be inlined (which
3611      presumably means slower programs).  This option is particularly
3612      useful for programs that use inlining heavily such as those based
3613      on recursive templates with C++.
3615      Inlining is actually controlled by a number of parameters, which
3616      may be specified individually by using `--param NAME=VALUE'.  The
3617      `-finline-limit=N' option sets some of these parameters as follows:
3619     `max-inline-insns-single'
3620           is set to N/2.
3622     `max-inline-insns-auto'
3623           is set to N/2.
3625     `min-inline-insns'
3626           is set to 130 or N/4, whichever is smaller.
3628     `max-inline-insns-rtl'
3629           is set to N.
3631      See below for a documentation of the individual parameters
3632      controlling inlining.
3634      _Note:_ pseudo instruction represents, in this particular context,
3635      an abstract measurement of function's size.  In no way, it
3636      represents a count of assembly instructions and as such its exact
3637      meaning might change from one release to an another.
3639 `-fkeep-inline-functions'
3640      Even if all calls to a given function are integrated, and the
3641      function is declared `static', nevertheless output a separate
3642      run-time callable version of the function.  This switch does not
3643      affect `extern inline' functions.
3645 `-fkeep-static-consts'
3646      Emit variables declared `static const' when optimization isn't
3647      turned on, even if the variables aren't referenced.
3649      GCC enables this option by default.  If you want to force the
3650      compiler to check if the variable was referenced, regardless of
3651      whether or not optimization is turned on, use the
3652      `-fno-keep-static-consts' option.
3654 `-fmerge-constants'
3655      Attempt to merge identical constants (string constants and
3656      floating point constants) across compilation units.
3658      This option is the default for optimized compilation if the
3659      assembler and linker support it.  Use `-fno-merge-constants' to
3660      inhibit this behavior.
3662      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3664 `-fmerge-all-constants'
3665      Attempt to merge identical constants and identical variables.
3667      This option implies `-fmerge-constants'.  In addition to
3668      `-fmerge-constants' this considers e.g. even constant initialized
3669      arrays or initialized constant variables with integral or floating
3670      point types.  Languages like C or C++ require each non-automatic
3671      variable to have distinct location, so using this option will
3672      result in non-conforming behavior.
3674 `-fnew-ra'
3675      Use a graph coloring register allocator.  Currently this option is
3676      meant only for testing.  Users should not specify this option,
3677      since it is not yet ready for production use.
3679 `-fno-branch-count-reg'
3680      Do not use "decrement and branch" instructions on a count register,
3681      but instead generate a sequence of instructions that decrement a
3682      register, compare it against zero, then branch based upon the
3683      result.  This option is only meaningful on architectures that
3684      support such instructions, which include x86, PowerPC, IA-64 and
3685      S/390.
3687      The default is `-fbranch-count-reg', enabled when
3688      `-fstrength-reduce' is enabled.
3690 `-fno-function-cse'
3691      Do not put function addresses in registers; make each instruction
3692      that calls a constant function contain the function's address
3693      explicitly.
3695      This option results in less efficient code, but some strange hacks
3696      that alter the assembler output may be confused by the
3697      optimizations performed when this option is not used.
3699      The default is `-ffunction-cse'
3701 `-fno-zero-initialized-in-bss'
3702      If the target supports a BSS section, GCC by default puts
3703      variables that are initialized to zero into BSS.  This can save
3704      space in the resulting code.
3706      This option turns off this behavior because some programs
3707      explicitly rely on variables going to the data section.  E.g., so
3708      that the resulting executable can find the beginning of that
3709      section and/or make assumptions based on that.
3711      The default is `-fzero-initialized-in-bss'.
3713 `-fstrength-reduce'
3714      Perform the optimizations of loop strength reduction and
3715      elimination of iteration variables.
3717      Enabled at levels `-O2', `-O3', `-Os'.
3719 `-fthread-jumps'
3720      Perform optimizations where we check to see if a jump branches to a
3721      location where another comparison subsumed by the first is found.
3722      If so, the first branch is redirected to either the destination of
3723      the second branch or a point immediately following it, depending
3724      on whether the condition is known to be true or false.
3726      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3728 `-fcse-follow-jumps'
3729      In common subexpression elimination, scan through jump instructions
3730      when the target of the jump is not reached by any other path.  For
3731      example, when CSE encounters an `if' statement with an `else'
3732      clause, CSE will follow the jump when the condition tested is
3733      false.
3735      Enabled at levels `-O2', `-O3', `-Os'.
3737 `-fcse-skip-blocks'
3738      This is similar to `-fcse-follow-jumps', but causes CSE to follow
3739      jumps which conditionally skip over blocks.  When CSE encounters a
3740      simple `if' statement with no else clause, `-fcse-skip-blocks'
3741      causes CSE to follow the jump around the body of the `if'.
3743      Enabled at levels `-O2', `-O3', `-Os'.
3745 `-frerun-cse-after-loop'
3746      Re-run common subexpression elimination after loop optimizations
3747      has been performed.
3749      Enabled at levels `-O2', `-O3', `-Os'.
3751 `-frerun-loop-opt'
3752      Run the loop optimizer twice.
3754      Enabled at levels `-O2', `-O3', `-Os'.
3756 `-fgcse'
3757      Perform a global common subexpression elimination pass.  This pass
3758      also performs global constant and copy propagation.
3760      _Note:_ When compiling a program using computed gotos, a GCC
3761      extension, you may get better runtime performance if you disable
3762      the global common subexpression elimination pass by adding
3763      `-fno-gcse' to the command line.
3765      Enabled at levels `-O2', `-O3', `-Os'.
3767 `-fgcse-lm'
3768      When `-fgcse-lm' is enabled, global common subexpression
3769      elimination will attempt to move loads which are only killed by
3770      stores into themselves.  This allows a loop containing a
3771      load/store sequence to be changed to a load outside the loop, and
3772      a copy/store within the loop.
3774      Enabled by default when gcse is enabled.
3776 `-fgcse-sm'
3777      When `-fgcse-sm' is enabled, a store motion pass is run after
3778      global common subexpression elimination.  This pass will attempt
3779      to move stores out of loops.  When used in conjunction with
3780      `-fgcse-lm', loops containing a load/store sequence can be changed
3781      to a load before the loop and a store after the loop.
3783      Enabled by default when gcse is enabled.
3785 `-fgcse-las'
3786      When `-fgcse-las' is enabled, the global common subexpression
3787      elimination pass eliminates redundant loads that come after stores
3788      to the same memory location (both partial and full redundancies).
3790      Enabled by default when gcse is enabled.
3792 `-floop-optimize'
3793      Perform loop optimizations: move constant expressions out of
3794      loops, simplify exit test conditions and optionally do
3795      strength-reduction and loop unrolling as well.
3797      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3799 `-fcrossjumping'
3800      Perform cross-jumping transformation. This transformation unifies
3801      equivalent code and save code size. The resulting code may or may
3802      not perform better than without cross-jumping.
3804      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3806 `-fif-conversion'
3807      Attempt to transform conditional jumps into branch-less
3808      equivalents.  This include use of conditional moves, min, max, set
3809      flags and abs instructions, and some tricks doable by standard
3810      arithmetics.  The use of conditional execution on chips where it
3811      is available is controlled by `if-conversion2'.
3813      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3815 `-fif-conversion2'
3816      Use conditional execution (where available) to transform
3817      conditional jumps into branch-less equivalents.
3819      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3821 `-fdelete-null-pointer-checks'
3822      Use global dataflow analysis to identify and eliminate useless
3823      checks for null pointers.  The compiler assumes that dereferencing
3824      a null pointer would have halted the program.  If a pointer is
3825      checked after it has already been dereferenced, it cannot be null.
3827      In some environments, this assumption is not true, and programs can
3828      safely dereference null pointers.  Use
3829      `-fno-delete-null-pointer-checks' to disable this optimization for
3830      programs which depend on that behavior.
3832      Enabled at levels `-O2', `-O3', `-Os'.
3834 `-fexpensive-optimizations'
3835      Perform a number of minor optimizations that are relatively
3836      expensive.
3838      Enabled at levels `-O2', `-O3', `-Os'.
3840 `-foptimize-register-move'
3841 `-fregmove'
3842      Attempt to reassign register numbers in move instructions and as
3843      operands of other simple instructions in order to maximize the
3844      amount of register tying.  This is especially helpful on machines
3845      with two-operand instructions.
3847      Note `-fregmove' and `-foptimize-register-move' are the same
3848      optimization.
3850      Enabled at levels `-O2', `-O3', `-Os'.
3852 `-fdelayed-branch'
3853      If supported for the target machine, attempt to reorder
3854      instructions to exploit instruction slots available after delayed
3855      branch instructions.
3857      Enabled at levels `-O', `-O2', `-O3', `-Os'.
3859 `-fschedule-insns'
3860      If supported for the target machine, attempt to reorder
3861      instructions to eliminate execution stalls due to required data
3862      being unavailable.  This helps machines that have slow floating
3863      point or memory load instructions by allowing other instructions
3864      to be issued until the result of the load or floating point
3865      instruction is required.
3867      Enabled at levels `-O2', `-O3', `-Os'.
3869 `-fschedule-insns2'
3870      Similar to `-fschedule-insns', but requests an additional pass of
3871      instruction scheduling after register allocation has been done.
3872      This is especially useful on machines with a relatively small
3873      number of registers and where memory load instructions take more
3874      than one cycle.
3876      Enabled at levels `-O2', `-O3', `-Os'.
3878 `-fno-sched-interblock'
3879      Don't schedule instructions across basic blocks.  This is normally
3880      enabled by default when scheduling before register allocation, i.e.
3881      with `-fschedule-insns' or at `-O2' or higher.
3883 `-fno-sched-spec'
3884      Don't allow speculative motion of non-load instructions.  This is
3885      normally enabled by default when scheduling before register
3886      allocation, i.e.  with `-fschedule-insns' or at `-O2' or higher.
3888 `-fsched-spec-load'
3889      Allow speculative motion of some load instructions.  This only
3890      makes sense when scheduling before register allocation, i.e. with
3891      `-fschedule-insns' or at `-O2' or higher.
3893 `-fsched-spec-load-dangerous'
3894      Allow speculative motion of more load instructions.  This only
3895      makes sense when scheduling before register allocation, i.e. with
3896      `-fschedule-insns' or at `-O2' or higher.
3898 `-fsched-stalled-insns=N'
3899      Define how many insns (if any) can be moved prematurely from the
3900      queue of stalled insns into the ready list, during the second
3901      scheduling pass.
3903 `-fsched-stalled-insns-dep=N'
3904      Define how many insn groups (cycles) will be examined for a
3905      dependency on a stalled insn that is candidate for premature
3906      removal from the queue of stalled insns.  Has an effect only
3907      during the second scheduling pass, and only if
3908      `-fsched-stalled-insns' is used and its value is not zero.
3910 `-fsched2-use-superblocks'
3911      When scheduling after register allocation, do use superblock
3912      scheduling algorithm.  Superblock scheduling allows motion across
3913      basic block boundaries resulting on faster schedules.  This option
3914      is experimental, as not all machine descriptions used by GCC model
3915      the CPU closely enough to avoid unreliable results from the
3916      algorithm.
3918      This only makes sense when scheduling after register allocation,
3919      i.e. with `-fschedule-insns2' or at `-O2' or higher.
3921 `-fsched2-use-traces'
3922      Use `-fsched2-use-superblocks' algorithm when scheduling after
3923      register allocation and additionally perform code duplication in
3924      order to increase the size of superblocks using tracer pass.  See
3925      `-ftracer' for details on trace formation.
3927      This mode should produce faster but significantly longer programs.
3928      Also without `-fbranch-probabilities' the traces constructed may
3929      not match the reality and hurt the performance.  This only makes
3930      sense when scheduling after register allocation, i.e. with
3931      `-fschedule-insns2' or at `-O2' or higher.
3933 `-fcaller-saves'
3934      Enable values to be allocated in registers that will be clobbered
3935      by function calls, by emitting extra instructions to save and
3936      restore the registers around such calls.  Such allocation is done
3937      only when it seems to result in better code than would otherwise
3938      be produced.
3940      This option is always enabled by default on certain machines,
3941      usually those which have no call-preserved registers to use
3942      instead.
3944      Enabled at levels `-O2', `-O3', `-Os'.
3946 `-fmove-all-movables'
3947      Forces all invariant computations in loops to be moved outside the
3948      loop.
3950 `-freduce-all-givs'
3951      Forces all general-induction variables in loops to be
3952      strength-reduced.
3954      _Note:_ When compiling programs written in Fortran,
3955      `-fmove-all-movables' and `-freduce-all-givs' are enabled by
3956      default when you use the optimizer.
3958      These options may generate better or worse code; results are highly
3959      dependent on the structure of loops within the source code.
3961      These two options are intended to be removed someday, once they
3962      have helped determine the efficacy of various approaches to
3963      improving loop optimizations.
3965      Please contact <gcc@gcc.gnu.org>, and describe how use of these
3966      options affects the performance of your production code.  Examples
3967      of code that runs _slower_ when these options are _enabled_ are
3968      very valuable.
3970 `-fno-peephole'
3971 `-fno-peephole2'
3972      Disable any machine-specific peephole optimizations.  The
3973      difference between `-fno-peephole' and `-fno-peephole2' is in how
3974      they are implemented in the compiler; some targets use one, some
3975      use the other, a few use both.
3977      `-fpeephole' is enabled by default.  `-fpeephole2' enabled at
3978      levels `-O2', `-O3', `-Os'.
3980 `-fno-guess-branch-probability'
3981      Do not guess branch probabilities using a randomized model.
3983      Sometimes GCC will opt to use a randomized model to guess branch
3984      probabilities, when none are available from either profiling
3985      feedback (`-fprofile-arcs') or `__builtin_expect'.  This means that
3986      different runs of the compiler on the same program may produce
3987      different object code.
3989      In a hard real-time system, people don't want different runs of the
3990      compiler to produce code that has different behavior; minimizing
3991      non-determinism is of paramount import.  This switch allows users
3992      to reduce non-determinism, possibly at the expense of inferior
3993      optimization.
3995      The default is `-fguess-branch-probability' at levels `-O', `-O2',
3996      `-O3', `-Os'.
3998 `-freorder-blocks'
3999      Reorder basic blocks in the compiled function in order to reduce
4000      number of taken branches and improve code locality.
4002      Enabled at levels `-O2', `-O3'.
4004 `-freorder-functions'
4005      Reorder basic blocks in the compiled function in order to reduce
4006      number of taken branches and improve code locality. This is
4007      implemented by using special subsections `text.hot' for most
4008      frequently executed functions and `text.unlikely' for unlikely
4009      executed functions.  Reordering is done by the linker so object
4010      file format must support named sections and linker must place them
4011      in a reasonable way.
4013      Also profile feedback must be available in to make this option
4014      effective.  See `-fprofile-arcs' for details.
4016      Enabled at levels `-O2', `-O3', `-Os'.
4018 `-fstrict-aliasing'
4019      Allows the compiler to assume the strictest aliasing rules
4020      applicable to the language being compiled.  For C (and C++), this
4021      activates optimizations based on the type of expressions.  In
4022      particular, an object of one type is assumed never to reside at
4023      the same address as an object of a different type, unless the
4024      types are almost the same.  For example, an `unsigned int' can
4025      alias an `int', but not a `void*' or a `double'.  A character type
4026      may alias any other type.
4028      Pay special attention to code like this:
4029           union a_union {
4030             int i;
4031             double d;
4032           };
4033           
4034           int f() {
4035             a_union t;
4036             t.d = 3.0;
4037             return t.i;
4038           }
4039      The practice of reading from a different union member than the one
4040      most recently written to (called "type-punning") is common.  Even
4041      with `-fstrict-aliasing', type-punning is allowed, provided the
4042      memory is accessed through the union type.  So, the code above
4043      will work as expected.  However, this code might not:
4044           int f() {
4045             a_union t;
4046             int* ip;
4047             t.d = 3.0;
4048             ip = &t.i;
4049             return *ip;
4050           }
4052      Every language that wishes to perform language-specific alias
4053      analysis should define a function that computes, given an `tree'
4054      node, an alias set for the node.  Nodes in different alias sets
4055      are not allowed to alias.  For an example, see the C front-end
4056      function `c_get_alias_set'.
4058      Enabled at levels `-O2', `-O3', `-Os'.
4060 `-falign-functions'
4061 `-falign-functions=N'
4062      Align the start of functions to the next power-of-two greater than
4063      N, skipping up to N bytes.  For instance, `-falign-functions=32'
4064      aligns functions to the next 32-byte boundary, but
4065      `-falign-functions=24' would align to the next 32-byte boundary
4066      only if this can be done by skipping 23 bytes or less.
4068      `-fno-align-functions' and `-falign-functions=1' are equivalent
4069      and mean that functions will not be aligned.
4071      Some assemblers only support this flag when N is a power of two;
4072      in that case, it is rounded up.
4074      If N is not specified or is zero, use a machine-dependent default.
4076      Enabled at levels `-O2', `-O3'.
4078 `-falign-labels'
4079 `-falign-labels=N'
4080      Align all branch targets to a power-of-two boundary, skipping up to
4081      N bytes like `-falign-functions'.  This option can easily make
4082      code slower, because it must insert dummy operations for when the
4083      branch target is reached in the usual flow of the code.
4085      `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
4086      that labels will not be aligned.
4088      If `-falign-loops' or `-falign-jumps' are applicable and are
4089      greater than this value, then their values are used instead.
4091      If N is not specified or is zero, use a machine-dependent default
4092      which is very likely to be `1', meaning no alignment.
4094      Enabled at levels `-O2', `-O3'.
4096 `-falign-loops'
4097 `-falign-loops=N'
4098      Align loops to a power-of-two boundary, skipping up to N bytes
4099      like `-falign-functions'.  The hope is that the loop will be
4100      executed many times, which will make up for any execution of the
4101      dummy operations.
4103      `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
4104      that loops will not be aligned.
4106      If N is not specified or is zero, use a machine-dependent default.
4108      Enabled at levels `-O2', `-O3'.
4110 `-falign-jumps'
4111 `-falign-jumps=N'
4112      Align branch targets to a power-of-two boundary, for branch targets
4113      where the targets can only be reached by jumping, skipping up to N
4114      bytes like `-falign-functions'.  In this case, no dummy operations
4115      need be executed.
4117      `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
4118      that loops will not be aligned.
4120      If N is not specified or is zero, use a machine-dependent default.
4122      Enabled at levels `-O2', `-O3'.
4124 `-frename-registers'
4125      Attempt to avoid false dependencies in scheduled code by making use
4126      of registers left over after register allocation.  This
4127      optimization will most benefit processors with lots of registers.
4128      It can, however, make debugging impossible, since variables will
4129      no longer stay in a "home register".
4131 `-fweb'
4132      Constructs webs as commonly used for register allocation purposes
4133      and assign each web individual pseudo register.  This allows the
4134      register allocation pass to operate on pseudos directly, but also
4135      strengthens several other optimization passes, such as CSE, loop
4136      optimizer and trivial dead code remover.  It can, however, make
4137      debugging impossible, since variables will no longer stay in a
4138      "home register".
4140      Enabled at levels `-O3'.
4142 `-fno-cprop-registers'
4143      After register allocation and post-register allocation instruction
4144      splitting, we perform a copy-propagation pass to try to reduce
4145      scheduling dependencies and occasionally eliminate the copy.
4147      Disabled at levels `-O', `-O2', `-O3', `-Os'.
4149 `-fprofile-generate'
4150      Enable options usually used for instrumenting application to
4151      produce profile useful for later recompilation with profile
4152      feedback based optimization.  You must use `-fprofile-generate'
4153      both when compiling and when linking your program.
4155      The following options are enabled: `-fprofile-arcs',
4156      `-fprofile-values', `-fvpt'.
4158 `-fprofile-use'
4159      Enable profile feedback directed optimizations, and optimizations
4160      generally profitable only with profile feedback available.
4162      The following options are enabled: `-fbranch-probabilities',
4163      `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer'.
4165  The following options control compiler behavior regarding floating
4166 point arithmetic.  These options trade off between speed and
4167 correctness.  All must be specifically enabled.
4169 `-ffloat-store'
4170      Do not store floating point variables in registers, and inhibit
4171      other options that might change whether a floating point value is
4172      taken from a register or memory.
4174      This option prevents undesirable excess precision on machines such
4175      as the 68000 where the floating registers (of the 68881) keep more
4176      precision than a `double' is supposed to have.  Similarly for the
4177      x86 architecture.  For most programs, the excess precision does
4178      only good, but a few programs rely on the precise definition of
4179      IEEE floating point.  Use `-ffloat-store' for such programs, after
4180      modifying them to store all pertinent intermediate computations
4181      into variables.
4183 `-ffast-math'
4184      Sets `-fno-math-errno', `-funsafe-math-optimizations',
4185      `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math'
4186      and `-fno-signaling-nans'.
4188      This option causes the preprocessor macro `__FAST_MATH__' to be
4189      defined.
4191      This option should never be turned on by any `-O' option since it
4192      can result in incorrect output for programs which depend on an
4193      exact implementation of IEEE or ISO rules/specifications for math
4194      functions.
4196 `-fno-math-errno'
4197      Do not set ERRNO after calling math functions that are executed
4198      with a single instruction, e.g., sqrt.  A program that relies on
4199      IEEE exceptions for math error handling may want to use this flag
4200      for speed while maintaining IEEE arithmetic compatibility.
4202      This option should never be turned on by any `-O' option since it
4203      can result in incorrect output for programs which depend on an
4204      exact implementation of IEEE or ISO rules/specifications for math
4205      functions.
4207      The default is `-fmath-errno'.
4209 `-funsafe-math-optimizations'
4210      Allow optimizations for floating-point arithmetic that (a) assume
4211      that arguments and results are valid and (b) may violate IEEE or
4212      ANSI standards.  When used at link-time, it may include libraries
4213      or startup files that change the default FPU control word or other
4214      similar optimizations.
4216      This option should never be turned on by any `-O' option since it
4217      can result in incorrect output for programs which depend on an
4218      exact implementation of IEEE or ISO rules/specifications for math
4219      functions.
4221      The default is `-fno-unsafe-math-optimizations'.
4223 `-ffinite-math-only'
4224      Allow optimizations for floating-point arithmetic that assume that
4225      arguments and results are not NaNs or +-Infs.
4227      This option should never be turned on by any `-O' option since it
4228      can result in incorrect output for programs which depend on an
4229      exact implementation of IEEE or ISO rules/specifications.
4231      The default is `-fno-finite-math-only'.
4233 `-fno-trapping-math'
4234      Compile code assuming that floating-point operations cannot
4235      generate user-visible traps.  These traps include division by
4236      zero, overflow, underflow, inexact result and invalid operation.
4237      This option implies `-fno-signaling-nans'.  Setting this option
4238      may allow faster code if one relies on "non-stop" IEEE arithmetic,
4239      for example.
4241      This option should never be turned on by any `-O' option since it
4242      can result in incorrect output for programs which depend on an
4243      exact implementation of IEEE or ISO rules/specifications for math
4244      functions.
4246      The default is `-ftrapping-math'.
4248 `-frounding-math'
4249      Disable transformations and optimizations that assume default
4250      floating point rounding behavior.  This is round-to-zero for all
4251      floating point to integer conversions, and round-to-nearest for
4252      all other arithmetic truncations.  This option should be specified
4253      for programs that change the FP rounding mode dynamically, or that
4254      may be executed with a non-default rounding mode.  This option
4255      disables constant folding of floating point expressions at
4256      compile-time (which may be affected by rounding mode) and
4257      arithmetic transformations that are unsafe in the presence of
4258      sign-dependent rounding modes.
4260      The default is `-fno-rounding-math'.
4262      This option is experimental and does not currently guarantee to
4263      disable all GCC optimizations that are affected by rounding mode.
4264      Future versions of GCC may provide finer control of this setting
4265      using C99's `FENV_ACCESS' pragma.  This command line option will
4266      be used to specify the default state for `FENV_ACCESS'.
4268 `-fsignaling-nans'
4269      Compile code assuming that IEEE signaling NaNs may generate
4270      user-visible traps during floating-point operations.  Setting this
4271      option disables optimizations that may change the number of
4272      exceptions visible with signaling NaNs.  This option implies
4273      `-ftrapping-math'.
4275      This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
4276      defined.
4278      The default is `-fno-signaling-nans'.
4280      This option is experimental and does not currently guarantee to
4281      disable all GCC optimizations that affect signaling NaN behavior.
4283 `-fsingle-precision-constant'
4284      Treat floating point constant as single precision constant instead
4285      of implicitly converting it to double precision constant.
4287  The following options control optimizations that may improve
4288 performance, but are not enabled by any `-O' options.  This section
4289 includes experimental options that may produce broken code.
4291 `-fbranch-probabilities'
4292      After running a program compiled with `-fprofile-arcs' (*note
4293      Options for Debugging Your Program or `gcc': Debugging Options.),
4294      you can compile it a second time using `-fbranch-probabilities',
4295      to improve optimizations based on the number of times each branch
4296      was taken.  When the program compiled with `-fprofile-arcs' exits
4297      it saves arc execution counts to a file called `SOURCENAME.gcda'
4298      for each source file  The information in this data file is very
4299      dependent on the structure of the generated code, so you must use
4300      the same source code and the same optimization options for both
4301      compilations.
4303      With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
4304      each `JUMP_INSN' and `CALL_INSN'.  These can be used to improve
4305      optimization.  Currently, they are only used in one place: in
4306      `reorg.c', instead of guessing which path a branch is mostly to
4307      take, the `REG_BR_PROB' values are used to exactly determine which
4308      path is taken more often.
4310 `-fprofile-values'
4311      If combined with `-fprofile-arcs', it adds code so that some data
4312      about values of expressions in the program is gathered.
4314      With `-fbranch-probabilities', it reads back the data gathered
4315      from profiling values of expressions and adds `REG_VALUE_PROFILE'
4316      notes to instructions for their later usage in optimizations.
4318 `-fvpt'
4319      If combined with `-fprofile-arcs', it instructs the compiler to add
4320      a code to gather information about values of expressions.
4322      With `-fbranch-probabilities', it reads back the data gathered and
4323      actually performs the optimizations based on them.  Currently the
4324      optimizations include specialization of division operation using
4325      the knowledge about the value of the denominator.
4327 `-fnew-ra'
4328      Use a graph coloring register allocator.  Currently this option is
4329      meant for testing, so we are interested to hear about
4330      miscompilations with `-fnew-ra'.
4332 `-ftracer'
4333      Perform tail duplication to enlarge superblock size. This
4334      transformation simplifies the control flow of the function
4335      allowing other optimizations to do better job.
4337 `-funit-at-a-time'
4338      Parse the whole compilation unit before starting to produce code.
4339      This allows some extra optimizations to take place but consumes
4340      more memory.
4342 `-funroll-loops'
4343      Unroll loops whose number of iterations can be determined at
4344      compile time or upon entry to the loop.  `-funroll-loops' implies
4345      `-frerun-cse-after-loop'.  It also turns on complete loop peeling
4346      (i.e. complete removal of loops with small constant number of
4347      iterations).  This option makes code larger, and may or may not
4348      make it run faster.
4350 `-funroll-all-loops'
4351      Unroll all loops, even if their number of iterations is uncertain
4352      when the loop is entered.  This usually makes programs run more
4353      slowly.  `-funroll-all-loops' implies the same options as
4354      `-funroll-loops'.
4356 `-fpeel-loops'
4357      Peels the loops for that there is enough information that they do
4358      not roll much (from profile feedback).  It also turns on complete
4359      loop peeling (i.e. complete removal of loops with small constant
4360      number of iterations).
4362 `-funswitch-loops'
4363      Move branches with loop invariant conditions out of the loop, with
4364      duplicates of the loop on both branches (modified according to
4365      result of the condition).
4367 `-fold-unroll-loops'
4368      Unroll loops whose number of iterations can be determined at
4369      compile time or upon entry to the loop, using the old loop
4370      unroller whose loop recognition is based on notes from frontend.
4371      `-fold-unroll-loops' implies both `-fstrength-reduce' and
4372      `-frerun-cse-after-loop'.  This option makes code larger, and may
4373      or may not make it run faster.
4375 `-fold-unroll-all-loops'
4376      Unroll all loops, even if their number of iterations is uncertain
4377      when the loop is entered. This is done using the old loop unroller
4378      whose loop recognition is based on notes from frontend.  This
4379      usually makes programs run more slowly.  `-fold-unroll-all-loops'
4380      implies the same options as `-fold-unroll-loops'.
4382 `-funswitch-loops'
4383      Move branches with loop invariant conditions out of the loop, with
4384      duplicates of the loop on both branches (modified according to
4385      result of the condition).
4387 `-funswitch-loops'
4388      Move branches with loop invariant conditions out of the loop, with
4389      duplicates of the loop on both branches (modified according to
4390      result of the condition).
4392 `-fprefetch-loop-arrays'
4393      If supported by the target machine, generate instructions to
4394      prefetch memory to improve the performance of loops that access
4395      large arrays.
4397      Disabled at level `-Os'.
4399 `-ffunction-sections'
4400 `-fdata-sections'
4401      Place each function or data item into its own section in the output
4402      file if the target supports arbitrary sections.  The name of the
4403      function or the name of the data item determines the section's name
4404      in the output file.
4406      Use these options on systems where the linker can perform
4407      optimizations to improve locality of reference in the instruction
4408      space.  Most systems using the ELF object format and SPARC
4409      processors running Solaris 2 have linkers with such optimizations.
4410      AIX may have these optimizations in the future.
4412      Only use these options when there are significant benefits from
4413      doing so.  When you specify these options, the assembler and
4414      linker will create larger object and executable files and will
4415      also be slower.  You will not be able to use `gprof' on all
4416      systems if you specify this option and you may have problems with
4417      debugging if you specify both this option and `-g'.
4419 `-fbranch-target-load-optimize'
4420      Perform branch target register load optimization before prologue /
4421      epilogue threading.  The use of target registers can typically be
4422      exposed only during reload, thus hoisting loads out of loops and
4423      doing inter-block scheduling needs a separate optimization pass.
4425 `-fbranch-target-load-optimize2'
4426      Perform branch target register load optimization after prologue /
4427      epilogue threading.
4429 `--param NAME=VALUE'
4430      In some places, GCC uses various constants to control the amount of
4431      optimization that is done.  For example, GCC will not inline
4432      functions that contain more that a certain number of instructions.
4433      You can control some of these constants on the command-line using
4434      the `--param' option.
4436      The names of specific parameters, and the meaning of the values,
4437      are tied to the internals of the compiler, and are subject to
4438      change without notice in future releases.
4440      In each case, the VALUE is an integer.  The allowable choices for
4441      NAME are given in the following table:
4443     `max-crossjump-edges'
4444           The maximum number of incoming edges to consider for
4445           crossjumping.  The algorithm used by `-fcrossjumping' is
4446           O(N^2) in the number of edges incoming to each block.
4447           Increasing values mean more aggressive optimization, making
4448           the compile time increase with probably small improvement in
4449           executable size.
4451     `max-delay-slot-insn-search'
4452           The maximum number of instructions to consider when looking
4453           for an instruction to fill a delay slot.  If more than this
4454           arbitrary number of instructions is searched, the time
4455           savings from filling the delay slot will be minimal so stop
4456           searching.  Increasing values mean more aggressive
4457           optimization, making the compile time increase with probably
4458           small improvement in executable run time.
4460     `max-delay-slot-live-search'
4461           When trying to fill delay slots, the maximum number of
4462           instructions to consider when searching for a block with
4463           valid live register information.  Increasing this arbitrarily
4464           chosen value means more aggressive optimization, increasing
4465           the compile time.  This parameter should be removed when the
4466           delay slot code is rewritten to maintain the control-flow
4467           graph.
4469     `max-gcse-memory'
4470           The approximate maximum amount of memory that will be
4471           allocated in order to perform the global common subexpression
4472           elimination optimization.  If more memory than specified is
4473           required, the optimization will not be done.
4475     `max-gcse-passes'
4476           The maximum number of passes of GCSE to run.
4478     `max-pending-list-length'
4479           The maximum number of pending dependencies scheduling will
4480           allow before flushing the current state and starting over.
4481           Large functions with few branches or calls can create
4482           excessively large lists which needlessly consume memory and
4483           resources.
4485     `max-inline-insns-single'
4486           Several parameters control the tree inliner used in gcc.
4487           This number sets the maximum number of instructions (counted
4488           in GCC's internal representation) in a single function that
4489           the tree inliner will consider for inlining.  This only
4490           affects functions declared inline and methods implemented in
4491           a class declaration (C++).  The default value is 500.
4493     `max-inline-insns-auto'
4494           When you use `-finline-functions' (included in `-O3'), a lot
4495           of functions that would otherwise not be considered for
4496           inlining by the compiler will be investigated.  To those
4497           functions, a different (more restrictive) limit compared to
4498           functions declared inline can be applied.  The default value
4499           is 100.
4501     `large-function-insns'
4502           The limit specifying really large functions.  For functions
4503           greater than this limit inlining is constrained by `--param
4504           large-function-growth'.  This parameter is useful primarily
4505           to avoid extreme compilation time caused by non-linear
4506           algorithms used by the backend.  This parameter is ignored
4507           when `-funit-at-a-time' is not used.  The default value is
4508           3000.
4510     `large-function-growth'
4511           Specifies maximal growth of large function caused by inlining
4512           in percents.  This parameter is ignored when
4513           `-funit-at-a-time' is not used.  The default value is 200.
4515     `inline-unit-growth'
4516           Specifies maximal overall growth of the compilation unit
4517           caused by inlining.  This parameter is ignored when
4518           `-funit-at-a-time' is not used.  The default value is 150.
4520     `max-inline-insns-rtl'
4521           For languages that use the RTL inliner (this happens at a
4522           later stage than tree inlining), you can set the maximum
4523           allowable size (counted in RTL instructions) for the RTL
4524           inliner with this parameter.  The default value is 600.
4526     `max-unrolled-insns'
4527           The maximum number of instructions that a loop should have if
4528           that loop is unrolled, and if the loop is unrolled, it
4529           determines how many times the loop code is unrolled.
4531     `max-average-unrolled-insns'
4532           The maximum number of instructions biased by probabilities of
4533           their execution that a loop should have if that loop is
4534           unrolled, and if the loop is unrolled, it determines how many
4535           times the loop code is unrolled.
4537     `max-unroll-times'
4538           The maximum number of unrollings of a single loop.
4540     `max-peeled-insns'
4541           The maximum number of instructions that a loop should have if
4542           that loop is peeled, and if the loop is peeled, it determines
4543           how many times the loop code is peeled.
4545     `max-peel-times'
4546           The maximum number of peelings of a single loop.
4548     `max-completely-peeled-insns'
4549           The maximum number of insns of a completely peeled loop.
4551     `max-completely-peel-times'
4552           The maximum number of iterations of a loop to be suitable for
4553           complete peeling.
4555     `max-unswitch-insns'
4556           The maximum number of insns of an unswitched loop.
4558     `max-unswitch-level'
4559           The maximum number of branches unswitched in a single loop.
4561     `hot-bb-count-fraction'
4562           Select fraction of the maximal count of repetitions of basic
4563           block in program given basic block needs to have to be
4564           considered hot.
4566     `hot-bb-frequency-fraction'
4567           Select fraction of the maximal frequency of executions of
4568           basic block in function given basic block needs to have to be
4569           considered hot
4571     `tracer-dynamic-coverage'
4572     `tracer-dynamic-coverage-feedback'
4573           This value is used to limit superblock formation once the
4574           given percentage of executed instructions is covered.  This
4575           limits unnecessary code size expansion.
4577           The `tracer-dynamic-coverage-feedback' is used only when
4578           profile feedback is available.  The real profiles (as opposed
4579           to statically estimated ones) are much less balanced allowing
4580           the threshold to be larger value.
4582     `tracer-max-code-growth'
4583           Stop tail duplication once code growth has reached given
4584           percentage.  This is rather hokey argument, as most of the
4585           duplicates will be eliminated later in cross jumping, so it
4586           may be set to much higher values than is the desired code
4587           growth.
4589     `tracer-min-branch-ratio'
4590           Stop reverse growth when the reverse probability of best edge
4591           is less than this threshold (in percent).
4593     `tracer-min-branch-ratio'
4594     `tracer-min-branch-ratio-feedback'
4595           Stop forward growth if the best edge do have probability
4596           lower than this threshold.
4598           Similarly to `tracer-dynamic-coverage' two values are
4599           present, one for compilation for profile feedback and one for
4600           compilation without.  The value for compilation with profile
4601           feedback needs to be more conservative (higher) in order to
4602           make tracer effective.
4604     `max-cse-path-length'
4605           Maximum number of basic blocks on path that cse considers.
4607     `ggc-min-expand'
4608           GCC uses a garbage collector to manage its own memory
4609           allocation.  This parameter specifies the minimum percentage
4610           by which the garbage collector's heap should be allowed to
4611           expand between collections.  Tuning this may improve
4612           compilation speed; it has no effect on code generation.
4614           The default is 30% + 70% * (RAM/1GB) with an upper bound of
4615           100% when RAM >= 1GB.  If `getrlimit' is available, the
4616           notion of "RAM" is the smallest of actual RAM, RLIMIT_RSS,
4617           RLIMIT_DATA and RLIMIT_AS.  If GCC is not able to calculate
4618           RAM on a particular platform, the lower bound of 30% is used.
4619           Setting this parameter and `ggc-min-heapsize' to zero causes
4620           a full collection to occur at every opportunity.  This is
4621           extremely slow, but can be useful for debugging.
4623     `ggc-min-heapsize'
4624           Minimum size of the garbage collector's heap before it begins
4625           bothering to collect garbage.  The first collection occurs
4626           after the heap expands by `ggc-min-expand'% beyond
4627           `ggc-min-heapsize'.  Again, tuning this may improve
4628           compilation speed, and has no effect on code generation.
4630           The default is RAM/8, with a lower bound of 4096 (four
4631           megabytes) and an upper bound of 131072 (128 megabytes).  If
4632           `getrlimit' is available, the notion of "RAM" is the smallest
4633           of actual RAM, RLIMIT_RSS, RLIMIT_DATA and RLIMIT_AS.  If GCC
4634           is not able to calculate RAM on a particular platform, the
4635           lower bound is used.  Setting this parameter very large
4636           effectively disables garbage collection.  Setting this
4637           parameter and `ggc-min-expand' to zero causes a full
4638           collection to occur at every opportunity.
4640     `max-reload-search-insns'
4641           The maximum number of instruction reload should look backward
4642           for equivalent register.  Increasing values mean more
4643           aggressive optimization, making the compile time increase
4644           with probably slightly better performance.  The default value
4645           is 100.
4647     `max-cselib-memory-location'
4648           The maximum number of memory locations cselib should take
4649           into acount.  Increasing values mean more aggressive
4650           optimization, making the compile time increase with probably
4651           slightly better performance.  The default value is 500.
4653     `reorder-blocks-duplicate'
4654     `reorder-blocks-duplicate-feedback'
4655           Used by basic block reordering pass to decide whether to use
4656           unconditional branch or duplicate the code on its
4657           destination.  Code is duplicated when its estimated size is
4658           smaller than this value multiplied by the estimated size of
4659           unconditional jump in the hot spots of the program.
4661           The `reorder-block-duplicate-feedback' is used only when
4662           profile feedback is available and may be set to higher values
4663           than `reorder-block-duplicate' since information about the
4664           hot spots is more accurate.
4666 \x1f
4667 File: gcc.info,  Node: Preprocessor Options,  Next: Assembler Options,  Prev: Optimize Options,  Up: Invoking GCC
4669 Options Controlling the Preprocessor
4670 ====================================
4672  These options control the C preprocessor, which is run on each C source
4673 file before actual compilation.
4675  If you use the `-E' option, nothing is done except preprocessing.
4676 Some of these options make sense only together with `-E' because they
4677 cause the preprocessor output to be unsuitable for actual compilation.
4679      You can use `-Wp,OPTION' to bypass the compiler driver and pass
4680      OPTION directly through to the preprocessor.  If OPTION contains
4681      commas, it is split into multiple options at the commas.  However,
4682      many options are modified, translated or interpreted by the
4683      compiler driver before being passed to the preprocessor, and `-Wp'
4684      forcibly bypasses this phase.  The preprocessor's direct interface
4685      is undocumented and subject to change, so whenever possible you
4686      should avoid using `-Wp' and let the driver handle the options
4687      instead.
4689 `-Xpreprocessor OPTION'
4690      Pass OPTION as an option to the preprocessor.  You can use this to
4691      supply system-specific preprocessor options which GCC does not
4692      know how to recognize.
4694      If you want to pass an option that takes an argument, you must use
4695      `-Xpreprocessor' twice, once for the option and once for the
4696      argument.
4698 `-D NAME'
4699      Predefine NAME as a macro, with definition `1'.
4701 `-D NAME=DEFINITION'
4702      Predefine NAME as a macro, with definition DEFINITION.  The
4703      contents of DEFINITION are tokenized and processed as if they
4704      appeared during translation phase three in a `#define' directive.
4705      In particular, the definition will be truncated by embedded
4706      newline characters.
4708      If you are invoking the preprocessor from a shell or shell-like
4709      program you may need to use the shell's quoting syntax to protect
4710      characters such as spaces that have a meaning in the shell syntax.
4712      If you wish to define a function-like macro on the command line,
4713      write its argument list with surrounding parentheses before the
4714      equals sign (if any).  Parentheses are meaningful to most shells,
4715      so you will need to quote the option.  With `sh' and `csh',
4716      `-D'NAME(ARGS...)=DEFINITION'' works.
4718      `-D' and `-U' options are processed in the order they are given on
4719      the command line.  All `-imacros FILE' and `-include FILE' options
4720      are processed after all `-D' and `-U' options.
4722 `-U NAME'
4723      Cancel any previous definition of NAME, either built in or
4724      provided with a `-D' option.
4726 `-undef'
4727      Do not predefine any system-specific or GCC-specific macros.  The
4728      standard predefined macros remain defined.
4730 `-I DIR'
4731      Add the directory DIR to the list of directories to be searched
4732      for header files.  Directories named by `-I' are searched before
4733      the standard system include directories.  If the directory DIR is
4734      a standard system include directory, the option is ignored to
4735      ensure that the default search order for system directories and
4736      the special treatment of system headers are not defeated .
4738 `-o FILE'
4739      Write output to FILE.  This is the same as specifying FILE as the
4740      second non-option argument to `cpp'.  `gcc' has a different
4741      interpretation of a second non-option argument, so you must use
4742      `-o' to specify the output file.
4744 `-Wall'
4745      Turns on all optional warnings which are desirable for normal code.
4746      At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
4747      warning about integer promotion causing a change of sign in `#if'
4748      expressions.  Note that many of the preprocessor's warnings are on
4749      by default and have no options to control them.
4751 `-Wcomment'
4752 `-Wcomments'
4753      Warn whenever a comment-start sequence `/*' appears in a `/*'
4754      comment, or whenever a backslash-newline appears in a `//' comment.
4755      (Both forms have the same effect.)
4757 `-Wtrigraphs'
4758      Most trigraphs in comments cannot affect the meaning of the
4759      program.  However, a trigraph that would form an escaped newline
4760      (`??/' at the end of a line) can, by changing where the comment
4761      begins or ends.  Therefore, only trigraphs that would form escaped
4762      newlines produce warnings inside a comment.
4764      This option is implied by `-Wall'.  If `-Wall' is not given, this
4765      option is still enabled unless trigraphs are enabled.  To get
4766      trigraph conversion without warnings, but get the other `-Wall'
4767      warnings, use `-trigraphs -Wall -Wno-trigraphs'.
4769 `-Wtraditional'
4770      Warn about certain constructs that behave differently in
4771      traditional and ISO C.  Also warn about ISO C constructs that have
4772      no traditional C equivalent, and problematic constructs which
4773      should be avoided.
4775 `-Wimport'
4776      Warn the first time `#import' is used.
4778 `-Wundef'
4779      Warn whenever an identifier which is not a macro is encountered in
4780      an `#if' directive, outside of `defined'.  Such identifiers are
4781      replaced with zero.
4783 `-Wunused-macros'
4784      Warn about macros defined in the main file that are unused.  A
4785      macro is "used" if it is expanded or tested for existence at least
4786      once.  The preprocessor will also warn if the macro has not been
4787      used at the time it is redefined or undefined.
4789      Built-in macros, macros defined on the command line, and macros
4790      defined in include files are not warned about.
4792      *Note:* If a macro is actually used, but only used in skipped
4793      conditional blocks, then CPP will report it as unused.  To avoid
4794      the warning in such a case, you might improve the scope of the
4795      macro's definition by, for example, moving it into the first
4796      skipped block.  Alternatively, you could provide a dummy use with
4797      something like:
4799           #if defined the_macro_causing_the_warning
4800           #endif
4802 `-Wendif-labels'
4803      Warn whenever an `#else' or an `#endif' are followed by text.
4804      This usually happens in code of the form
4806           #if FOO
4807           ...
4808           #else FOO
4809           ...
4810           #endif FOO
4812      The second and third `FOO' should be in comments, but often are not
4813      in older programs.  This warning is on by default.
4815 `-Werror'
4816      Make all warnings into hard errors.  Source code which triggers
4817      warnings will be rejected.
4819 `-Wsystem-headers'
4820      Issue warnings for code in system headers.  These are normally
4821      unhelpful in finding bugs in your own code, therefore suppressed.
4822      If you are responsible for the system library, you may want to see
4823      them.
4825 `-w'
4826      Suppress all warnings, including those which GNU CPP issues by
4827      default.
4829 `-pedantic'
4830      Issue all the mandatory diagnostics listed in the C standard.
4831      Some of them are left out by default, since they trigger
4832      frequently on harmless code.
4834 `-pedantic-errors'
4835      Issue all the mandatory diagnostics, and make all mandatory
4836      diagnostics into errors.  This includes mandatory diagnostics that
4837      GCC issues without `-pedantic' but treats as warnings.
4839 `-M'
4840      Instead of outputting the result of preprocessing, output a rule
4841      suitable for `make' describing the dependencies of the main source
4842      file.  The preprocessor outputs one `make' rule containing the
4843      object file name for that source file, a colon, and the names of
4844      all the included files, including those coming from `-include' or
4845      `-imacros' command line options.
4847      Unless specified explicitly (with `-MT' or `-MQ'), the object file
4848      name consists of the basename of the source file with any suffix
4849      replaced with object file suffix.  If there are many included
4850      files then the rule is split into several lines using `\'-newline.
4851      The rule has no commands.
4853      This option does not suppress the preprocessor's debug output,
4854      such as `-dM'.  To avoid mixing such debug output with the
4855      dependency rules you should explicitly specify the dependency
4856      output file with `-MF', or use an environment variable like
4857      `DEPENDENCIES_OUTPUT' (*note Environment Variables::).  Debug
4858      output will still be sent to the regular output stream as normal.
4860      Passing `-M' to the driver implies `-E', and suppresses warnings
4861      with an implicit `-w'.
4863 `-MM'
4864      Like `-M' but do not mention header files that are found in system
4865      header directories, nor header files that are included, directly
4866      or indirectly, from such a header.
4868      This implies that the choice of angle brackets or double quotes in
4869      an `#include' directive does not in itself determine whether that
4870      header will appear in `-MM' dependency output.  This is a slight
4871      change in semantics from GCC versions 3.0 and earlier.
4873 `-MF FILE'
4874      When used with `-M' or `-MM', specifies a file to write the
4875      dependencies to.  If no `-MF' switch is given the preprocessor
4876      sends the rules to the same place it would have sent preprocessed
4877      output.
4879      When used with the driver options `-MD' or `-MMD', `-MF' overrides
4880      the default dependency output file.
4882 `-MG'
4883      In conjunction with an option such as `-M' requesting dependency
4884      generation, `-MG' assumes missing header files are generated files
4885      and adds them to the dependency list without raising an error.
4886      The dependency filename is taken directly from the `#include'
4887      directive without prepending any path.  `-MG' also suppresses
4888      preprocessed output, as a missing header file renders this useless.
4890      This feature is used in automatic updating of makefiles.
4892 `-MP'
4893      This option instructs CPP to add a phony target for each dependency
4894      other than the main file, causing each to depend on nothing.  These
4895      dummy rules work around errors `make' gives if you remove header
4896      files without updating the `Makefile' to match.
4898      This is typical output:
4900           test.o: test.c test.h
4901           
4902           test.h:
4904 `-MT TARGET'
4905      Change the target of the rule emitted by dependency generation.  By
4906      default CPP takes the name of the main input file, including any
4907      path, deletes any file suffix such as `.c', and appends the
4908      platform's usual object suffix.  The result is the target.
4910      An `-MT' option will set the target to be exactly the string you
4911      specify.  If you want multiple targets, you can specify them as a
4912      single argument to `-MT', or use multiple `-MT' options.
4914      For example, `-MT '$(objpfx)foo.o'' might give
4916           $(objpfx)foo.o: foo.c
4918 `-MQ TARGET'
4919      Same as `-MT', but it quotes any characters which are special to
4920      Make.  `-MQ '$(objpfx)foo.o'' gives
4922           $$(objpfx)foo.o: foo.c
4924      The default target is automatically quoted, as if it were given
4925      with `-MQ'.
4927 `-MD'
4928      `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
4929      implied.  The driver determines FILE based on whether an `-o'
4930      option is given.  If it is, the driver uses its argument but with
4931      a suffix of `.d', otherwise it take the basename of the input file
4932      and applies a `.d' suffix.
4934      If `-MD' is used in conjunction with `-E', any `-o' switch is
4935      understood to specify the dependency output file (but *note -MF:
4936      dashMF.), but if used without `-E', each `-o' is understood to
4937      specify a target object file.
4939      Since `-E' is not implied, `-MD' can be used to generate a
4940      dependency output file as a side-effect of the compilation process.
4942 `-MMD'
4943      Like `-MD' except mention only user header files, not system
4944      -header files.
4946 `-fpch-deps'
4947      When using precompiled headers (*note Precompiled Headers::), this
4948      flag will cause the dependency-output flags to also list the files
4949      from the precompiled header's dependencies.  If not specified only
4950      the precompiled header would be listed and not the files that were
4951      used to create it because those files are not consulted when a
4952      precompiled header is used.
4954 `-x c'
4955 `-x c++'
4956 `-x objective-c'
4957 `-x assembler-with-cpp'
4958      Specify the source language: C, C++, Objective-C, or assembly.
4959      This has nothing to do with standards conformance or extensions;
4960      it merely selects which base syntax to expect.  If you give none
4961      of these options, cpp will deduce the language from the extension
4962      of the source file: `.c', `.cc', `.m', or `.S'.  Some other common
4963      extensions for C++ and assembly are also recognized.  If cpp does
4964      not recognize the extension, it will treat the file as C; this is
4965      the most generic mode.
4967      *Note:* Previous versions of cpp accepted a `-lang' option which
4968      selected both the language and the standards conformance level.
4969      This option has been removed, because it conflicts with the `-l'
4970      option.
4972 `-std=STANDARD'
4973 `-ansi'
4974      Specify the standard to which the code should conform.  Currently
4975      CPP knows about C and C++ standards; others may be added in the
4976      future.
4978      STANDARD may be one of:
4979     `iso9899:1990'
4980     `c89'
4981           The ISO C standard from 1990.  `c89' is the customary
4982           shorthand for this version of the standard.
4984           The `-ansi' option is equivalent to `-std=c89'.
4986     `iso9899:199409'
4987           The 1990 C standard, as amended in 1994.
4989     `iso9899:1999'
4990     `c99'
4991     `iso9899:199x'
4992     `c9x'
4993           The revised ISO C standard, published in December 1999.
4994           Before publication, this was known as C9X.
4996     `gnu89'
4997           The 1990 C standard plus GNU extensions.  This is the default.
4999     `gnu99'
5000     `gnu9x'
5001           The 1999 C standard plus GNU extensions.
5003     `c++98'
5004           The 1998 ISO C++ standard plus amendments.
5006     `gnu++98'
5007           The same as `-std=c++98' plus GNU extensions.  This is the
5008           default for C++ code.
5010 `-I-'
5011      Split the include path.  Any directories specified with `-I'
5012      options before `-I-' are searched only for headers requested with
5013      `#include "FILE"'; they are not searched for `#include <FILE>'.
5014      If additional directories are specified with `-I' options after
5015      the `-I-', those directories are searched for all `#include'
5016      directives.
5018      In addition, `-I-' inhibits the use of the directory of the current
5019      file directory as the first search directory for `#include "FILE"'.
5021 `-nostdinc'
5022      Do not search the standard system directories for header files.
5023      Only the directories you have specified with `-I' options (and the
5024      directory of the current file, if appropriate) are searched.
5026 `-nostdinc++'
5027      Do not search for header files in the C++-specific standard
5028      directories, but do still search the other standard directories.
5029      (This option is used when building the C++ library.)
5031 `-include FILE'
5032      Process FILE as if `#include "file"' appeared as the first line of
5033      the primary source file.  However, the first directory searched
5034      for FILE is the preprocessor's working directory _instead of_ the
5035      directory containing the main source file.  If not found there, it
5036      is searched for in the remainder of the `#include "..."' search
5037      chain as normal.
5039      If multiple `-include' options are given, the files are included
5040      in the order they appear on the command line.
5042 `-imacros FILE'
5043      Exactly like `-include', except that any output produced by
5044      scanning FILE is thrown away.  Macros it defines remain defined.
5045      This allows you to acquire all the macros from a header without
5046      also processing its declarations.
5048      All files specified by `-imacros' are processed before all files
5049      specified by `-include'.
5051 `-idirafter DIR'
5052      Search DIR for header files, but do it _after_ all directories
5053      specified with `-I' and the standard system directories have been
5054      exhausted.  DIR is treated as a system include directory.
5056 `-iprefix PREFIX'
5057      Specify PREFIX as the prefix for subsequent `-iwithprefix'
5058      options.  If the prefix represents a directory, you should include
5059      the final `/'.
5061 `-iwithprefix DIR'
5062 `-iwithprefixbefore DIR'
5063      Append DIR to the prefix specified previously with `-iprefix', and
5064      add the resulting directory to the include search path.
5065      `-iwithprefixbefore' puts it in the same place `-I' would;
5066      `-iwithprefix' puts it where `-idirafter' would.
5068 `-isystem DIR'
5069      Search DIR for header files, after all directories specified by
5070      `-I' but before the standard system directories.  Mark it as a
5071      system directory, so that it gets the same special treatment as is
5072      applied to the standard system directories.
5074 `-fdollars-in-identifiers'
5075      Accept `$' in identifiers.
5077 `-fpreprocessed'
5078      Indicate to the preprocessor that the input file has already been
5079      preprocessed.  This suppresses things like macro expansion,
5080      trigraph conversion, escaped newline splicing, and processing of
5081      most directives.  The preprocessor still recognizes and removes
5082      comments, so that you can pass a file preprocessed with `-C' to
5083      the compiler without problems.  In this mode the integrated
5084      preprocessor is little more than a tokenizer for the front ends.
5086      `-fpreprocessed' is implicit if the input file has one of the
5087      extensions `.i', `.ii' or `.mi'.  These are the extensions that
5088      GCC uses for preprocessed files created by `-save-temps'.
5090 `-ftabstop=WIDTH'
5091      Set the distance between tab stops.  This helps the preprocessor
5092      report correct column numbers in warnings or errors, even if tabs
5093      appear on the line.  If the value is less than 1 or greater than
5094      100, the option is ignored.  The default is 8.
5096 `-fexec-charset=CHARSET'
5097      Set the execution character set, used for string and character
5098      constants.  The default is UTF-8.  CHARSET can be any encoding
5099      supported by the system's `iconv' library routine.
5101 `-fwide-exec-charset=CHARSET'
5102      Set the wide execution character set, used for wide string and
5103      character constants.  The default is UTF-32 or UTF-16, whichever
5104      corresponds to the width of `wchar_t'.  As with
5105      `-ftarget-charset', CHARSET can be any encoding supported by the
5106      system's `iconv' library routine; however, you will have problems
5107      with encodings that do not fit exactly in `wchar_t'.
5109 `-finput-charset=CHARSET'
5110      Set the input character set, used for translation from the
5111      character set of the input file to the source character set used
5112      by GCC. If the locale does not specify, or GCC cannot get this
5113      information from the locale, the default is UTF-8. This can be
5114      overridden by either the locale or this command line option.
5115      Currently the command line option takes precedence if there's a
5116      conflict. CHARSET can be any encoding supported by the system's
5117      `iconv' library routine.
5119 `-fworking-directory'
5120      Enable generation of linemarkers in the preprocessor output that
5121      will let the compiler know the current working directory at the
5122      time of preprocessing.  When this option is enabled, the
5123      preprocessor will emit, after the initial linemarker, a second
5124      linemarker with the current working directory followed by two
5125      slashes.  GCC will use this directory, when it's present in the
5126      preprocessed input, as the directory emitted as the current
5127      working directory in some debugging information formats.  This
5128      option is implicitly enabled if debugging information is enabled,
5129      but this can be inhibited with the negated form
5130      `-fno-working-directory'.  If the `-P' flag is present in the
5131      command line, this option has no effect, since no `#line'
5132      directives are emitted whatsoever.
5134 `-fno-show-column'
5135      Do not print column numbers in diagnostics.  This may be necessary
5136      if diagnostics are being scanned by a program that does not
5137      understand the column numbers, such as `dejagnu'.
5139 `-A PREDICATE=ANSWER'
5140      Make an assertion with the predicate PREDICATE and answer ANSWER.
5141      This form is preferred to the older form `-A PREDICATE(ANSWER)',
5142      which is still supported, because it does not use shell special
5143      characters.
5145 `-A -PREDICATE=ANSWER'
5146      Cancel an assertion with the predicate PREDICATE and answer ANSWER.
5148 `-dCHARS'
5149      CHARS is a sequence of one or more of the following characters,
5150      and must not be preceded by a space.  Other characters are
5151      interpreted by the compiler proper, or reserved for future
5152      versions of GCC, and so are silently ignored.  If you specify
5153      characters whose behavior conflicts, the result is undefined.
5155     `M'
5156           Instead of the normal output, generate a list of `#define'
5157           directives for all the macros defined during the execution of
5158           the preprocessor, including predefined macros.  This gives
5159           you a way of finding out what is predefined in your version
5160           of the preprocessor.  Assuming you have no file `foo.h', the
5161           command
5163                touch foo.h; cpp -dM foo.h
5165           will show all the predefined macros.
5167     `D'
5168           Like `M' except in two respects: it does _not_ include the
5169           predefined macros, and it outputs _both_ the `#define'
5170           directives and the result of preprocessing.  Both kinds of
5171           output go to the standard output file.
5173     `N'
5174           Like `D', but emit only the macro names, not their expansions.
5176     `I'
5177           Output `#include' directives in addition to the result of
5178           preprocessing.
5180 `-P'
5181      Inhibit generation of linemarkers in the output from the
5182      preprocessor.  This might be useful when running the preprocessor
5183      on something that is not C code, and will be sent to a program
5184      which might be confused by the linemarkers.
5186 `-C'
5187      Do not discard comments.  All comments are passed through to the
5188      output file, except for comments in processed directives, which
5189      are deleted along with the directive.
5191      You should be prepared for side effects when using `-C'; it causes
5192      the preprocessor to treat comments as tokens in their own right.
5193      For example, comments appearing at the start of what would be a
5194      directive line have the effect of turning that line into an
5195      ordinary source line, since the first token on the line is no
5196      longer a `#'.
5198 `-CC'
5199      Do not discard comments, including during macro expansion.  This is
5200      like `-C', except that comments contained within macros are also
5201      passed through to the output file where the macro is expanded.
5203      In addition to the side-effects of the `-C' option, the `-CC'
5204      option causes all C++-style comments inside a macro to be
5205      converted to C-style comments.  This is to prevent later use of
5206      that macro from inadvertently commenting out the remainder of the
5207      source line.
5209      The `-CC' option is generally used to support lint comments.
5211 `-traditional-cpp'
5212      Try to imitate the behavior of old-fashioned C preprocessors, as
5213      opposed to ISO C preprocessors.
5215 `-trigraphs'
5216      Process trigraph sequences.  These are three-character sequences,
5217      all starting with `??', that are defined by ISO C to stand for
5218      single characters.  For example, `??/' stands for `\', so `'??/n''
5219      is a character constant for a newline.  By default, GCC ignores
5220      trigraphs, but in standard-conforming modes it converts them.  See
5221      the `-std' and `-ansi' options.
5223      The nine trigraphs and their replacements are
5225           Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
5226           Replacement:      [    ]    {    }    #    \    ^    |    ~
5228 `-remap'
5229      Enable special code to work around file systems which only permit
5230      very short file names, such as MS-DOS.
5232 `--help'
5233 `--target-help'
5234      Print text describing all the command line options instead of
5235      preprocessing anything.
5237 `-v'
5238      Verbose mode.  Print out GNU CPP's version number at the beginning
5239      of execution, and report the final form of the include path.
5241 `-H'
5242      Print the name of each header file used, in addition to other
5243      normal activities.  Each name is indented to show how deep in the
5244      `#include' stack it is.  Precompiled header files are also
5245      printed, even if they are found to be invalid; an invalid
5246      precompiled header file is printed with `...x' and a valid one
5247      with `...!' .
5249 `-version'
5250 `--version'
5251      Print out GNU CPP's version number.  With one dash, proceed to
5252      preprocess as normal.  With two dashes, exit immediately.
5254 \x1f
5255 File: gcc.info,  Node: Assembler Options,  Next: Link Options,  Prev: Preprocessor Options,  Up: Invoking GCC
5257 Passing Options to the Assembler
5258 ================================
5260  You can pass options to the assembler.
5262 `-Wa,OPTION'
5263      Pass OPTION as an option to the assembler.  If OPTION contains
5264      commas, it is split into multiple options at the commas.
5266 `-Xassembler OPTION'
5267      Pass OPTION as an option to the assembler.  You can use this to
5268      supply system-specific assembler options which GCC does not know
5269      how to recognize.
5271      If you want to pass an option that takes an argument, you must use
5272      `-Xassembler' twice, once for the option and once for the argument.
5274 \x1f
5275 File: gcc.info,  Node: Link Options,  Next: Directory Options,  Prev: Assembler Options,  Up: Invoking GCC
5277 Options for Linking
5278 ===================
5280  These options come into play when the compiler links object files into
5281 an executable output file.  They are meaningless if the compiler is not
5282 doing a link step.
5284 `OBJECT-FILE-NAME'
5285      A file name that does not end in a special recognized suffix is
5286      considered to name an object file or library.  (Object files are
5287      distinguished from libraries by the linker according to the file
5288      contents.)  If linking is done, these object files are used as
5289      input to the linker.
5291 `-c'
5292 `-S'
5293 `-E'
5294      If any of these options is used, then the linker is not run, and
5295      object file names should not be used as arguments.  *Note Overall
5296      Options::.
5298 `-lLIBRARY'
5299 `-l LIBRARY'
5300      Search the library named LIBRARY when linking.  (The second
5301      alternative with the library as a separate argument is only for
5302      POSIX compliance and is not recommended.)
5304      It makes a difference where in the command you write this option;
5305      the linker searches and processes libraries and object files in
5306      the order they are specified.  Thus, `foo.o -lz bar.o' searches
5307      library `z' after file `foo.o' but before `bar.o'.  If `bar.o'
5308      refers to functions in `z', those functions may not be loaded.
5310      The linker searches a standard list of directories for the library,
5311      which is actually a file named `libLIBRARY.a'.  The linker then
5312      uses this file as if it had been specified precisely by name.
5314      The directories searched include several standard system
5315      directories plus any that you specify with `-L'.
5317      Normally the files found this way are library files--archive files
5318      whose members are object files.  The linker handles an archive
5319      file by scanning through it for members which define symbols that
5320      have so far been referenced but not defined.  But if the file that
5321      is found is an ordinary object file, it is linked in the usual
5322      fashion.  The only difference between using an `-l' option and
5323      specifying a file name is that `-l' surrounds LIBRARY with `lib'
5324      and `.a' and searches several directories.
5326 `-lobjc'
5327      You need this special case of the `-l' option in order to link an
5328      Objective-C program.
5330 `-nostartfiles'
5331      Do not use the standard system startup files when linking.  The
5332      standard system libraries are used normally, unless `-nostdlib' or
5333      `-nodefaultlibs' is used.
5335 `-nodefaultlibs'
5336      Do not use the standard system libraries when linking.  Only the
5337      libraries you specify will be passed to the linker.  The standard
5338      startup files are used normally, unless `-nostartfiles' is used.
5339      The compiler may generate calls to memcmp, memset, and memcpy for
5340      System V (and ISO C) environments or to bcopy and bzero for BSD
5341      environments.  These entries are usually resolved by entries in
5342      libc.  These entry points should be supplied through some other
5343      mechanism when this option is specified.
5345 `-nostdlib'
5346      Do not use the standard system startup files or libraries when
5347      linking.  No startup files and only the libraries you specify will
5348      be passed to the linker.  The compiler may generate calls to
5349      memcmp, memset, and memcpy for System V (and ISO C) environments
5350      or to bcopy and bzero for BSD environments.  These entries are
5351      usually resolved by entries in libc.  These entry points should be
5352      supplied through some other mechanism when this option is
5353      specified.
5355      One of the standard libraries bypassed by `-nostdlib' and
5356      `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
5357      that GCC uses to overcome shortcomings of particular machines, or
5358      special needs for some languages.  (*Note Interfacing to GCC
5359      Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
5360      most cases, you need `libgcc.a' even when you want to avoid other
5361      standard libraries.  In other words, when you specify `-nostdlib'
5362      or `-nodefaultlibs' you should usually specify `-lgcc' as well.
5363      This ensures that you have no unresolved references to internal GCC
5364      library subroutines.  (For example, `__main', used to ensure C++
5365      constructors will be called; *note `collect2': (gccint)Collect2..)
5367 `-pie'
5368      Produce a position independent executable on targets which support
5369      it.  For predictable results, you must also specify the same set
5370      of options that were used to generate code (`-fpie', `-fPIE', or
5371      model suboptions) when you specify this option.
5373 `-s'
5374      Remove all symbol table and relocation information from the
5375      executable.
5377 `-static'
5378      On systems that support dynamic linking, this prevents linking
5379      with the shared libraries.  On other systems, this option has no
5380      effect.
5382 `-shared'
5383      Produce a shared object which can then be linked with other
5384      objects to form an executable.  Not all systems support this
5385      option.  For predictable results, you must also specify the same
5386      set of options that were used to generate code (`-fpic', `-fPIC',
5387      or model suboptions) when you specify this option.(1)
5389 `-shared-libgcc'
5390 `-static-libgcc'
5391      On systems that provide `libgcc' as a shared library, these options
5392      force the use of either the shared or static version respectively.
5393      If no shared version of `libgcc' was built when the compiler was
5394      configured, these options have no effect.
5396      There are several situations in which an application should use the
5397      shared `libgcc' instead of the static version.  The most common of
5398      these is when the application wishes to throw and catch exceptions
5399      across different shared libraries.  In that case, each of the
5400      libraries as well as the application itself should use the shared
5401      `libgcc'.
5403      Therefore, the G++ and GCJ drivers automatically add
5404      `-shared-libgcc' whenever you build a shared library or a main
5405      executable, because C++ and Java programs typically use
5406      exceptions, so this is the right thing to do.
5408      If, instead, you use the GCC driver to create shared libraries,
5409      you may find that they will not always be linked with the shared
5410      `libgcc'.  If GCC finds, at its configuration time, that you have
5411      a non-GNU linker or a GNU linker that does not support option
5412      `--eh-frame-hdr', it will link the shared version of `libgcc' into
5413      shared libraries by default.  Otherwise, it will take advantage of
5414      the linker and optimize away the linking with the shared version
5415      of `libgcc', linking with the static version of libgcc by default.
5416      This allows exceptions to propagate through such shared
5417      libraries, without incurring relocation costs at library load time.
5419      However, if a library or main executable is supposed to throw or
5420      catch exceptions, you must link it using the G++ or GCJ driver, as
5421      appropriate for the languages used in the program, or using the
5422      option `-shared-libgcc', such that it is linked with the shared
5423      `libgcc'.
5425 `-symbolic'
5426      Bind references to global symbols when building a shared object.
5427      Warn about any unresolved references (unless overridden by the
5428      link editor option `-Xlinker -z -Xlinker defs').  Only a few
5429      systems support this option.
5431 `-Xlinker OPTION'
5432      Pass OPTION as an option to the linker.  You can use this to
5433      supply system-specific linker options which GCC does not know how
5434      to recognize.
5436      If you want to pass an option that takes an argument, you must use
5437      `-Xlinker' twice, once for the option and once for the argument.
5438      For example, to pass `-assert definitions', you must write
5439      `-Xlinker -assert -Xlinker definitions'.  It does not work to write
5440      `-Xlinker "-assert definitions"', because this passes the entire
5441      string as a single argument, which is not what the linker expects.
5443 `-Wl,OPTION'
5444      Pass OPTION as an option to the linker.  If OPTION contains
5445      commas, it is split into multiple options at the commas.
5447 `-u SYMBOL'
5448      Pretend the symbol SYMBOL is undefined, to force linking of
5449      library modules to define it.  You can use `-u' multiple times with
5450      different symbols to force loading of additional library modules.
5452  ---------- Footnotes ----------
5454  (1) On some systems, `gcc -shared' needs to build supplementary stub
5455 code for constructors to work.  On multi-libbed systems, `gcc -shared'
5456 must select the correct support libraries to link against.  Failing to
5457 supply the correct flags may lead to subtle defects.  Supplying them in
5458 cases where they are not necessary is innocuous.
5460 \x1f
5461 File: gcc.info,  Node: Directory Options,  Next: Spec Files,  Prev: Link Options,  Up: Invoking GCC
5463 Options for Directory Search
5464 ============================
5466  These options specify directories to search for header files, for
5467 libraries and for parts of the compiler:
5469 `-IDIR'
5470      Add the directory DIR to the head of the list of directories to be
5471      searched for header files.  This can be used to override a system
5472      header file, substituting your own version, since these
5473      directories are searched before the system header file
5474      directories.  However, you should not use this option to add
5475      directories that contain vendor-supplied system header files (use
5476      `-isystem' for that).  If you use more than one `-I' option, the
5477      directories are scanned in left-to-right order; the standard
5478      system directories come after.
5480      If a standard system include directory, or a directory specified
5481      with `-isystem', is also specified with `-I', the `-I' option will
5482      be ignored.  The directory will still be searched but as a system
5483      directory at its normal position in the system include chain.
5484      This is to ensure that GCC's procedure to fix buggy system headers
5485      and the ordering for the include_next directive are not
5486      inadvertently changed.  If you really need to change the search
5487      order for system directories, use the `-nostdinc' and/or
5488      `-isystem' options.
5490 `-I-'
5491      Any directories you specify with `-I' options before the `-I-'
5492      option are searched only for the case of `#include "FILE"'; they
5493      are not searched for `#include <FILE>'.
5495      If additional directories are specified with `-I' options after
5496      the `-I-', these directories are searched for all `#include'
5497      directives.  (Ordinarily _all_ `-I' directories are used this way.)
5499      In addition, the `-I-' option inhibits the use of the current
5500      directory (where the current input file came from) as the first
5501      search directory for `#include "FILE"'.  There is no way to
5502      override this effect of `-I-'.  With `-I.' you can specify
5503      searching the directory which was current when the compiler was
5504      invoked.  That is not exactly the same as what the preprocessor
5505      does by default, but it is often satisfactory.
5507      `-I-' does not inhibit the use of the standard system directories
5508      for header files.  Thus, `-I-' and `-nostdinc' are independent.
5510 `-LDIR'
5511      Add directory DIR to the list of directories to be searched for
5512      `-l'.
5514 `-BPREFIX'
5515      This option specifies where to find the executables, libraries,
5516      include files, and data files of the compiler itself.
5518      The compiler driver program runs one or more of the subprograms
5519      `cpp', `cc1', `as' and `ld'.  It tries PREFIX as a prefix for each
5520      program it tries to run, both with and without `MACHINE/VERSION/'
5521      (*note Target Options::).
5523      For each subprogram to be run, the compiler driver first tries the
5524      `-B' prefix, if any.  If that name is not found, or if `-B' was
5525      not specified, the driver tries two standard prefixes, which are
5526      `/usr/lib/gcc/' and `/usr/local/lib/gcc/'.  If neither of those
5527      results in a file name that is found, the unmodified program name
5528      is searched for using the directories specified in your `PATH'
5529      environment variable.
5531      The compiler will check to see if the path provided by the `-B'
5532      refers to a directory, and if necessary it will add a directory
5533      separator character at the end of the path.
5535      `-B' prefixes that effectively specify directory names also apply
5536      to libraries in the linker, because the compiler translates these
5537      options into `-L' options for the linker.  They also apply to
5538      includes files in the preprocessor, because the compiler
5539      translates these options into `-isystem' options for the
5540      preprocessor.  In this case, the compiler appends `include' to the
5541      prefix.
5543      The run-time support file `libgcc.a' can also be searched for using
5544      the `-B' prefix, if needed.  If it is not found there, the two
5545      standard prefixes above are tried, and that is all.  The file is
5546      left out of the link if it is not found by those means.
5548      Another way to specify a prefix much like the `-B' prefix is to use
5549      the environment variable `GCC_EXEC_PREFIX'.  *Note Environment
5550      Variables::.
5552      As a special kludge, if the path provided by `-B' is
5553      `[dir/]stageN/', where N is a number in the range 0 to 9, then it
5554      will be replaced by `[dir/]include'.  This is to help with
5555      boot-strapping the compiler.
5557 `-specs=FILE'
5558      Process FILE after the compiler reads in the standard `specs'
5559      file, in order to override the defaults that the `gcc' driver
5560      program uses when determining what switches to pass to `cc1',
5561      `cc1plus', `as', `ld', etc.  More than one `-specs=FILE' can be
5562      specified on the command line, and they are processed in order,
5563      from left to right.
5565 \x1f
5566 File: gcc.info,  Node: Spec Files,  Next: Target Options,  Prev: Directory Options,  Up: Invoking GCC
5568 Specifying subprocesses and the switches to pass to them
5569 ========================================================
5571  `gcc' is a driver program.  It performs its job by invoking a sequence
5572 of other programs to do the work of compiling, assembling and linking.
5573 GCC interprets its command-line parameters and uses these to deduce
5574 which programs it should invoke, and which command-line options it
5575 ought to place on their command lines.  This behavior is controlled by
5576 "spec strings".  In most cases there is one spec string for each
5577 program that GCC can invoke, but a few programs have multiple spec
5578 strings to control their behavior.  The spec strings built into GCC can
5579 be overridden by using the `-specs=' command-line switch to specify a
5580 spec file.
5582  "Spec files" are plaintext files that are used to construct spec
5583 strings.  They consist of a sequence of directives separated by blank
5584 lines.  The type of directive is determined by the first non-whitespace
5585 character on the line and it can be one of the following:
5587 `%COMMAND'
5588      Issues a COMMAND to the spec file processor.  The commands that can
5589      appear here are:
5591     `%include <FILE>'
5592           Search for FILE and insert its text at the current point in
5593           the specs file.
5595     `%include_noerr <FILE>'
5596           Just like `%include', but do not generate an error message if
5597           the include file cannot be found.
5599     `%rename OLD_NAME NEW_NAME'
5600           Rename the spec string OLD_NAME to NEW_NAME.
5602 `*[SPEC_NAME]:'
5603      This tells the compiler to create, override or delete the named
5604      spec string.  All lines after this directive up to the next
5605      directive or blank line are considered to be the text for the spec
5606      string.  If this results in an empty string then the spec will be
5607      deleted.  (Or, if the spec did not exist, then nothing will
5608      happened.)  Otherwise, if the spec does not currently exist a new
5609      spec will be created.  If the spec does exist then its contents
5610      will be overridden by the text of this directive, unless the first
5611      character of that text is the `+' character, in which case the
5612      text will be appended to the spec.
5614 `[SUFFIX]:'
5615      Creates a new `[SUFFIX] spec' pair.  All lines after this directive
5616      and up to the next directive or blank line are considered to make
5617      up the spec string for the indicated suffix.  When the compiler
5618      encounters an input file with the named suffix, it will processes
5619      the spec string in order to work out how to compile that file.
5620      For example:
5622           .ZZ:
5623           z-compile -input %i
5625      This says that any input file whose name ends in `.ZZ' should be
5626      passed to the program `z-compile', which should be invoked with the
5627      command-line switch `-input' and with the result of performing the
5628      `%i' substitution.  (See below.)
5630      As an alternative to providing a spec string, the text that
5631      follows a suffix directive can be one of the following:
5633     `@LANGUAGE'
5634           This says that the suffix is an alias for a known LANGUAGE.
5635           This is similar to using the `-x' command-line switch to GCC
5636           to specify a language explicitly.  For example:
5638                .ZZ:
5639                @c++
5641           Says that .ZZ files are, in fact, C++ source files.
5643     `#NAME'
5644           This causes an error messages saying:
5646                NAME compiler not installed on this system.
5648      GCC already has an extensive list of suffixes built into it.  This
5649      directive will add an entry to the end of the list of suffixes, but
5650      since the list is searched from the end backwards, it is
5651      effectively possible to override earlier entries using this
5652      technique.
5654  GCC has the following spec strings built into it.  Spec files can
5655 override these strings or create their own.  Note that individual
5656 targets can also add their own spec strings to this list.
5658      asm          Options to pass to the assembler
5659      asm_final    Options to pass to the assembler post-processor
5660      cpp          Options to pass to the C preprocessor
5661      cc1          Options to pass to the C compiler
5662      cc1plus      Options to pass to the C++ compiler
5663      endfile      Object files to include at the end of the link
5664      link         Options to pass to the linker
5665      lib          Libraries to include on the command line to the linker
5666      libgcc       Decides which GCC support library to pass to the linker
5667      linker       Sets the name of the linker
5668      predefines   Defines to be passed to the C preprocessor
5669      signed_char  Defines to pass to CPP to say whether `char' is signed
5670                   by default
5671      startfile    Object files to include at the start of the link
5673  Here is a small example of a spec file:
5675      %rename lib                 old_lib
5676      
5677      *lib:
5678      --start-group -lgcc -lc -leval1 --end-group %(old_lib)
5680  This example renames the spec called `lib' to `old_lib' and then
5681 overrides the previous definition of `lib' with a new one.  The new
5682 definition adds in some extra command-line options before including the
5683 text of the old definition.
5685  "Spec strings" are a list of command-line options to be passed to their
5686 corresponding program.  In addition, the spec strings can contain
5687 `%'-prefixed sequences to substitute variable text or to conditionally
5688 insert text into the command line.  Using these constructs it is
5689 possible to generate quite complex command lines.
5691  Here is a table of all defined `%'-sequences for spec strings.  Note
5692 that spaces are not generated automatically around the results of
5693 expanding these sequences.  Therefore you can concatenate them together
5694 or combine them with constant text in a single argument.
5696 `%%'
5697      Substitute one `%' into the program name or argument.
5699 `%i'
5700      Substitute the name of the input file being processed.
5702 `%b'
5703      Substitute the basename of the input file being processed.  This
5704      is the substring up to (and not including) the last period and not
5705      including the directory.
5707 `%B'
5708      This is the same as `%b', but include the file suffix (text after
5709      the last period).
5711 `%d'
5712      Marks the argument containing or following the `%d' as a temporary
5713      file name, so that that file will be deleted if GCC exits
5714      successfully.  Unlike `%g', this contributes no text to the
5715      argument.
5717 `%gSUFFIX'
5718      Substitute a file name that has suffix SUFFIX and is chosen once
5719      per compilation, and mark the argument in the same way as `%d'.
5720      To reduce exposure to denial-of-service attacks, the file name is
5721      now chosen in a way that is hard to predict even when previously
5722      chosen file names are known.  For example, `%g.s ... %g.o ... %g.s'
5723      might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'.  SUFFIX
5724      matches the regexp `[.A-Za-z]*' or the special string `%O', which
5725      is treated exactly as if `%O' had been preprocessed.  Previously,
5726      `%g' was simply substituted with a file name chosen once per
5727      compilation, without regard to any appended suffix (which was
5728      therefore treated just like ordinary text), making such attacks
5729      more likely to succeed.
5731 `%uSUFFIX'
5732      Like `%g', but generates a new temporary file name even if
5733      `%uSUFFIX' was already seen.
5735 `%USUFFIX'
5736      Substitutes the last file name generated with `%uSUFFIX',
5737      generating a new one if there is no such last file name.  In the
5738      absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
5739      they don't share the same suffix _space_, so `%g.s ... %U.s ...
5740      %g.s ... %U.s' would involve the generation of two distinct file
5741      names, one for each `%g.s' and another for each `%U.s'.
5742      Previously, `%U' was simply substituted with a file name chosen
5743      for the previous `%u', without regard to any appended suffix.
5745 `%jSUFFIX'
5746      Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
5747      writable, and if save-temps is off; otherwise, substitute the name
5748      of a temporary file, just like `%u'.  This temporary file is not
5749      meant for communication between processes, but rather as a junk
5750      disposal mechanism.
5752 `%|SUFFIX'
5753 `%mSUFFIX'
5754      Like `%g', except if `-pipe' is in effect.  In that case `%|'
5755      substitutes a single dash and `%m' substitutes nothing at all.
5756      These are the two most common ways to instruct a program that it
5757      should read from standard input or write to standard output.  If
5758      you need something more elaborate you can use an `%{pipe:`X'}'
5759      construct: see for example `f/lang-specs.h'.
5761 `%.SUFFIX'
5762      Substitutes .SUFFIX for the suffixes of a matched switch's args
5763      when it is subsequently output with `%*'.  SUFFIX is terminated by
5764      the next space or %.
5766 `%w'
5767      Marks the argument containing or following the `%w' as the
5768      designated output file of this compilation.  This puts the argument
5769      into the sequence of arguments that `%o' will substitute later.
5771 `%o'
5772      Substitutes the names of all the output files, with spaces
5773      automatically placed around them.  You should write spaces around
5774      the `%o' as well or the results are undefined.  `%o' is for use in
5775      the specs for running the linker.  Input files whose names have no
5776      recognized suffix are not compiled at all, but they are included
5777      among the output files, so they will be linked.
5779 `%O'
5780      Substitutes the suffix for object files.  Note that this is
5781      handled specially when it immediately follows `%g, %u, or %U',
5782      because of the need for those to form complete file names.  The
5783      handling is such that `%O' is treated exactly as if it had already
5784      been substituted, except that `%g, %u, and %U' do not currently
5785      support additional SUFFIX characters following `%O' as they would
5786      following, for example, `.o'.
5788 `%p'
5789      Substitutes the standard macro predefinitions for the current
5790      target machine.  Use this when running `cpp'.
5792 `%P'
5793      Like `%p', but puts `__' before and after the name of each
5794      predefined macro, except for macros that start with `__' or with
5795      `_L', where L is an uppercase letter.  This is for ISO C.
5797 `%I'
5798      Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
5799      `-isysroot' (made from `TARGET_SYSTEM_ROOT'), and `-isystem' (made
5800      from `COMPILER_PATH' and `-B' options) as necessary.
5802 `%s'
5803      Current argument is the name of a library or startup file of some
5804      sort.  Search for that file in a standard list of directories and
5805      substitute the full name found.
5807 `%eSTR'
5808      Print STR as an error message.  STR is terminated by a newline.
5809      Use this when inconsistent options are detected.
5811 `%(NAME)'
5812      Substitute the contents of spec string NAME at this point.
5814 `%[NAME]'
5815      Like `%(...)' but put `__' around `-D' arguments.
5817 `%x{OPTION}'
5818      Accumulate an option for `%X'.
5820 `%X'
5821      Output the accumulated linker options specified by `-Wl' or a `%x'
5822      spec string.
5824 `%Y'
5825      Output the accumulated assembler options specified by `-Wa'.
5827 `%Z'
5828      Output the accumulated preprocessor options specified by `-Wp'.
5830 `%a'
5831      Process the `asm' spec.  This is used to compute the switches to
5832      be passed to the assembler.
5834 `%A'
5835      Process the `asm_final' spec.  This is a spec string for passing
5836      switches to an assembler post-processor, if such a program is
5837      needed.
5839 `%l'
5840      Process the `link' spec.  This is the spec for computing the
5841      command line passed to the linker.  Typically it will make use of
5842      the `%L %G %S %D and %E' sequences.
5844 `%D'
5845      Dump out a `-L' option for each directory that GCC believes might
5846      contain startup files.  If the target supports multilibs then the
5847      current multilib directory will be prepended to each of these
5848      paths.
5850 `%M'
5851      Output the multilib directory with directory separators replaced
5852      with `_'.  If multilib directories are not set, or the multilib
5853      directory is `.' then this option emits nothing.
5855 `%L'
5856      Process the `lib' spec.  This is a spec string for deciding which
5857      libraries should be included on the command line to the linker.
5859 `%G'
5860      Process the `libgcc' spec.  This is a spec string for deciding
5861      which GCC support library should be included on the command line
5862      to the linker.
5864 `%S'
5865      Process the `startfile' spec.  This is a spec for deciding which
5866      object files should be the first ones passed to the linker.
5867      Typically this might be a file named `crt0.o'.
5869 `%E'
5870      Process the `endfile' spec.  This is a spec string that specifies
5871      the last object files that will be passed to the linker.
5873 `%C'
5874      Process the `cpp' spec.  This is used to construct the arguments
5875      to be passed to the C preprocessor.
5877 `%c'
5878      Process the `signed_char' spec.  This is intended to be used to
5879      tell cpp whether a char is signed.  It typically has the
5880      definition:
5881           %{funsigned-char:-D__CHAR_UNSIGNED__}
5883 `%1'
5884      Process the `cc1' spec.  This is used to construct the options to
5885      be passed to the actual C compiler (`cc1').
5887 `%2'
5888      Process the `cc1plus' spec.  This is used to construct the options
5889      to be passed to the actual C++ compiler (`cc1plus').
5891 `%*'
5892      Substitute the variable part of a matched option.  See below.
5893      Note that each comma in the substituted string is replaced by a
5894      single space.
5896 `%<`S''
5897      Remove all occurrences of `-S' from the command line.  Note--this
5898      command is position dependent.  `%' commands in the spec string
5899      before this one will see `-S', `%' commands in the spec string
5900      after this one will not.
5902 `%:FUNCTION(ARGS)'
5903      Call the named function FUNCTION, passing it ARGS.  ARGS is first
5904      processed as a nested spec string, then split into an argument
5905      vector in the usual fashion.  The function returns a string which
5906      is processed as if it had appeared literally as part of the
5907      current spec.
5909      The following built-in spec functions are provided:
5911     ``if-exists''
5912           The `if-exists' spec function takes one argument, an absolute
5913           pathname to a file.  If the file exists, `if-exists' returns
5914           the pathname.  Here is a small example of its usage:
5916                *startfile:
5917                crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
5919     ``if-exists-else''
5920           The `if-exists-else' spec function is similar to the
5921           `if-exists' spec function, except that it takes two
5922           arguments.  The first argument is an absolute pathname to a
5923           file.  If the file exists, `if-exists-else' returns the
5924           pathname.  If it does not exist, it returns the second
5925           argument.  This way, `if-exists-else' can be used to select
5926           one file or another, based on the existence of the first.
5927           Here is a small example of its usage:
5929                *startfile:
5930                crt0%O%s %:if-exists(crti%O%s) \
5931                %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
5933 `%{`S'}'
5934      Substitutes the `-S' switch, if that switch was given to GCC.  If
5935      that switch was not specified, this substitutes nothing.  Note that
5936      the leading dash is omitted when specifying this option, and it is
5937      automatically inserted if the substitution is performed.  Thus the
5938      spec string `%{foo}' would match the command-line option `-foo'
5939      and would output the command line option `-foo'.
5941 `%W{`S'}'
5942      Like %{`S'} but mark last argument supplied within as a file to be
5943      deleted on failure.
5945 `%{`S'*}'
5946      Substitutes all the switches specified to GCC whose names start
5947      with `-S', but which also take an argument.  This is used for
5948      switches like `-o', `-D', `-I', etc.  GCC considers `-o foo' as
5949      being one switch whose names starts with `o'.  %{o*} would
5950      substitute this text, including the space.  Thus two arguments
5951      would be generated.
5953 `%{`S'*&`T'*}'
5954      Like %{`S'*}, but preserve order of `S' and `T' options (the order
5955      of `S' and `T' in the spec is not significant).  There can be any
5956      number of ampersand-separated variables; for each the wild card is
5957      optional.  Useful for CPP as `%{D*&U*&A*}'.
5959 `%{`S':`X'}'
5960      Substitutes `X', if the `-S' switch was given to GCC.
5962 `%{!`S':`X'}'
5963      Substitutes `X', if the `-S' switch was _not_ given to GCC.
5965 `%{`S'*:`X'}'
5966      Substitutes `X' if one or more switches whose names start with
5967      `-S' are specified to GCC.  Normally `X' is substituted only once,
5968      no matter how many such switches appeared.  However, if `%*'
5969      appears somewhere in `X', then `X' will be substituted once for
5970      each matching switch, with the `%*' replaced by the part of that
5971      switch that matched the `*'.
5973 `%{.`S':`X'}'
5974      Substitutes `X', if processing a file with suffix `S'.
5976 `%{!.`S':`X'}'
5977      Substitutes `X', if _not_ processing a file with suffix `S'.
5979 `%{`S'|`P':`X'}'
5980      Substitutes `X' if either `-S' or `-P' was given to GCC.  This may
5981      be combined with `!', `.', and `*' sequences as well, although
5982      they have a stronger binding than the `|'.  If `%*' appears in
5983      `X', all of the alternatives must be starred, and only the first
5984      matching alternative is substituted.
5986      For example, a spec string like this:
5988           %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
5990      will output the following command-line options from the following
5991      input command-line options:
5993           fred.c        -foo -baz
5994           jim.d         -bar -boggle
5995           -d fred.c     -foo -baz -boggle
5996           -d jim.d      -bar -baz -boggle
5998 `%{S:X; T:Y; :D}'
5999      If `S' was given to GCC, substitutes `X'; else if `T' was given to
6000      GCC, substitutes `Y'; else substitutes `D'.  There can be as many
6001      clauses as you need.  This may be combined with `.', `!', `|', and
6002      `*' as needed.
6004  The conditional text `X' in a %{`S':`X'} or similar construct may
6005 contain other nested `%' constructs or spaces, or even newlines.  They
6006 are processed as usual, as described above.  Trailing white space in
6007 `X' is ignored.  White space may also appear anywhere on the left side
6008 of the colon in these constructs, except between `.' or `*' and the
6009 corresponding word.
6011  The `-O', `-f', `-m', and `-W' switches are handled specifically in
6012 these constructs.  If another value of `-O' or the negated form of a
6013 `-f', `-m', or `-W' switch is found later in the command line, the
6014 earlier switch value is ignored, except with {`S'*} where `S' is just
6015 one letter, which passes all matching options.
6017  The character `|' at the beginning of the predicate text is used to
6018 indicate that a command should be piped to the following command, but
6019 only if `-pipe' is specified.
6021  It is built into GCC which switches take arguments and which do not.
6022 (You might think it would be useful to generalize this to allow each
6023 compiler's spec to say which switches take arguments.  But this cannot
6024 be done in a consistent fashion.  GCC cannot even decide which input
6025 files have been specified without knowing which switches take arguments,
6026 and it must know which input files to compile in order to tell which
6027 compilers to run).
6029  GCC also knows implicitly that arguments starting in `-l' are to be
6030 treated as compiler output files, and passed to the linker in their
6031 proper position among the other output files.
6033 \x1f
6034 File: gcc.info,  Node: Target Options,  Next: Submodel Options,  Prev: Spec Files,  Up: Invoking GCC
6036 Specifying Target Machine and Compiler Version
6037 ==============================================
6039  The usual way to run GCC is to run the executable called `gcc', or
6040 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
6041 run a version other than the one that was installed last.  Sometimes
6042 this is inconvenient, so GCC provides options that will switch to
6043 another cross-compiler or version.
6045 `-b MACHINE'
6046      The argument MACHINE specifies the target machine for compilation.
6048      The value to use for MACHINE is the same as was specified as the
6049      machine type when configuring GCC as a cross-compiler.  For
6050      example, if a cross-compiler was configured with `configure
6051      i386v', meaning to compile for an 80386 running System V, then you
6052      would specify `-b i386v' to run that cross compiler.
6054 `-V VERSION'
6055      The argument VERSION specifies which version of GCC to run.  This
6056      is useful when multiple versions are installed.  For example,
6057      VERSION might be `2.0', meaning to run GCC version 2.0.
6059  The `-V' and `-b' options work by running the
6060 `<machine>-gcc-<version>' executable, so there's no real reason to use
6061 them if you can just run that directly.
6063 \x1f
6064 File: gcc.info,  Node: Submodel Options,  Next: Code Gen Options,  Prev: Target Options,  Up: Invoking GCC
6066 Hardware Models and Configurations
6067 ==================================
6069  Earlier we discussed the standard option `-b' which chooses among
6070 different installed compilers for completely different target machines,
6071 such as VAX vs. 68000 vs. 80386.
6073  In addition, each of these target machine types can have its own
6074 special options, starting with `-m', to choose among various hardware
6075 models or configurations--for example, 68010 vs 68020, floating
6076 coprocessor or none.  A single installed version of the compiler can
6077 compile for any model or configuration, according to the options
6078 specified.
6080  Some configurations of the compiler also support additional special
6081 options, usually for compatibility with other compilers on the same
6082 platform.
6084  These options are defined by the macro `TARGET_SWITCHES' in the
6085 machine description.  The default for the options is also defined by
6086 that macro, which enables you to change the defaults.
6088 * Menu:
6090 * M680x0 Options::
6091 * M68hc1x Options::
6092 * VAX Options::
6093 * SPARC Options::
6094 * ARM Options::
6095 * MN10300 Options::
6096 * M32R/D Options::
6097 * RS/6000 and PowerPC Options::
6098 * Darwin Options::
6099 * MIPS Options::
6100 * i386 and x86-64 Options::
6101 * HPPA Options::
6102 * Intel 960 Options::
6103 * DEC Alpha Options::
6104 * DEC Alpha/VMS Options::
6105 * H8/300 Options::
6106 * SH Options::
6107 * System V Options::
6108 * TMS320C3x/C4x Options::
6109 * V850 Options::
6110 * ARC Options::
6111 * NS32K Options::
6112 * AVR Options::
6113 * MCore Options::
6114 * IA-64 Options::
6115 * D30V Options::
6116 * S/390 and zSeries Options::
6117 * CRIS Options::
6118 * MMIX Options::
6119 * PDP-11 Options::
6120 * Xstormy16 Options::
6121 * Xtensa Options::
6122 * FRV Options::
6124 \x1f
6125 File: gcc.info,  Node: M680x0 Options,  Next: M68hc1x Options,  Up: Submodel Options
6127 M680x0 Options
6128 --------------
6130  These are the `-m' options defined for the 68000 series.  The default
6131 values for these options depends on which style of 68000 was selected
6132 when the compiler was configured; the defaults for the most common
6133 choices are given below.
6135 `-m68000'
6136 `-mc68000'
6137      Generate output for a 68000.  This is the default when the
6138      compiler is configured for 68000-based systems.
6140      Use this option for microcontrollers with a 68000 or EC000 core,
6141      including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
6143 `-m68020'
6144 `-mc68020'
6145      Generate output for a 68020.  This is the default when the
6146      compiler is configured for 68020-based systems.
6148 `-m68881'
6149      Generate output containing 68881 instructions for floating point.
6150      This is the default for most 68020 systems unless `--nfp' was
6151      specified when the compiler was configured.
6153 `-m68030'
6154      Generate output for a 68030.  This is the default when the
6155      compiler is configured for 68030-based systems.
6157 `-m68040'
6158      Generate output for a 68040.  This is the default when the
6159      compiler is configured for 68040-based systems.
6161      This option inhibits the use of 68881/68882 instructions that have
6162      to be emulated by software on the 68040.  Use this option if your
6163      68040 does not have code to emulate those instructions.
6165 `-m68060'
6166      Generate output for a 68060.  This is the default when the
6167      compiler is configured for 68060-based systems.
6169      This option inhibits the use of 68020 and 68881/68882 instructions
6170      that have to be emulated by software on the 68060.  Use this
6171      option if your 68060 does not have code to emulate those
6172      instructions.
6174 `-mcpu32'
6175      Generate output for a CPU32.  This is the default when the
6176      compiler is configured for CPU32-based systems.
6178      Use this option for microcontrollers with a CPU32 or CPU32+ core,
6179      including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
6180      68341, 68349 and 68360.
6182 `-m5200'
6183      Generate output for a 520X "coldfire" family cpu.  This is the
6184      default when the compiler is configured for 520X-based systems.
6186      Use this option for microcontroller with a 5200 core, including
6187      the MCF5202, MCF5203, MCF5204 and MCF5202.
6189 `-m68020-40'
6190      Generate output for a 68040, without using any of the new
6191      instructions.  This results in code which can run relatively
6192      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
6193      generated code does use the 68881 instructions that are emulated
6194      on the 68040.
6196 `-m68020-60'
6197      Generate output for a 68060, without using any of the new
6198      instructions.  This results in code which can run relatively
6199      efficiently on either a 68020/68881 or a 68030 or a 68040.  The
6200      generated code does use the 68881 instructions that are emulated
6201      on the 68060.
6203 `-msoft-float'
6204      Generate output containing library calls for floating point.
6205      *Warning:* the requisite libraries are not available for all m68k
6206      targets.  Normally the facilities of the machine's usual C
6207      compiler are used, but this can't be done directly in
6208      cross-compilation.  You must make your own arrangements to provide
6209      suitable library functions for cross-compilation.  The embedded
6210      targets `m68k-*-aout' and `m68k-*-coff' do provide software
6211      floating point support.
6213 `-mshort'
6214      Consider type `int' to be 16 bits wide, like `short int'.
6216 `-mnobitfield'
6217      Do not use the bit-field instructions.  The `-m68000', `-mcpu32'
6218      and `-m5200' options imply `-mnobitfield'.
6220 `-mbitfield'
6221      Do use the bit-field instructions.  The `-m68020' option implies
6222      `-mbitfield'.  This is the default if you use a configuration
6223      designed for a 68020.
6225 `-mrtd'
6226      Use a different function-calling convention, in which functions
6227      that take a fixed number of arguments return with the `rtd'
6228      instruction, which pops their arguments while returning.  This
6229      saves one instruction in the caller since there is no need to pop
6230      the arguments there.
6232      *Warning:* this calling convention is incompatible with the one
6233      normally used on Unix or with GCC, so you cannot use it if you
6234      need to call libraries compiled with the Unix compiler or with GCC
6235      without the switch.
6237      Also, you must provide function prototypes for all functions that
6238      take variable numbers of arguments (including `printf'); otherwise
6239      incorrect code will be generated for calls to those functions.
6241      In addition, seriously incorrect code will result if you call a
6242      function with too many arguments.  (Normally, extra arguments are
6243      harmlessly ignored.)
6245      The `rtd' instruction is supported by the 68010, 68020, 68030,
6246      68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
6248 `-malign-int'
6249 `-mno-align-int'
6250      Control whether GCC aligns `int', `long', `long long', `float',
6251      `double', and `long double' variables on a 32-bit boundary
6252      (`-malign-int') or a 16-bit boundary (`-mno-align-int').  Aligning
6253      variables on 32-bit boundaries produces code that runs somewhat
6254      faster on processors with 32-bit busses at the expense of more
6255      memory.
6257      *Warning:* if you use the `-malign-int' switch, GCC will align
6258      structures containing the above types  differently than most
6259      published application binary interface specifications for the m68k.
6261 `-mpcrel'
6262      Use the pc-relative addressing mode of the 68000 directly, instead
6263      of using a global offset table.  At present, this option implies
6264      `-fpic', allowing at most a 16-bit offset for pc-relative
6265      addressing.  `-fPIC' is not presently supported with `-mpcrel',
6266      though this could be supported for 68020 and higher processors.
6268 `-mno-strict-align'
6269 `-mstrict-align'
6270      Do not (do) assume that unaligned memory references will be
6271      handled by the system.
6273 `-msep-data'
6274      Generate code that allows the data segment to be located in a
6275      different area of memory from the text segment.  This allows for
6276      execute in place in an environment without virtual memory
6277      management.  This option implies -fPIC.
6279 `-mno-sep-data'
6280      Generate code that assumes that the data segment follows the text
6281      segment.  This is the default.
6283 `-mid-shared-library'
6284      Generate code that supports shared libraries via the library ID
6285      method.  This allows for execute in place and shared libraries in
6286      an environment without virtual memory management.  This option
6287      implies -fPIC.
6289 `-mno-id-shared-library'
6290      Generate code that doesn't assume ID based shared libraries are
6291      being used.  This is the default.
6293 `-mshared-library-id=n'
6294      Specified the identification number of the ID based shared library
6295      being compiled.  Specifying a value of 0 will generate more
6296      compact code, specifying other values will force the allocation of
6297      that number to the current library but is no more space or time
6298      efficient than omitting this option.
6300 \x1f
6301 File: gcc.info,  Node: M68hc1x Options,  Next: VAX Options,  Prev: M680x0 Options,  Up: Submodel Options
6303 M68hc1x Options
6304 ---------------
6306  These are the `-m' options defined for the 68hc11 and 68hc12
6307 microcontrollers.  The default values for these options depends on
6308 which style of microcontroller was selected when the compiler was
6309 configured; the defaults for the most common choices are given below.
6311 `-m6811'
6312 `-m68hc11'
6313      Generate output for a 68HC11.  This is the default when the
6314      compiler is configured for 68HC11-based systems.
6316 `-m6812'
6317 `-m68hc12'
6318      Generate output for a 68HC12.  This is the default when the
6319      compiler is configured for 68HC12-based systems.
6321 `-m68S12'
6322 `-m68hcs12'
6323      Generate output for a 68HCS12.
6325 `-mauto-incdec'
6326      Enable the use of 68HC12 pre and post auto-increment and
6327      auto-decrement addressing modes.
6329 `-minmax'
6330 `-nominmax'
6331      Enable the use of 68HC12 min and max instructions.
6333 `-mlong-calls'
6334 `-mno-long-calls'
6335      Treat all calls as being far away (near).  If calls are assumed to
6336      be far away, the compiler will use the `call' instruction to call
6337      a function and the `rtc' instruction for returning.
6339 `-mshort'
6340      Consider type `int' to be 16 bits wide, like `short int'.
6342 `-msoft-reg-count=COUNT'
6343      Specify the number of pseudo-soft registers which are used for the
6344      code generation.  The maximum number is 32.  Using more pseudo-soft
6345      register may or may not result in better code depending on the
6346      program.  The default is 4 for 68HC11 and 2 for 68HC12.
6348 \x1f
6349 File: gcc.info,  Node: VAX Options,  Next: SPARC Options,  Prev: M68hc1x Options,  Up: Submodel Options
6351 VAX Options
6352 -----------
6354  These `-m' options are defined for the VAX:
6356 `-munix'
6357      Do not output certain jump instructions (`aobleq' and so on) that
6358      the Unix assembler for the VAX cannot handle across long ranges.
6360 `-mgnu'
6361      Do output those jump instructions, on the assumption that you will
6362      assemble with the GNU assembler.
6364 `-mg'
6365      Output code for g-format floating point numbers instead of
6366      d-format.
6368 \x1f
6369 File: gcc.info,  Node: SPARC Options,  Next: ARM Options,  Prev: VAX Options,  Up: Submodel Options
6371 SPARC Options
6372 -------------
6374  These `-m' options are supported on the SPARC:
6376 `-mno-app-regs'
6377 `-mapp-regs'
6378      Specify `-mapp-regs' to generate output using the global registers
6379      2 through 4, which the SPARC SVR4 ABI reserves for applications.
6380      This is the default.
6382      To be fully SVR4 ABI compliant at the cost of some performance
6383      loss, specify `-mno-app-regs'.  You should compile libraries and
6384      system software with this option.
6386 `-mfpu'
6387 `-mhard-float'
6388      Generate output containing floating point instructions.  This is
6389      the default.
6391 `-mno-fpu'
6392 `-msoft-float'
6393      Generate output containing library calls for floating point.
6394      *Warning:* the requisite libraries are not available for all SPARC
6395      targets.  Normally the facilities of the machine's usual C
6396      compiler are used, but this cannot be done directly in
6397      cross-compilation.  You must make your own arrangements to provide
6398      suitable library functions for cross-compilation.  The embedded
6399      targets `sparc-*-aout' and `sparclite-*-*' do provide software
6400      floating point support.
6402      `-msoft-float' changes the calling convention in the output file;
6403      therefore, it is only useful if you compile _all_ of a program with
6404      this option.  In particular, you need to compile `libgcc.a', the
6405      library that comes with GCC, with `-msoft-float' in order for this
6406      to work.
6408 `-mhard-quad-float'
6409      Generate output containing quad-word (long double) floating point
6410      instructions.
6412 `-msoft-quad-float'
6413      Generate output containing library calls for quad-word (long
6414      double) floating point instructions.  The functions called are
6415      those specified in the SPARC ABI.  This is the default.
6417      As of this writing, there are no SPARC implementations that have
6418      hardware support for the quad-word floating point instructions.
6419      They all invoke a trap handler for one of these instructions, and
6420      then the trap handler emulates the effect of the instruction.
6421      Because of the trap handler overhead, this is much slower than
6422      calling the ABI library routines.  Thus the `-msoft-quad-float'
6423      option is the default.
6425 `-mno-flat'
6426 `-mflat'
6427      With `-mflat', the compiler does not generate save/restore
6428      instructions and will use a "flat" or single register window
6429      calling convention.  This model uses %i7 as the frame pointer and
6430      is compatible with the normal register window model.  Code from
6431      either may be intermixed.  The local registers and the input
6432      registers (0-5) are still treated as "call saved" registers and
6433      will be saved on the stack as necessary.
6435      With `-mno-flat' (the default), the compiler emits save/restore
6436      instructions (except for leaf functions) and is the normal mode of
6437      operation.
6439      These options are deprecated and will be deleted in a future GCC
6440      release.
6442 `-mno-unaligned-doubles'
6443 `-munaligned-doubles'
6444      Assume that doubles have 8 byte alignment.  This is the default.
6446      With `-munaligned-doubles', GCC assumes that doubles have 8 byte
6447      alignment only if they are contained in another type, or if they
6448      have an absolute address.  Otherwise, it assumes they have 4 byte
6449      alignment.  Specifying this option avoids some rare compatibility
6450      problems with code generated by other compilers.  It is not the
6451      default because it results in a performance loss, especially for
6452      floating point code.
6454 `-mno-faster-structs'
6455 `-mfaster-structs'
6456      With `-mfaster-structs', the compiler assumes that structures
6457      should have 8 byte alignment.  This enables the use of pairs of
6458      `ldd' and `std' instructions for copies in structure assignment,
6459      in place of twice as many `ld' and `st' pairs.  However, the use
6460      of this changed alignment directly violates the SPARC ABI.  Thus,
6461      it's intended only for use on targets where the developer
6462      acknowledges that their resulting code will not be directly in
6463      line with the rules of the ABI.
6465 `-mimpure-text'
6466      `-mimpure-text', used in addition to `-shared', tells the compiler
6467      to not pass `-z text' to the linker when linking a shared object.
6468      Using this option, you can link position-dependent code into a
6469      shared object.
6471      `-mimpure-text' suppresses the "relocations remain against
6472      allocatable but non-writable sections" linker error message.
6473      However, the necessary relocations will trigger copy-on-write, and
6474      the shared object is not actually shared across processes.
6475      Instead of using `-mimpure-text', you should compile all source
6476      code with `-fpic' or `-fPIC'.
6478      This option is only available on SunOS and Solaris.
6480 `-mv8'
6481 `-msparclite'
6482      These two options select variations on the SPARC architecture.
6483      These options are deprecated and will be deleted in a future GCC
6484      release.  They have been replaced with `-mcpu=xxx'.
6486 `-mcypress'
6487 `-msupersparc'
6488 `-mf930'
6489 `-mf934'
6490      These four options select the processor for which the code is
6491      optimized.  These options are deprecated and will be deleted in a
6492      future GCC release.  They have been replaced with `-mcpu=xxx'.
6494 `-mcpu=CPU_TYPE'
6495      Set the instruction set, register set, and instruction scheduling
6496      parameters for machine type CPU_TYPE.  Supported values for
6497      CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
6498      `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
6499      `tsc701', `v9', `ultrasparc', and `ultrasparc3'.
6501      Default instruction scheduling parameters are used for values that
6502      select an architecture and not an implementation.  These are `v7',
6503      `v8', `sparclite', `sparclet', `v9'.
6505      Here is a list of each supported architecture and their supported
6506      implementations.
6508               v7:             cypress
6509               v8:             supersparc, hypersparc
6510               sparclite:      f930, f934, sparclite86x
6511               sparclet:       tsc701
6512               v9:             ultrasparc, ultrasparc3
6514      By default (unless configured otherwise), GCC generates code for
6515      the V7 variant of the SPARC architecture.  With `-mcpu=cypress',
6516      the compiler additionally optimizes it for the Cypress CY7C602
6517      chip, as used in the SPARCStation/SPARCServer 3xx series.  This is
6518      also appropriate for the older SPARCStation 1, 2, IPX etc.
6520      With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
6521      architecture.  The only difference from V7 code is that the
6522      compiler emits the integer multiply and integer divide
6523      instructions which exist in SPARC-V8 but not in SPARC-V7.  With
6524      `-mcpu=supersparc', the compiler additionally optimizes it for the
6525      SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
6526      series.
6528      With `-mcpu=sparclite', GCC generates code for the SPARClite
6529      variant of the SPARC architecture.  This adds the integer
6530      multiply, integer divide step and scan (`ffs') instructions which
6531      exist in SPARClite but not in SPARC-V7.  With `-mcpu=f930', the
6532      compiler additionally optimizes it for the Fujitsu MB86930 chip,
6533      which is the original SPARClite, with no FPU.  With `-mcpu=f934',
6534      the compiler additionally optimizes it for the Fujitsu MB86934
6535      chip, which is the more recent SPARClite with FPU.
6537      With `-mcpu=sparclet', GCC generates code for the SPARClet variant
6538      of the SPARC architecture.  This adds the integer multiply,
6539      multiply/accumulate, integer divide step and scan (`ffs')
6540      instructions which exist in SPARClet but not in SPARC-V7.  With
6541      `-mcpu=tsc701', the compiler additionally optimizes it for the
6542      TEMIC SPARClet chip.
6544      With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
6545      architecture.  This adds 64-bit integer and floating-point move
6546      instructions, 3 additional floating-point condition code registers
6547      and conditional move instructions.  With `-mcpu=ultrasparc', the
6548      compiler additionally optimizes it for the Sun UltraSPARC I/II
6549      chips.  With `-mcpu=ultrasparc3', the compiler additionally
6550      optimizes it for the Sun UltraSPARC III chip.
6552 `-mtune=CPU_TYPE'
6553      Set the instruction scheduling parameters for machine type
6554      CPU_TYPE, but do not set the instruction set or register set that
6555      the option `-mcpu=CPU_TYPE' would.
6557      The same values for `-mcpu=CPU_TYPE' can be used for
6558      `-mtune=CPU_TYPE', but the only useful values are those that
6559      select a particular cpu implementation.  Those are `cypress',
6560      `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
6561      `tsc701', `ultrasparc', and `ultrasparc3'.
6563 `-mv8plus'
6564 `-mno-v8plus'
6565      With `-mv8plus', GCC generates code for the SPARC-V8+ ABI.  The
6566      difference from the V8 ABI is that the global and out registers are
6567      considered 64-bit wide.  This is enabled by default on Solaris in
6568      32-bit mode for all SPARC-V9 processors.
6570 `-mvis'
6571 `-mno-vis'
6572      With `-mvis', GCC generates code that takes advantage of the
6573      UltraSPARC Visual Instruction Set extensions.  The default is
6574      `-mno-vis'.
6576  These `-m' options are supported in addition to the above on SPARC-V9
6577 processors in 64-bit environments:
6579 `-mlittle-endian'
6580      Generate code for a processor running in little-endian mode. It is
6581      only available for a few configurations and most notably not on
6582      Solaris.
6584 `-m32'
6585 `-m64'
6586      Generate code for a 32-bit or 64-bit environment.  The 32-bit
6587      environment sets int, long and pointer to 32 bits.  The 64-bit
6588      environment sets int to 32 bits and long and pointer to 64 bits.
6590 `-mcmodel=medlow'
6591      Generate code for the Medium/Low code model: 64-bit addresses,
6592      programs must be linked in the low 32 bits of memory.  Programs
6593      can be statically or dynamically linked.
6595 `-mcmodel=medmid'
6596      Generate code for the Medium/Middle code model: 64-bit addresses,
6597      programs must be linked in the low 44 bits of memory, the text and
6598      data segments must be less than 2GB in size and the data segment
6599      must be located within 2GB of the text segment.
6601 `-mcmodel=medany'
6602      Generate code for the Medium/Anywhere code model: 64-bit
6603      addresses, programs may be linked anywhere in memory, the text and
6604      data segments must be less than 2GB in size and the data segment
6605      must be located within 2GB of the text segment.
6607 `-mcmodel=embmedany'
6608      Generate code for the Medium/Anywhere code model for embedded
6609      systems: 64-bit addresses, the text and data segments must be less
6610      than 2GB in size, both starting anywhere in memory (determined at
6611      link time).  The global register %g4 points to the base of the
6612      data segment.  Programs are statically linked and PIC is not
6613      supported.
6615 `-mstack-bias'
6616 `-mno-stack-bias'
6617      With `-mstack-bias', GCC assumes that the stack pointer, and frame
6618      pointer if present, are offset by -2047 which must be added back
6619      when making stack frame references.  This is the default in 64-bit
6620      mode.  Otherwise, assume no such offset is present.
6622  These switches are supported in addition to the above on Solaris:
6624 `-threads'
6625      Add support for multithreading using the Solaris threads library.
6626      This option sets flags for both the preprocessor and linker.  This
6627      option does not affect the thread safety of object code produced
6628      by the compiler or that of libraries supplied with it.
6630 `-pthreads'
6631      Add support for multithreading using the POSIX threads library.
6632      This option sets flags for both the preprocessor and linker.  This
6633      option does not affect the thread safety of object code produced
6634      by the compiler or that of libraries supplied with it.
6636 \x1f
6637 File: gcc.info,  Node: ARM Options,  Next: MN10300 Options,  Prev: SPARC Options,  Up: Submodel Options
6639 ARM Options
6640 -----------
6642  These `-m' options are defined for Advanced RISC Machines (ARM)
6643 architectures:
6645 `-mapcs-frame'
6646      Generate a stack frame that is compliant with the ARM Procedure
6647      Call Standard for all functions, even if this is not strictly
6648      necessary for correct execution of the code.  Specifying
6649      `-fomit-frame-pointer' with this option will cause the stack
6650      frames not to be generated for leaf functions.  The default is
6651      `-mno-apcs-frame'.
6653 `-mapcs'
6654      This is a synonym for `-mapcs-frame'.
6656 `-mapcs-26'
6657      Generate code for a processor running with a 26-bit program
6658      counter, and conforming to the function calling standards for the
6659      APCS 26-bit option.
6661      This option is deprecated.  Future releases of the GCC will only
6662      support generating code that runs in apcs-32 mode.
6664 `-mapcs-32'
6665      Generate code for a processor running with a 32-bit program
6666      counter, and conforming to the function calling standards for the
6667      APCS 32-bit option.
6669      This flag is deprecated.  Future releases of GCC will make this
6670      flag unconditional.
6672 `-mthumb-interwork'
6673      Generate code which supports calling between the ARM and Thumb
6674      instruction sets.  Without this option the two instruction sets
6675      cannot be reliably used inside one program.  The default is
6676      `-mno-thumb-interwork', since slightly larger code is generated
6677      when `-mthumb-interwork' is specified.
6679 `-mno-sched-prolog'
6680      Prevent the reordering of instructions in the function prolog, or
6681      the merging of those instruction with the instructions in the
6682      function's body.  This means that all functions will start with a
6683      recognizable set of instructions (or in fact one of a choice from
6684      a small set of different function prologues), and this information
6685      can be used to locate the start if functions inside an executable
6686      piece of code.  The default is `-msched-prolog'.
6688 `-mhard-float'
6689      Generate output containing floating point instructions.  This is
6690      the default.
6692 `-msoft-float'
6693      Generate output containing library calls for floating point.
6694      *Warning:* the requisite libraries are not available for all ARM
6695      targets.  Normally the facilities of the machine's usual C
6696      compiler are used, but this cannot be done directly in
6697      cross-compilation.  You must make your own arrangements to provide
6698      suitable library functions for cross-compilation.
6700      `-msoft-float' changes the calling convention in the output file;
6701      therefore, it is only useful if you compile _all_ of a program with
6702      this option.  In particular, you need to compile `libgcc.a', the
6703      library that comes with GCC, with `-msoft-float' in order for this
6704      to work.
6706 `-mlittle-endian'
6707      Generate code for a processor running in little-endian mode.  This
6708      is the default for all standard configurations.
6710 `-mbig-endian'
6711      Generate code for a processor running in big-endian mode; the
6712      default is to compile code for a little-endian processor.
6714 `-mwords-little-endian'
6715      This option only applies when generating code for big-endian
6716      processors.  Generate code for a little-endian word order but a
6717      big-endian byte order.  That is, a byte order of the form
6718      `32107654'.  Note: this option should only be used if you require
6719      compatibility with code for big-endian ARM processors generated by
6720      versions of the compiler prior to 2.8.
6722 `-malignment-traps'
6723      Generate code that will not trap if the MMU has alignment traps
6724      enabled.  On ARM architectures prior to ARMv4, there were no
6725      instructions to access half-word objects stored in memory.
6726      However, when reading from memory a feature of the ARM
6727      architecture allows a word load to be used, even if the address is
6728      unaligned, and the processor core will rotate the data as it is
6729      being loaded.  This option tells the compiler that such misaligned
6730      accesses will cause a MMU trap and that it should instead
6731      synthesize the access as a series of byte accesses.  The compiler
6732      can still use word accesses to load half-word data if it knows
6733      that the address is aligned to a word boundary.
6735      This option has no effect when compiling for ARM architecture 4 or
6736      later, since these processors have instructions to directly access
6737      half-word objects in memory.
6739 `-mno-alignment-traps'
6740      Generate code that assumes that the MMU will not trap unaligned
6741      accesses.  This produces better code when the target instruction
6742      set does not have half-word memory operations (i.e.
6743      implementations prior to ARMv4).
6745      Note that you cannot use this option to access unaligned word
6746      objects, since the processor will only fetch one 32-bit aligned
6747      object from memory.
6749      The default setting is `-malignment-traps', since this produces
6750      code that will also run on processors implementing ARM architecture
6751      version 6 or later.
6753      This option is deprecated and will be removed in the next release
6754      of GCC.
6756 `-mcpu=NAME'
6757      This specifies the name of the target ARM processor.  GCC uses
6758      this name to determine what kind of instructions it can emit when
6759      generating assembly code.  Permissible names are: `arm2', `arm250',
6760      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
6761      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
6762      `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe',
6763      `arm7tdmi', `arm8', `strongarm', `strongarm110', `strongarm1100',
6764      `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t',
6765      `arm926ejs', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
6766      `arm1026ejs', `arm1136js', `arm1136jfs' ,`xscale', `iwmmxt',
6767      `ep9312'.
6769 `-mtune=NAME'
6770      This option is very similar to the `-mcpu=' option, except that
6771      instead of specifying the actual target processor type, and hence
6772      restricting which instructions can be used, it specifies that GCC
6773      should tune the performance of the code as if the target were of
6774      the type specified in this option, but still choosing the
6775      instructions that it will generate based on the cpu specified by a
6776      `-mcpu=' option.  For some ARM implementations better performance
6777      can be obtained by using this option.
6779 `-march=NAME'
6780      This specifies the name of the target ARM architecture.  GCC uses
6781      this name to determine what kind of instructions it can emit when
6782      generating assembly code.  This option can be used in conjunction
6783      with or instead of the `-mcpu=' option.  Permissible names are:
6784      `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
6785      `armv5t', `armv5te', `armv6j', `iwmmxt', `ep9312'.
6787 `-mfpe=NUMBER'
6788 `-mfp=NUMBER'
6789      This specifies the version of the floating point emulation
6790      available on the target.  Permissible values are 2 and 3.  `-mfp='
6791      is a synonym for `-mfpe=', for compatibility with older versions
6792      of GCC.
6794 `-mstructure-size-boundary=N'
6795      The size of all structures and unions will be rounded up to a
6796      multiple of the number of bits set by this option.  Permissible
6797      values are 8 and 32.  The default value varies for different
6798      toolchains.  For the COFF targeted toolchain the default value is
6799      8.  Specifying the larger number can produce faster, more
6800      efficient code, but can also increase the size of the program.
6801      The two values are potentially incompatible.  Code compiled with
6802      one value cannot necessarily expect to work with code or libraries
6803      compiled with the other value, if they exchange information using
6804      structures or unions.
6806 `-mabort-on-noreturn'
6807      Generate a call to the function `abort' at the end of a `noreturn'
6808      function.  It will be executed if the function tries to return.
6810 `-mlong-calls'
6811 `-mno-long-calls'
6812      Tells the compiler to perform function calls by first loading the
6813      address of the function into a register and then performing a
6814      subroutine call on this register.  This switch is needed if the
6815      target function will lie outside of the 64 megabyte addressing
6816      range of the offset based version of subroutine call instruction.
6818      Even if this switch is enabled, not all function calls will be
6819      turned into long calls.  The heuristic is that static functions,
6820      functions which have the `short-call' attribute, functions that
6821      are inside the scope of a `#pragma no_long_calls' directive and
6822      functions whose definitions have already been compiled within the
6823      current compilation unit, will not be turned into long calls.  The
6824      exception to this rule is that weak function definitions,
6825      functions with the `long-call' attribute or the `section'
6826      attribute, and functions that are within the scope of a `#pragma
6827      long_calls' directive, will always be turned into long calls.
6829      This feature is not enabled by default.  Specifying
6830      `-mno-long-calls' will restore the default behavior, as will
6831      placing the function calls within the scope of a `#pragma
6832      long_calls_off' directive.  Note these switches have no effect on
6833      how the compiler generates code to handle function calls via
6834      function pointers.
6836 `-mnop-fun-dllimport'
6837      Disable support for the `dllimport' attribute.
6839 `-msingle-pic-base'
6840      Treat the register used for PIC addressing as read-only, rather
6841      than loading it in the prologue for each function.  The run-time
6842      system is responsible for initializing this register with an
6843      appropriate value before execution begins.
6845 `-mpic-register=REG'
6846      Specify the register to be used for PIC addressing.  The default
6847      is R10 unless stack-checking is enabled, when R9 is used.
6849 `-mcirrus-fix-invalid-insns'
6850      Insert NOPs into the instruction stream to in order to work around
6851      problems with invalid Maverick instruction combinations.  This
6852      option is only valid if the `-mcpu=ep9312' option has been used to
6853      enable generation of instructions for the Cirrus Maverick floating
6854      point co-processor.  This option is not enabled by default, since
6855      the problem is only present in older Maverick implementations.
6856      The default can be re-enabled by use of the
6857      `-mno-cirrus-fix-invalid-insns' switch.
6859 `-mpoke-function-name'
6860      Write the name of each function into the text section, directly
6861      preceding the function prologue.  The generated code is similar to
6862      this:
6864                t0
6865                    .ascii "arm_poke_function_name", 0
6866                    .align
6867                t1
6868                    .word 0xff000000 + (t1 - t0)
6869                arm_poke_function_name
6870                    mov     ip, sp
6871                    stmfd   sp!, {fp, ip, lr, pc}
6872                    sub     fp, ip, #4
6874      When performing a stack backtrace, code can inspect the value of
6875      `pc' stored at `fp + 0'.  If the trace function then looks at
6876      location `pc - 12' and the top 8 bits are set, then we know that
6877      there is a function name embedded immediately preceding this
6878      location and has length `((pc[-3]) & 0xff000000)'.
6880 `-mthumb'
6881      Generate code for the 16-bit Thumb instruction set.  The default
6882      is to use the 32-bit ARM instruction set.
6884 `-mtpcs-frame'
6885      Generate a stack frame that is compliant with the Thumb Procedure
6886      Call Standard for all non-leaf functions.  (A leaf function is one
6887      that does not call any other functions.)  The default is
6888      `-mno-tpcs-frame'.
6890 `-mtpcs-leaf-frame'
6891      Generate a stack frame that is compliant with the Thumb Procedure
6892      Call Standard for all leaf functions.  (A leaf function is one
6893      that does not call any other functions.)  The default is
6894      `-mno-apcs-leaf-frame'.
6896 `-mcallee-super-interworking'
6897      Gives all externally visible functions in the file being compiled
6898      an ARM instruction set header which switches to Thumb mode before
6899      executing the rest of the function.  This allows these functions
6900      to be called from non-interworking code.
6902 `-mcaller-super-interworking'
6903      Allows calls via function pointers (including virtual functions) to
6904      execute correctly regardless of whether the target code has been
6905      compiled for interworking or not.  There is a small overhead in
6906      the cost of executing a function pointer if this option is enabled.
6908 \x1f
6909 File: gcc.info,  Node: MN10300 Options,  Next: M32R/D Options,  Prev: ARM Options,  Up: Submodel Options
6911 MN10300 Options
6912 ---------------
6914  These `-m' options are defined for Matsushita MN10300 architectures:
6916 `-mmult-bug'
6917      Generate code to avoid bugs in the multiply instructions for the
6918      MN10300 processors.  This is the default.
6920 `-mno-mult-bug'
6921      Do not generate code to avoid bugs in the multiply instructions
6922      for the MN10300 processors.
6924 `-mam33'
6925      Generate code which uses features specific to the AM33 processor.
6927 `-mno-am33'
6928      Do not generate code which uses features specific to the AM33
6929      processor.  This is the default.
6931 `-mno-crt0'
6932      Do not link in the C run-time initialization object file.
6934 `-mrelax'
6935      Indicate to the linker that it should perform a relaxation
6936      optimization pass to shorten branches, calls and absolute memory
6937      addresses.  This option only has an effect when used on the
6938      command line for the final link step.
6940      This option makes symbolic debugging impossible.
6942 \x1f
6943 File: gcc.info,  Node: M32R/D Options,  Next: RS/6000 and PowerPC Options,  Prev: MN10300 Options,  Up: Submodel Options
6945 M32R/D Options
6946 --------------
6948  These `-m' options are defined for Renesas M32R/D architectures:
6950 `-m32r2'
6951      Generate code for the M32R/2.
6953 `-m32rx'
6954      Generate code for the M32R/X.
6956 `-m32r'
6957      Generate code for the M32R.  This is the default.
6959 `-mmodel=small'
6960      Assume all objects live in the lower 16MB of memory (so that their
6961      addresses can be loaded with the `ld24' instruction), and assume
6962      all subroutines are reachable with the `bl' instruction.  This is
6963      the default.
6965      The addressability of a particular object can be set with the
6966      `model' attribute.
6968 `-mmodel=medium'
6969      Assume objects may be anywhere in the 32-bit address space (the
6970      compiler will generate `seth/add3' instructions to load their
6971      addresses), and assume all subroutines are reachable with the `bl'
6972      instruction.
6974 `-mmodel=large'
6975      Assume objects may be anywhere in the 32-bit address space (the
6976      compiler will generate `seth/add3' instructions to load their
6977      addresses), and assume subroutines may not be reachable with the
6978      `bl' instruction (the compiler will generate the much slower
6979      `seth/add3/jl' instruction sequence).
6981 `-msdata=none'
6982      Disable use of the small data area.  Variables will be put into
6983      one of `.data', `bss', or `.rodata' (unless the `section'
6984      attribute has been specified).  This is the default.
6986      The small data area consists of sections `.sdata' and `.sbss'.
6987      Objects may be explicitly put in the small data area with the
6988      `section' attribute using one of these sections.
6990 `-msdata=sdata'
6991      Put small global and static data in the small data area, but do not
6992      generate special code to reference them.
6994 `-msdata=use'
6995      Put small global and static data in the small data area, and
6996      generate special instructions to reference them.
6998 `-G NUM'
6999      Put global and static objects less than or equal to NUM bytes into
7000      the small data or bss sections instead of the normal data or bss
7001      sections.  The default value of NUM is 8.  The `-msdata' option
7002      must be set to one of `sdata' or `use' for this option to have any
7003      effect.
7005      All modules should be compiled with the same `-G NUM' value.
7006      Compiling with different values of NUM may or may not work; if it
7007      doesn't the linker will give an error message--incorrect code will
7008      not be generated.
7010 `-mdebug'
7011      Makes the M32R specific code in the compiler display some
7012      statistics that might help in debugging programs.
7014 `-malign-loops'
7015      Align all loops to a 32-byte boundary.
7017 `-mno-align-loops'
7018      Do not enforce a 32-byte alignment for loops.  This is the default.
7020 `-missue-rate=NUMBER'
7021      Issue NUMBER instructions per cycle.  NUMBER can only be 1 or 2.
7023 `-mbranch-cost=NUMBER'
7024      NUMBER can only be 1 or 2.  If it is 1 then branches will be
7025      preferred over conditional code, if it is 2, then the opposite will
7026      apply.
7028 `-mflush-trap=NUMBER'
7029      Specifies the trap number to use to flush the cache.  The default
7030      is 12.  Valid numbers are between 0 and 15 inclusive.
7032 `-mno-flush-trap'
7033      Specifies that the cache cannot be flushed by using a trap.
7035 `-mflush-func=NAME'
7036      Specifies the name of the operating system function to call to
7037      flush the cache.  The default is __flush_cache_, but a function
7038      call will only be used if a trap is not available.
7040 `-mno-flush-func'
7041      Indicates that there is no OS function for flushing the cache.
7043 \x1f
7044 File: gcc.info,  Node: RS/6000 and PowerPC Options,  Next: Darwin Options,  Prev: M32R/D Options,  Up: Submodel Options
7046 IBM RS/6000 and PowerPC Options
7047 -------------------------------
7049  These `-m' options are defined for the IBM RS/6000 and PowerPC:
7050 `-mpower'
7051 `-mno-power'
7052 `-mpower2'
7053 `-mno-power2'
7054 `-mpowerpc'
7055 `-mno-powerpc'
7056 `-mpowerpc-gpopt'
7057 `-mno-powerpc-gpopt'
7058 `-mpowerpc-gfxopt'
7059 `-mno-powerpc-gfxopt'
7060 `-mpowerpc64'
7061 `-mno-powerpc64'
7062      GCC supports two related instruction set architectures for the
7063      RS/6000 and PowerPC.  The "POWER" instruction set are those
7064      instructions supported by the `rios' chip set used in the original
7065      RS/6000 systems and the "PowerPC" instruction set is the
7066      architecture of the Motorola MPC5xx, MPC6xx, MPC8xx
7067      microprocessors, and the IBM 4xx microprocessors.
7069      Neither architecture is a subset of the other.  However there is a
7070      large common subset of instructions supported by both.  An MQ
7071      register is included in processors supporting the POWER
7072      architecture.
7074      You use these options to specify which instructions are available
7075      on the processor you are using.  The default value of these
7076      options is determined when configuring GCC.  Specifying the
7077      `-mcpu=CPU_TYPE' overrides the specification of these options.  We
7078      recommend you use the `-mcpu=CPU_TYPE' option rather than the
7079      options listed above.
7081      The `-mpower' option allows GCC to generate instructions that are
7082      found only in the POWER architecture and to use the MQ register.
7083      Specifying `-mpower2' implies `-power' and also allows GCC to
7084      generate instructions that are present in the POWER2 architecture
7085      but not the original POWER architecture.
7087      The `-mpowerpc' option allows GCC to generate instructions that
7088      are found only in the 32-bit subset of the PowerPC architecture.
7089      Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
7090      GCC to use the optional PowerPC architecture instructions in the
7091      General Purpose group, including floating-point square root.
7092      Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
7093      GCC to use the optional PowerPC architecture instructions in the
7094      Graphics group, including floating-point select.
7096      The `-mpowerpc64' option allows GCC to generate the additional
7097      64-bit instructions that are found in the full PowerPC64
7098      architecture and to treat GPRs as 64-bit, doubleword quantities.
7099      GCC defaults to `-mno-powerpc64'.
7101      If you specify both `-mno-power' and `-mno-powerpc', GCC will use
7102      only the instructions in the common subset of both architectures
7103      plus some special AIX common-mode calls, and will not use the MQ
7104      register.  Specifying both `-mpower' and `-mpowerpc' permits GCC
7105      to use any instruction from either architecture and to allow use
7106      of the MQ register; specify this for the Motorola MPC601.
7108 `-mnew-mnemonics'
7109 `-mold-mnemonics'
7110      Select which mnemonics to use in the generated assembler code.
7111      With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
7112      for the PowerPC architecture.  With `-mold-mnemonics' it uses the
7113      assembler mnemonics defined for the POWER architecture.
7114      Instructions defined in only one architecture have only one
7115      mnemonic; GCC uses that mnemonic irrespective of which of these
7116      options is specified.
7118      GCC defaults to the mnemonics appropriate for the architecture in
7119      use.  Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
7120      these option.  Unless you are building a cross-compiler, you
7121      should normally not specify either `-mnew-mnemonics' or
7122      `-mold-mnemonics', but should instead accept the default.
7124 `-mcpu=CPU_TYPE'
7125      Set architecture type, register usage, choice of mnemonics, and
7126      instruction scheduling parameters for machine type CPU_TYPE.
7127      Supported values for CPU_TYPE are `401', `403', `405', `405fp',
7128      `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e',
7129      `620', `630', `740', `7400', `7450', `750', `801', `821', `823',
7130      `860', `970', `common', `ec603e', `G3', `G4', `G5', `power',
7131      `power2', `power3', `power4', `power5', `powerpc', `powerpc64',
7132      `rios', `rios1', `rios2', `rsc', and `rs64a'.
7134      `-mcpu=common' selects a completely generic processor.  Code
7135      generated under this option will run on any POWER or PowerPC
7136      processor.  GCC will use only the instructions in the common
7137      subset of both architectures, and will not use the MQ register.
7138      GCC assumes a generic processor model for scheduling purposes.
7140      `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
7141      `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
7142      PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
7143      types, with an appropriate, generic processor model assumed for
7144      scheduling purposes.
7146      The other options specify a specific processor.  Code generated
7147      under those options will run best on that processor, and may not
7148      run at all on others.
7150      The `-mcpu' options automatically enable or disable the following
7151      options: `-maltivec', `-mhard-float', `-mmfcrf', `-mmultiple',
7152      `-mnew-mnemonics', `-mpower', `-mpower2', `-mpowerpc64',
7153      `-mpowerpc-gpopt', `-mpowerpc-gfxopt', `-mstring'.  The particular
7154      options set for any particular CPU will vary between compiler
7155      versions, depending on what setting seems to produce optimal code
7156      for that CPU; it doesn't necessarily reflect the actual hardware's
7157      capabilities.  If you wish to set an individual option to a
7158      particular value, you may specify it after the `-mcpu' option,
7159      like `-mcpu=970 -mno-altivec'.
7161      On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
7162      or disabled by the `-mcpu' option at present, since AIX does not
7163      have full support for these options.  You may still enable or
7164      disable them individually if you're sure it'll work in your
7165      environment.
7167 `-mtune=CPU_TYPE'
7168      Set the instruction scheduling parameters for machine type
7169      CPU_TYPE, but do not set the architecture type, register usage, or
7170      choice of mnemonics, as `-mcpu=CPU_TYPE' would.  The same values
7171      for CPU_TYPE are used for `-mtune' as for `-mcpu'.  If both are
7172      specified, the code generated will use the architecture,
7173      registers, and mnemonics set by `-mcpu', but the scheduling
7174      parameters set by `-mtune'.
7176 `-maltivec'
7177 `-mno-altivec'
7178      These switches enable or disable the use of built-in functions that
7179      allow access to the AltiVec instruction set.  You may also need to
7180      set `-mabi=altivec' to adjust the current ABI with AltiVec ABI
7181      enhancements.
7183 `-mabi=spe'
7184      Extend the current ABI with SPE ABI extensions.  This does not
7185      change the default ABI, instead it adds the SPE ABI extensions to
7186      the current ABI.
7188 `-mabi=no-spe'
7189      Disable Booke SPE ABI extensions for the current ABI.
7191 `-misel=YES/NO'
7192 `-misel'
7193      This switch enables or disables the generation of ISEL
7194      instructions.
7196 `-mspe=YES/NO'
7197 `-mspe'
7198      This switch enables or disables the generation of SPE simd
7199      instructions.
7201 `-mfloat-gprs=YES/NO'
7202 `-mfloat-gprs'
7203      This switch enables or disables the generation of floating point
7204      operations on the general purpose registers for architectures that
7205      support it.  This option is currently only available on the
7206      MPC8540.
7208 `-mfull-toc'
7209 `-mno-fp-in-toc'
7210 `-mno-sum-in-toc'
7211 `-mminimal-toc'
7212      Modify generation of the TOC (Table Of Contents), which is created
7213      for every executable file.  The `-mfull-toc' option is selected by
7214      default.  In that case, GCC will allocate at least one TOC entry
7215      for each unique non-automatic variable reference in your program.
7216      GCC will also place floating-point constants in the TOC.  However,
7217      only 16,384 entries are available in the TOC.
7219      If you receive a linker error message that saying you have
7220      overflowed the available TOC space, you can reduce the amount of
7221      TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
7222      options.  `-mno-fp-in-toc' prevents GCC from putting floating-point
7223      constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
7224      code to calculate the sum of an address and a constant at run-time
7225      instead of putting that sum into the TOC.  You may specify one or
7226      both of these options.  Each causes GCC to produce very slightly
7227      slower and larger code at the expense of conserving TOC space.
7229      If you still run out of space in the TOC even when you specify
7230      both of these options, specify `-mminimal-toc' instead.  This
7231      option causes GCC to make only one TOC entry for every file.  When
7232      you specify this option, GCC will produce code that is slower and
7233      larger but which uses extremely little TOC space.  You may wish to
7234      use this option only on files that contain less frequently
7235      executed code.
7237 `-maix64'
7238 `-maix32'
7239      Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
7240      64-bit `long' type, and the infrastructure needed to support them.
7241      Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
7242      `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
7243      GCC defaults to `-maix32'.
7245 `-mxl-call'
7246 `-mno-xl-call'
7247      On AIX, pass floating-point arguments to prototyped functions
7248      beyond the register save area (RSA) on the stack in addition to
7249      argument FPRs.  The AIX calling convention was extended but not
7250      initially documented to handle an obscure K&R C case of calling a
7251      function that takes the address of its arguments with fewer
7252      arguments than declared.  AIX XL compilers access floating point
7253      arguments which do not fit in the RSA from the stack when a
7254      subroutine is compiled without optimization.  Because always
7255      storing floating-point arguments on the stack is inefficient and
7256      rarely needed, this option is not enabled by default and only is
7257      necessary when calling subroutines compiled by AIX XL compilers
7258      without optimization.
7260 `-mpe'
7261      Support "IBM RS/6000 SP" "Parallel Environment" (PE).  Link an
7262      application written to use message passing with special startup
7263      code to enable the application to run.  The system must have PE
7264      installed in the standard location (`/usr/lpp/ppe.poe/'), or the
7265      `specs' file must be overridden with the `-specs=' option to
7266      specify the appropriate directory location.  The Parallel
7267      Environment does not support threads, so the `-mpe' option and the
7268      `-pthread' option are incompatible.
7270 `-malign-natural'
7271 `-malign-power'
7272      On AIX, Darwin, and 64-bit PowerPC GNU/Linux, the option
7273      `-malign-natural' overrides the ABI-defined alignment of larger
7274      types, such as floating-point doubles, on their natural size-based
7275      boundary.  The option `-malign-power' instructs GCC to follow the
7276      ABI-specified alignment rules.  GCC defaults to the standard
7277      alignment defined in the ABI.
7279 `-msoft-float'
7280 `-mhard-float'
7281      Generate code that does not use (uses) the floating-point register
7282      set.  Software floating point emulation is provided if you use the
7283      `-msoft-float' option, and pass the option to GCC when linking.
7285 `-mmultiple'
7286 `-mno-multiple'
7287      Generate code that uses (does not use) the load multiple word
7288      instructions and the store multiple word instructions.  These
7289      instructions are generated by default on POWER systems, and not
7290      generated on PowerPC systems.  Do not use `-mmultiple' on little
7291      endian PowerPC systems, since those instructions do not work when
7292      the processor is in little endian mode.  The exceptions are PPC740
7293      and PPC750 which permit the instructions usage in little endian
7294      mode.
7296 `-mstring'
7297 `-mno-string'
7298      Generate code that uses (does not use) the load string instructions
7299      and the store string word instructions to save multiple registers
7300      and do small block moves.  These instructions are generated by
7301      default on POWER systems, and not generated on PowerPC systems.
7302      Do not use `-mstring' on little endian PowerPC systems, since those
7303      instructions do not work when the processor is in little endian
7304      mode.  The exceptions are PPC740 and PPC750 which permit the
7305      instructions usage in little endian mode.
7307 `-mupdate'
7308 `-mno-update'
7309      Generate code that uses (does not use) the load or store
7310      instructions that update the base register to the address of the
7311      calculated memory location.  These instructions are generated by
7312      default.  If you use `-mno-update', there is a small window
7313      between the time that the stack pointer is updated and the address
7314      of the previous frame is stored, which means code that walks the
7315      stack frame across interrupts or signals may get corrupted data.
7317 `-mfused-madd'
7318 `-mno-fused-madd'
7319      Generate code that uses (does not use) the floating point multiply
7320      and accumulate instructions.  These instructions are generated by
7321      default if hardware floating is used.
7323 `-mno-bit-align'
7324 `-mbit-align'
7325      On System V.4 and embedded PowerPC systems do not (do) force
7326      structures and unions that contain bit-fields to be aligned to the
7327      base type of the bit-field.
7329      For example, by default a structure containing nothing but 8
7330      `unsigned' bit-fields of length 1 would be aligned to a 4 byte
7331      boundary and have a size of 4 bytes.  By using `-mno-bit-align',
7332      the structure would be aligned to a 1 byte boundary and be one
7333      byte in size.
7335 `-mno-strict-align'
7336 `-mstrict-align'
7337      On System V.4 and embedded PowerPC systems do not (do) assume that
7338      unaligned memory references will be handled by the system.
7340 `-mrelocatable'
7341 `-mno-relocatable'
7342      On embedded PowerPC systems generate code that allows (does not
7343      allow) the program to be relocated to a different address at
7344      runtime.  If you use `-mrelocatable' on any module, all objects
7345      linked together must be compiled with `-mrelocatable' or
7346      `-mrelocatable-lib'.
7348 `-mrelocatable-lib'
7349 `-mno-relocatable-lib'
7350      On embedded PowerPC systems generate code that allows (does not
7351      allow) the program to be relocated to a different address at
7352      runtime.  Modules compiled with `-mrelocatable-lib' can be linked
7353      with either modules compiled without `-mrelocatable' and
7354      `-mrelocatable-lib' or with modules compiled with the
7355      `-mrelocatable' options.
7357 `-mno-toc'
7358 `-mtoc'
7359      On System V.4 and embedded PowerPC systems do not (do) assume that
7360      register 2 contains a pointer to a global area pointing to the
7361      addresses used in the program.
7363 `-mlittle'
7364 `-mlittle-endian'
7365      On System V.4 and embedded PowerPC systems compile code for the
7366      processor in little endian mode.  The `-mlittle-endian' option is
7367      the same as `-mlittle'.
7369 `-mbig'
7370 `-mbig-endian'
7371      On System V.4 and embedded PowerPC systems compile code for the
7372      processor in big endian mode.  The `-mbig-endian' option is the
7373      same as `-mbig'.
7375 `-mdynamic-no-pic'
7376      On Darwin and Mac OS X systems, compile code so that it is not
7377      relocatable, but that its external references are relocatable.  The
7378      resulting code is suitable for applications, but not shared
7379      libraries.
7381 `-mprioritize-restricted-insns=PRIORITY'
7382      This option controls the priority that is assigned to
7383      dispatch-slot restricted instructions during the second scheduling
7384      pass.  The argument PRIORITY takes the value 0/1/2 to assign
7385      NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
7386      instructions.
7388 `-msched-costly-dep=DEPENDENCE_TYPE'
7389      This option controls which dependences are considered costly by
7390      the target during instruction scheduling.  The argument
7391      DEPENDENCE_TYPE takes one of the following values: NO: no
7392      dependence is costly, ALL: all dependences are costly,
7393      TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
7394      STORE_TO_LOAD: any dependence from store to load is costly,
7395      NUMBER: any dependence which latency >= NUMBER is costly.
7397 `-minsert-sched-nops=SCHEME'
7398      This option controls which nop insertion scheme will be used during
7399      the second scheduling pass. The argument SCHEME takes one of the
7400      following values: NO: Don't insert nops.  PAD: Pad with nops any
7401      dispatch group which has vacant issue slots, according to the
7402      scheduler's grouping.  REGROUP_EXACT: Insert nops to force costly
7403      dependent insns into separate groups.  Insert exactly as many nops
7404      as needed to force an insn to a new group, according to the
7405      estimated processor grouping.  NUMBER: Insert nops to force costly
7406      dependent insns into separate groups.  Insert NUMBER nops to force
7407      an insn to a new group.
7409 `-mcall-sysv'
7410      On System V.4 and embedded PowerPC systems compile code using
7411      calling conventions that adheres to the March 1995 draft of the
7412      System V Application Binary Interface, PowerPC processor
7413      supplement.  This is the default unless you configured GCC using
7414      `powerpc-*-eabiaix'.
7416 `-mcall-sysv-eabi'
7417      Specify both `-mcall-sysv' and `-meabi' options.
7419 `-mcall-sysv-noeabi'
7420      Specify both `-mcall-sysv' and `-mno-eabi' options.
7422 `-mcall-solaris'
7423      On System V.4 and embedded PowerPC systems compile code for the
7424      Solaris operating system.
7426 `-mcall-linux'
7427      On System V.4 and embedded PowerPC systems compile code for the
7428      Linux-based GNU system.
7430 `-mcall-gnu'
7431      On System V.4 and embedded PowerPC systems compile code for the
7432      Hurd-based GNU system.
7434 `-mcall-netbsd'
7435      On System V.4 and embedded PowerPC systems compile code for the
7436      NetBSD operating system.
7438 `-maix-struct-return'
7439      Return all structures in memory (as specified by the AIX ABI).
7441 `-msvr4-struct-return'
7442      Return structures smaller than 8 bytes in registers (as specified
7443      by the SVR4 ABI).
7445 `-mabi=altivec'
7446      Extend the current ABI with AltiVec ABI extensions.  This does not
7447      change the default ABI, instead it adds the AltiVec ABI extensions
7448      to the current ABI.
7450 `-mabi=no-altivec'
7451      Disable AltiVec ABI extensions for the current ABI.
7453 `-mprototype'
7454 `-mno-prototype'
7455      On System V.4 and embedded PowerPC systems assume that all calls to
7456      variable argument functions are properly prototyped.  Otherwise,
7457      the compiler must insert an instruction before every non
7458      prototyped call to set or clear bit 6 of the condition code
7459      register (CR) to indicate whether floating point values were
7460      passed in the floating point registers in case the function takes
7461      a variable arguments.  With `-mprototype', only calls to
7462      prototyped variable argument functions will set or clear the bit.
7464 `-msim'
7465      On embedded PowerPC systems, assume that the startup module is
7466      called `sim-crt0.o' and that the standard C libraries are
7467      `libsim.a' and `libc.a'.  This is the default for
7468      `powerpc-*-eabisim'.  configurations.
7470 `-mmvme'
7471      On embedded PowerPC systems, assume that the startup module is
7472      called `crt0.o' and the standard C libraries are `libmvme.a' and
7473      `libc.a'.
7475 `-mads'
7476      On embedded PowerPC systems, assume that the startup module is
7477      called `crt0.o' and the standard C libraries are `libads.a' and
7478      `libc.a'.
7480 `-myellowknife'
7481      On embedded PowerPC systems, assume that the startup module is
7482      called `crt0.o' and the standard C libraries are `libyk.a' and
7483      `libc.a'.
7485 `-mvxworks'
7486      On System V.4 and embedded PowerPC systems, specify that you are
7487      compiling for a VxWorks system.
7489 `-mwindiss'
7490      Specify that you are compiling for the WindISS simulation
7491      environment.
7493 `-memb'
7494      On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
7495      header to indicate that `eabi' extended relocations are used.
7497 `-meabi'
7498 `-mno-eabi'
7499      On System V.4 and embedded PowerPC systems do (do not) adhere to
7500      the Embedded Applications Binary Interface (eabi) which is a set of
7501      modifications to the System V.4 specifications.  Selecting `-meabi'
7502      means that the stack is aligned to an 8 byte boundary, a function
7503      `__eabi' is called to from `main' to set up the eabi environment,
7504      and the `-msdata' option can use both `r2' and `r13' to point to
7505      two separate small data areas.  Selecting `-mno-eabi' means that
7506      the stack is aligned to a 16 byte boundary, do not call an
7507      initialization function from `main', and the `-msdata' option will
7508      only use `r13' to point to a single small data area.  The `-meabi'
7509      option is on by default if you configured GCC using one of the
7510      `powerpc*-*-eabi*' options.
7512 `-msdata=eabi'
7513      On System V.4 and embedded PowerPC systems, put small initialized
7514      `const' global and static data in the `.sdata2' section, which is
7515      pointed to by register `r2'.  Put small initialized non-`const'
7516      global and static data in the `.sdata' section, which is pointed
7517      to by register `r13'.  Put small uninitialized global and static
7518      data in the `.sbss' section, which is adjacent to the `.sdata'
7519      section.  The `-msdata=eabi' option is incompatible with the
7520      `-mrelocatable' option.  The `-msdata=eabi' option also sets the
7521      `-memb' option.
7523 `-msdata=sysv'
7524      On System V.4 and embedded PowerPC systems, put small global and
7525      static data in the `.sdata' section, which is pointed to by
7526      register `r13'.  Put small uninitialized global and static data in
7527      the `.sbss' section, which is adjacent to the `.sdata' section.
7528      The `-msdata=sysv' option is incompatible with the `-mrelocatable'
7529      option.
7531 `-msdata=default'
7532 `-msdata'
7533      On System V.4 and embedded PowerPC systems, if `-meabi' is used,
7534      compile code the same as `-msdata=eabi', otherwise compile code the
7535      same as `-msdata=sysv'.
7537 `-msdata-data'
7538      On System V.4 and embedded PowerPC systems, put small global and
7539      static data in the `.sdata' section.  Put small uninitialized
7540      global and static data in the `.sbss' section.  Do not use
7541      register `r13' to address small data however.  This is the default
7542      behavior unless other `-msdata' options are used.
7544 `-msdata=none'
7545 `-mno-sdata'
7546      On embedded PowerPC systems, put all initialized global and static
7547      data in the `.data' section, and all uninitialized data in the
7548      `.bss' section.
7550 `-G NUM'
7551      On embedded PowerPC systems, put global and static items less than
7552      or equal to NUM bytes into the small data or bss sections instead
7553      of the normal data or bss section.  By default, NUM is 8.  The `-G
7554      NUM' switch is also passed to the linker.  All modules should be
7555      compiled with the same `-G NUM' value.
7557 `-mregnames'
7558 `-mno-regnames'
7559      On System V.4 and embedded PowerPC systems do (do not) emit
7560      register names in the assembly language output using symbolic
7561      forms.
7563 `-mlongcall'
7564 `-mno-longcall'
7565      Default to making all function calls via pointers, so that
7566      functions which reside further than 64 megabytes (67,108,864
7567      bytes) from the current location can be called.  This setting can
7568      be overridden by the `shortcall' function attribute, or by
7569      `#pragma longcall(0)'.
7571      Some linkers are capable of detecting out-of-range calls and
7572      generating glue code on the fly.  On these systems, long calls are
7573      unnecessary and generate slower code.  As of this writing, the AIX
7574      linker can do this, as can the GNU linker for PowerPC/64.  It is
7575      planned to add this feature to the GNU linker for 32-bit PowerPC
7576      systems as well.
7578      On Mach-O (Darwin) systems, this option directs the compiler emit
7579      to the glue for every direct call, and the Darwin linker decides
7580      whether to use or discard it.
7582      In the future, we may cause GCC to ignore all longcall
7583      specifications when the linker is known to generate glue.
7585 `-pthread'
7586      Adds support for multithreading with the "pthreads" library.  This
7587      option sets flags for both the preprocessor and linker.
7589 \x1f
7590 File: gcc.info,  Node: Darwin Options,  Next: MIPS Options,  Prev: RS/6000 and PowerPC Options,  Up: Submodel Options
7592 Darwin Options
7593 --------------
7595  These options are defined for all architectures running the Darwin
7596 operating system.  They are useful for compatibility with other Mac OS
7597 compilers.
7599 `-all_load'
7600      Loads all members of static archive libraries.  See man ld(1) for
7601      more information.
7603 `-arch_errors_fatal'
7604      Cause the errors having to do with files that have the wrong
7605      architecture to be fatal.
7607 `-bind_at_load'
7608      Causes the output file to be marked such that the dynamic linker
7609      will bind all undefined references when the file is loaded or
7610      launched.
7612 `-bundle'
7613      Produce a Mach-o bundle format file.  See man ld(1) for more
7614      information.
7616 `-bundle_loader EXECUTABLE'
7617      This specifies the EXECUTABLE that will be loading the build
7618      output file being linked. See man ld(1) for more information.
7620 `-allowable_client  CLIENT_NAME'
7621 `-arch_only'
7622 `-client_name'
7623 `-compatibility_version'
7624 `-current_version'
7625 `-dependency-file'
7626 `-dylib_file'
7627 `-dylinker_install_name'
7628 `-dynamic'
7629 `-dynamiclib'
7630 `-exported_symbols_list'
7631 `-filelist'
7632 `-flat_namespace'
7633 `-force_cpusubtype_ALL'
7634 `-force_flat_namespace'
7635 `-headerpad_max_install_names'
7636 `-image_base'
7637 `-init'
7638 `-install_name'
7639 `-keep_private_externs'
7640 `-multi_module'
7641 `-multiply_defined'
7642 `-multiply_defined_unused'
7643 `-noall_load'
7644 `-nofixprebinding'
7645 `-nomultidefs'
7646 `-noprebind'
7647 `-noseglinkedit'
7648 `-pagezero_size'
7649 `-prebind'
7650 `-prebind_all_twolevel_modules'
7651 `-private_bundle'
7652 `-read_only_relocs'
7653 `-sectalign'
7654 `-sectobjectsymbols'
7655 `-whyload'
7656 `-seg1addr'
7657 `-sectcreate'
7658 `-sectobjectsymbols'
7659 `-sectorder'
7660 `-seg_addr_table'
7661 `-seg_addr_table_filename'
7662 `-seglinkedit'
7663 `-segprot'
7664 `-segs_read_only_addr'
7665 `-segs_read_write_addr'
7666 `-single_module'
7667 `-static'
7668 `-sub_library'
7669 `-sub_umbrella'
7670 `-twolevel_namespace'
7671 `-umbrella'
7672 `-undefined'
7673 `-unexported_symbols_list'
7674 `-weak_reference_mismatches'
7675 `-whatsloaded'
7676      These options are available for Darwin linker. Darwin linker man
7677      page describes them in detail.
7679 \x1f
7680 File: gcc.info,  Node: MIPS Options,  Next: i386 and x86-64 Options,  Prev: Darwin Options,  Up: Submodel Options
7682 MIPS Options
7683 ------------
7685 `-EB'
7686      Generate big-endian code.
7688 `-EL'
7689      Generate little-endian code.  This is the default for `mips*el-*-*'
7690      configurations.
7692 `-march=ARCH'
7693      Generate code that will run on ARCH, which can be the name of a
7694      generic MIPS ISA, or the name of a particular processor.  The ISA
7695      names are: `mips1', `mips2', `mips3', `mips4', `mips32',
7696      `mips32r2', and `mips64'.  The processor names are: `4kc', `4kp',
7697      `5kc', `20kc', `m4k', `r2000', `r3000', `r3900', `r4000', `r4400',
7698      `r4600', `r4650', `r6000', `r8000', `rm7000', `rm9000', `orion',
7699      `sb1', `vr4100', `vr4111', `vr4120', `vr4300', `vr5000', `vr5400'
7700      and `vr5500'.  The special value `from-abi' selects the most
7701      compatible architecture for the selected ABI (that is, `mips1' for
7702      32-bit ABIs and `mips3' for 64-bit ABIs).
7704      In processor names, a final `000' can be abbreviated as `k' (for
7705      example, `-march=r2k').  Prefixes are optional, and `vr' may be
7706      written `r'.
7708      GCC defines two macros based on the value of this option.  The
7709      first is `_MIPS_ARCH', which gives the name of target
7710      architecture, as a string.  The second has the form
7711      `_MIPS_ARCH_FOO', where FOO is the capitalized value of
7712      `_MIPS_ARCH'.  For example, `-march=r2000' will set `_MIPS_ARCH'
7713      to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
7715      Note that the `_MIPS_ARCH' macro uses the processor names given
7716      above.  In other words, it will have the full prefix and will not
7717      abbreviate `000' as `k'.  In the case of `from-abi', the macro
7718      names the resolved architecture (either `"mips1"' or `"mips3"').
7719      It names the default architecture when no `-march' option is given.
7721 `-mtune=ARCH'
7722      Optimize for ARCH.  Among other things, this option controls the
7723      way instructions are scheduled, and the perceived cost of
7724      arithmetic operations.  The list of ARCH values is the same as for
7725      `-march'.
7727      When this option is not used, GCC will optimize for the processor
7728      specified by `-march'.  By using `-march' and `-mtune' together,
7729      it is possible to generate code that will run on a family of
7730      processors, but optimize the code for one particular member of
7731      that family.
7733      `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
7734      which work in the same way as the `-march' ones described above.
7736 `-mips1'
7737      Equivalent to `-march=mips1'.
7739 `-mips2'
7740      Equivalent to `-march=mips2'.
7742 `-mips3'
7743      Equivalent to `-march=mips3'.
7745 `-mips4'
7746      Equivalent to `-march=mips4'.
7748 `-mips32'
7749      Equivalent to `-march=mips32'.
7751 `-mips32r2'
7752      Equivalent to `-march=mips32r2'.
7754 `-mips64'
7755      Equivalent to `-march=mips64'.
7757 `-mips16'
7758 `-mno-mips16'
7759      Use (do not use) the MIPS16 ISA.
7761 `-mabi=32'
7762 `-mabi=o64'
7763 `-mabi=n32'
7764 `-mabi=64'
7765 `-mabi=eabi'
7766      Generate code for the given ABI.
7768      Note that the EABI has a 32-bit and a 64-bit variant.  GCC normally
7769      generates 64-bit code when you select a 64-bit architecture, but
7770      you can use `-mgp32' to get 32-bit code instead.
7772 `-mabicalls'
7773 `-mno-abicalls'
7774      Generate (do not generate) SVR4-style position-independent code.
7775      `-mabicalls' is the default for SVR4-based systems.
7777 `-mxgot'
7778 `-mno-xgot'
7779      Lift (do not lift) the usual restrictions on the size of the global
7780      offset table.
7782      GCC normally uses a single instruction to load values from the GOT.
7783      While this is relatively efficient, it will only work if the GOT
7784      is smaller than about 64k.  Anything larger will cause the linker
7785      to report an error such as:
7787           relocation truncated to fit: R_MIPS_GOT16 foobar
7789      If this happens, you should recompile your code with `-mxgot'.  It
7790      should then work with very large GOTs, although it will also be
7791      less efficient, since it will take three instructions to fetch the
7792      value of a global symbol.
7794      Note that some linkers can create multiple GOTs.  If you have such
7795      a linker, you should only need to use `-mxgot' when a single object
7796      file accesses more than 64k's worth of GOT entries.  Very few do.
7798      These options have no effect unless GCC is generating position
7799      independent code.
7801 `-membedded-pic'
7802 `-mno-embedded-pic'
7803      Generate (do not generate) position-independent code suitable for
7804      some embedded systems.  All calls are made using PC relative
7805      addresses, and all data is addressed using the $gp register.  No
7806      more than 65536 bytes of global data may be used.  This requires
7807      GNU as and GNU ld, which do most of the work.
7809 `-mgp32'
7810      Assume that general-purpose registers are 32 bits wide.
7812 `-mgp64'
7813      Assume that general-purpose registers are 64 bits wide.
7815 `-mfp32'
7816      Assume that floating-point registers are 32 bits wide.
7818 `-mfp64'
7819      Assume that floating-point registers are 64 bits wide.
7821 `-mhard-float'
7822      Use floating-point coprocessor instructions.
7824 `-msoft-float'
7825      Do not use floating-point coprocessor instructions.  Implement
7826      floating-point calculations using library calls instead.
7828 `-msingle-float'
7829      Assume that the floating-point coprocessor only supports
7830      single-precision operations.
7832 `-mdouble-float'
7833      Assume that the floating-point coprocessor supports
7834      double-precision operations.  This is the default.
7836 `-mint64'
7837      Force `int' and `long' types to be 64 bits wide.  See `-mlong32'
7838      for an explanation of the default and the way that the pointer
7839      size is determined.
7841 `-mlong64'
7842      Force `long' types to be 64 bits wide.  See `-mlong32' for an
7843      explanation of the default and the way that the pointer size is
7844      determined.
7846 `-mlong32'
7847      Force `long', `int', and pointer types to be 32 bits wide.
7849      The default size of `int's, `long's and pointers depends on the
7850      ABI.  All the supported ABIs use 32-bit `int's.  The n64 ABI uses
7851      64-bit `long's, as does the 64-bit EABI; the others use 32-bit
7852      `long's.  Pointers are the same size as `long's, or the same size
7853      as integer registers, whichever is smaller.
7855 `-G NUM'
7856      Put global and static items less than or equal to NUM bytes into
7857      the small data or bss section instead of the normal data or bss
7858      section.  This allows the data to be accessed using a single
7859      instruction.
7861      All modules should be compiled with the same `-G NUM' value.
7863 `-membedded-data'
7864 `-mno-embedded-data'
7865      Allocate variables to the read-only data section first if
7866      possible, then next in the small data section if possible,
7867      otherwise in data.  This gives slightly slower code than the
7868      default, but reduces the amount of RAM required when executing,
7869      and thus may be preferred for some embedded systems.
7871 `-muninit-const-in-rodata'
7872 `-mno-uninit-const-in-rodata'
7873      Put uninitialized `const' variables in the read-only data section.
7874      This option is only meaningful in conjunction with
7875      `-membedded-data'.
7877 `-msplit-addresses'
7878 `-mno-split-addresses'
7879      Enable (disable) use of the `%hi()' and `%lo()' assembler
7880      relocation operators.  This option has been superceded by
7881      `-mexplicit-relocs' but is retained for backwards compatibility.
7883 `-mexplicit-relocs'
7884 `-mno-explicit-relocs'
7885      Use (do not use) assembler relocation operators when dealing with
7886      symbolic addresses.  The alternative, selected by
7887      `-mno-explicit-relocs', is to use assembler macros instead.
7889      `-mexplicit-relocs' is usually the default if GCC was configured
7890      to use an assembler that supports relocation operators.  However,
7891      there are two exceptions:
7893         * GCC is not yet able to generate explicit relocations for the
7894           combination of `-mabi=64' and `-mno-abicalls'.  This will be
7895           addressed in a future release.
7897         * The combination of `-mabicalls' and `-fno-unit-at-a-time'
7898           implies `-mno-explicit-relocs' unless explicitly overridden.
7899           This is because, when generating abicalls, the choice of
7900           relocation depends on whether a symbol is local or global.
7901           In some rare cases, GCC will not be able to decide this until
7902           the whole compilation unit has been read.
7904 `-mrnames'
7905 `-mno-rnames'
7906      Generate (do not generate) code that refers to registers using
7907      their software names.  The default is `-mno-rnames', which tells
7908      GCC to use hardware names like `$4' instead of software names like
7909      `a0'.  The only assembler known to support `-rnames' is the
7910      Algorithmics assembler.
7912 `-mcheck-zero-division'
7913 `-mno-check-zero-division'
7914      Trap (do not trap) on integer division by zero.  The default is
7915      `-mcheck-zero-division'.
7917 `-mmemcpy'
7918 `-mno-memcpy'
7919      Force (do not force) the use of `memcpy()' for non-trivial block
7920      moves.  The default is `-mno-memcpy', which allows GCC to inline
7921      most constant-sized copies.
7923 `-mlong-calls'
7924 `-mno-long-calls'
7925      Disable (do not disable) use of the `jal' instruction.  Calling
7926      functions using `jal' is more efficient but requires the caller
7927      and callee to be in the same 256 megabyte segment.
7929      This option has no effect on abicalls code.  The default is
7930      `-mno-long-calls'.
7932 `-mmad'
7933 `-mno-mad'
7934      Enable (disable) use of the `mad', `madu' and `mul' instructions,
7935      as provided by the R4650 ISA.
7937 `-mfused-madd'
7938 `-mno-fused-madd'
7939      Enable (disable) use of the floating point multiply-accumulate
7940      instructions, when they are available.  The default is
7941      `-mfused-madd'.
7943      When multiply-accumulate instructions are used, the intermediate
7944      product is calculated to infinite precision and is not subject to
7945      the FCSR Flush to Zero bit.  This may be undesirable in some
7946      circumstances.
7948 `-nocpp'
7949      Tell the MIPS assembler to not run its preprocessor over user
7950      assembler files (with a `.s' suffix) when assembling them.
7952 `-mfix-sb1'
7953 `-mno-fix-sb1'
7954      Work around certain SB-1 CPU core errata.  (This flag currently
7955      works around the SB-1 revision 2 "F1" and "F2" floating point
7956      errata.)
7958 `-mflush-func=FUNC'
7959 `-mno-flush-func'
7960      Specifies the function to call to flush the I and D caches, or to
7961      not call any such function.  If called, the function must take the
7962      same arguments as the common `_flush_func()', that is, the address
7963      of the memory range for which the cache is being flushed, the size
7964      of the memory range, and the number 3 (to flush both caches).  The
7965      default depends on the target GCC was configured for, but commonly
7966      is either `_flush_func' or `__cpu_flush'.
7968 `-mbranch-likely'
7969 `-mno-branch-likely'
7970      Enable or disable use of Branch Likely instructions, regardless of
7971      the default for the selected architecture.  By default, Branch
7972      Likely instructions may be generated if they are supported by the
7973      selected architecture.  An exception is for the MIPS32 and MIPS64
7974      architectures and processors which implement those architectures;
7975      for those, Branch Likely instructions will not be generated by
7976      default because the MIPS32 and MIPS64 architectures specifically
7977      deprecate their use.
7979 \x1f
7980 File: gcc.info,  Node: i386 and x86-64 Options,  Next: HPPA Options,  Prev: MIPS Options,  Up: Submodel Options
7982 Intel 386 and AMD x86-64 Options
7983 --------------------------------
7985  These `-m' options are defined for the i386 and x86-64 family of
7986 computers:
7988 `-mtune=CPU-TYPE'
7989      Tune to CPU-TYPE everything applicable about the generated code,
7990      except for the ABI and the set of available instructions.  The
7991      choices for CPU-TYPE are:
7992     _i386_
7993           Original Intel's i386 CPU.
7995     _i486_
7996           Intel's i486 CPU.  (No scheduling is implemented for this
7997           chip.)
7999     _i586, pentium_
8000           Intel Pentium CPU with no MMX support.
8002     _pentium-mmx_
8003           Intel PentiumMMX CPU based on Pentium core with MMX
8004           instruction set support.
8006     _i686, pentiumpro_
8007           Intel PentiumPro CPU.
8009     _pentium2_
8010           Intel Pentium2 CPU based on PentiumPro core with MMX
8011           instruction set support.
8013     _pentium3, pentium3m_
8014           Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
8015           instruction set support.
8017     _pentium-m_
8018           Low power version of Intel Pentium3 CPU with MMX, SSE and
8019           SSE2 instruction set support.  Used by Centrino notebooks.
8021     _pentium4, pentium4m_
8022           Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
8023           support.
8025     _prescott_
8026           Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
8027           and SSE3 instruction set support.
8029     _nocona_
8030           Improved version of Intel Pentium4 CPU with 64-bit
8031           extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
8033     _k6_
8034           AMD K6 CPU with MMX instruction set support.
8036     _k6-2, k6-3_
8037           Improved versions of AMD K6 CPU with MMX and 3dNOW!
8038           instruction set support.
8040     _athlon, athlon-tbird_
8041           AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
8042           prefetch instructions support.
8044     _athlon-4, athlon-xp, athlon-mp_
8045           Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
8046           full SSE instruction set support.
8048     _k8, opteron, athlon64, athlon-fx_
8049           AMD K8 core based CPUs with x86-64 instruction set support.
8050           (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
8051           64-bit instruction set extensions.)
8053     _winchip-c6_
8054           IDT Winchip C6 CPU, dealt in same way as i486 with additional
8055           MMX instruction set support.
8057     _winchip2_
8058           IDT Winchip2 CPU, dealt in same way as i486 with additional
8059           MMX and 3dNOW!  instruction set support.
8061     _c3_
8062           Via C3 CPU with MMX and 3dNOW!  instruction set support.  (No
8063           scheduling is implemented for this chip.)
8065     _c3-2_
8066           Via C3-2 CPU with MMX and SSE instruction set support.  (No
8067           scheduling is implemented for this chip.)
8069      While picking a specific CPU-TYPE will schedule things
8070      appropriately for that particular chip, the compiler will not
8071      generate any code that does not run on the i386 without the
8072      `-march=CPU-TYPE' option being used.
8074 `-march=CPU-TYPE'
8075      Generate instructions for the machine type CPU-TYPE.  The choices
8076      for CPU-TYPE are the same as for `-mtune'.  Moreover, specifying
8077      `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
8079 `-mcpu=CPU-TYPE'
8080      A deprecated synonym for `-mtune'.
8082 `-m386'
8083 `-m486'
8084 `-mpentium'
8085 `-mpentiumpro'
8086      These options are synonyms for `-mtune=i386', `-mtune=i486',
8087      `-mtune=pentium', and `-mtune=pentiumpro' respectively.  These
8088      synonyms are deprecated.
8090 `-mfpmath=UNIT'
8091      Generate floating point arithmetics for selected unit UNIT.  The
8092      choices for UNIT are:
8094     `387'
8095           Use the standard 387 floating point coprocessor present
8096           majority of chips and emulated otherwise.  Code compiled with
8097           this option will run almost everywhere.  The temporary
8098           results are computed in 80bit precision instead of precision
8099           specified by the type resulting in slightly different results
8100           compared to most of other chips. See `-ffloat-store' for more
8101           detailed description.
8103           This is the default choice for i386 compiler.
8105     `sse'
8106           Use scalar floating point instructions present in the SSE
8107           instruction set.  This instruction set is supported by
8108           Pentium3 and newer chips, in the AMD line by Athlon-4,
8109           Athlon-xp and Athlon-mp chips.  The earlier version of SSE
8110           instruction set supports only single precision arithmetics,
8111           thus the double and extended precision arithmetics is still
8112           done using 387.  Later version, present only in Pentium4 and
8113           the future AMD x86-64 chips supports double precision
8114           arithmetics too.
8116           For i387 you need to use `-march=CPU-TYPE', `-msse' or
8117           `-msse2' switches to enable SSE extensions and make this
8118           option effective.  For x86-64 compiler, these extensions are
8119           enabled by default.
8121           The resulting code should be considerably faster in the
8122           majority of cases and avoid the numerical instability
8123           problems of 387 code, but may break some existing code that
8124           expects temporaries to be 80bit.
8126           This is the default choice for the x86-64 compiler.
8128     `sse,387'
8129           Attempt to utilize both instruction sets at once.  This
8130           effectively double the amount of available registers and on
8131           chips with separate execution units for 387 and SSE the
8132           execution resources too.  Use this option with care, as it is
8133           still experimental, because the GCC register allocator does
8134           not model separate functional units well resulting in
8135           instable performance.
8137 `-masm=DIALECT'
8138      Output asm instructions using selected DIALECT. Supported choices
8139      are `intel' or `att' (the default one).
8141 `-mieee-fp'
8142 `-mno-ieee-fp'
8143      Control whether or not the compiler uses IEEE floating point
8144      comparisons.  These handle correctly the case where the result of a
8145      comparison is unordered.
8147 `-msoft-float'
8148      Generate output containing library calls for floating point.
8149      *Warning:* the requisite libraries are not part of GCC.  Normally
8150      the facilities of the machine's usual C compiler are used, but
8151      this can't be done directly in cross-compilation.  You must make
8152      your own arrangements to provide suitable library functions for
8153      cross-compilation.
8155      On machines where a function returns floating point results in the
8156      80387 register stack, some floating point opcodes may be emitted
8157      even if `-msoft-float' is used.
8159 `-mno-fp-ret-in-387'
8160      Do not use the FPU registers for return values of functions.
8162      The usual calling convention has functions return values of types
8163      `float' and `double' in an FPU register, even if there is no FPU.
8164      The idea is that the operating system should emulate an FPU.
8166      The option `-mno-fp-ret-in-387' causes such values to be returned
8167      in ordinary CPU registers instead.
8169 `-mno-fancy-math-387'
8170      Some 387 emulators do not support the `sin', `cos' and `sqrt'
8171      instructions for the 387.  Specify this option to avoid generating
8172      those instructions.  This option is the default on FreeBSD,
8173      OpenBSD and NetBSD.  This option is overridden when `-march'
8174      indicates that the target cpu will always have an FPU and so the
8175      instruction will not need emulation.  As of revision 2.6.1, these
8176      instructions are not generated unless you also use the
8177      `-funsafe-math-optimizations' switch.
8179 `-malign-double'
8180 `-mno-align-double'
8181      Control whether GCC aligns `double', `long double', and `long
8182      long' variables on a two word boundary or a one word boundary.
8183      Aligning `double' variables on a two word boundary will produce
8184      code that runs somewhat faster on a `Pentium' at the expense of
8185      more memory.
8187      *Warning:* if you use the `-malign-double' switch, structures
8188      containing the above types will be aligned differently than the
8189      published application binary interface specifications for the 386
8190      and will not be binary compatible with structures in code compiled
8191      without that switch.
8193 `-m96bit-long-double'
8194 `-m128bit-long-double'
8195      These switches control the size of `long double' type. The i386
8196      application binary interface specifies the size to be 96 bits, so
8197      `-m96bit-long-double' is the default in 32 bit mode.
8199      Modern architectures (Pentium and newer) would prefer `long double'
8200      to be aligned to an 8 or 16 byte boundary.  In arrays or structures
8201      conforming to the ABI, this would not be possible.  So specifying a
8202      `-m128bit-long-double' will align `long double' to a 16 byte
8203      boundary by padding the `long double' with an additional 32 bit
8204      zero.
8206      In the x86-64 compiler, `-m128bit-long-double' is the default
8207      choice as its ABI specifies that `long double' is to be aligned on
8208      16 byte boundary.
8210      Notice that neither of these options enable any extra precision
8211      over the x87 standard of 80 bits for a `long double'.
8213      *Warning:* if you override the default value for your target ABI,
8214      the structures and arrays containing `long double' variables will
8215      change their size as well as function calling convention for
8216      function taking `long double' will be modified.  Hence they will
8217      not be binary compatible with arrays or structures in code
8218      compiled without that switch.
8220 `-msvr3-shlib'
8221 `-mno-svr3-shlib'
8222      Control whether GCC places uninitialized local variables into the
8223      `bss' or `data' segments.  `-msvr3-shlib' places them into `bss'.
8224      These options are meaningful only on System V Release 3.
8226 `-mrtd'
8227      Use a different function-calling convention, in which functions
8228      that take a fixed number of arguments return with the `ret' NUM
8229      instruction, which pops their arguments while returning.  This
8230      saves one instruction in the caller since there is no need to pop
8231      the arguments there.
8233      You can specify that an individual function is called with this
8234      calling sequence with the function attribute `stdcall'.  You can
8235      also override the `-mrtd' option by using the function attribute
8236      `cdecl'.  *Note Function Attributes::.
8238      *Warning:* this calling convention is incompatible with the one
8239      normally used on Unix, so you cannot use it if you need to call
8240      libraries compiled with the Unix compiler.
8242      Also, you must provide function prototypes for all functions that
8243      take variable numbers of arguments (including `printf'); otherwise
8244      incorrect code will be generated for calls to those functions.
8246      In addition, seriously incorrect code will result if you call a
8247      function with too many arguments.  (Normally, extra arguments are
8248      harmlessly ignored.)
8250 `-mregparm=NUM'
8251      Control how many registers are used to pass integer arguments.  By
8252      default, no registers are used to pass arguments, and at most 3
8253      registers can be used.  You can control this behavior for a
8254      specific function by using the function attribute `regparm'.
8255      *Note Function Attributes::.
8257      *Warning:* if you use this switch, and NUM is nonzero, then you
8258      must build all modules with the same value, including any
8259      libraries.  This includes the system libraries and startup modules.
8261 `-mpreferred-stack-boundary=NUM'
8262      Attempt to keep the stack boundary aligned to a 2 raised to NUM
8263      byte boundary.  If `-mpreferred-stack-boundary' is not specified,
8264      the default is 4 (16 bytes or 128 bits), except when optimizing
8265      for code size (`-Os'), in which case the default is the minimum
8266      correct alignment (4 bytes for x86, and 8 bytes for x86-64).
8268      On Pentium and PentiumPro, `double' and `long double' values
8269      should be aligned to an 8 byte boundary (see `-malign-double') or
8270      suffer significant run time performance penalties.  On Pentium
8271      III, the Streaming SIMD Extension (SSE) data type `__m128' suffers
8272      similar penalties if it is not 16 byte aligned.
8274      To ensure proper alignment of this values on the stack, the stack
8275      boundary must be as aligned as that required by any value stored
8276      on the stack.  Further, every function must be generated such that
8277      it keeps the stack aligned.  Thus calling a function compiled with
8278      a higher preferred stack boundary from a function compiled with a
8279      lower preferred stack boundary will most likely misalign the
8280      stack.  It is recommended that libraries that use callbacks always
8281      use the default setting.
8283      This extra alignment does consume extra stack space, and generally
8284      increases code size.  Code that is sensitive to stack space usage,
8285      such as embedded systems and operating system kernels, may want to
8286      reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
8288 `-mmmx'
8289 `-mno-mmx'
8291 `-msse'
8292 `-mno-sse'
8294 `-msse2'
8295 `-mno-sse2'
8297 `-msse3'
8298 `-mno-sse3'
8300 `-m3dnow'
8301 `-mno-3dnow'
8302      These switches enable or disable the use of built-in functions
8303      that allow direct access to the MMX, SSE, SSE2, SSE3 and 3Dnow
8304      extensions of the instruction set.
8306      *Note X86 Built-in Functions::, for details of the functions
8307      enabled and disabled by these switches.
8309      To have SSE/SSE2 instructions generated automatically from
8310      floating-point code, see `-mfpmath=sse'.
8312 `-mpush-args'
8313 `-mno-push-args'
8314      Use PUSH operations to store outgoing parameters.  This method is
8315      shorter and usually equally fast as method using SUB/MOV
8316      operations and is enabled by default.  In some cases disabling it
8317      may improve performance because of improved scheduling and reduced
8318      dependencies.
8320 `-maccumulate-outgoing-args'
8321      If enabled, the maximum amount of space required for outgoing
8322      arguments will be computed in the function prologue.  This is
8323      faster on most modern CPUs because of reduced dependencies,
8324      improved scheduling and reduced stack usage when preferred stack
8325      boundary is not equal to 2.  The drawback is a notable increase in
8326      code size.  This switch implies `-mno-push-args'.
8328 `-mthreads'
8329      Support thread-safe exception handling on `Mingw32'.  Code that
8330      relies on thread-safe exception handling must compile and link all
8331      code with the `-mthreads' option.  When compiling, `-mthreads'
8332      defines `-D_MT'; when linking, it links in a special thread helper
8333      library `-lmingwthrd' which cleans up per thread exception
8334      handling data.
8336 `-mno-align-stringops'
8337      Do not align destination of inlined string operations.  This
8338      switch reduces code size and improves performance in case the
8339      destination is already aligned, but GCC doesn't know about it.
8341 `-minline-all-stringops'
8342      By default GCC inlines string operations only when destination is
8343      known to be aligned at least to 4 byte boundary.  This enables
8344      more inlining, increase code size, but may improve performance of
8345      code that depends on fast memcpy, strlen and memset for short
8346      lengths.
8348 `-momit-leaf-frame-pointer'
8349      Don't keep the frame pointer in a register for leaf functions.
8350      This avoids the instructions to save, set up and restore frame
8351      pointers and makes an extra register available in leaf functions.
8352      The option `-fomit-frame-pointer' removes the frame pointer for
8353      all functions which might make debugging harder.
8355 `-mtls-direct-seg-refs'
8356 `-mno-tls-direct-seg-refs'
8357      Controls whether TLS variables may be accessed with offsets from
8358      the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
8359      whether the thread base pointer must be added.  Whether or not this
8360      is legal depends on the operating system, and whether it maps the
8361      segment to cover the entire TLS area.
8363      For systems that use GNU libc, the default is on.
8365  These `-m' switches are supported in addition to the above on AMD
8366 x86-64 processors in 64-bit environments.
8368 `-m32'
8369 `-m64'
8370      Generate code for a 32-bit or 64-bit environment.  The 32-bit
8371      environment sets int, long and pointer to 32 bits and generates
8372      code that runs on any i386 system.  The 64-bit environment sets
8373      int to 32 bits and long and pointer to 64 bits and generates code
8374      for AMD's x86-64 architecture.
8376 `-mno-red-zone'
8377      Do not use a so called red zone for x86-64 code.  The red zone is
8378      mandated by the x86-64 ABI, it is a 128-byte area beyond the
8379      location of the stack pointer that will not be modified by signal
8380      or interrupt handlers and therefore can be used for temporary data
8381      without adjusting the stack pointer.  The flag `-mno-red-zone'
8382      disables this red zone.
8384 `-mcmodel=small'
8385      Generate code for the small code model: the program and its
8386      symbols must be linked in the lower 2 GB of the address space.
8387      Pointers are 64 bits.  Programs can be statically or dynamically
8388      linked.  This is the default code model.
8390 `-mcmodel=kernel'
8391      Generate code for the kernel code model.  The kernel runs in the
8392      negative 2 GB of the address space.  This model has to be used for
8393      Linux kernel code.
8395 `-mcmodel=medium'
8396      Generate code for the medium model: The program is linked in the
8397      lower 2 GB of the address space but symbols can be located
8398      anywhere in the address space.  Programs can be statically or
8399      dynamically linked, but building of shared libraries are not
8400      supported with the medium model.
8402 `-mcmodel=large'
8403      Generate code for the large model: This model makes no assumptions
8404      about addresses and sizes of sections.  Currently GCC does not
8405      implement this model.
8407 `-mstack-arg-probe'
8408      Emit code in function prologue to probe the stack when allocating
8409      more than CHECK_STACK_LIMIT bytes in one go.
8411      Currently, this is the default on windows systems (cygwin and
8412      mingw32), which define CHECK_STACK_LIMIT as 4000. On these
8413      systems, touching the stack at 4K increments is necessary to
8414      ensure that the guard pages used by the OS virtual memory manger
8415      are allocated in correct sequence.
8417 \x1f
8418 File: gcc.info,  Node: HPPA Options,  Next: Intel 960 Options,  Prev: i386 and x86-64 Options,  Up: Submodel Options
8420 HPPA Options
8421 ------------
8423  These `-m' options are defined for the HPPA family of computers:
8425 `-march=ARCHITECTURE-TYPE'
8426      Generate code for the specified architecture.  The choices for
8427      ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
8428      `2.0' for PA 2.0 processors.  Refer to `/usr/lib/sched.models' on
8429      an HP-UX system to determine the proper architecture option for
8430      your machine.  Code compiled for lower numbered architectures will
8431      run on higher numbered architectures, but not the other way around.
8433      PA 2.0 support currently requires gas snapshot 19990413 or later.
8434      The next release of binutils (current is 2.9.1) will probably
8435      contain PA 2.0 support.
8437 `-mpa-risc-1-0'
8438 `-mpa-risc-1-1'
8439 `-mpa-risc-2-0'
8440      Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
8441      respectively.
8443 `-mbig-switch'
8444      Generate code suitable for big switch tables.  Use this option
8445      only if the assembler/linker complain about out of range branches
8446      within a switch table.
8448 `-mjump-in-delay'
8449      Fill delay slots of function calls with unconditional jump
8450      instructions by modifying the return pointer for the function call
8451      to be the target of the conditional jump.
8453 `-mdisable-fpregs'
8454      Prevent floating point registers from being used in any manner.
8455      This is necessary for compiling kernels which perform lazy context
8456      switching of floating point registers.  If you use this option and
8457      attempt to perform floating point operations, the compiler will
8458      abort.
8460 `-mdisable-indexing'
8461      Prevent the compiler from using indexing address modes.  This
8462      avoids some rather obscure problems when compiling MIG generated
8463      code under MACH.
8465 `-mno-space-regs'
8466      Generate code that assumes the target has no space registers.
8467      This allows GCC to generate faster indirect calls and use unscaled
8468      index address modes.
8470      Such code is suitable for level 0 PA systems and kernels.
8472 `-mfast-indirect-calls'
8473      Generate code that assumes calls never cross space boundaries.
8474      This allows GCC to emit code which performs faster indirect calls.
8476      This option will not work in the presence of shared libraries or
8477      nested functions.
8479 `-mlong-load-store'
8480      Generate 3-instruction load and store sequences as sometimes
8481      required by the HP-UX 10 linker.  This is equivalent to the `+k'
8482      option to the HP compilers.
8484 `-mportable-runtime'
8485      Use the portable calling conventions proposed by HP for ELF
8486      systems.
8488 `-mgas'
8489      Enable the use of assembler directives only GAS understands.
8491 `-mschedule=CPU-TYPE'
8492      Schedule code according to the constraints for the machine type
8493      CPU-TYPE.  The choices for CPU-TYPE are `700' `7100', `7100LC',
8494      `7200', `7300' and `8000'.  Refer to `/usr/lib/sched.models' on an
8495      HP-UX system to determine the proper scheduling option for your
8496      machine.  The default scheduling is `8000'.
8498 `-mlinker-opt'
8499      Enable the optimization pass in the HP-UX linker.  Note this makes
8500      symbolic debugging impossible.  It also triggers a bug in the
8501      HP-UX 8 and HP-UX 9 linkers in which they give bogus error
8502      messages when linking some programs.
8504 `-msoft-float'
8505      Generate output containing library calls for floating point.
8506      *Warning:* the requisite libraries are not available for all HPPA
8507      targets.  Normally the facilities of the machine's usual C
8508      compiler are used, but this cannot be done directly in
8509      cross-compilation.  You must make your own arrangements to provide
8510      suitable library functions for cross-compilation.  The embedded
8511      target `hppa1.1-*-pro' does provide software floating point
8512      support.
8514      `-msoft-float' changes the calling convention in the output file;
8515      therefore, it is only useful if you compile _all_ of a program with
8516      this option.  In particular, you need to compile `libgcc.a', the
8517      library that comes with GCC, with `-msoft-float' in order for this
8518      to work.
8520 `-msio'
8521      Generate the predefine, `_SIO', for server IO.  The default is
8522      `-mwsio'.  This generates the predefines, `__hp9000s700',
8523      `__hp9000s700__' and `_WSIO', for workstation IO.  These options
8524      are available under HP-UX and HI-UX.
8526 `-mgnu-ld'
8527      Use GNU ld specific options.  This passes `-shared' to ld when
8528      building a shared library.  It is the default when GCC is
8529      configured, explicitly or implicitly, with the GNU linker.  This
8530      option does not have any affect on which ld is called, it only
8531      changes what parameters are passed to that ld.  The ld that is
8532      called is determined by the `--with-ld' configure option, GCC's
8533      program search path, and finally by the user's `PATH'.  The linker
8534      used by GCC can be printed using `which `gcc -print-prog-name=ld`'.
8536 `-mhp-ld'
8537      Use HP ld specific options.  This passes `-b' to ld when building
8538      a shared library and passes `+Accept TypeMismatch' to ld on all
8539      links.  It is the default when GCC is configured, explicitly or
8540      implicitly, with the HP linker.  This option does not have any
8541      affect on which ld is called, it only changes what parameters are
8542      passed to that ld.  The ld that is called is determined by the
8543      `--with-ld' configure option, GCC's program search path, and
8544      finally by the user's `PATH'.  The linker used by GCC can be
8545      printed using `which `gcc -print-prog-name=ld`'.
8547 `-mlong-calls'
8548      Generate code that uses long call sequences.  This ensures that a
8549      call is always able to reach linker generated stubs.  The default
8550      is to generate long calls only when the distance from the call
8551      site to the beginning of the function or translation unit, as the
8552      case may be, exceeds a predefined limit set by the branch type
8553      being used.  The limits for normal calls are 7,600,000 and 240,000
8554      bytes, respectively for the PA 2.0 and PA 1.X architectures.
8555      Sibcalls are always limited at 240,000 bytes.
8557      Distances are measured from the beginning of functions when using
8558      the `-ffunction-sections' option, or when using the `-mgas' and
8559      `-mno-portable-runtime' options together under HP-UX with the SOM
8560      linker.
8562      It is normally not desirable to use this option as it will degrade
8563      performance.  However, it may be useful in large applications,
8564      particularly when partial linking is used to build the application.
8566      The types of long calls used depends on the capabilities of the
8567      assembler and linker, and the type of code being generated.  The
8568      impact on systems that support long absolute calls, and long pic
8569      symbol-difference or pc-relative calls should be relatively small.
8570      However, an indirect call is used on 32-bit ELF systems in pic code
8571      and it is quite long.
8573 `-nolibdld'
8574      Suppress the generation of link options to search libdld.sl when
8575      the `-static' option is specified on HP-UX 10 and later.
8577 `-static'
8578      The HP-UX implementation of setlocale in libc has a dependency on
8579      libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
8580      when the `-static' option is specified, special link options are
8581      needed to resolve this dependency.
8583      On HP-UX 10 and later, the GCC driver adds the necessary options to
8584      link with libdld.sl when the `-static' option is specified.  This
8585      causes the resulting binary to be dynamic.  On the 64-bit port,
8586      the linkers generate dynamic binaries by default in any case.  The
8587      `-nolibdld' option can be used to prevent the GCC driver from
8588      adding these link options.
8590 `-threads'
8591      Add support for multithreading with the "dce thread" library under
8592      HP-UX.  This option sets flags for both the preprocessor and
8593      linker.
8595 \x1f
8596 File: gcc.info,  Node: Intel 960 Options,  Next: DEC Alpha Options,  Prev: HPPA Options,  Up: Submodel Options
8598 Intel 960 Options
8599 -----------------
8601  These `-m' options are defined for the Intel 960 implementations:
8603 `-mCPU-TYPE'
8604      Assume the defaults for the machine type CPU-TYPE for some of the
8605      other options, including instruction scheduling, floating point
8606      support, and addressing modes.  The choices for CPU-TYPE are `ka',
8607      `kb', `mc', `ca', `cf', `sa', and `sb'.  The default is `kb'.
8609 `-mnumerics'
8610 `-msoft-float'
8611      The `-mnumerics' option indicates that the processor does support
8612      floating-point instructions.  The `-msoft-float' option indicates
8613      that floating-point support should not be assumed.
8615 `-mleaf-procedures'
8616 `-mno-leaf-procedures'
8617      Do (or do not) attempt to alter leaf procedures to be callable
8618      with the `bal' instruction as well as `call'.  This will result in
8619      more efficient code for explicit calls when the `bal' instruction
8620      can be substituted by the assembler or linker, but less efficient
8621      code in other cases, such as calls via function pointers, or using
8622      a linker that doesn't support this optimization.
8624 `-mtail-call'
8625 `-mno-tail-call'
8626      Do (or do not) make additional attempts (beyond those of the
8627      machine-independent portions of the compiler) to optimize
8628      tail-recursive calls into branches.  You may not want to do this
8629      because the detection of cases where this is not valid is not
8630      totally complete.  The default is `-mno-tail-call'.
8632 `-mcomplex-addr'
8633 `-mno-complex-addr'
8634      Assume (or do not assume) that the use of a complex addressing
8635      mode is a win on this implementation of the i960.  Complex
8636      addressing modes may not be worthwhile on the K-series, but they
8637      definitely are on the C-series.  The default is currently
8638      `-mcomplex-addr' for all processors except the CB and CC.
8640 `-mcode-align'
8641 `-mno-code-align'
8642      Align code to 8-byte boundaries for faster fetching (or don't
8643      bother).  Currently turned on by default for C-series
8644      implementations only.
8646 `-mic-compat'
8647 `-mic2.0-compat'
8648 `-mic3.0-compat'
8649      Enable compatibility with iC960 v2.0 or v3.0.
8651 `-masm-compat'
8652 `-mintel-asm'
8653      Enable compatibility with the iC960 assembler.
8655 `-mstrict-align'
8656 `-mno-strict-align'
8657      Do not permit (do permit) unaligned accesses.
8659 `-mold-align'
8660      Enable structure-alignment compatibility with Intel's gcc release
8661      version 1.3 (based on gcc 1.37).  This option implies
8662      `-mstrict-align'.
8664 `-mlong-double-64'
8665      Implement type `long double' as 64-bit floating point numbers.
8666      Without the option `long double' is implemented by 80-bit floating
8667      point numbers.  The only reason we have it because there is no
8668      128-bit `long double' support in `fp-bit.c' yet.  So it is only
8669      useful for people using soft-float targets.  Otherwise, we should
8670      recommend against use of it.
8672 \x1f
8673 File: gcc.info,  Node: DEC Alpha Options,  Next: DEC Alpha/VMS Options,  Prev: Intel 960 Options,  Up: Submodel Options
8675 DEC Alpha Options
8676 -----------------
8678  These `-m' options are defined for the DEC Alpha implementations:
8680 `-mno-soft-float'
8681 `-msoft-float'
8682      Use (do not use) the hardware floating-point instructions for
8683      floating-point operations.  When `-msoft-float' is specified,
8684      functions in `libgcc.a' will be used to perform floating-point
8685      operations.  Unless they are replaced by routines that emulate the
8686      floating-point operations, or compiled in such a way as to call
8687      such emulations routines, these routines will issue floating-point
8688      operations.   If you are compiling for an Alpha without
8689      floating-point operations, you must ensure that the library is
8690      built so as not to call them.
8692      Note that Alpha implementations without floating-point operations
8693      are required to have floating-point registers.
8695 `-mfp-reg'
8696 `-mno-fp-regs'
8697      Generate code that uses (does not use) the floating-point register
8698      set.  `-mno-fp-regs' implies `-msoft-float'.  If the floating-point
8699      register set is not used, floating point operands are passed in
8700      integer registers as if they were integers and floating-point
8701      results are passed in `$0' instead of `$f0'.  This is a
8702      non-standard calling sequence, so any function with a
8703      floating-point argument or return value called by code compiled
8704      with `-mno-fp-regs' must also be compiled with that option.
8706      A typical use of this option is building a kernel that does not
8707      use, and hence need not save and restore, any floating-point
8708      registers.
8710 `-mieee'
8711      The Alpha architecture implements floating-point hardware
8712      optimized for maximum performance.  It is mostly compliant with
8713      the IEEE floating point standard.  However, for full compliance,
8714      software assistance is required.  This option generates code fully
8715      IEEE compliant code _except_ that the INEXACT-FLAG is not
8716      maintained (see below).  If this option is turned on, the
8717      preprocessor macro `_IEEE_FP' is defined during compilation.  The
8718      resulting code is less efficient but is able to correctly support
8719      denormalized numbers and exceptional IEEE values such as
8720      not-a-number and plus/minus infinity.  Other Alpha compilers call
8721      this option `-ieee_with_no_inexact'.
8723 `-mieee-with-inexact'
8724      This is like `-mieee' except the generated code also maintains the
8725      IEEE INEXACT-FLAG.  Turning on this option causes the generated
8726      code to implement fully-compliant IEEE math.  In addition to
8727      `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
8728      On some Alpha implementations the resulting code may execute
8729      significantly slower than the code generated by default.  Since
8730      there is very little code that depends on the INEXACT-FLAG, you
8731      should normally not specify this option.  Other Alpha compilers
8732      call this option `-ieee_with_inexact'.
8734 `-mfp-trap-mode=TRAP-MODE'
8735      This option controls what floating-point related traps are enabled.
8736      Other Alpha compilers call this option `-fptm TRAP-MODE'.  The
8737      trap mode can be set to one of four values:
8739     `n'
8740           This is the default (normal) setting.  The only traps that
8741           are enabled are the ones that cannot be disabled in software
8742           (e.g., division by zero trap).
8744     `u'
8745           In addition to the traps enabled by `n', underflow traps are
8746           enabled as well.
8748     `su'
8749           Like `su', but the instructions are marked to be safe for
8750           software completion (see Alpha architecture manual for
8751           details).
8753     `sui'
8754           Like `su', but inexact traps are enabled as well.
8756 `-mfp-rounding-mode=ROUNDING-MODE'
8757      Selects the IEEE rounding mode.  Other Alpha compilers call this
8758      option `-fprm ROUNDING-MODE'.  The ROUNDING-MODE can be one of:
8760     `n'
8761           Normal IEEE rounding mode.  Floating point numbers are
8762           rounded towards the nearest machine number or towards the
8763           even machine number in case of a tie.
8765     `m'
8766           Round towards minus infinity.
8768     `c'
8769           Chopped rounding mode.  Floating point numbers are rounded
8770           towards zero.
8772     `d'
8773           Dynamic rounding mode.  A field in the floating point control
8774           register (FPCR, see Alpha architecture reference manual)
8775           controls the rounding mode in effect.  The C library
8776           initializes this register for rounding towards plus infinity.
8777           Thus, unless your program modifies the FPCR, `d' corresponds
8778           to round towards plus infinity.
8780 `-mtrap-precision=TRAP-PRECISION'
8781      In the Alpha architecture, floating point traps are imprecise.
8782      This means without software assistance it is impossible to recover
8783      from a floating trap and program execution normally needs to be
8784      terminated.  GCC can generate code that can assist operating
8785      system trap handlers in determining the exact location that caused
8786      a floating point trap.  Depending on the requirements of an
8787      application, different levels of precisions can be selected:
8789     `p'
8790           Program precision.  This option is the default and means a
8791           trap handler can only identify which program caused a
8792           floating point exception.
8794     `f'
8795           Function precision.  The trap handler can determine the
8796           function that caused a floating point exception.
8798     `i'
8799           Instruction precision.  The trap handler can determine the
8800           exact instruction that caused a floating point exception.
8802      Other Alpha compilers provide the equivalent options called
8803      `-scope_safe' and `-resumption_safe'.
8805 `-mieee-conformant'
8806      This option marks the generated code as IEEE conformant.  You must
8807      not use this option unless you also specify `-mtrap-precision=i'
8808      and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'.  Its only
8809      effect is to emit the line `.eflag 48' in the function prologue of
8810      the generated assembly file.  Under DEC Unix, this has the effect
8811      that IEEE-conformant math library routines will be linked in.
8813 `-mbuild-constants'
8814      Normally GCC examines a 32- or 64-bit integer constant to see if
8815      it can construct it from smaller constants in two or three
8816      instructions.  If it cannot, it will output the constant as a
8817      literal and generate code to load it from the data segment at
8818      runtime.
8820      Use this option to require GCC to construct _all_ integer constants
8821      using code, even if it takes more instructions (the maximum is
8822      six).
8824      You would typically use this option to build a shared library
8825      dynamic loader.  Itself a shared library, it must relocate itself
8826      in memory before it can find the variables and constants in its
8827      own data segment.
8829 `-malpha-as'
8830 `-mgas'
8831      Select whether to generate code to be assembled by the
8832      vendor-supplied assembler (`-malpha-as') or by the GNU assembler
8833      `-mgas'.
8835 `-mbwx'
8836 `-mno-bwx'
8837 `-mcix'
8838 `-mno-cix'
8839 `-mfix'
8840 `-mno-fix'
8841 `-mmax'
8842 `-mno-max'
8843      Indicate whether GCC should generate code to use the optional BWX,
8844      CIX, FIX and MAX instruction sets.  The default is to use the
8845      instruction sets supported by the CPU type specified via `-mcpu='
8846      option or that of the CPU on which GCC was built if none was
8847      specified.
8849 `-mfloat-vax'
8850 `-mfloat-ieee'
8851      Generate code that uses (does not use) VAX F and G floating point
8852      arithmetic instead of IEEE single and double precision.
8854 `-mexplicit-relocs'
8855 `-mno-explicit-relocs'
8856      Older Alpha assemblers provided no way to generate symbol
8857      relocations except via assembler macros.  Use of these macros does
8858      not allow optimal instruction scheduling.  GNU binutils as of
8859      version 2.12 supports a new syntax that allows the compiler to
8860      explicitly mark which relocations should apply to which
8861      instructions.  This option is mostly useful for debugging, as GCC
8862      detects the capabilities of the assembler when it is built and
8863      sets the default accordingly.
8865 `-msmall-data'
8866 `-mlarge-data'
8867      When `-mexplicit-relocs' is in effect, static data is accessed via
8868      "gp-relative" relocations.  When `-msmall-data' is used, objects 8
8869      bytes long or smaller are placed in a "small data area" (the
8870      `.sdata' and `.sbss' sections) and are accessed via 16-bit
8871      relocations off of the `$gp' register.  This limits the size of
8872      the small data area to 64KB, but allows the variables to be
8873      directly accessed via a single instruction.
8875      The default is `-mlarge-data'.  With this option the data area is
8876      limited to just below 2GB.  Programs that require more than 2GB of
8877      data must use `malloc' or `mmap' to allocate the data in the heap
8878      instead of in the program's data segment.
8880      When generating code for shared libraries, `-fpic' implies
8881      `-msmall-data' and `-fPIC' implies `-mlarge-data'.
8883 `-msmall-text'
8884 `-mlarge-text'
8885      When `-msmall-text' is used, the compiler assumes that the code of
8886      the entire program (or shared library) fits in 4MB, and is thus
8887      reachable with a branch instruction.  When `-msmall-data' is used,
8888      the compiler can assume that all local symbols share the same
8889      `$gp' value, and thus reduce the number of instructions required
8890      for a function call from 4 to 1.
8892      The default is `-mlarge-text'.
8894 `-mcpu=CPU_TYPE'
8895      Set the instruction set and instruction scheduling parameters for
8896      machine type CPU_TYPE.  You can specify either the `EV' style name
8897      or the corresponding chip number.  GCC supports scheduling
8898      parameters for the EV4, EV5 and EV6 family of processors and will
8899      choose the default values for the instruction set from the
8900      processor you specify.  If you do not specify a processor type,
8901      GCC will default to the processor on which the compiler was built.
8903      Supported values for CPU_TYPE are
8905     `ev4'
8906     `ev45'
8907     `21064'
8908           Schedules as an EV4 and has no instruction set extensions.
8910     `ev5'
8911     `21164'
8912           Schedules as an EV5 and has no instruction set extensions.
8914     `ev56'
8915     `21164a'
8916           Schedules as an EV5 and supports the BWX extension.
8918     `pca56'
8919     `21164pc'
8920     `21164PC'
8921           Schedules as an EV5 and supports the BWX and MAX extensions.
8923     `ev6'
8924     `21264'
8925           Schedules as an EV6 and supports the BWX, FIX, and MAX
8926           extensions.
8928     `ev67'
8929     `21264a'
8930           Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8931           extensions.
8933 `-mtune=CPU_TYPE'
8934      Set only the instruction scheduling parameters for machine type
8935      CPU_TYPE.  The instruction set is not changed.
8937 `-mmemory-latency=TIME'
8938      Sets the latency the scheduler should assume for typical memory
8939      references as seen by the application.  This number is highly
8940      dependent on the memory access patterns used by the application
8941      and the size of the external cache on the machine.
8943      Valid options for TIME are
8945     `NUMBER'
8946           A decimal number representing clock cycles.
8948     `L1'
8949     `L2'
8950     `L3'
8951     `main'
8952           The compiler contains estimates of the number of clock cycles
8953           for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8954           (also called Dcache, Scache, and Bcache), as well as to main
8955           memory.  Note that L3 is only valid for EV5.
8957 \x1f
8958 File: gcc.info,  Node: DEC Alpha/VMS Options,  Next: H8/300 Options,  Prev: DEC Alpha Options,  Up: Submodel Options
8960 DEC Alpha/VMS Options
8961 ---------------------
8963  These `-m' options are defined for the DEC Alpha/VMS implementations:
8965 `-mvms-return-codes'
8966      Return VMS condition codes from main.  The default is to return
8967      POSIX style condition (e.g. error) codes.
8969 \x1f
8970 File: gcc.info,  Node: H8/300 Options,  Next: SH Options,  Prev: DEC Alpha/VMS Options,  Up: Submodel Options
8972 H8/300 Options
8973 --------------
8975  These `-m' options are defined for the H8/300 implementations:
8977 `-mrelax'
8978      Shorten some address references at link time, when possible; uses
8979      the linker option `-relax'.  *Note `ld' and the H8/300:
8980      (ld)H8/300, for a fuller description.
8982 `-mh'
8983      Generate code for the H8/300H.
8985 `-ms'
8986      Generate code for the H8S.
8988 `-mn'
8989      Generate code for the H8S and H8/300H in the normal mode.  This
8990      switch must be used either with -mh or -ms.
8992 `-ms2600'
8993      Generate code for the H8S/2600.  This switch must be used with
8994      `-ms'.
8996 `-mint32'
8997      Make `int' data 32 bits by default.
8999 `-malign-300'
9000      On the H8/300H and H8S, use the same alignment rules as for the
9001      H8/300.  The default for the H8/300H and H8S is to align longs and
9002      floats on 4 byte boundaries.  `-malign-300' causes them to be
9003      aligned on 2 byte boundaries.  This option has no effect on the
9004      H8/300.
9006 \x1f
9007 File: gcc.info,  Node: SH Options,  Next: System V Options,  Prev: H8/300 Options,  Up: Submodel Options
9009 SH Options
9010 ----------
9012  These `-m' options are defined for the SH implementations:
9014 `-m1'
9015      Generate code for the SH1.
9017 `-m2'
9018      Generate code for the SH2.
9020 `-m2e'
9021      Generate code for the SH2e.
9023 `-m3'
9024      Generate code for the SH3.
9026 `-m3e'
9027      Generate code for the SH3e.
9029 `-m4-nofpu'
9030      Generate code for the SH4 without a floating-point unit.
9032 `-m4-single-only'
9033      Generate code for the SH4 with a floating-point unit that only
9034      supports single-precision arithmetic.
9036 `-m4-single'
9037      Generate code for the SH4 assuming the floating-point unit is in
9038      single-precision mode by default.
9040 `-m4'
9041      Generate code for the SH4.
9043 `-mb'
9044      Compile code for the processor in big endian mode.
9046 `-ml'
9047      Compile code for the processor in little endian mode.
9049 `-mdalign'
9050      Align doubles at 64-bit boundaries.  Note that this changes the
9051      calling conventions, and thus some functions from the standard C
9052      library will not work unless you recompile it first with
9053      `-mdalign'.
9055 `-mrelax'
9056      Shorten some address references at link time, when possible; uses
9057      the linker option `-relax'.
9059 `-mbigtable'
9060      Use 32-bit offsets in `switch' tables.  The default is to use
9061      16-bit offsets.
9063 `-mfmovd'
9064      Enable the use of the instruction `fmovd'.
9066 `-mhitachi'
9067      Comply with the calling conventions defined by Renesas.
9069 `-mnomacsave'
9070      Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
9071      given.
9073 `-mieee'
9074      Increase IEEE-compliance of floating-point code.
9076 `-misize'
9077      Dump instruction size and location in the assembly code.
9079 `-mpadstruct'
9080      This option is deprecated.  It pads structures to multiple of 4
9081      bytes, which is incompatible with the SH ABI.
9083 `-mspace'
9084      Optimize for space instead of speed.  Implied by `-Os'.
9086 `-mprefergot'
9087      When generating position-independent code, emit function calls
9088      using the Global Offset Table instead of the Procedure Linkage
9089      Table.
9091 `-musermode'
9092      Generate a library function call to invalidate instruction cache
9093      entries, after fixing up a trampoline.  This library function call
9094      doesn't assume it can write to the whole memory address space.
9095      This is the default when the target is `sh-*-linux*'.
9097 \x1f
9098 File: gcc.info,  Node: System V Options,  Next: TMS320C3x/C4x Options,  Prev: SH Options,  Up: Submodel Options
9100 Options for System V
9101 --------------------
9103  These additional options are available on System V Release 4 for
9104 compatibility with other compilers on those systems:
9106 `-G'
9107      Create a shared object.  It is recommended that `-symbolic' or
9108      `-shared' be used instead.
9110 `-Qy'
9111      Identify the versions of each tool used by the compiler, in a
9112      `.ident' assembler directive in the output.
9114 `-Qn'
9115      Refrain from adding `.ident' directives to the output file (this is
9116      the default).
9118 `-YP,DIRS'
9119      Search the directories DIRS, and no others, for libraries
9120      specified with `-l'.
9122 `-Ym,DIR'
9123      Look in the directory DIR to find the M4 preprocessor.  The
9124      assembler uses this option.
9126 \x1f
9127 File: gcc.info,  Node: TMS320C3x/C4x Options,  Next: V850 Options,  Prev: System V Options,  Up: Submodel Options
9129 TMS320C3x/C4x Options
9130 ---------------------
9132  These `-m' options are defined for TMS320C3x/C4x implementations:
9134 `-mcpu=CPU_TYPE'
9135      Set the instruction set, register set, and instruction scheduling
9136      parameters for machine type CPU_TYPE.  Supported values for
9137      CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'.  The default
9138      is `c40' to generate code for the TMS320C40.
9140 `-mbig-memory'
9141 `-mbig'
9142 `-msmall-memory'
9143 `-msmall'
9144      Generates code for the big or small memory model.  The small memory
9145      model assumed that all data fits into one 64K word page.  At
9146      run-time the data page (DP) register must be set to point to the
9147      64K page containing the .bss and .data program sections.  The big
9148      memory model is the default and requires reloading of the DP
9149      register for every direct memory access.
9151 `-mbk'
9152 `-mno-bk'
9153      Allow (disallow) allocation of general integer operands into the
9154      block count register BK.
9156 `-mdb'
9157 `-mno-db'
9158      Enable (disable) generation of code using decrement and branch,
9159      DBcond(D), instructions.  This is enabled by default for the C4x.
9160      To be on the safe side, this is disabled for the C3x, since the
9161      maximum iteration count on the C3x is 2^23 + 1 (but who iterates
9162      loops more than 2^23 times on the C3x?).  Note that GCC will try
9163      to reverse a loop so that it can utilize the decrement and branch
9164      instruction, but will give up if there is more than one memory
9165      reference in the loop.  Thus a loop where the loop counter is
9166      decremented can generate slightly more efficient code, in cases
9167      where the RPTB instruction cannot be utilized.
9169 `-mdp-isr-reload'
9170 `-mparanoid'
9171      Force the DP register to be saved on entry to an interrupt service
9172      routine (ISR), reloaded to point to the data section, and restored
9173      on exit from the ISR.  This should not be required unless someone
9174      has violated the small memory model by modifying the DP register,
9175      say within an object library.
9177 `-mmpyi'
9178 `-mno-mpyi'
9179      For the C3x use the 24-bit MPYI instruction for integer multiplies
9180      instead of a library call to guarantee 32-bit results.  Note that
9181      if one of the operands is a constant, then the multiplication will
9182      be performed using shifts and adds.  If the `-mmpyi' option is not
9183      specified for the C3x, then squaring operations are performed
9184      inline instead of a library call.
9186 `-mfast-fix'
9187 `-mno-fast-fix'
9188      The C3x/C4x FIX instruction to convert a floating point value to an
9189      integer value chooses the nearest integer less than or equal to the
9190      floating point value rather than to the nearest integer.  Thus if
9191      the floating point number is negative, the result will be
9192      incorrectly truncated an additional code is necessary to detect
9193      and correct this case.  This option can be used to disable
9194      generation of the additional code required to correct the result.
9196 `-mrptb'
9197 `-mno-rptb'
9198      Enable (disable) generation of repeat block sequences using the
9199      RPTB instruction for zero overhead looping.  The RPTB construct is
9200      only used for innermost loops that do not call functions or jump
9201      across the loop boundaries.  There is no advantage having nested
9202      RPTB loops due to the overhead required to save and restore the
9203      RC, RS, and RE registers.  This is enabled by default with `-O2'.
9205 `-mrpts=COUNT'
9206 `-mno-rpts'
9207      Enable (disable) the use of the single instruction repeat
9208      instruction RPTS.  If a repeat block contains a single
9209      instruction, and the loop count can be guaranteed to be less than
9210      the value COUNT, GCC will emit a RPTS instruction instead of a
9211      RPTB.  If no value is specified, then a RPTS will be emitted even
9212      if the loop count cannot be determined at compile time.  Note that
9213      the repeated instruction following RPTS does not have to be
9214      reloaded from memory each iteration, thus freeing up the CPU buses
9215      for operands.  However, since interrupts are blocked by this
9216      instruction, it is disabled by default.
9218 `-mloop-unsigned'
9219 `-mno-loop-unsigned'
9220      The maximum iteration count when using RPTS and RPTB (and DB on
9221      the C40) is 2^31 + 1 since these instructions test if the
9222      iteration count is negative to terminate the loop.  If the
9223      iteration count is unsigned there is a possibility than the 2^31 +
9224      1 maximum iteration count may be exceeded.  This switch allows an
9225      unsigned iteration count.
9227 `-mti'
9228      Try to emit an assembler syntax that the TI assembler (asm30) is
9229      happy with.  This also enforces compatibility with the API
9230      employed by the TI C3x C compiler.  For example, long doubles are
9231      passed as structures rather than in floating point registers.
9233 `-mregparm'
9234 `-mmemparm'
9235      Generate code that uses registers (stack) for passing arguments to
9236      functions.  By default, arguments are passed in registers where
9237      possible rather than by pushing arguments on to the stack.
9239 `-mparallel-insns'
9240 `-mno-parallel-insns'
9241      Allow the generation of parallel instructions.  This is enabled by
9242      default with `-O2'.
9244 `-mparallel-mpy'
9245 `-mno-parallel-mpy'
9246      Allow the generation of MPY||ADD and MPY||SUB parallel
9247      instructions, provided `-mparallel-insns' is also specified.
9248      These instructions have tight register constraints which can
9249      pessimize the code generation of large functions.
9251 \x1f
9252 File: gcc.info,  Node: V850 Options,  Next: ARC Options,  Prev: TMS320C3x/C4x Options,  Up: Submodel Options
9254 V850 Options
9255 ------------
9257  These `-m' options are defined for V850 implementations:
9259 `-mlong-calls'
9260 `-mno-long-calls'
9261      Treat all calls as being far away (near).  If calls are assumed to
9262      be far away, the compiler will always load the functions address
9263      up into a register, and call indirect through the pointer.
9265 `-mno-ep'
9266 `-mep'
9267      Do not optimize (do optimize) basic blocks that use the same index
9268      pointer 4 or more times to copy pointer into the `ep' register, and
9269      use the shorter `sld' and `sst' instructions.  The `-mep' option
9270      is on by default if you optimize.
9272 `-mno-prolog-function'
9273 `-mprolog-function'
9274      Do not use (do use) external functions to save and restore
9275      registers at the prologue and epilogue of a function.  The
9276      external functions are slower, but use less code space if more
9277      than one function saves the same number of registers.  The
9278      `-mprolog-function' option is on by default if you optimize.
9280 `-mspace'
9281      Try to make the code as small as possible.  At present, this just
9282      turns on the `-mep' and `-mprolog-function' options.
9284 `-mtda=N'
9285      Put static or global variables whose size is N bytes or less into
9286      the tiny data area that register `ep' points to.  The tiny data
9287      area can hold up to 256 bytes in total (128 bytes for byte
9288      references).
9290 `-msda=N'
9291      Put static or global variables whose size is N bytes or less into
9292      the small data area that register `gp' points to.  The small data
9293      area can hold up to 64 kilobytes.
9295 `-mzda=N'
9296      Put static or global variables whose size is N bytes or less into
9297      the first 32 kilobytes of memory.
9299 `-mv850'
9300      Specify that the target processor is the V850.
9302 `-mbig-switch'
9303      Generate code suitable for big switch tables.  Use this option
9304      only if the assembler/linker complain about out of range branches
9305      within a switch table.
9307 `-mapp-regs'
9308      This option will cause r2 and r5 to be used in the code generated
9309      by the compiler.  This setting is the default.
9311 `-mno-app-regs'
9312      This option will cause r2 and r5 to be treated as fixed registers.
9314 `-mv850e1'
9315      Specify that the target processor is the V850E1.  The preprocessor
9316      constants `__v850e1__' and `__v850e__' will be defined if this
9317      option is used.
9319 `-mv850e'
9320      Specify that the target processor is the V850E.  The preprocessor
9321      constant `__v850e__' will be defined if this option is used.
9323      If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
9324      a default target processor will be chosen and the relevant
9325      `__v850*__' preprocessor constant will be defined.
9327      The preprocessor constants `__v850' and `__v851__' are always
9328      defined, regardless of which processor variant is the target.
9330 `-mdisable-callt'
9331      This option will suppress generation of the CALLT instruction for
9332      the v850e and v850e1 flavors of the v850 architecture.  The
9333      default is `-mno-disable-callt' which allows the CALLT instruction
9334      to be used.
9336 \x1f
9337 File: gcc.info,  Node: ARC Options,  Next: NS32K Options,  Prev: V850 Options,  Up: Submodel Options
9339 ARC Options
9340 -----------
9342  These options are defined for ARC implementations:
9344 `-EL'
9345      Compile code for little endian mode.  This is the default.
9347 `-EB'
9348      Compile code for big endian mode.
9350 `-mmangle-cpu'
9351      Prepend the name of the cpu to all public symbol names.  In
9352      multiple-processor systems, there are many ARC variants with
9353      different instruction and register set characteristics.  This flag
9354      prevents code compiled for one cpu to be linked with code compiled
9355      for another.  No facility exists for handling variants that are
9356      "almost identical".  This is an all or nothing option.
9358 `-mcpu=CPU'
9359      Compile code for ARC variant CPU.  Which variants are supported
9360      depend on the configuration.  All variants support `-mcpu=base',
9361      this is the default.
9363 `-mtext=TEXT-SECTION'
9364 `-mdata=DATA-SECTION'
9365 `-mrodata=READONLY-DATA-SECTION'
9366      Put functions, data, and readonly data in TEXT-SECTION,
9367      DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
9368      This can be overridden with the `section' attribute.  *Note
9369      Variable Attributes::.
9371 \x1f
9372 File: gcc.info,  Node: NS32K Options,  Next: AVR Options,  Prev: ARC Options,  Up: Submodel Options
9374 NS32K Options
9375 -------------
9377  These are the `-m' options defined for the 32000 series.  The default
9378 values for these options depends on which style of 32000 was selected
9379 when the compiler was configured; the defaults for the most common
9380 choices are given below.
9382 `-m32032'
9383 `-m32032'
9384      Generate output for a 32032.  This is the default when the
9385      compiler is configured for 32032 and 32016 based systems.
9387 `-m32332'
9388 `-m32332'
9389      Generate output for a 32332.  This is the default when the
9390      compiler is configured for 32332-based systems.
9392 `-m32532'
9393 `-m32532'
9394      Generate output for a 32532.  This is the default when the
9395      compiler is configured for 32532-based systems.
9397 `-m32081'
9398      Generate output containing 32081 instructions for floating point.
9399      This is the default for all systems.
9401 `-m32381'
9402      Generate output containing 32381 instructions for floating point.
9403      This also implies `-m32081'.  The 32381 is only compatible with
9404      the 32332 and 32532 cpus.  This is the default for the
9405      pc532-netbsd configuration.
9407 `-mmulti-add'
9408      Try and generate multiply-add floating point instructions `polyF'
9409      and `dotF'.  This option is only available if the `-m32381' option
9410      is in effect.  Using these instructions requires changes to
9411      register allocation which generally has a negative impact on
9412      performance.  This option should only be enabled when compiling
9413      code particularly likely to make heavy use of multiply-add
9414      instructions.
9416 `-mnomulti-add'
9417      Do not try and generate multiply-add floating point instructions
9418      `polyF' and `dotF'.  This is the default on all platforms.
9420 `-msoft-float'
9421      Generate output containing library calls for floating point.
9422      *Warning:* the requisite libraries may not be available.
9424 `-mieee-compare'
9425 `-mno-ieee-compare'
9426      Control whether or not the compiler uses IEEE floating point
9427      comparisons.  These handle correctly the case where the result of a
9428      comparison is unordered.  *Warning:* the requisite kernel support
9429      may not be available.
9431 `-mnobitfield'
9432      Do not use the bit-field instructions.  On some machines it is
9433      faster to use shifting and masking operations.  This is the
9434      default for the pc532.
9436 `-mbitfield'
9437      Do use the bit-field instructions.  This is the default for all
9438      platforms except the pc532.
9440 `-mrtd'
9441      Use a different function-calling convention, in which functions
9442      that take a fixed number of arguments return pop their arguments
9443      on return with the `ret' instruction.
9445      This calling convention is incompatible with the one normally used
9446      on Unix, so you cannot use it if you need to call libraries
9447      compiled with the Unix compiler.
9449      Also, you must provide function prototypes for all functions that
9450      take variable numbers of arguments (including `printf'); otherwise
9451      incorrect code will be generated for calls to those functions.
9453      In addition, seriously incorrect code will result if you call a
9454      function with too many arguments.  (Normally, extra arguments are
9455      harmlessly ignored.)
9457      This option takes its name from the 680x0 `rtd' instruction.
9459 `-mregparam'
9460      Use a different function-calling convention where the first two
9461      arguments are passed in registers.
9463      This calling convention is incompatible with the one normally used
9464      on Unix, so you cannot use it if you need to call libraries
9465      compiled with the Unix compiler.
9467 `-mnoregparam'
9468      Do not pass any arguments in registers.  This is the default for
9469      all targets.
9471 `-msb'
9472      It is OK to use the sb as an index register which is always loaded
9473      with zero.  This is the default for the pc532-netbsd target.
9475 `-mnosb'
9476      The sb register is not available for use or has not been
9477      initialized to zero by the run time system.  This is the default
9478      for all targets except the pc532-netbsd.  It is also implied
9479      whenever `-mhimem' or `-fpic' is set.
9481 `-mhimem'
9482      Many ns32000 series addressing modes use displacements of up to
9483      512MB.  If an address is above 512MB then displacements from zero
9484      can not be used.  This option causes code to be generated which
9485      can be loaded above 512MB.  This may be useful for operating
9486      systems or ROM code.
9488 `-mnohimem'
9489      Assume code will be loaded in the first 512MB of virtual address
9490      space.  This is the default for all platforms.
9492 \x1f
9493 File: gcc.info,  Node: AVR Options,  Next: MCore Options,  Prev: NS32K Options,  Up: Submodel Options
9495 AVR Options
9496 -----------
9498  These options are defined for AVR implementations:
9500 `-mmcu=MCU'
9501      Specify ATMEL AVR instruction set or MCU type.
9503      Instruction set avr1 is for the minimal AVR core, not supported by
9504      the C compiler, only for assembler programs (MCU types: at90s1200,
9505      attiny10, attiny11, attiny12, attiny15, attiny28).
9507      Instruction set avr2 (default) is for the classic AVR core with up
9508      to 8K program memory space (MCU types: at90s2313, at90s2323,
9509      attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
9510      at90s8515, at90c8534, at90s8535).
9512      Instruction set avr3 is for the classic AVR core with up to 128K
9513      program memory space (MCU types: atmega103, atmega603, at43usb320,
9514      at76c711).
9516      Instruction set avr4 is for the enhanced AVR core with up to 8K
9517      program memory space (MCU types: atmega8, atmega83, atmega85).
9519      Instruction set avr5 is for the enhanced AVR core with up to 128K
9520      program memory space (MCU types: atmega16, atmega161, atmega163,
9521      atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
9523 `-msize'
9524      Output instruction sizes to the asm file.
9526 `-minit-stack=N'
9527      Specify the initial stack address, which may be a symbol or
9528      numeric value, `__stack' is the default.
9530 `-mno-interrupts'
9531      Generated code is not compatible with hardware interrupts.  Code
9532      size will be smaller.
9534 `-mcall-prologues'
9535      Functions prologues/epilogues expanded as call to appropriate
9536      subroutines.  Code size will be smaller.
9538 `-mno-tablejump'
9539      Do not generate tablejump insns which sometimes increase code size.
9541 `-mtiny-stack'
9542      Change only the low 8 bits of the stack pointer.
9544 \x1f
9545 File: gcc.info,  Node: MCore Options,  Next: IA-64 Options,  Prev: AVR Options,  Up: Submodel Options
9547 MCore Options
9548 -------------
9550  These are the `-m' options defined for the Motorola M*Core processors.
9552 `-mhardlit'
9553 `-mno-hardlit'
9554      Inline constants into the code stream if it can be done in two
9555      instructions or less.
9557 `-mdiv'
9558 `-mno-div'
9559      Use the divide instruction.  (Enabled by default).
9561 `-mrelax-immediate'
9562 `-mno-relax-immediate'
9563      Allow arbitrary sized immediates in bit operations.
9565 `-mwide-bitfields'
9566 `-mno-wide-bitfields'
9567      Always treat bit-fields as int-sized.
9569 `-m4byte-functions'
9570 `-mno-4byte-functions'
9571      Force all functions to be aligned to a four byte boundary.
9573 `-mcallgraph-data'
9574 `-mno-callgraph-data'
9575      Emit callgraph information.
9577 `-mslow-bytes'
9578 `-mno-slow-bytes'
9579      Prefer word access when reading byte quantities.
9581 `-mlittle-endian'
9582 `-mbig-endian'
9583      Generate code for a little endian target.
9585 `-m210'
9586 `-m340'
9587      Generate code for the 210 processor.
9589 \x1f
9590 File: gcc.info,  Node: IA-64 Options,  Next: D30V Options,  Prev: MCore Options,  Up: Submodel Options
9592 IA-64 Options
9593 -------------
9595  These are the `-m' options defined for the Intel IA-64 architecture.
9597 `-mbig-endian'
9598      Generate code for a big endian target.  This is the default for
9599      HP-UX.
9601 `-mlittle-endian'
9602      Generate code for a little endian target.  This is the default for
9603      AIX5 and GNU/Linux.
9605 `-mgnu-as'
9606 `-mno-gnu-as'
9607      Generate (or don't) code for the GNU assembler.  This is the
9608      default.
9610 `-mgnu-ld'
9611 `-mno-gnu-ld'
9612      Generate (or don't) code for the GNU linker.  This is the default.
9614 `-mno-pic'
9615      Generate code that does not use a global pointer register.  The
9616      result is not position independent code, and violates the IA-64
9617      ABI.
9619 `-mvolatile-asm-stop'
9620 `-mno-volatile-asm-stop'
9621      Generate (or don't) a stop bit immediately before and after
9622      volatile asm statements.
9624 `-mb-step'
9625      Generate code that works around Itanium B step errata.
9627 `-mregister-names'
9628 `-mno-register-names'
9629      Generate (or don't) `in', `loc', and `out' register names for the
9630      stacked registers.  This may make assembler output more readable.
9632 `-mno-sdata'
9633 `-msdata'
9634      Disable (or enable) optimizations that use the small data section.
9635      This may be useful for working around optimizer bugs.
9637 `-mconstant-gp'
9638      Generate code that uses a single constant global pointer value.
9639      This is useful when compiling kernel code.
9641 `-mauto-pic'
9642      Generate code that is self-relocatable.  This implies
9643      `-mconstant-gp'.  This is useful when compiling firmware code.
9645 `-minline-float-divide-min-latency'
9646      Generate code for inline divides of floating point values using
9647      the minimum latency algorithm.
9649 `-minline-float-divide-max-throughput'
9650      Generate code for inline divides of floating point values using
9651      the maximum throughput algorithm.
9653 `-minline-int-divide-min-latency'
9654      Generate code for inline divides of integer values using the
9655      minimum latency algorithm.
9657 `-minline-int-divide-max-throughput'
9658      Generate code for inline divides of integer values using the
9659      maximum throughput algorithm.
9661 `-mno-dwarf2-asm'
9662 `-mdwarf2-asm'
9663      Don't (or do) generate assembler code for the DWARF2 line number
9664      debugging info.  This may be useful when not using the GNU
9665      assembler.
9667 `-mfixed-range=REGISTER-RANGE'
9668      Generate code treating the given register range as fixed registers.
9669      A fixed register is one that the register allocator can not use.
9670      This is useful when compiling kernel code.  A register range is
9671      specified as two registers separated by a dash.  Multiple register
9672      ranges can be specified separated by a comma.
9674 `-mearly-stop-bits'
9675 `-mno-early-stop-bits'
9676      Allow stop bits to be placed earlier than immediately preceding the
9677      instruction that triggered the stop bit.  This can improve
9678      instruction scheduling, but does not always do so.
9680 \x1f
9681 File: gcc.info,  Node: D30V Options,  Next: S/390 and zSeries Options,  Prev: IA-64 Options,  Up: Submodel Options
9683 D30V Options
9684 ------------
9686  These `-m' options are defined for D30V implementations:
9688 `-mextmem'
9689      Link the `.text', `.data', `.bss', `.strings', `.rodata',
9690      `.rodata1', `.data1' sections into external memory, which starts
9691      at location `0x80000000'.
9693 `-mextmemory'
9694      Same as the `-mextmem' switch.
9696 `-monchip'
9697      Link the `.text' section into onchip text memory, which starts at
9698      location `0x0'.  Also link `.data', `.bss', `.strings', `.rodata',
9699      `.rodata1', `.data1' sections into onchip data memory, which
9700      starts at location `0x20000000'.
9702 `-mno-asm-optimize'
9703 `-masm-optimize'
9704      Disable (enable) passing `-O' to the assembler when optimizing.
9705      The assembler uses the `-O' option to automatically parallelize
9706      adjacent short instructions where possible.
9708 `-mbranch-cost=N'
9709      Increase the internal costs of branches to N.  Higher costs means
9710      that the compiler will issue more instructions to avoid doing a
9711      branch.  The default is 2.
9713 `-mcond-exec=N'
9714      Specify the maximum number of conditionally executed instructions
9715      that replace a branch.  The default is 4.
9717 \x1f
9718 File: gcc.info,  Node: S/390 and zSeries Options,  Next: CRIS Options,  Prev: D30V Options,  Up: Submodel Options
9720 S/390 and zSeries Options
9721 -------------------------
9723  These are the `-m' options defined for the S/390 and zSeries
9724 architecture.
9726 `-mhard-float'
9727 `-msoft-float'
9728      Use (do not use) the hardware floating-point instructions and
9729      registers for floating-point operations.  When `-msoft-float' is
9730      specified, functions in `libgcc.a' will be used to perform
9731      floating-point operations.  When `-mhard-float' is specified, the
9732      compiler generates IEEE floating-point instructions.  This is the
9733      default.
9735 `-mbackchain'
9736 `-mno-backchain'
9737      Generate (or do not generate) code which maintains an explicit
9738      backchain within the stack frame that points to the caller's frame.
9739      This may be needed to allow debugging using tools that do not
9740      understand DWARF-2 call frame information.  The default is not to
9741      generate the backchain.
9743 `-msmall-exec'
9744 `-mno-small-exec'
9745      Generate (or do not generate) code using the `bras' instruction to
9746      do subroutine calls.  This only works reliably if the total
9747      executable size does not exceed 64k.  The default is to use the
9748      `basr' instruction instead, which does not have this limitation.
9750 `-m64'
9751 `-m31'
9752      When `-m31' is specified, generate code compliant to the GNU/Linux
9753      for S/390 ABI.  When `-m64' is specified, generate code compliant
9754      to the GNU/Linux for zSeries ABI.  This allows GCC in particular
9755      to generate 64-bit instructions.  For the `s390' targets, the
9756      default is `-m31', while the `s390x' targets default to `-m64'.
9758 `-mzarch'
9759 `-mesa'
9760      When `-mzarch' is specified, generate code using the instructions
9761      available on z/Architecture.  When `-mesa' is specified, generate
9762      code using the instructions available on ESA/390. Note that
9763      `-mesa' is not possible with `-m64'.  When generating code
9764      compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
9765      When generating code compliant to the GNU/Linux for zSeries ABI,
9766      the default is `-mzarch'.
9768 `-mmvcle'
9769 `-mno-mvcle'
9770      Generate (or do not generate) code using the `mvcle' instruction
9771      to perform block moves.  When `-mno-mvcle' is specified, use a
9772      `mvc' loop instead.  This is the default.
9774 `-mdebug'
9775 `-mno-debug'
9776      Print (or do not print) additional debug information when
9777      compiling.  The default is to not print debug information.
9779 `-march=CPU-TYPE'
9780      Generate code that will run on CPU-TYPE, which is the name of a
9781      system representing a certain processor type. Possible values for
9782      CPU-TYPE are `g5', `g6', `z900', and `z990'.  When generating code
9783      using the instructions available on z/Architecture, the default is
9784      `-march=z900'.  Otherwise, the default is `-march=g5'.
9786 `-mtune=CPU-TYPE'
9787      Tune to CPU-TYPE everything applicable about the generated code,
9788      except for the ABI and the set of available instructions.  The
9789      list of CPU-TYPE values is the same as for `-march'.  The default
9790      is the value used for `-march'.
9792 `-mfused-madd'
9793 `-mno-fused-madd'
9794      Generate code that uses (does not use) the floating point multiply
9795      and accumulate instructions.  These instructions are generated by
9796      default if hardware floating point is used.
9798 \x1f
9799 File: gcc.info,  Node: CRIS Options,  Next: MMIX Options,  Prev: S/390 and zSeries Options,  Up: Submodel Options
9801 CRIS Options
9802 ------------
9804  These options are defined specifically for the CRIS ports.
9806 `-march=ARCHITECTURE-TYPE'
9807 `-mcpu=ARCHITECTURE-TYPE'
9808      Generate code for the specified architecture.  The choices for
9809      ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
9810      ETRAX 4, ETRAX 100, and ETRAX 100 LX.  Default is `v0' except for
9811      cris-axis-linux-gnu, where the default is `v10'.
9813 `-mtune=ARCHITECTURE-TYPE'
9814      Tune to ARCHITECTURE-TYPE everything applicable about the generated
9815      code, except for the ABI and the set of available instructions.
9816      The choices for ARCHITECTURE-TYPE are the same as for
9817      `-march=ARCHITECTURE-TYPE'.
9819 `-mmax-stack-frame=N'
9820      Warn when the stack frame of a function exceeds N bytes.
9822 `-melinux-stacksize=N'
9823      Only available with the `cris-axis-aout' target.  Arranges for
9824      indications in the program to the kernel loader that the stack of
9825      the program should be set to N bytes.
9827 `-metrax4'
9828 `-metrax100'
9829      The options `-metrax4' and `-metrax100' are synonyms for
9830      `-march=v3' and `-march=v8' respectively.
9832 `-mmul-bug-workaround'
9833 `-mno-mul-bug-workaround'
9834      Work around a bug in the `muls' and `mulu' instructions for CPU
9835      models where it applies.  This option is active by default.
9837 `-mpdebug'
9838      Enable CRIS-specific verbose debug-related information in the
9839      assembly code.  This option also has the effect to turn off the
9840      `#NO_APP' formatted-code indicator to the assembler at the
9841      beginning of the assembly file.
9843 `-mcc-init'
9844      Do not use condition-code results from previous instruction;
9845      always emit compare and test instructions before use of condition
9846      codes.
9848 `-mno-side-effects'
9849      Do not emit instructions with side-effects in addressing modes
9850      other than post-increment.
9852 `-mstack-align'
9853 `-mno-stack-align'
9854 `-mdata-align'
9855 `-mno-data-align'
9856 `-mconst-align'
9857 `-mno-const-align'
9858      These options (no-options) arranges (eliminate arrangements) for
9859      the stack-frame, individual data and constants to be aligned for
9860      the maximum single data access size for the chosen CPU model.  The
9861      default is to arrange for 32-bit alignment.  ABI details such as
9862      structure layout are not affected by these options.
9864 `-m32-bit'
9865 `-m16-bit'
9866 `-m8-bit'
9867      Similar to the stack- data- and const-align options above, these
9868      options arrange for stack-frame, writable data and constants to
9869      all be 32-bit, 16-bit or 8-bit aligned.  The default is 32-bit
9870      alignment.
9872 `-mno-prologue-epilogue'
9873 `-mprologue-epilogue'
9874      With `-mno-prologue-epilogue', the normal function prologue and
9875      epilogue that sets up the stack-frame are omitted and no return
9876      instructions or return sequences are generated in the code.  Use
9877      this option only together with visual inspection of the compiled
9878      code: no warnings or errors are generated when call-saved
9879      registers must be saved, or storage for local variable needs to be
9880      allocated.
9882 `-mno-gotplt'
9883 `-mgotplt'
9884      With `-fpic' and `-fPIC', don't generate (do generate) instruction
9885      sequences that load addresses for functions from the PLT part of
9886      the GOT rather than (traditional on other architectures) calls to
9887      the PLT.  The default is `-mgotplt'.
9889 `-maout'
9890      Legacy no-op option only recognized with the cris-axis-aout target.
9892 `-melf'
9893      Legacy no-op option only recognized with the cris-axis-elf and
9894      cris-axis-linux-gnu targets.
9896 `-melinux'
9897      Only recognized with the cris-axis-aout target, where it selects a
9898      GNU/linux-like multilib, include files and instruction set for
9899      `-march=v8'.
9901 `-mlinux'
9902      Legacy no-op option only recognized with the cris-axis-linux-gnu
9903      target.
9905 `-sim'
9906      This option, recognized for the cris-axis-aout and cris-axis-elf
9907      arranges to link with input-output functions from a simulator
9908      library.  Code, initialized data and zero-initialized data are
9909      allocated consecutively.
9911 `-sim2'
9912      Like `-sim', but pass linker options to locate initialized data at
9913      0x40000000 and zero-initialized data at 0x80000000.
9915 \x1f
9916 File: gcc.info,  Node: MMIX Options,  Next: PDP-11 Options,  Prev: CRIS Options,  Up: Submodel Options
9918 MMIX Options
9919 ------------
9921  These options are defined for the MMIX:
9923 `-mlibfuncs'
9924 `-mno-libfuncs'
9925      Specify that intrinsic library functions are being compiled,
9926      passing all values in registers, no matter the size.
9928 `-mepsilon'
9929 `-mno-epsilon'
9930      Generate floating-point comparison instructions that compare with
9931      respect to the `rE' epsilon register.
9933 `-mabi=mmixware'
9934 `-mabi=gnu'
9935      Generate code that passes function parameters and return values
9936      that (in the called function) are seen as registers `$0' and up,
9937      as opposed to the GNU ABI which uses global registers `$231' and
9938      up.
9940 `-mzero-extend'
9941 `-mno-zero-extend'
9942      When reading data from memory in sizes shorter than 64 bits, use
9943      (do not use) zero-extending load instructions by default, rather
9944      than sign-extending ones.
9946 `-mknuthdiv'
9947 `-mno-knuthdiv'
9948      Make the result of a division yielding a remainder have the same
9949      sign as the divisor.  With the default, `-mno-knuthdiv', the sign
9950      of the remainder follows the sign of the dividend.  Both methods
9951      are arithmetically valid, the latter being almost exclusively used.
9953 `-mtoplevel-symbols'
9954 `-mno-toplevel-symbols'
9955      Prepend (do not prepend) a `:' to all global symbols, so the
9956      assembly code can be used with the `PREFIX' assembly directive.
9958 `-melf'
9959      Generate an executable in the ELF format, rather than the default
9960      `mmo' format used by the `mmix' simulator.
9962 `-mbranch-predict'
9963 `-mno-branch-predict'
9964      Use (do not use) the probable-branch instructions, when static
9965      branch prediction indicates a probable branch.
9967 `-mbase-addresses'
9968 `-mno-base-addresses'
9969      Generate (do not generate) code that uses _base addresses_.  Using
9970      a base address automatically generates a request (handled by the
9971      assembler and the linker) for a constant to be set up in a global
9972      register.  The register is used for one or more base address
9973      requests within the range 0 to 255 from the value held in the
9974      register.  The generally leads to short and fast code, but the
9975      number of different data items that can be addressed is limited.
9976      This means that a program that uses lots of static data may
9977      require `-mno-base-addresses'.
9979 `-msingle-exit'
9980 `-mno-single-exit'
9981      Force (do not force) generated code to have a single exit point in
9982      each function.
9984 \x1f
9985 File: gcc.info,  Node: PDP-11 Options,  Next: Xstormy16 Options,  Prev: MMIX Options,  Up: Submodel Options
9987 PDP-11 Options
9988 --------------
9990  These options are defined for the PDP-11:
9992 `-mfpu'
9993      Use hardware FPP floating point.  This is the default.  (FIS
9994      floating point on the PDP-11/40 is not supported.)
9996 `-msoft-float'
9997      Do not use hardware floating point.
9999 `-mac0'
10000      Return floating-point results in ac0 (fr0 in Unix assembler
10001      syntax).
10003 `-mno-ac0'
10004      Return floating-point results in memory.  This is the default.
10006 `-m40'
10007      Generate code for a PDP-11/40.
10009 `-m45'
10010      Generate code for a PDP-11/45.  This is the default.
10012 `-m10'
10013      Generate code for a PDP-11/10.
10015 `-mbcopy-builtin'
10016      Use inline `movstrhi' patterns for copying memory.  This is the
10017      default.
10019 `-mbcopy'
10020      Do not use inline `movstrhi' patterns for copying memory.
10022 `-mint16'
10023 `-mno-int32'
10024      Use 16-bit `int'.  This is the default.
10026 `-mint32'
10027 `-mno-int16'
10028      Use 32-bit `int'.
10030 `-mfloat64'
10031 `-mno-float32'
10032      Use 64-bit `float'.  This is the default.
10034 `-mfloat32'
10035 `-mno-float64'
10036      Use 32-bit `float'.
10038 `-mabshi'
10039      Use `abshi2' pattern.  This is the default.
10041 `-mno-abshi'
10042      Do not use `abshi2' pattern.
10044 `-mbranch-expensive'
10045      Pretend that branches are expensive.  This is for experimenting
10046      with code generation only.
10048 `-mbranch-cheap'
10049      Do not pretend that branches are expensive.  This is the default.
10051 `-msplit'
10052      Generate code for a system with split I&D.
10054 `-mno-split'
10055      Generate code for a system without split I&D.  This is the default.
10057 `-munix-asm'
10058      Use Unix assembler syntax.  This is the default when configured for
10059      `pdp11-*-bsd'.
10061 `-mdec-asm'
10062      Use DEC assembler syntax.  This is the default when configured for
10063      any PDP-11 target other than `pdp11-*-bsd'.
10065 \x1f
10066 File: gcc.info,  Node: Xstormy16 Options,  Next: Xtensa Options,  Prev: PDP-11 Options,  Up: Submodel Options
10068 Xstormy16 Options
10069 -----------------
10071  These options are defined for Xstormy16:
10073 `-msim'
10074      Choose startup files and linker script suitable for the simulator.
10076 \x1f
10077 File: gcc.info,  Node: FRV Options,  Prev: Xtensa Options,  Up: Submodel Options
10079 FRV Options
10080 -----------
10082 `-mgpr-32'
10083      Only use the first 32 general purpose registers.
10085 `-mgpr-64'
10086      Use all 64 general purpose registers.
10088 `-mfpr-32'
10089      Use only the first 32 floating point registers.
10091 `-mfpr-64'
10092      Use all 64 floating point registers
10094 `-mhard-float'
10095      Use hardware instructions for floating point operations.
10097 `-msoft-float'
10098      Use library routines for floating point operations.
10100 `-malloc-cc'
10101      Dynamically allocate condition code registers.
10103 `-mfixed-cc'
10104      Do not try to dynamically allocate condition code registers, only
10105      use `icc0' and `fcc0'.
10107 `-mdword'
10108      Change ABI to use double word insns.
10110 `-mno-dword'
10111      Do not use double word instructions.
10113 `-mdouble'
10114      Use floating point double instructions.
10116 `-mno-double'
10117      Do not use floating point double instructions.
10119 `-mmedia'
10120      Use media instructions.
10122 `-mno-media'
10123      Do not use media instructions.
10125 `-mmuladd'
10126      Use multiply and add/subtract instructions.
10128 `-mno-muladd'
10129      Do not use multiply and add/subtract instructions.
10131 `-mlibrary-pic'
10132      Enable PIC support for building libraries
10134 `-macc-4'
10135      Use only the first four media accumulator registers.
10137 `-macc-8'
10138      Use all eight media accumulator registers.
10140 `-mpack'
10141      Pack VLIW instructions.
10143 `-mno-pack'
10144      Do not pack VLIW instructions.
10146 `-mno-eflags'
10147      Do not mark ABI switches in e_flags.
10149 `-mcond-move'
10150      Enable the use of conditional-move instructions (default).
10152      This switch is mainly for debugging the compiler and will likely
10153      be removed in a future version.
10155 `-mno-cond-move'
10156      Disable the use of conditional-move instructions.
10158      This switch is mainly for debugging the compiler and will likely
10159      be removed in a future version.
10161 `-mscc'
10162      Enable the use of conditional set instructions (default).
10164      This switch is mainly for debugging the compiler and will likely
10165      be removed in a future version.
10167 `-mno-scc'
10168      Disable the use of conditional set instructions.
10170      This switch is mainly for debugging the compiler and will likely
10171      be removed in a future version.
10173 `-mcond-exec'
10174      Enable the use of conditional execution (default).
10176      This switch is mainly for debugging the compiler and will likely
10177      be removed in a future version.
10179 `-mno-cond-exec'
10180      Disable the use of conditional execution.
10182      This switch is mainly for debugging the compiler and will likely
10183      be removed in a future version.
10185 `-mvliw-branch'
10186      Run a pass to pack branches into VLIW instructions (default).
10188      This switch is mainly for debugging the compiler and will likely
10189      be removed in a future version.
10191 `-mno-vliw-branch'
10192      Do not run a pass to pack branches into VLIW instructions.
10194      This switch is mainly for debugging the compiler and will likely
10195      be removed in a future version.
10197 `-mmulti-cond-exec'
10198      Enable optimization of `&&' and `||' in conditional execution
10199      (default).
10201      This switch is mainly for debugging the compiler and will likely
10202      be removed in a future version.
10204 `-mno-multi-cond-exec'
10205      Disable optimization of `&&' and `||' in conditional execution.
10207      This switch is mainly for debugging the compiler and will likely
10208      be removed in a future version.
10210 `-mnested-cond-exec'
10211      Enable nested conditional execution optimizations (default).
10213      This switch is mainly for debugging the compiler and will likely
10214      be removed in a future version.
10216 `-mno-nested-cond-exec'
10217      Disable nested conditional execution optimizations.
10219      This switch is mainly for debugging the compiler and will likely
10220      be removed in a future version.
10222 `-mtomcat-stats'
10223      Cause gas to print out tomcat statistics.
10225 `-mcpu=CPU'
10226      Select the processor type for which to generate code.  Possible
10227      values are `simple', `tomcat', `fr500', `fr400', `fr300', `frv'.
10229 \x1f
10230 File: gcc.info,  Node: Xtensa Options,  Next: FRV Options,  Prev: Xstormy16 Options,  Up: Submodel Options
10232 Xtensa Options
10233 --------------
10235  These options are supported for Xtensa targets:
10237 `-mconst16'
10238 `-mno-const16'
10239      Enable or disable use of `CONST16' instructions for loading
10240      constant values.  The `CONST16' instruction is currently not a
10241      standard option from Tensilica.  When enabled, `CONST16'
10242      instructions are always used in place of the standard `L32R'
10243      instructions.  The use of `CONST16' is enabled by default only if
10244      the `L32R' instruction is not available.
10246 `-mfused-madd'
10247 `-mno-fused-madd'
10248      Enable or disable use of fused multiply/add and multiply/subtract
10249      instructions in the floating-point option.  This has no effect if
10250      the floating-point option is not also enabled.  Disabling fused
10251      multiply/add and multiply/subtract instructions forces the
10252      compiler to use separate instructions for the multiply and
10253      add/subtract operations.  This may be desirable in some cases
10254      where strict IEEE 754-compliant results are required: the fused
10255      multiply add/subtract instructions do not round the intermediate
10256      result, thereby producing results with _more_ bits of precision
10257      than specified by the IEEE standard.  Disabling fused multiply
10258      add/subtract instructions also ensures that the program output is
10259      not sensitive to the compiler's ability to combine multiply and
10260      add/subtract operations.
10262 `-mtext-section-literals'
10263 `-mno-text-section-literals'
10264      Control the treatment of literal pools.  The default is
10265      `-mno-text-section-literals', which places literals in a separate
10266      section in the output file.  This allows the literal pool to be
10267      placed in a data RAM/ROM, and it also allows the linker to combine
10268      literal pools from separate object files to remove redundant
10269      literals and improve code size.  With `-mtext-section-literals',
10270      the literals are interspersed in the text section in order to keep
10271      them as close as possible to their references.  This may be
10272      necessary for large assembly files.
10274 `-mtarget-align'
10275 `-mno-target-align'
10276      When this option is enabled, GCC instructs the assembler to
10277      automatically align instructions to reduce branch penalties at the
10278      expense of some code density.  The assembler attempts to widen
10279      density instructions to align branch targets and the instructions
10280      following call instructions.  If there are not enough preceding
10281      safe density instructions to align a target, no widening will be
10282      performed.  The default is `-mtarget-align'.  These options do not
10283      affect the treatment of auto-aligned instructions like `LOOP',
10284      which the assembler will always align, either by widening density
10285      instructions or by inserting no-op instructions.
10287 `-mlongcalls'
10288 `-mno-longcalls'
10289      When this option is enabled, GCC instructs the assembler to
10290      translate direct calls to indirect calls unless it can determine
10291      that the target of a direct call is in the range allowed by the
10292      call instruction.  This translation typically occurs for calls to
10293      functions in other source files.  Specifically, the assembler
10294      translates a direct `CALL' instruction into an `L32R' followed by
10295      a `CALLX' instruction.  The default is `-mno-longcalls'.  This
10296      option should be used in programs where the call target can
10297      potentially be out of range.  This option is implemented in the
10298      assembler, not the compiler, so the assembly code generated by GCC
10299      will still show direct call instructions--look at the disassembled
10300      object code to see the actual instructions.  Note that the
10301      assembler will use an indirect call for every cross-file call, not
10302      just those that really will be out of range.
10304 \x1f
10305 File: gcc.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Submodel Options,  Up: Invoking GCC
10307 Options for Code Generation Conventions
10308 =======================================
10310  These machine-independent options control the interface conventions
10311 used in code generation.
10313  Most of them have both positive and negative forms; the negative form
10314 of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
10315 forms is listed--the one which is not the default.  You can figure out
10316 the other form by either removing `no-' or adding it.
10318 `-fbounds-check'
10319      For front-ends that support it, generate additional code to check
10320      that indices used to access arrays are within the declared range.
10321      This is currently only supported by the Java and Fortran 77
10322      front-ends, where this option defaults to true and false
10323      respectively.
10325 `-ftrapv'
10326      This option generates traps for signed overflow on addition,
10327      subtraction, multiplication operations.
10329 `-fwrapv'
10330      This option instructs the compiler to assume that signed arithmetic
10331      overflow of addition, subtraction and multiplication wraps around
10332      using twos-complement representation.  This flag enables some
10333      optimizations and disables other.  This option is enabled by
10334      default for the Java front-end, as required by the Java language
10335      specification.
10337 `-fexceptions'
10338      Enable exception handling.  Generates extra code needed to
10339      propagate exceptions.  For some targets, this implies GCC will
10340      generate frame unwind information for all functions, which can
10341      produce significant data size overhead, although it does not
10342      affect execution.  If you do not specify this option, GCC will
10343      enable it by default for languages like C++ which normally require
10344      exception handling, and disable it for languages like C that do
10345      not normally require it.  However, you may need to enable this
10346      option when compiling C code that needs to interoperate properly
10347      with exception handlers written in C++.  You may also wish to
10348      disable this option if you are compiling older C++ programs that
10349      don't use exception handling.
10351 `-fnon-call-exceptions'
10352      Generate code that allows trapping instructions to throw
10353      exceptions.  Note that this requires platform-specific runtime
10354      support that does not exist everywhere.  Moreover, it only allows
10355      _trapping_ instructions to throw exceptions, i.e. memory
10356      references or floating point instructions.  It does not allow
10357      exceptions to be thrown from arbitrary signal handlers such as
10358      `SIGALRM'.
10360 `-funwind-tables'
10361      Similar to `-fexceptions', except that it will just generate any
10362      needed static data, but will not affect the generated code in any
10363      other way.  You will normally not enable this option; instead, a
10364      language processor that needs this handling would enable it on
10365      your behalf.
10367 `-fasynchronous-unwind-tables'
10368      Generate unwind table in dwarf2 format, if supported by target
10369      machine.  The table is exact at each instruction boundary, so it
10370      can be used for stack unwinding from asynchronous events (such as
10371      debugger or garbage collector).
10373 `-fpcc-struct-return'
10374      Return "short" `struct' and `union' values in memory like longer
10375      ones, rather than in registers.  This convention is less
10376      efficient, but it has the advantage of allowing intercallability
10377      between GCC-compiled files and files compiled with other
10378      compilers, particularly the Portable C Compiler (pcc).
10380      The precise convention for returning structures in memory depends
10381      on the target configuration macros.
10383      Short structures and unions are those whose size and alignment
10384      match that of some integer type.
10386      *Warning:* code compiled with the `-fpcc-struct-return' switch is
10387      not binary compatible with code compiled with the
10388      `-freg-struct-return' switch.  Use it to conform to a non-default
10389      application binary interface.
10391 `-freg-struct-return'
10392      Return `struct' and `union' values in registers when possible.
10393      This is more efficient for small structures than
10394      `-fpcc-struct-return'.
10396      If you specify neither `-fpcc-struct-return' nor
10397      `-freg-struct-return', GCC defaults to whichever convention is
10398      standard for the target.  If there is no standard convention, GCC
10399      defaults to `-fpcc-struct-return', except on targets where GCC is
10400      the principal compiler.  In those cases, we can choose the
10401      standard, and we chose the more efficient register return
10402      alternative.
10404      *Warning:* code compiled with the `-freg-struct-return' switch is
10405      not binary compatible with code compiled with the
10406      `-fpcc-struct-return' switch.  Use it to conform to a non-default
10407      application binary interface.
10409 `-fshort-enums'
10410      Allocate to an `enum' type only as many bytes as it needs for the
10411      declared range of possible values.  Specifically, the `enum' type
10412      will be equivalent to the smallest integer type which has enough
10413      room.
10415      *Warning:* the `-fshort-enums' switch causes GCC to generate code
10416      that is not binary compatible with code generated without that
10417      switch.  Use it to conform to a non-default application binary
10418      interface.
10420 `-fshort-double'
10421      Use the same size for `double' as for `float'.
10423      *Warning:* the `-fshort-double' switch causes GCC to generate code
10424      that is not binary compatible with code generated without that
10425      switch.  Use it to conform to a non-default application binary
10426      interface.
10428 `-fshort-wchar'
10429      Override the underlying type for `wchar_t' to be `short unsigned
10430      int' instead of the default for the target.  This option is useful
10431      for building programs to run under WINE.
10433      *Warning:* the `-fshort-wchar' switch causes GCC to generate code
10434      that is not binary compatible with code generated without that
10435      switch.  Use it to conform to a non-default application binary
10436      interface.
10438 `-fshared-data'
10439      Requests that the data and non-`const' variables of this
10440      compilation be shared data rather than private data.  The
10441      distinction makes sense only on certain operating systems, where
10442      shared data is shared between processes running the same program,
10443      while private data exists in one copy per process.
10445 `-fno-common'
10446      In C, allocate even uninitialized global variables in the data
10447      section of the object file, rather than generating them as common
10448      blocks.  This has the effect that if the same variable is declared
10449      (without `extern') in two different compilations, you will get an
10450      error when you link them.  The only reason this might be useful is
10451      if you wish to verify that the program will work on other systems
10452      which always work this way.
10454 `-fno-ident'
10455      Ignore the `#ident' directive.
10457 `-finhibit-size-directive'
10458      Don't output a `.size' assembler directive, or anything else that
10459      would cause trouble if the function is split in the middle, and the
10460      two halves are placed at locations far apart in memory.  This
10461      option is used when compiling `crtstuff.c'; you should not need to
10462      use it for anything else.
10464 `-fverbose-asm'
10465      Put extra commentary information in the generated assembly code to
10466      make it more readable.  This option is generally only of use to
10467      those who actually need to read the generated assembly code
10468      (perhaps while debugging the compiler itself).
10470      `-fno-verbose-asm', the default, causes the extra information to
10471      be omitted and is useful when comparing two assembler files.
10473 `-fpic'
10474      Generate position-independent code (PIC) suitable for use in a
10475      shared library, if supported for the target machine.  Such code
10476      accesses all constant addresses through a global offset table
10477      (GOT).  The dynamic loader resolves the GOT entries when the
10478      program starts (the dynamic loader is not part of GCC; it is part
10479      of the operating system).  If the GOT size for the linked
10480      executable exceeds a machine-specific maximum size, you get an
10481      error message from the linker indicating that `-fpic' does not
10482      work; in that case, recompile with `-fPIC' instead.  (These
10483      maximums are 8k on the SPARC and 32k on the m68k and RS/6000.  The
10484      386 has no such limit.)
10486      Position-independent code requires special support, and therefore
10487      works only on certain machines.  For the 386, GCC supports PIC for
10488      System V but not for the Sun 386i.  Code generated for the IBM
10489      RS/6000 is always position-independent.
10491 `-fPIC'
10492      If supported for the target machine, emit position-independent
10493      code, suitable for dynamic linking and avoiding any limit on the
10494      size of the global offset table.  This option makes a difference
10495      on the m68k and the SPARC.
10497      Position-independent code requires special support, and therefore
10498      works only on certain machines.
10500 `-fpie'
10501 `-fPIE'
10502      These options are similar to `-fpic' and `-fPIC', but generated
10503      position independent code can be only linked into executables.
10504      Usually these options are used when `-pie' GCC option will be used
10505      during linking.
10507 `-ffixed-REG'
10508      Treat the register named REG as a fixed register; generated code
10509      should never refer to it (except perhaps as a stack pointer, frame
10510      pointer or in some other fixed role).
10512      REG must be the name of a register.  The register names accepted
10513      are machine-specific and are defined in the `REGISTER_NAMES' macro
10514      in the machine description macro file.
10516      This flag does not have a negative form, because it specifies a
10517      three-way choice.
10519 `-fcall-used-REG'
10520      Treat the register named REG as an allocable register that is
10521      clobbered by function calls.  It may be allocated for temporaries
10522      or variables that do not live across a call.  Functions compiled
10523      this way will not save and restore the register REG.
10525      It is an error to used this flag with the frame pointer or stack
10526      pointer.  Use of this flag for other registers that have fixed
10527      pervasive roles in the machine's execution model will produce
10528      disastrous results.
10530      This flag does not have a negative form, because it specifies a
10531      three-way choice.
10533 `-fcall-saved-REG'
10534      Treat the register named REG as an allocable register saved by
10535      functions.  It may be allocated even for temporaries or variables
10536      that live across a call.  Functions compiled this way will save
10537      and restore the register REG if they use it.
10539      It is an error to used this flag with the frame pointer or stack
10540      pointer.  Use of this flag for other registers that have fixed
10541      pervasive roles in the machine's execution model will produce
10542      disastrous results.
10544      A different sort of disaster will result from the use of this flag
10545      for a register in which function values may be returned.
10547      This flag does not have a negative form, because it specifies a
10548      three-way choice.
10550 `-fpack-struct'
10551      Pack all structure members together without holes.
10553      *Warning:* the `-fpack-struct' switch causes GCC to generate code
10554      that is not binary compatible with code generated without that
10555      switch.  Additionally, it makes the code suboptimal.  Use it to
10556      conform to a non-default application binary interface.
10558 `-finstrument-functions'
10559      Generate instrumentation calls for entry and exit to functions.
10560      Just after function entry and just before function exit, the
10561      following profiling functions will be called with the address of
10562      the current function and its call site.  (On some platforms,
10563      `__builtin_return_address' does not work beyond the current
10564      function, so the call site information may not be available to the
10565      profiling functions otherwise.)
10567           void __cyg_profile_func_enter (void *this_fn,
10568                                          void *call_site);
10569           void __cyg_profile_func_exit  (void *this_fn,
10570                                          void *call_site);
10572      The first argument is the address of the start of the current
10573      function, which may be looked up exactly in the symbol table.
10575      This currently disables function inlining.  This restriction is
10576      expected to be removed in future releases.
10578      A function may be given the attribute `no_instrument_function', in
10579      which case this instrumentation will not be done.  This can be
10580      used, for example, for the profiling functions listed above,
10581      high-priority interrupt routines, and any functions from which the
10582      profiling functions cannot safely be called (perhaps signal
10583      handlers, if the profiling routines generate output or allocate
10584      memory).
10586 `-fstack-check'
10587      Generate code to verify that you do not go beyond the boundary of
10588      the stack.  You should specify this flag if you are running in an
10589      environment with multiple threads, but only rarely need to specify
10590      it in a single-threaded environment since stack overflow is
10591      automatically detected on nearly all systems if there is only one
10592      stack.
10594      Note that this switch does not actually cause checking to be done;
10595      the operating system must do that.  The switch causes generation
10596      of code to ensure that the operating system sees the stack being
10597      extended.
10599 `-fstack-limit-register=REG'
10600 `-fstack-limit-symbol=SYM'
10601 `-fno-stack-limit'
10602      Generate code to ensure that the stack does not grow beyond a
10603      certain value, either the value of a register or the address of a
10604      symbol.  If the stack would grow beyond the value, a signal is
10605      raised.  For most targets, the signal is raised before the stack
10606      overruns the boundary, so it is possible to catch the signal
10607      without taking special precautions.
10609      For instance, if the stack starts at absolute address `0x80000000'
10610      and grows downwards, you can use the flags
10611      `-fstack-limit-symbol=__stack_limit' and
10612      `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
10613      of 128KB.  Note that this may only work with the GNU linker.
10615 `-fargument-alias'
10616 `-fargument-noalias'
10617 `-fargument-noalias-global'
10618      Specify the possible relationships among parameters and between
10619      parameters and global data.
10621      `-fargument-alias' specifies that arguments (parameters) may alias
10622      each other and may alias global storage.
10623      `-fargument-noalias' specifies that arguments do not alias each
10624      other, but may alias global storage.
10625      `-fargument-noalias-global' specifies that arguments do not alias
10626      each other and do not alias global storage.
10628      Each language will automatically use whatever option is required by
10629      the language standard.  You should not need to use these options
10630      yourself.
10632 `-fleading-underscore'
10633      This option and its counterpart, `-fno-leading-underscore',
10634      forcibly change the way C symbols are represented in the object
10635      file.  One use is to help link with legacy assembly code.
10637      *Warning:* the `-fleading-underscore' switch causes GCC to
10638      generate code that is not binary compatible with code generated
10639      without that switch.  Use it to conform to a non-default
10640      application binary interface.  Not all targets provide complete
10641      support for this switch.
10643 `-ftls-model=MODEL'
10644      Alter the thread-local storage model to be used (*note
10645      Thread-Local::).  The MODEL argument should be one of
10646      `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
10648      The default without `-fpic' is `initial-exec'; with `-fpic' the
10649      default is `global-dynamic'.
10651 \x1f
10652 File: gcc.info,  Node: Environment Variables,  Next: Precompiled Headers,  Prev: Code Gen Options,  Up: Invoking GCC
10654 Environment Variables Affecting GCC
10655 ===================================
10657  This section describes several environment variables that affect how
10658 GCC operates.  Some of them work by specifying directories or prefixes
10659 to use when searching for various kinds of files.  Some are used to
10660 specify other aspects of the compilation environment.
10662  Note that you can also specify places to search using options such as
10663 `-B', `-I' and `-L' (*note Directory Options::).  These take precedence
10664 over places specified using environment variables, which in turn take
10665 precedence over those specified by the configuration of GCC.  *Note
10666 Controlling the Compilation Driver `gcc': (gccint)Driver.
10668 `LANG'
10669 `LC_CTYPE'
10670 `LC_MESSAGES'
10671 `LC_ALL'
10672      These environment variables control the way that GCC uses
10673      localization information that allow GCC to work with different
10674      national conventions.  GCC inspects the locale categories
10675      `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
10676      These locale categories can be set to any value supported by your
10677      installation.  A typical value is `en_UK' for English in the United
10678      Kingdom.
10680      The `LC_CTYPE' environment variable specifies character
10681      classification.  GCC uses it to determine the character boundaries
10682      in a string; this is needed for some multibyte encodings that
10683      contain quote and escape characters that would otherwise be
10684      interpreted as a string end or escape.
10686      The `LC_MESSAGES' environment variable specifies the language to
10687      use in diagnostic messages.
10689      If the `LC_ALL' environment variable is set, it overrides the value
10690      of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
10691      `LC_MESSAGES' default to the value of the `LANG' environment
10692      variable.  If none of these variables are set, GCC defaults to
10693      traditional C English behavior.
10695 `TMPDIR'
10696      If `TMPDIR' is set, it specifies the directory to use for temporary
10697      files.  GCC uses temporary files to hold the output of one stage of
10698      compilation which is to be used as input to the next stage: for
10699      example, the output of the preprocessor, which is the input to the
10700      compiler proper.
10702 `GCC_EXEC_PREFIX'
10703      If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
10704      names of the subprograms executed by the compiler.  No slash is
10705      added when this prefix is combined with the name of a subprogram,
10706      but you can specify a prefix that ends with a slash if you wish.
10708      If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
10709      appropriate prefix to use based on the pathname it was invoked
10710      with.
10712      If GCC cannot find the subprogram using the specified prefix, it
10713      tries looking in the usual places for the subprogram.
10715      The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
10716      PREFIX is the value of `prefix' when you ran the `configure'
10717      script.
10719      Other prefixes specified with `-B' take precedence over this
10720      prefix.
10722      This prefix is also used for finding files such as `crt0.o' that
10723      are used for linking.
10725      In addition, the prefix is used in an unusual way in finding the
10726      directories to search for header files.  For each of the standard
10727      directories whose name normally begins with `/usr/local/lib/gcc'
10728      (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
10729      replacing that beginning with the specified prefix to produce an
10730      alternate directory name.  Thus, with `-Bfoo/', GCC will search
10731      `foo/bar' where it would normally search `/usr/local/lib/bar'.
10732      These alternate directories are searched first; the standard
10733      directories come next.
10735 `COMPILER_PATH'
10736      The value of `COMPILER_PATH' is a colon-separated list of
10737      directories, much like `PATH'.  GCC tries the directories thus
10738      specified when searching for subprograms, if it can't find the
10739      subprograms using `GCC_EXEC_PREFIX'.
10741 `LIBRARY_PATH'
10742      The value of `LIBRARY_PATH' is a colon-separated list of
10743      directories, much like `PATH'.  When configured as a native
10744      compiler, GCC tries the directories thus specified when searching
10745      for special linker files, if it can't find them using
10746      `GCC_EXEC_PREFIX'.  Linking using GCC also uses these directories
10747      when searching for ordinary libraries for the `-l' option (but
10748      directories specified with `-L' come first).
10750 `LANG'
10751      This variable is used to pass locale information to the compiler.
10752      One way in which this information is used is to determine the
10753      character set to be used when character literals, string literals
10754      and comments are parsed in C and C++.  When the compiler is
10755      configured to allow multibyte characters, the following values for
10756      `LANG' are recognized:
10758     `C-JIS'
10759           Recognize JIS characters.
10761     `C-SJIS'
10762           Recognize SJIS characters.
10764     `C-EUCJP'
10765           Recognize EUCJP characters.
10767      If `LANG' is not defined, or if it has some other value, then the
10768      compiler will use mblen and mbtowc as defined by the default
10769      locale to recognize and translate multibyte characters.
10771 Some additional environments variables affect the behavior of the
10772 preprocessor.
10774 `CPATH'
10775 `C_INCLUDE_PATH'
10776 `CPLUS_INCLUDE_PATH'
10777 `OBJC_INCLUDE_PATH'
10778      Each variable's value is a list of directories separated by a
10779      special character, much like `PATH', in which to look for header
10780      files.  The special character, `PATH_SEPARATOR', is
10781      target-dependent and determined at GCC build time.  For Microsoft
10782      Windows-based targets it is a semicolon, and for almost all other
10783      targets it is a colon.
10785      `CPATH' specifies a list of directories to be searched as if
10786      specified with `-I', but after any paths given with `-I' options
10787      on the command line.  This environment variable is used regardless
10788      of which language is being preprocessed.
10790      The remaining environment variables apply only when preprocessing
10791      the particular language indicated.  Each specifies a list of
10792      directories to be searched as if specified with `-isystem', but
10793      after any paths given with `-isystem' options on the command line.
10795      In all these variables, an empty element instructs the compiler to
10796      search its current working directory.  Empty elements can appear
10797      at the beginning or end of a path.  For instance, if the value of
10798      `CPATH' is `:/special/include', that has the same effect as
10799      `-I. -I/special/include'.
10801 `DEPENDENCIES_OUTPUT'
10802      If this variable is set, its value specifies how to output
10803      dependencies for Make based on the non-system header files
10804      processed by the compiler.  System header files are ignored in the
10805      dependency output.
10807      The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
10808      which case the Make rules are written to that file, guessing the
10809      target name from the source file name.  Or the value can have the
10810      form `FILE TARGET', in which case the rules are written to file
10811      FILE using TARGET as the target name.
10813      In other words, this environment variable is equivalent to
10814      combining the options `-MM' and `-MF' (*note Preprocessor
10815      Options::), with an optional `-MT' switch too.
10817 `SUNPRO_DEPENDENCIES'
10818      This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
10819      except that system header files are not ignored, so it implies
10820      `-M' rather than `-MM'.  However, the dependence on the main input
10821      file is omitted.  *Note Preprocessor Options::.
10823 \x1f
10824 File: gcc.info,  Node: Precompiled Headers,  Next: Running Protoize,  Prev: Environment Variables,  Up: Invoking GCC
10826 Using Precompiled Headers
10827 =========================
10829  Often large projects have many header files that are included in every
10830 source file.  The time the compiler takes to process these header files
10831 over and over again can account for nearly all of the time required to
10832 build the project.  To make builds faster, GCC allows users to
10833 `precompile' a header file; then, if builds can use the precompiled
10834 header file they will be much faster.
10836  *Caution:* There are a few known situations where GCC will crash when
10837 trying to use a precompiled header.  If you have trouble with a
10838 precompiled header, you should remove the precompiled header and
10839 compile without it.  In addition, please use GCC's on-line
10840 defect-tracking system to report any problems you encounter with
10841 precompiled headers.  *Note Bugs::.
10843  To create a precompiled header file, simply compile it as you would any
10844 other file, if necessary using the `-x' option to make the driver treat
10845 it as a C or C++ header file.  You will probably want to use a tool
10846 like `make' to keep the precompiled header up-to-date when the headers
10847 it contains change.
10849  A precompiled header file will be searched for when `#include' is seen
10850 in the compilation.  As it searches for the included file (*note Search
10851 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
10852 each directory just before it looks for the include file in that
10853 directory.  The name searched for is the name specified in the
10854 `#include' with `.gch' appended.  If the precompiled header file can't
10855 be used, it is ignored.
10857  For instance, if you have `#include "all.h"', and you have `all.h.gch'
10858 in the same directory as `all.h', then the precompiled header file will
10859 be used if possible, and the original header will be used otherwise.
10861  Alternatively, you might decide to put the precompiled header file in a
10862 directory and use `-I' to ensure that directory is searched before (or
10863 instead of) the directory containing the original header.  Then, if you
10864 want to check that the precompiled header file is always used, you can
10865 put a file of the same name as the original header in this directory
10866 containing an `#error' command.
10868  This also works with `-include'.  So yet another way to use
10869 precompiled headers, good for projects not designed with precompiled
10870 header files in mind, is to simply take most of the header files used by
10871 a project, include them from another header file, precompile that header
10872 file, and `-include' the precompiled header.  If the header files have
10873 guards against multiple inclusion, they will be skipped because they've
10874 already been included (in the precompiled header).
10876  If you need to precompile the same header file for different
10877 languages, targets, or compiler options, you can instead make a
10878 _directory_ named like `all.h.gch', and put each precompiled header in
10879 the directory.  (It doesn't matter what you call the files in the
10880 directory, every precompiled header in the directory will be
10881 considered.)  The first precompiled header encountered in the directory
10882 that is valid for this compilation will be used; they're searched in no
10883 particular order.
10885  There are many other possibilities, limited only by your imagination,
10886 good sense, and the constraints of your build system.
10888  A precompiled header file can be used only when these conditions apply:
10890    * Only one precompiled header can be used in a particular
10891      compilation.
10893    * A precompiled header can't be used once the first C token is seen.
10894      You can have preprocessor directives before a precompiled header;
10895      you can even include a precompiled header from inside another
10896      header, so long as there are no C tokens before the `#include'.
10898    * The precompiled header file must be produced for the same language
10899      as the current compilation.  You can't use a C precompiled header
10900      for a C++ compilation.
10902    * The precompiled header file must be produced by the same compiler
10903      version and configuration as the current compilation is using.
10904      The easiest way to guarantee this is to use the same compiler
10905      binary for creating and using precompiled headers.
10907    * Any macros defined before the precompiled header (including with
10908      `-D') must either be defined in the same way as when the
10909      precompiled header was generated, or must not affect the
10910      precompiled header, which usually means that the they don't appear
10911      in the precompiled header at all.
10913    * Certain command-line options must be defined in the same way as
10914      when the precompiled header was generated.  At present, it's not
10915      clear which options are safe to change and which are not; the
10916      safest choice is to use exactly the same options when generating
10917      and using the precompiled header.
10919  For all of these but the last, the compiler will automatically ignore
10920 the precompiled header if the conditions aren't met.  For the last item,
10921 some option changes will cause the precompiled header to be rejected,
10922 but not all incompatible option combinations have yet been found.  If
10923 you find a new incompatible combination, please consider filing a bug
10924 report, see *Note Bugs::.
10926 \x1f
10927 File: gcc.info,  Node: Running Protoize,  Prev: Precompiled Headers,  Up: Invoking GCC
10929 Running Protoize
10930 ================
10932  The program `protoize' is an optional part of GCC.  You can use it to
10933 add prototypes to a program, thus converting the program to ISO C in
10934 one respect.  The companion program `unprotoize' does the reverse: it
10935 removes argument types from any prototypes that are found.
10937  When you run these programs, you must specify a set of source files as
10938 command line arguments.  The conversion programs start out by compiling
10939 these files to see what functions they define.  The information gathered
10940 about a file FOO is saved in a file named `FOO.X'.
10942  After scanning comes actual conversion.  The specified files are all
10943 eligible to be converted; any files they include (whether sources or
10944 just headers) are eligible as well.
10946  But not all the eligible files are converted.  By default, `protoize'
10947 and `unprotoize' convert only source and header files in the current
10948 directory.  You can specify additional directories whose files should
10949 be converted with the `-d DIRECTORY' option.  You can also specify
10950 particular files to exclude with the `-x FILE' option.  A file is
10951 converted if it is eligible, its directory name matches one of the
10952 specified directory names, and its name within the directory has not
10953 been excluded.
10955  Basic conversion with `protoize' consists of rewriting most function
10956 definitions and function declarations to specify the types of the
10957 arguments.  The only ones not rewritten are those for varargs functions.
10959  `protoize' optionally inserts prototype declarations at the beginning
10960 of the source file, to make them available for any calls that precede
10961 the function's definition.  Or it can insert prototype declarations
10962 with block scope in the blocks where undeclared functions are called.
10964  Basic conversion with `unprotoize' consists of rewriting most function
10965 declarations to remove any argument types, and rewriting function
10966 definitions to the old-style pre-ISO form.
10968  Both conversion programs print a warning for any function declaration
10969 or definition that they can't convert.  You can suppress these warnings
10970 with `-q'.
10972  The output from `protoize' or `unprotoize' replaces the original
10973 source file.  The original file is renamed to a name ending with
10974 `.save' (for DOS, the saved filename ends in `.sav' without the
10975 original `.c' suffix).  If the `.save' (`.sav' for DOS) file already
10976 exists, then the source file is simply discarded.
10978  `protoize' and `unprotoize' both depend on GCC itself to scan the
10979 program and collect information about the functions it uses.  So
10980 neither of these programs will work until GCC is installed.
10982  Here is a table of the options you can use with `protoize' and
10983 `unprotoize'.  Each option works with both programs unless otherwise
10984 stated.
10986 `-B DIRECTORY'
10987      Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
10988      usual directory (normally `/usr/local/lib').  This file contains
10989      prototype information about standard system functions.  This option
10990      applies only to `protoize'.
10992 `-c COMPILATION-OPTIONS'
10993      Use COMPILATION-OPTIONS as the options when running `gcc' to
10994      produce the `.X' files.  The special option `-aux-info' is always
10995      passed in addition, to tell `gcc' to write a `.X' file.
10997      Note that the compilation options must be given as a single
10998      argument to `protoize' or `unprotoize'.  If you want to specify
10999      several `gcc' options, you must quote the entire set of
11000      compilation options to make them a single word in the shell.
11002      There are certain `gcc' arguments that you cannot use, because they
11003      would produce the wrong kind of output.  These include `-g', `-O',
11004      `-c', `-S', and `-o' If you include these in the
11005      COMPILATION-OPTIONS, they are ignored.
11007 `-C'
11008      Rename files to end in `.C' (`.cc' for DOS-based file systems)
11009      instead of `.c'.  This is convenient if you are converting a C
11010      program to C++.  This option applies only to `protoize'.
11012 `-g'
11013      Add explicit global declarations.  This means inserting explicit
11014      declarations at the beginning of each source file for each function
11015      that is called in the file and was not declared.  These
11016      declarations precede the first function definition that contains a
11017      call to an undeclared function.  This option applies only to
11018      `protoize'.
11020 `-i STRING'
11021      Indent old-style parameter declarations with the string STRING.
11022      This option applies only to `protoize'.
11024      `unprotoize' converts prototyped function definitions to old-style
11025      function definitions, where the arguments are declared between the
11026      argument list and the initial `{'.  By default, `unprotoize' uses
11027      five spaces as the indentation.  If you want to indent with just
11028      one space instead, use `-i " "'.
11030 `-k'
11031      Keep the `.X' files.  Normally, they are deleted after conversion
11032      is finished.
11034 `-l'
11035      Add explicit local declarations.  `protoize' with `-l' inserts a
11036      prototype declaration for each function in each block which calls
11037      the function without any declaration.  This option applies only to
11038      `protoize'.
11040 `-n'
11041      Make no real changes.  This mode just prints information about the
11042      conversions that would have been done without `-n'.
11044 `-N'
11045      Make no `.save' files.  The original files are simply deleted.
11046      Use this option with caution.
11048 `-p PROGRAM'
11049      Use the program PROGRAM as the compiler.  Normally, the name `gcc'
11050      is used.
11052 `-q'
11053      Work quietly.  Most warnings are suppressed.
11055 `-v'
11056      Print the version number, just like `-v' for `gcc'.
11058  If you need special compiler options to compile one of your program's
11059 source files, then you should generate that file's `.X' file specially,
11060 by running `gcc' on that source file with the appropriate options and
11061 the option `-aux-info'.  Then run `protoize' on the entire set of
11062 files.  `protoize' will use the existing `.X' file because it is newer
11063 than the source file.  For example:
11065      gcc -Dfoo=bar file1.c -aux-info file1.X
11066      protoize *.c
11068 You need to include the special files along with the rest in the
11069 `protoize' command, even though their `.X' files already exist, because
11070 otherwise they won't get converted.
11072  *Note Protoize Caveats::, for more information on how to use
11073 `protoize' successfully.
11075 \x1f
11076 File: gcc.info,  Node: C Implementation,  Next: C Extensions,  Prev: Invoking GCC,  Up: Top
11078 C Implementation-defined behavior
11079 *********************************
11081  A conforming implementation of ISO C is required to document its
11082 choice of behavior in each of the areas that are designated
11083 "implementation defined."  The following lists all such areas, along
11084 with the section number from the ISO/IEC 9899:1999 standard.
11086 * Menu:
11088 * Translation implementation::
11089 * Environment implementation::
11090 * Identifiers implementation::
11091 * Characters implementation::
11092 * Integers implementation::
11093 * Floating point implementation::
11094 * Arrays and pointers implementation::
11095 * Hints implementation::
11096 * Structures unions enumerations and bit-fields implementation::
11097 * Qualifiers implementation::
11098 * Preprocessing directives implementation::
11099 * Library functions implementation::
11100 * Architecture implementation::
11101 * Locale-specific behavior implementation::
11103 \x1f
11104 File: gcc.info,  Node: Translation implementation,  Next: Environment implementation,  Up: C Implementation
11106 Translation
11107 ===========
11109    * `How a diagnostic is identified (3.10, 5.1.1.3).'
11111      Diagnostics consist of all the output sent to stderr by GCC.
11113    * `Whether each nonempty sequence of white-space characters other
11114      than new-line is retained or replaced by one space character in
11115      translation phase 3 (5.1.1.2).'
11117 \x1f
11118 File: gcc.info,  Node: Environment implementation,  Next: Identifiers implementation,  Prev: Translation implementation,  Up: C Implementation
11120 Environment
11121 ===========
11123  The behavior of these points are dependent on the implementation of
11124 the C library, and are not defined by GCC itself.
11126 \x1f
11127 File: gcc.info,  Node: Identifiers implementation,  Next: Characters implementation,  Prev: Environment implementation,  Up: C Implementation
11129 Identifiers
11130 ===========
11132    * `Which additional multibyte characters may appear in identifiers
11133      and their correspondence to universal character names (6.4.2).'
11135    * `The number of significant initial characters in an identifier
11136      (5.2.4.1, 6.4.2).'
11138      For internal names, all characters are significant.  For external
11139      names, the number of significant characters are defined by the
11140      linker; for almost all targets, all characters are significant.
11143 \x1f
11144 File: gcc.info,  Node: Characters implementation,  Next: Integers implementation,  Prev: Identifiers implementation,  Up: C Implementation
11146 Characters
11147 ==========
11149    * `The number of bits in a byte (3.6).'
11151    * `The values of the members of the execution character set (5.2.1).'
11153    * `The unique value of the member of the execution character set
11154      produced for each of the standard alphabetic escape sequences
11155      (5.2.2).'
11157    * `The value of a `char' object into which has been stored any
11158      character other than a member of the basic execution character set
11159      (6.2.5).'
11161    * `Which of `signed char' or `unsigned char' has the same range,
11162      representation, and behavior as "plain" `char' (6.2.5, 6.3.1.1).'
11164    * `The mapping of members of the source character set (in character
11165      constants and string literals) to members of the execution
11166      character set (6.4.4.4, 5.1.1.2).'
11168    * `The value of an integer character constant containing more than
11169      one character or containing a character or escape sequence that
11170      does not map to a single-byte execution character (6.4.4.4).'
11172    * `The value of a wide character constant containing more than one
11173      multibyte character, or containing a multibyte character or escape
11174      sequence not represented in the extended execution character set
11175      (6.4.4.4).'
11177    * `The current locale used to convert a wide character constant
11178      consisting of a single multibyte character that maps to a member
11179      of the extended execution character set into a corresponding wide
11180      character code (6.4.4.4).'
11182    * `The current locale used to convert a wide string literal into
11183      corresponding wide character codes (6.4.5).'
11185    * `The value of a string literal containing a multibyte character or
11186      escape sequence not represented in the execution character set
11187      (6.4.5).'
11189 \x1f
11190 File: gcc.info,  Node: Integers implementation,  Next: Floating point implementation,  Prev: Characters implementation,  Up: C Implementation
11192 Integers
11193 ========
11195    * `Any extended integer types that exist in the implementation
11196      (6.2.5).'
11198    * `Whether signed integer types are represented using sign and
11199      magnitude, two's complement, or one's complement, and whether the
11200      extraordinary value is a trap representation or an ordinary value
11201      (6.2.6.2).'
11203      GCC supports only two's complement integer types, and all bit
11204      patterns are ordinary values.
11206    * `The rank of any extended integer type relative to another extended
11207      integer type with the same precision (6.3.1.1).'
11209    * `The result of, or the signal raised by, converting an integer to a
11210      signed integer type when the value cannot be represented in an
11211      object of that type (6.3.1.3).'
11213    * `The results of some bitwise operations on signed integers (6.5).'
11215 \x1f
11216 File: gcc.info,  Node: Floating point implementation,  Next: Arrays and pointers implementation,  Prev: Integers implementation,  Up: C Implementation
11218 Floating point
11219 ==============
11221    * `The accuracy of the floating-point operations and of the library
11222      functions in `<math.h>' and `<complex.h>' that return
11223      floating-point results (5.2.4.2.2).'
11225    * `The rounding behaviors characterized by non-standard values of
11226      `FLT_ROUNDS'  (5.2.4.2.2).'
11228    * `The evaluation methods characterized by non-standard negative
11229      values of `FLT_EVAL_METHOD' (5.2.4.2.2).'
11231    * `The direction of rounding when an integer is converted to a
11232      floating-point number that cannot exactly represent the original
11233      value (6.3.1.4).'
11235    * `The direction of rounding when a floating-point number is
11236      converted to a narrower floating-point number (6.3.1.5).'
11238    * `How the nearest representable value or the larger or smaller
11239      representable value immediately adjacent to the nearest
11240      representable value is chosen for certain floating constants
11241      (6.4.4.2).'
11243    * `Whether and how floating expressions are contracted when not
11244      disallowed by the `FP_CONTRACT' pragma (6.5).'
11246    * `The default state for the `FENV_ACCESS' pragma (7.6.1).'
11248    * `Additional floating-point exceptions, rounding modes,
11249      environments, and classifications, and their macro names (7.6,
11250      7.12).'
11252    * `The default state for the `FP_CONTRACT' pragma (7.12.2).'
11254    * `Whether the "inexact" floating-point exception can be raised when
11255      the rounded result actually does equal the mathematical result in
11256      an IEC 60559 conformant implementation (F.9).'
11258    * `Whether the "underflow" (and "inexact") floating-point exception
11259      can be raised when a result is tiny but not inexact in an IEC
11260      60559 conformant implementation (F.9).'
11263 \x1f
11264 File: gcc.info,  Node: Arrays and pointers implementation,  Next: Hints implementation,  Prev: Floating point implementation,  Up: C Implementation
11266 Arrays and pointers
11267 ===================
11269    * `The result of converting a pointer to an integer or vice versa
11270      (6.3.2.3).'
11272      A cast from pointer to integer discards most-significant bits if
11273      the pointer representation is larger than the integer type,
11274      sign-extends(1) if the pointer representation is smaller than the
11275      integer type, otherwise the bits are unchanged.
11277      A cast from integer to pointer discards most-significant bits if
11278      the pointer representation is smaller than the integer type,
11279      extends according to the signedness of the integer type if the
11280      pointer representation is larger than the integer type, otherwise
11281      the bits are unchanged.
11283      When casting from pointer to integer and back again, the resulting
11284      pointer must reference the same object as the original pointer,
11285      otherwise the behavior is undefined.  That is, one may not use
11286      integer arithmetic to avoid the undefined behavior of pointer
11287      arithmetic as proscribed in 6.5.6/8.
11289    * `The size of the result of subtracting two pointers to elements of
11290      the same array (6.5.6).'
11293  ---------- Footnotes ----------
11295  (1) Future versions of GCC may zero-extend, or use a target-defined
11296 `ptr_extend' pattern.  Do not rely on sign extension.
11298 \x1f
11299 File: gcc.info,  Node: Hints implementation,  Next: Structures unions enumerations and bit-fields implementation,  Prev: Arrays and pointers implementation,  Up: C Implementation
11301 Hints
11302 =====
11304    * `The extent to which suggestions made by using the `register'
11305      storage-class specifier are effective (6.7.1).'
11307      The `register' specifier affects code generation only in these
11308      ways:
11310         * When used as part of the register variable extension, see
11311           *Note Explicit Reg Vars::.
11313         * When `-O0' is in use, the compiler allocates distinct stack
11314           memory for all variables that do not have the `register'
11315           storage-class specifier; if `register' is specified, the
11316           variable may have a shorter lifespan than the code would
11317           indicate and may never be placed in memory.
11319         * On some rare x86 targets, `setjmp' doesn't save the registers
11320           in all circumstances.  In those cases, GCC doesn't allocate
11321           any variables in registers unless they are marked `register'.
11324    * `The extent to which suggestions made by using the inline function
11325      specifier are effective (6.7.4).'
11327      GCC will not inline any functions if the `-fno-inline' option is
11328      used or if `-O0' is used.  Otherwise, GCC may still be unable to
11329      inline a function for many reasons; the `-Winline' option may be
11330      used to determine if a function has not been inlined and why not.
11333 \x1f
11334 File: gcc.info,  Node: Structures unions enumerations and bit-fields implementation,  Next: Qualifiers implementation,  Prev: Hints implementation,  Up: C Implementation
11336 Structures, unions, enumerations, and bit-fields
11337 ================================================
11339    * `Whether a "plain" int bit-field is treated as a `signed int'
11340      bit-field or as an `unsigned int' bit-field (6.7.2, 6.7.2.1).'
11342    * `Allowable bit-field types other than `_Bool', `signed int', and
11343      `unsigned int' (6.7.2.1).'
11345    * `Whether a bit-field can straddle a storage-unit boundary
11346      (6.7.2.1).'
11348    * `The order of allocation of bit-fields within a unit (6.7.2.1).'
11350    * `The alignment of non-bit-field members of structures (6.7.2.1).'
11352    * `The integer type compatible with each enumerated type (6.7.2.2).'
11355 \x1f
11356 File: gcc.info,  Node: Qualifiers implementation,  Next: Preprocessing directives implementation,  Prev: Structures unions enumerations and bit-fields implementation,  Up: C Implementation
11358 Qualifiers
11359 ==========
11361    * `What constitutes an access to an object that has
11362      volatile-qualified type (6.7.3).'
11365 \x1f
11366 File: gcc.info,  Node: Preprocessing directives implementation,  Next: Library functions implementation,  Prev: Qualifiers implementation,  Up: C Implementation
11368 Preprocessing directives
11369 ========================
11371    * `How sequences in both forms of header names are mapped to headers
11372      or external source file names (6.4.7).'
11374    * `Whether the value of a character constant in a constant expression
11375      that controls conditional inclusion matches the value of the same
11376      character constant in the execution character set (6.10.1).'
11378    * `Whether the value of a single-character character constant in a
11379      constant expression that controls conditional inclusion may have a
11380      negative value (6.10.1).'
11382    * `The places that are searched for an included `<>' delimited
11383      header, and how the places are specified or the header is
11384      identified (6.10.2).'
11386    * `How the named source file is searched for in an included `""'
11387      delimited header (6.10.2).'
11389    * `The method by which preprocessing tokens (possibly resulting from
11390      macro expansion) in a `#include' directive are combined into a
11391      header name (6.10.2).'
11393    * `The nesting limit for `#include' processing (6.10.2).'
11395      GCC imposes a limit of 200 nested `#include's.
11397    * `Whether the `#' operator inserts a `\' character before the `\'
11398      character that begins a universal character name in a character
11399      constant or string literal (6.10.3.2).'
11401    * `The behavior on each recognized non-`STDC #pragma' directive
11402      (6.10.6).'
11404    * `The definitions for `__DATE__' and `__TIME__' when respectively,
11405      the date and time of translation are not available (6.10.8).'
11407      If the date and time are not available, `__DATE__' expands to
11408      `"??? ?? ????"' and `__TIME__' expands to `"??:??:??"'.
11411 \x1f
11412 File: gcc.info,  Node: Library functions implementation,  Next: Architecture implementation,  Prev: Preprocessing directives implementation,  Up: C Implementation
11414 Library functions
11415 =================
11417  The behavior of these points are dependent on the implementation of
11418 the C library, and are not defined by GCC itself.
11420 \x1f
11421 File: gcc.info,  Node: Architecture implementation,  Next: Locale-specific behavior implementation,  Prev: Library functions implementation,  Up: C Implementation
11423 Architecture
11424 ============
11426    * `The values or expressions assigned to the macros specified in the
11427      headers `<float.h>', `<limits.h>', and `<stdint.h>' (5.2.4.2,
11428      7.18.2, 7.18.3).'
11430    * `The number, order, and encoding of bytes in any object (when not
11431      explicitly specified in this International Standard) (6.2.6.1).'
11433    * `The value of the result of the sizeof operator (6.5.3.4).'
11436 \x1f
11437 File: gcc.info,  Node: Locale-specific behavior implementation,  Prev: Architecture implementation,  Up: C Implementation
11439 Locale-specific behavior
11440 ========================
11442  The behavior of these points are dependent on the implementation of
11443 the C library, and are not defined by GCC itself.
11445 \x1f
11446 File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: C Implementation,  Up: Top
11448 Extensions to the C Language Family
11449 ***********************************
11451  GNU C provides several language features not found in ISO standard C.
11452 (The `-pedantic' option directs GCC to print a warning message if any
11453 of these features is used.)  To test for the availability of these
11454 features in conditional compilation, check for a predefined macro
11455 `__GNUC__', which is always defined under GCC.
11457  These extensions are available in C and Objective-C.  Most of them are
11458 also available in C++.  *Note Extensions to the C++ Language: C++
11459 Extensions, for extensions that apply _only_ to C++.
11461  Some features that are in ISO C99 but not C89 or C++ are also, as
11462 extensions, accepted by GCC in C89 mode and in C++.
11464 * Menu:
11466 * Statement Exprs::     Putting statements and declarations inside expressions.
11467 * Local Labels::        Labels local to a block.
11468 * Labels as Values::    Getting pointers to labels, and computed gotos.
11469 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
11470 * Constructing Calls::  Dispatching a call to another function.
11471 * Typeof::              `typeof': referring to the type of an expression.
11472 * Lvalues::             Using `?:', `,' and casts in lvalues.
11473 * Conditionals::        Omitting the middle operand of a `?:' expression.
11474 * Long Long::           Double-word integers---`long long int'.
11475 * Complex::             Data types for complex numbers.
11476 * Hex Floats::          Hexadecimal floating-point constants.
11477 * Zero Length::         Zero-length arrays.
11478 * Variable Length::     Arrays whose length is computed at run time.
11479 * Empty Structures::    Structures with no members.
11480 * Variadic Macros::     Macros with a variable number of arguments.
11481 * Escaped Newlines::    Slightly looser rules for escaped newlines.
11482 * Subscripting::        Any array can be subscripted, even if not an lvalue.
11483 * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
11484 * Initializers::        Non-constant initializers.
11485 * Compound Literals::   Compound literals give structures, unions
11486                          or arrays as values.
11487 * Designated Inits::    Labeling elements of initializers.
11488 * Cast to Union::       Casting to union type from any member of the union.
11489 * Case Ranges::         `case 1 ... 9' and such.
11490 * Mixed Declarations::  Mixing declarations and code.
11491 * Function Attributes:: Declaring that functions have no side effects,
11492                          or that they can never return.
11493 * Attribute Syntax::    Formal syntax for attributes.
11494 * Function Prototypes:: Prototype declarations and old-style definitions.
11495 * C++ Comments::        C++ comments are recognized.
11496 * Dollar Signs::        Dollar sign is allowed in identifiers.
11497 * Character Escapes::   `\e' stands for the character <ESC>.
11498 * Variable Attributes:: Specifying attributes of variables.
11499 * Type Attributes::     Specifying attributes of types.
11500 * Alignment::           Inquiring about the alignment of a type or variable.
11501 * Inline::              Defining inline functions (as fast as macros).
11502 * Extended Asm::        Assembler instructions with C expressions as operands.
11503                          (With them you can define ``built-in'' functions.)
11504 * Constraints::         Constraints for asm operands
11505 * Asm Labels::          Specifying the assembler name to use for a C symbol.
11506 * Explicit Reg Vars::   Defining variables residing in specified registers.
11507 * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
11508 * Incomplete Enums::    `enum foo;', with details to follow.
11509 * Function Names::      Printable strings which are the name of the current
11510                          function.
11511 * Return Address::      Getting the return or frame address of a function.
11512 * Vector Extensions::   Using vector instructions through built-in functions.
11513 * Other Builtins::      Other built-in functions.
11514 * Target Builtins::     Built-in functions specific to particular targets.
11515 * Pragmas::             Pragmas accepted by GCC.
11516 * Unnamed Fields::      Unnamed struct/union fields within structs/unions.
11517 * Thread-Local::        Per-thread variables.
11519 \x1f
11520 File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
11522 Statements and Declarations in Expressions
11523 ==========================================
11525  A compound statement enclosed in parentheses may appear as an
11526 expression in GNU C.  This allows you to use loops, switches, and local
11527 variables within an expression.
11529  Recall that a compound statement is a sequence of statements surrounded
11530 by braces; in this construct, parentheses go around the braces.  For
11531 example:
11533      ({ int y = foo (); int z;
11534         if (y > 0) z = y;
11535         else z = - y;
11536         z; })
11538 is a valid (though slightly more complex than necessary) expression for
11539 the absolute value of `foo ()'.
11541  The last thing in the compound statement should be an expression
11542 followed by a semicolon; the value of this subexpression serves as the
11543 value of the entire construct.  (If you use some other kind of statement
11544 last within the braces, the construct has type `void', and thus
11545 effectively no value.)
11547  This feature is especially useful in making macro definitions "safe"
11548 (so that they evaluate each operand exactly once).  For example, the
11549 "maximum" function is commonly defined as a macro in standard C as
11550 follows:
11552      #define max(a,b) ((a) > (b) ? (a) : (b))
11554 But this definition computes either A or B twice, with bad results if
11555 the operand has side effects.  In GNU C, if you know the type of the
11556 operands (here taken as `int'), you can define the macro safely as
11557 follows:
11559      #define maxint(a,b) \
11560        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
11562  Embedded statements are not allowed in constant expressions, such as
11563 the value of an enumeration constant, the width of a bit-field, or the
11564 initial value of a static variable.
11566  If you don't know the type of the operand, you can still do this, but
11567 you must use `typeof' (*note Typeof::).
11569  In G++, the result value of a statement expression undergoes array and
11570 function pointer decay, and is returned by value to the enclosing
11571 expression. For instance, if `A' is a class, then
11573              A a;
11574      
11575              ({a;}).Foo ()
11577 will construct a temporary `A' object to hold the result of the
11578 statement expression, and that will be used to invoke `Foo'.  Therefore
11579 the `this' pointer observed by `Foo' will not be the address of `a'.
11581  Any temporaries created within a statement within a statement
11582 expression will be destroyed at the statement's end.  This makes
11583 statement expressions inside macros slightly different from function
11584 calls.  In the latter case temporaries introduced during argument
11585 evaluation will be destroyed at the end of the statement that includes
11586 the function call.  In the statement expression case they will be
11587 destroyed during the statement expression.  For instance,
11589      #define macro(a)  ({__typeof__(a) b = (a); b + 3; })
11590      template<typename T> T function(T a) { T b = a; return b + 3; }
11591      
11592      void foo ()
11593      {
11594        macro (X ());
11595        function (X ());
11596      }
11598 will have different places where temporaries are destroyed.  For the
11599 `macro' case, the temporary `X' will be destroyed just after the
11600 initialization of `b'.  In the `function' case that temporary will be
11601 destroyed when the function returns.
11603  These considerations mean that it is probably a bad idea to use
11604 statement-expressions of this form in header files that are designed to
11605 work with C++.  (Note that some versions of the GNU C Library contained
11606 header files using statement-expression that lead to precisely this
11607 bug.)
11609 \x1f
11610 File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
11612 Locally Declared Labels
11613 =======================
11615  GCC allows you to declare "local labels" in any nested block scope. A
11616 local label is just like an ordinary label, but you can only reference
11617 it (with a `goto' statement, or by taking its address) within the block
11618 in which it was declared.
11620  A local label declaration looks like this:
11622      __label__ LABEL;
11626      __label__ LABEL1, LABEL2, /* ... */;
11628  Local label declarations must come at the beginning of the block,
11629 before any ordinary declarations or statements.
11631  The label declaration defines the label _name_, but does not define
11632 the label itself.  You must do this in the usual way, with `LABEL:',
11633 within the statements of the statement expression.
11635  The local label feature is useful for complex macros.  If a macro
11636 contains nested loops, a `goto' can be useful for breaking out of them.
11637 However, an ordinary label whose scope is the whole function cannot be
11638 used: if the macro can be expanded several times in one function, the
11639 label will be multiply defined in that function.  A local label avoids
11640 this problem.  For example:
11642      #define SEARCH(value, array, target)              \
11643      do {                                              \
11644        __label__ found;                                \
11645        typeof (target) _SEARCH_target = (target);      \
11646        typeof (*(array)) *_SEARCH_array = (array);     \
11647        int i, j;                                       \
11648        int value;                                      \
11649        for (i = 0; i < max; i++)                       \
11650          for (j = 0; j < max; j++)                     \
11651            if (_SEARCH_array[i][j] == _SEARCH_target)  \
11652              { (value) = i; goto found; }              \
11653        (value) = -1;                                   \
11654       found:;                                          \
11655      } while (0)
11657  This could also be written using a statement-expression:
11659      #define SEARCH(array, target)                     \
11660      ({                                                \
11661        __label__ found;                                \
11662        typeof (target) _SEARCH_target = (target);      \
11663        typeof (*(array)) *_SEARCH_array = (array);     \
11664        int i, j;                                       \
11665        int value;                                      \
11666        for (i = 0; i < max; i++)                       \
11667          for (j = 0; j < max; j++)                     \
11668            if (_SEARCH_array[i][j] == _SEARCH_target)  \
11669              { value = i; goto found; }                \
11670        value = -1;                                     \
11671       found:                                           \
11672        value;                                          \
11673      })
11675  Local label declarations also make the labels they declare visible to
11676 nested functions, if there are any.  *Note Nested Functions::, for
11677 details.
11679 \x1f
11680 File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
11682 Labels as Values
11683 ================
11685  You can get the address of a label defined in the current function (or
11686 a containing function) with the unary operator `&&'.  The value has
11687 type `void *'.  This value is a constant and can be used wherever a
11688 constant of that type is valid.  For example:
11690      void *ptr;
11691      /* ... */
11692      ptr = &&foo;
11694  To use these values, you need to be able to jump to one.  This is done
11695 with the computed goto statement(1), `goto *EXP;'.  For example,
11697      goto *ptr;
11699 Any expression of type `void *' is allowed.
11701  One way of using these constants is in initializing a static array that
11702 will serve as a jump table:
11704      static void *array[] = { &&foo, &&bar, &&hack };
11706  Then you can select a label with indexing, like this:
11708      goto *array[i];
11710 Note that this does not check whether the subscript is in bounds--array
11711 indexing in C never does that.
11713  Such an array of label values serves a purpose much like that of the
11714 `switch' statement.  The `switch' statement is cleaner, so use that
11715 rather than an array unless the problem does not fit a `switch'
11716 statement very well.
11718  Another use of label values is in an interpreter for threaded code.
11719 The labels within the interpreter function can be stored in the
11720 threaded code for super-fast dispatching.
11722  You may not use this mechanism to jump to code in a different function.
11723 If you do that, totally unpredictable things will happen.  The best way
11724 to avoid this is to store the label address only in automatic variables
11725 and never pass it as an argument.
11727  An alternate way to write the above example is
11729      static const int array[] = { &&foo - &&foo, &&bar - &&foo,
11730                                   &&hack - &&foo };
11731      goto *(&&foo + array[i]);
11733 This is more friendly to code living in shared libraries, as it reduces
11734 the number of dynamic relocations that are needed, and by consequence,
11735 allows the data to be read-only.
11737  ---------- Footnotes ----------
11739  (1) The analogous feature in Fortran is called an assigned goto, but
11740 that name seems inappropriate in C, where one can do more than simply
11741 store label addresses in label variables.
11743 \x1f
11744 File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
11746 Nested Functions
11747 ================
11749  A "nested function" is a function defined inside another function.
11750 (Nested functions are not supported for GNU C++.)  The nested function's
11751 name is local to the block where it is defined.  For example, here we
11752 define a nested function named `square', and call it twice:
11754      foo (double a, double b)
11755      {
11756        double square (double z) { return z * z; }
11757      
11758        return square (a) + square (b);
11759      }
11761  The nested function can access all the variables of the containing
11762 function that are visible at the point of its definition.  This is
11763 called "lexical scoping".  For example, here we show a nested function
11764 which uses an inherited variable named `offset':
11766      bar (int *array, int offset, int size)
11767      {
11768        int access (int *array, int index)
11769          { return array[index + offset]; }
11770        int i;
11771        /* ... */
11772        for (i = 0; i < size; i++)
11773          /* ... */ access (array, i) /* ... */
11774      }
11776  Nested function definitions are permitted within functions in the
11777 places where variable definitions are allowed; that is, in any block,
11778 before the first statement in the block.
11780  It is possible to call the nested function from outside the scope of
11781 its name by storing its address or passing the address to another
11782 function:
11784      hack (int *array, int size)
11785      {
11786        void store (int index, int value)
11787          { array[index] = value; }
11788      
11789        intermediate (store, size);
11790      }
11792  Here, the function `intermediate' receives the address of `store' as
11793 an argument.  If `intermediate' calls `store', the arguments given to
11794 `store' are used to store into `array'.  But this technique works only
11795 so long as the containing function (`hack', in this example) does not
11796 exit.
11798  If you try to call the nested function through its address after the
11799 containing function has exited, all hell will break loose.  If you try
11800 to call it after a containing scope level has exited, and if it refers
11801 to some of the variables that are no longer in scope, you may be lucky,
11802 but it's not wise to take the risk.  If, however, the nested function
11803 does not refer to anything that has gone out of scope, you should be
11804 safe.
11806  GCC implements taking the address of a nested function using a
11807 technique called "trampolines".  A paper describing them is available as
11809 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
11811  A nested function can jump to a label inherited from a containing
11812 function, provided the label was explicitly declared in the containing
11813 function (*note Local Labels::).  Such a jump returns instantly to the
11814 containing function, exiting the nested function which did the `goto'
11815 and any intermediate functions as well.  Here is an example:
11817      bar (int *array, int offset, int size)
11818      {
11819        __label__ failure;
11820        int access (int *array, int index)
11821          {
11822            if (index > size)
11823              goto failure;
11824            return array[index + offset];
11825          }
11826        int i;
11827        /* ... */
11828        for (i = 0; i < size; i++)
11829          /* ... */ access (array, i) /* ... */
11830        /* ... */
11831        return 0;
11832      
11833       /* Control comes here from `access'
11834          if it detects an error.  */
11835       failure:
11836        return -1;
11837      }
11839  A nested function always has internal linkage.  Declaring one with
11840 `extern' is erroneous.  If you need to declare the nested function
11841 before its definition, use `auto' (which is otherwise meaningless for
11842 function declarations).
11844      bar (int *array, int offset, int size)
11845      {
11846        __label__ failure;
11847        auto int access (int *, int);
11848        /* ... */
11849        int access (int *array, int index)
11850          {
11851            if (index > size)
11852              goto failure;
11853            return array[index + offset];
11854          }
11855        /* ... */
11856      }
11858 \x1f
11859 File: gcc.info,  Node: Constructing Calls,  Next: Typeof,  Prev: Nested Functions,  Up: C Extensions
11861 Constructing Function Calls
11862 ===========================
11864  Using the built-in functions described below, you can record the
11865 arguments a function received, and call another function with the same
11866 arguments, without knowing the number or types of the arguments.
11868  You can also record the return value of that function call, and later
11869 return that value, without knowing what data type the function tried to
11870 return (as long as your caller expects that data type).
11872  However, these built-in functions may interact badly with some
11873 sophisticated features or other extensions of the language.  It is,
11874 therefore, not recommended to use them outside very simple functions
11875 acting as mere forwarders for their arguments.
11877  - Built-in Function: void * __builtin_apply_args ()
11878      This built-in function returns a pointer to data describing how to
11879      perform a call with the same arguments as were passed to the
11880      current function.
11882      The function saves the arg pointer register, structure value
11883      address, and all registers that might be used to pass arguments to
11884      a function into a block of memory allocated on the stack.  Then it
11885      returns the address of that block.
11887  - Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
11888           *ARGUMENTS, size_t SIZE)
11889      This built-in function invokes FUNCTION with a copy of the
11890      parameters described by ARGUMENTS and SIZE.
11892      The value of ARGUMENTS should be the value returned by
11893      `__builtin_apply_args'.  The argument SIZE specifies the size of
11894      the stack argument data, in bytes.
11896      This function returns a pointer to data describing how to return
11897      whatever value was returned by FUNCTION.  The data is saved in a
11898      block of memory allocated on the stack.
11900      It is not always simple to compute the proper value for SIZE.  The
11901      value is used by `__builtin_apply' to compute the amount of data
11902      that should be pushed on the stack and copied from the incoming
11903      argument area.
11905  - Built-in Function: void __builtin_return (void *RESULT)
11906      This built-in function returns the value described by RESULT from
11907      the containing function.  You should specify, for RESULT, a value
11908      returned by `__builtin_apply'.
11910 \x1f
11911 File: gcc.info,  Node: Typeof,  Next: Lvalues,  Prev: Constructing Calls,  Up: C Extensions
11913 Referring to a Type with `typeof'
11914 =================================
11916  Another way to refer to the type of an expression is with `typeof'.
11917 The syntax of using of this keyword looks like `sizeof', but the
11918 construct acts semantically like a type name defined with `typedef'.
11920  There are two ways of writing the argument to `typeof': with an
11921 expression or with a type.  Here is an example with an expression:
11923      typeof (x[0](1))
11925 This assumes that `x' is an array of pointers to functions; the type
11926 described is that of the values of the functions.
11928  Here is an example with a typename as the argument:
11930      typeof (int *)
11932 Here the type described is that of pointers to `int'.
11934  If you are writing a header file that must work when included in ISO C
11935 programs, write `__typeof__' instead of `typeof'.  *Note Alternate
11936 Keywords::.
11938  A `typeof'-construct can be used anywhere a typedef name could be
11939 used.  For example, you can use it in a declaration, in a cast, or
11940 inside of `sizeof' or `typeof'.
11942  `typeof' is often useful in conjunction with the
11943 statements-within-expressions feature.  Here is how the two together can
11944 be used to define a safe "maximum" macro that operates on any
11945 arithmetic type and evaluates each of its arguments exactly once:
11947      #define max(a,b) \
11948        ({ typeof (a) _a = (a); \
11949            typeof (b) _b = (b); \
11950          _a > _b ? _a : _b; })
11952  The reason for using names that start with underscores for the local
11953 variables is to avoid conflicts with variable names that occur within
11954 the expressions that are substituted for `a' and `b'.  Eventually we
11955 hope to design a new form of declaration syntax that allows you to
11956 declare variables whose scopes start only after their initializers;
11957 this will be a more reliable way to prevent such conflicts.
11959 Some more examples of the use of `typeof':
11961    * This declares `y' with the type of what `x' points to.
11963           typeof (*x) y;
11965    * This declares `y' as an array of such values.
11967           typeof (*x) y[4];
11969    * This declares `y' as an array of pointers to characters:
11971           typeof (typeof (char *)[4]) y;
11973      It is equivalent to the following traditional C declaration:
11975           char *y[4];
11977      To see the meaning of the declaration using `typeof', and why it
11978      might be a useful way to write, rewrite it with these macros:
11980           #define pointer(T)  typeof(T *)
11981           #define array(T, N) typeof(T [N])
11983      Now the declaration can be rewritten this way:
11985           array (pointer (char), 4) y;
11987      Thus, `array (pointer (char), 4)' is the type of arrays of 4
11988      pointers to `char'.
11990  _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
11991 limited extension which permitted one to write
11993      typedef T = EXPR;
11995 with the effect of declaring T to have the type of the expression EXPR.
11996 This extension does not work with GCC 3 (versions between 3.0 and 3.2
11997 will crash; 3.2.1 and later give an error).  Code which relies on it
11998 should be rewritten to use `typeof':
12000      typedef typeof(EXPR) T;
12002 This will work with all versions of GCC.
12004 \x1f
12005 File: gcc.info,  Node: Lvalues,  Next: Conditionals,  Prev: Typeof,  Up: C Extensions
12007 Generalized Lvalues
12008 ===================
12010  Compound expressions, conditional expressions and casts are allowed as
12011 lvalues provided their operands are lvalues.  This means that you can
12012 take their addresses or store values into them.  All these extensions
12013 are deprecated.
12015  Standard C++ allows compound expressions and conditional expressions
12016 as lvalues, and permits casts to reference type, so use of this
12017 extension is not supported for C++ code.
12019  For example, a compound expression can be assigned, provided the last
12020 expression in the sequence is an lvalue.  These two expressions are
12021 equivalent:
12023      (a, b) += 5
12024      a, (b += 5)
12026  Similarly, the address of the compound expression can be taken.  These
12027 two expressions are equivalent:
12029      &(a, b)
12030      a, &b
12032  A conditional expression is a valid lvalue if its type is not void and
12033 the true and false branches are both valid lvalues.  For example, these
12034 two expressions are equivalent:
12036      (a ? b : c) = 5
12037      (a ? b = 5 : (c = 5))
12039  A cast is a valid lvalue if its operand is an lvalue.  This extension
12040 is deprecated.  A simple assignment whose left-hand side is a cast
12041 works by converting the right-hand side first to the specified type,
12042 then to the type of the inner left-hand side expression.  After this is
12043 stored, the value is converted back to the specified type to become the
12044 value of the assignment.  Thus, if `a' has type `char *', the following
12045 two expressions are equivalent:
12047      (int)a = 5
12048      (int)(a = (char *)(int)5)
12050  An assignment-with-arithmetic operation such as `+=' applied to a cast
12051 performs the arithmetic using the type resulting from the cast, and then
12052 continues as in the previous case.  Therefore, these two expressions are
12053 equivalent:
12055      (int)a += 5
12056      (int)(a = (char *)(int) ((int)a + 5))
12058  You cannot take the address of an lvalue cast, because the use of its
12059 address would not work out coherently.  Suppose that `&(int)f' were
12060 permitted, where `f' has type `float'.  Then the following statement
12061 would try to store an integer bit-pattern where a floating point number
12062 belongs:
12064      *&(int)f = 1;
12066  This is quite different from what `(int)f = 1' would do--that would
12067 convert 1 to floating point and store it.  Rather than cause this
12068 inconsistency, we think it is better to prohibit use of `&' on a cast.
12070  If you really do want an `int *' pointer with the address of `f', you
12071 can simply write `(int *)&f'.
12073 \x1f
12074 File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Lvalues,  Up: C Extensions
12076 Conditionals with Omitted Operands
12077 ==================================
12079  The middle operand in a conditional expression may be omitted.  Then
12080 if the first operand is nonzero, its value is the value of the
12081 conditional expression.
12083  Therefore, the expression
12085      x ? : y
12087 has the value of `x' if that is nonzero; otherwise, the value of `y'.
12089  This example is perfectly equivalent to
12091      x ? x : y
12093 In this simple case, the ability to omit the middle operand is not
12094 especially useful.  When it becomes useful is when the first operand
12095 does, or may (if it is a macro argument), contain a side effect.  Then
12096 repeating the operand in the middle would perform the side effect
12097 twice.  Omitting the middle operand uses the value already computed
12098 without the undesirable effects of recomputing it.
12100 \x1f
12101 File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
12103 Double-Word Integers
12104 ====================
12106  ISO C99 supports data types for integers that are at least 64 bits
12107 wide, and as an extension GCC supports them in C89 mode and in C++.
12108 Simply write `long long int' for a signed integer, or `unsigned long
12109 long int' for an unsigned integer.  To make an integer constant of type
12110 `long long int', add the suffix `LL' to the integer.  To make an
12111 integer constant of type `unsigned long long int', add the suffix `ULL'
12112 to the integer.
12114  You can use these types in arithmetic like any other integer types.
12115 Addition, subtraction, and bitwise boolean operations on these types
12116 are open-coded on all types of machines.  Multiplication is open-coded
12117 if the machine supports fullword-to-doubleword a widening multiply
12118 instruction.  Division and shifts are open-coded only on machines that
12119 provide special support.  The operations that are not open-coded use
12120 special library routines that come with GCC.
12122  There may be pitfalls when you use `long long' types for function
12123 arguments, unless you declare function prototypes.  If a function
12124 expects type `int' for its argument, and you pass a value of type `long
12125 long int', confusion will result because the caller and the subroutine
12126 will disagree about the number of bytes for the argument.  Likewise, if
12127 the function expects `long long int' and you pass `int'.  The best way
12128 to avoid such problems is to use prototypes.
12130 \x1f
12131 File: gcc.info,  Node: Complex,  Next: Hex Floats,  Prev: Long Long,  Up: C Extensions
12133 Complex Numbers
12134 ===============
12136  ISO C99 supports complex floating data types, and as an extension GCC
12137 supports them in C89 mode and in C++, and supports complex integer data
12138 types which are not part of ISO C99.  You can declare complex types
12139 using the keyword `_Complex'.  As an extension, the older GNU keyword
12140 `__complex__' is also supported.
12142  For example, `_Complex double x;' declares `x' as a variable whose
12143 real part and imaginary part are both of type `double'.  `_Complex
12144 short int y;' declares `y' to have real and imaginary parts of type
12145 `short int'; this is not likely to be useful, but it shows that the set
12146 of complex types is complete.
12148  To write a constant with a complex data type, use the suffix `i' or
12149 `j' (either one; they are equivalent).  For example, `2.5fi' has type
12150 `_Complex float' and `3i' has type `_Complex int'.  Such a constant
12151 always has a pure imaginary value, but you can form any complex value
12152 you like by adding one to a real constant.  This is a GNU extension; if
12153 you have an ISO C99 conforming C library (such as GNU libc), and want
12154 to construct complex constants of floating type, you should include
12155 `<complex.h>' and use the macros `I' or `_Complex_I' instead.
12157  To extract the real part of a complex-valued expression EXP, write
12158 `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary
12159 part.  This is a GNU extension; for values of floating type, you should
12160 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
12161 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
12162 built-in functions by GCC.
12164  The operator `~' performs complex conjugation when used on a value
12165 with a complex type.  This is a GNU extension; for values of floating
12166 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
12167 declared in `<complex.h>' and also provided as built-in functions by
12168 GCC.
12170  GCC can allocate complex automatic variables in a noncontiguous
12171 fashion; it's even possible for the real part to be in a register while
12172 the imaginary part is on the stack (or vice-versa).  Only the DWARF2
12173 debug info format can represent this, so use of DWARF2 is recommended.
12174 If you are using the stabs debug info format, GCC describes a
12175 noncontiguous complex variable as if it were two separate variables of
12176 noncomplex type.  If the variable's actual name is `foo', the two
12177 fictitious variables are named `foo$real' and `foo$imag'.  You can
12178 examine and set these two fictitious variables with your debugger.
12180 \x1f
12181 File: gcc.info,  Node: Hex Floats,  Next: Zero Length,  Prev: Complex,  Up: C Extensions
12183 Hex Floats
12184 ==========
12186  ISO C99 supports floating-point numbers written not only in the usual
12187 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
12188 written in hexadecimal format.  As a GNU extension, GCC supports this
12189 in C89 mode (except in some cases when strictly conforming) and in C++.
12190 In that format the `0x' hex introducer and the `p' or `P' exponent
12191 field are mandatory.  The exponent is a decimal number that indicates
12192 the power of 2 by which the significant part will be multiplied.  Thus
12193 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
12194 is the same as `1.55e1'.
12196  Unlike for floating-point numbers in the decimal notation the exponent
12197 is always required in the hexadecimal notation.  Otherwise the compiler
12198 would not be able to resolve the ambiguity of, e.g., `0x1.f'.  This
12199 could mean `1.0f' or `1.9375' since `f' is also the extension for
12200 floating-point constants of type `float'.
12202 \x1f
12203 File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Hex Floats,  Up: C Extensions
12205 Arrays of Length Zero
12206 =====================
12208  Zero-length arrays are allowed in GNU C.  They are very useful as the
12209 last element of a structure which is really a header for a
12210 variable-length object:
12212      struct line {
12213        int length;
12214        char contents[0];
12215      };
12216      
12217      struct line *thisline = (struct line *)
12218        malloc (sizeof (struct line) + this_length);
12219      thisline->length = this_length;
12221  In ISO C90, you would have to give `contents' a length of 1, which
12222 means either you waste space or complicate the argument to `malloc'.
12224  In ISO C99, you would use a "flexible array member", which is slightly
12225 different in syntax and semantics:
12227    * Flexible array members are written as `contents[]' without the `0'.
12229    * Flexible array members have incomplete type, and so the `sizeof'
12230      operator may not be applied.  As a quirk of the original
12231      implementation of zero-length arrays, `sizeof' evaluates to zero.
12233    * Flexible array members may only appear as the last member of a
12234      `struct' that is otherwise non-empty.
12236    * A structure containing a flexible array member, or a union
12237      containing such a structure (possibly recursively), may not be a
12238      member of a structure or an element of an array.  (However, these
12239      uses are permitted by GCC as extensions.)
12241  GCC versions before 3.0 allowed zero-length arrays to be statically
12242 initialized, as if they were flexible arrays.  In addition to those
12243 cases that were useful, it also allowed initializations in situations
12244 that would corrupt later data.  Non-empty initialization of zero-length
12245 arrays is now treated like any case where there are more initializer
12246 elements than the array holds, in that a suitable warning about "excess
12247 elements in array" is given, and the excess elements (all of them, in
12248 this case) are ignored.
12250  Instead GCC allows static initialization of flexible array members.
12251 This is equivalent to defining a new structure containing the original
12252 structure followed by an array of sufficient size to contain the data.
12253 I.e. in the following, `f1' is constructed as if it were declared like
12254 `f2'.
12256      struct f1 {
12257        int x; int y[];
12258      } f1 = { 1, { 2, 3, 4 } };
12259      
12260      struct f2 {
12261        struct f1 f1; int data[3];
12262      } f2 = { { 1 }, { 2, 3, 4 } };
12264 The convenience of this extension is that `f1' has the desired type,
12265 eliminating the need to consistently refer to `f2.f1'.
12267  This has symmetry with normal static arrays, in that an array of
12268 unknown size is also written with `[]'.
12270  Of course, this extension only makes sense if the extra data comes at
12271 the end of a top-level object, as otherwise we would be overwriting
12272 data at subsequent offsets.  To avoid undue complication and confusion
12273 with initialization of deeply nested arrays, we simply disallow any
12274 non-empty initialization except when the structure is the top-level
12275 object.  For example:
12277      struct foo { int x; int y[]; };
12278      struct bar { struct foo z; };
12279      
12280      struct foo a = { 1, { 2, 3, 4 } };        // Valid.
12281      struct bar b = { { 1, { 2, 3, 4 } } };    // Invalid.
12282      struct bar c = { { 1, { } } };            // Valid.
12283      struct foo d[1] = { { 1 { 2, 3, 4 } } };  // Invalid.
12285 \x1f
12286 File: gcc.info,  Node: Empty Structures,  Next: Variadic Macros,  Prev: Variable Length,  Up: C Extensions
12288 Structures With No Members
12289 ==========================
12291  GCC permits a C structure to have no members:
12293      struct empty {
12294      };
12296  The structure will have size zero.  In C++, empty structures are part
12297 of the language.  G++ treats empty structures as if they had a single
12298 member of type `char'.
12300 \x1f
12301 File: gcc.info,  Node: Variable Length,  Next: Empty Structures,  Prev: Zero Length,  Up: C Extensions
12303 Arrays of Variable Length
12304 =========================
12306  Variable-length automatic arrays are allowed in ISO C99, and as an
12307 extension GCC accepts them in C89 mode and in C++.  (However, GCC's
12308 implementation of variable-length arrays does not yet conform in detail
12309 to the ISO C99 standard.)  These arrays are declared like any other
12310 automatic arrays, but with a length that is not a constant expression.
12311 The storage is allocated at the point of declaration and deallocated
12312 when the brace-level is exited.  For example:
12314      FILE *
12315      concat_fopen (char *s1, char *s2, char *mode)
12316      {
12317        char str[strlen (s1) + strlen (s2) + 1];
12318        strcpy (str, s1);
12319        strcat (str, s2);
12320        return fopen (str, mode);
12321      }
12323  Jumping or breaking out of the scope of the array name deallocates the
12324 storage.  Jumping into the scope is not allowed; you get an error
12325 message for it.
12327  You can use the function `alloca' to get an effect much like
12328 variable-length arrays.  The function `alloca' is available in many
12329 other C implementations (but not in all).  On the other hand,
12330 variable-length arrays are more elegant.
12332  There are other differences between these two methods.  Space allocated
12333 with `alloca' exists until the containing _function_ returns.  The
12334 space for a variable-length array is deallocated as soon as the array
12335 name's scope ends.  (If you use both variable-length arrays and
12336 `alloca' in the same function, deallocation of a variable-length array
12337 will also deallocate anything more recently allocated with `alloca'.)
12339  You can also use variable-length arrays as arguments to functions:
12341      struct entry
12342      tester (int len, char data[len][len])
12343      {
12344        /* ... */
12345      }
12347  The length of an array is computed once when the storage is allocated
12348 and is remembered for the scope of the array in case you access it with
12349 `sizeof'.
12351  If you want to pass the array first and the length afterward, you can
12352 use a forward declaration in the parameter list--another GNU extension.
12354      struct entry
12355      tester (int len; char data[len][len], int len)
12356      {
12357        /* ... */
12358      }
12360  The `int len' before the semicolon is a "parameter forward
12361 declaration", and it serves the purpose of making the name `len' known
12362 when the declaration of `data' is parsed.
12364  You can write any number of such parameter forward declarations in the
12365 parameter list.  They can be separated by commas or semicolons, but the
12366 last one must end with a semicolon, which is followed by the "real"
12367 parameter declarations.  Each forward declaration must match a "real"
12368 declaration in parameter name and data type.  ISO C99 does not support
12369 parameter forward declarations.
12371 \x1f
12372 File: gcc.info,  Node: Variadic Macros,  Next: Escaped Newlines,  Prev: Empty Structures,  Up: C Extensions
12374 Macros with a Variable Number of Arguments.
12375 ===========================================
12377  In the ISO C standard of 1999, a macro can be declared to accept a
12378 variable number of arguments much as a function can.  The syntax for
12379 defining the macro is similar to that of a function.  Here is an
12380 example:
12382      #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
12384  Here `...' is a "variable argument".  In the invocation of such a
12385 macro, it represents the zero or more tokens until the closing
12386 parenthesis that ends the invocation, including any commas.  This set of
12387 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
12388 it appears.  See the CPP manual for more information.
12390  GCC has long supported variadic macros, and used a different syntax
12391 that allowed you to give a name to the variable arguments just like any
12392 other argument.  Here is an example:
12394      #define debug(format, args...) fprintf (stderr, format, args)
12396  This is in all ways equivalent to the ISO C example above, but arguably
12397 more readable and descriptive.
12399  GNU CPP has two further variadic macro extensions, and permits them to
12400 be used with either of the above forms of macro definition.
12402  In standard C, you are not allowed to leave the variable argument out
12403 entirely; but you are allowed to pass an empty argument.  For example,
12404 this invocation is invalid in ISO C, because there is no comma after
12405 the string:
12407      debug ("A message")
12409  GNU CPP permits you to completely omit the variable arguments in this
12410 way.  In the above examples, the compiler would complain, though since
12411 the expansion of the macro still has the extra comma after the format
12412 string.
12414  To help solve this problem, CPP behaves specially for variable
12415 arguments used with the token paste operator, `##'.  If instead you
12416 write
12418      #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
12420  and if the variable arguments are omitted or empty, the `##' operator
12421 causes the preprocessor to remove the comma before it.  If you do
12422 provide some variable arguments in your macro invocation, GNU CPP does
12423 not complain about the paste operation and instead places the variable
12424 arguments after the comma.  Just like any other pasted macro argument,
12425 these arguments are not macro expanded.
12427 \x1f
12428 File: gcc.info,  Node: Escaped Newlines,  Next: Subscripting,  Prev: Variadic Macros,  Up: C Extensions
12430 Slightly Looser Rules for Escaped Newlines
12431 ==========================================
12433  Recently, the preprocessor has relaxed its treatment of escaped
12434 newlines.  Previously, the newline had to immediately follow a
12435 backslash.  The current implementation allows whitespace in the form of
12436 spaces, horizontal and vertical tabs, and form feeds between the
12437 backslash and the subsequent newline.  The preprocessor issues a
12438 warning, but treats it as a valid escaped newline and combines the two
12439 lines to form a single logical line.  This works within comments and
12440 tokens, as well as between tokens.  Comments are _not_ treated as
12441 whitespace for the purposes of this relaxation, since they have not yet
12442 been replaced with spaces.
12444 \x1f
12445 File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Escaped Newlines,  Up: C Extensions
12447 Non-Lvalue Arrays May Have Subscripts
12448 =====================================
12450  In ISO C99, arrays that are not lvalues still decay to pointers, and
12451 may be subscripted, although they may not be modified or used after the
12452 next sequence point and the unary `&' operator may not be applied to
12453 them.  As an extension, GCC allows such arrays to be subscripted in C89
12454 mode, though otherwise they do not decay to pointers outside C99 mode.
12455 For example, this is valid in GNU C though not valid in C89:
12457      struct foo {int a[4];};
12458      
12459      struct foo f();
12460      
12461      bar (int index)
12462      {
12463        return f().a[index];
12464      }
12466 \x1f
12467 File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
12469 Arithmetic on `void'- and Function-Pointers
12470 ===========================================
12472  In GNU C, addition and subtraction operations are supported on
12473 pointers to `void' and on pointers to functions.  This is done by
12474 treating the size of a `void' or of a function as 1.
12476  A consequence of this is that `sizeof' is also allowed on `void' and
12477 on function types, and returns 1.
12479  The option `-Wpointer-arith' requests a warning if these extensions
12480 are used.
12482 \x1f
12483 File: gcc.info,  Node: Initializers,  Next: Compound Literals,  Prev: Pointer Arith,  Up: C Extensions
12485 Non-Constant Initializers
12486 =========================
12488  As in standard C++ and ISO C99, the elements of an aggregate
12489 initializer for an automatic variable are not required to be constant
12490 expressions in GNU C.  Here is an example of an initializer with
12491 run-time varying elements:
12493      foo (float f, float g)
12494      {
12495        float beat_freqs[2] = { f-g, f+g };
12496        /* ... */
12497      }
12499 \x1f
12500 File: gcc.info,  Node: Compound Literals,  Next: Designated Inits,  Prev: Initializers,  Up: C Extensions
12502 Compound Literals
12503 =================
12505  ISO C99 supports compound literals.  A compound literal looks like a
12506 cast containing an initializer.  Its value is an object of the type
12507 specified in the cast, containing the elements specified in the
12508 initializer; it is an lvalue.  As an extension, GCC supports compound
12509 literals in C89 mode and in C++.
12511  Usually, the specified type is a structure.  Assume that `struct foo'
12512 and `structure' are declared as shown:
12514      struct foo {int a; char b[2];} structure;
12516 Here is an example of constructing a `struct foo' with a compound
12517 literal:
12519      structure = ((struct foo) {x + y, 'a', 0});
12521 This is equivalent to writing the following:
12523      {
12524        struct foo temp = {x + y, 'a', 0};
12525        structure = temp;
12526      }
12528  You can also construct an array.  If all the elements of the compound
12529 literal are (made up of) simple constant expressions, suitable for use
12530 in initializers of objects of static storage duration, then the compound
12531 literal can be coerced to a pointer to its first element and used in
12532 such an initializer, as shown here:
12534      char **foo = (char *[]) { "x", "y", "z" };
12536  Compound literals for scalar types and union types are is also
12537 allowed, but then the compound literal is equivalent to a cast.
12539  As a GNU extension, GCC allows initialization of objects with static
12540 storage duration by compound literals (which is not possible in ISO
12541 C99, because the initializer is not a constant).  It is handled as if
12542 the object was initialized only with the bracket enclosed list if
12543 compound literal's and object types match.  The initializer list of the
12544 compound literal must be constant.  If the object being initialized has
12545 array type of unknown size, the size is determined by compound literal
12546 size.
12548      static struct foo x = (struct foo) {1, 'a', 'b'};
12549      static int y[] = (int []) {1, 2, 3};
12550      static int z[] = (int [3]) {1};
12552 The above lines are equivalent to the following:
12553      static struct foo x = {1, 'a', 'b'};
12554      static int y[] = {1, 2, 3};
12555      static int z[] = {1, 0, 0};
12557 \x1f
12558 File: gcc.info,  Node: Designated Inits,  Next: Cast to Union,  Prev: Compound Literals,  Up: C Extensions
12560 Designated Initializers
12561 =======================
12563  Standard C89 requires the elements of an initializer to appear in a
12564 fixed order, the same as the order of the elements in the array or
12565 structure being initialized.
12567  In ISO C99 you can give the elements in any order, specifying the array
12568 indices or structure field names they apply to, and GNU C allows this as
12569 an extension in C89 mode as well.  This extension is not implemented in
12570 GNU C++.
12572  To specify an array index, write `[INDEX] =' before the element value.
12573 For example,
12575      int a[6] = { [4] = 29, [2] = 15 };
12577 is equivalent to
12579      int a[6] = { 0, 0, 15, 0, 29, 0 };
12581 The index values must be constant expressions, even if the array being
12582 initialized is automatic.
12584  An alternative syntax for this which has been obsolete since GCC 2.5
12585 but GCC still accepts is to write `[INDEX]' before the element value,
12586 with no `='.
12588  To initialize a range of elements to the same value, write `[FIRST ...
12589 LAST] = VALUE'.  This is a GNU extension.  For example,
12591      int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
12593 If the value in it has side-effects, the side-effects will happen only
12594 once, not for each initialized field by the range initializer.
12596 Note that the length of the array is the highest value specified plus
12597 one.
12599  In a structure initializer, specify the name of a field to initialize
12600 with `.FIELDNAME =' before the element value.  For example, given the
12601 following structure,
12603      struct point { int x, y; };
12605 the following initialization
12607      struct point p = { .y = yvalue, .x = xvalue };
12609 is equivalent to
12611      struct point p = { xvalue, yvalue };
12613  Another syntax which has the same meaning, obsolete since GCC 2.5, is
12614 `FIELDNAME:', as shown here:
12616      struct point p = { y: yvalue, x: xvalue };
12618  The `[INDEX]' or `.FIELDNAME' is known as a "designator".  You can
12619 also use a designator (or the obsolete colon syntax) when initializing
12620 a union, to specify which element of the union should be used.  For
12621 example,
12623      union foo { int i; double d; };
12624      
12625      union foo f = { .d = 4 };
12627 will convert 4 to a `double' to store it in the union using the second
12628 element.  By contrast, casting 4 to type `union foo' would store it
12629 into the union as the integer `i', since it is an integer.  (*Note Cast
12630 to Union::.)
12632  You can combine this technique of naming elements with ordinary C
12633 initialization of successive elements.  Each initializer element that
12634 does not have a designator applies to the next consecutive element of
12635 the array or structure.  For example,
12637      int a[6] = { [1] = v1, v2, [4] = v4 };
12639 is equivalent to
12641      int a[6] = { 0, v1, v2, 0, v4, 0 };
12643  Labeling the elements of an array initializer is especially useful
12644 when the indices are characters or belong to an `enum' type.  For
12645 example:
12647      int whitespace[256]
12648        = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
12649            ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
12651  You can also write a series of `.FIELDNAME' and `[INDEX]' designators
12652 before an `=' to specify a nested subobject to initialize; the list is
12653 taken relative to the subobject corresponding to the closest
12654 surrounding brace pair.  For example, with the `struct point'
12655 declaration above:
12657      struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
12659 If the same field is initialized multiple times, it will have value from
12660 the last initialization.  If any such overridden initialization has
12661 side-effect, it is unspecified whether the side-effect happens or not.
12662 Currently, GCC will discard them and issue a warning.
12664 \x1f
12665 File: gcc.info,  Node: Case Ranges,  Next: Mixed Declarations,  Prev: Cast to Union,  Up: C Extensions
12667 Case Ranges
12668 ===========
12670  You can specify a range of consecutive values in a single `case' label,
12671 like this:
12673      case LOW ... HIGH:
12675 This has the same effect as the proper number of individual `case'
12676 labels, one for each integer value from LOW to HIGH, inclusive.
12678  This feature is especially useful for ranges of ASCII character codes:
12680      case 'A' ... 'Z':
12682  *Be careful:* Write spaces around the `...', for otherwise it may be
12683 parsed wrong when you use it with integer values.  For example, write
12684 this:
12686      case 1 ... 5:
12688 rather than this:
12690      case 1...5:
12692 \x1f
12693 File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Designated Inits,  Up: C Extensions
12695 Cast to a Union Type
12696 ====================
12698  A cast to union type is similar to other casts, except that the type
12699 specified is a union type.  You can specify the type either with `union
12700 TAG' or with a typedef name.  A cast to union is actually a constructor
12701 though, not a cast, and hence does not yield an lvalue like normal
12702 casts.  (*Note Compound Literals::.)
12704  The types that may be cast to the union type are those of the members
12705 of the union.  Thus, given the following union and variables:
12707      union foo { int i; double d; };
12708      int x;
12709      double y;
12711 both `x' and `y' can be cast to type `union foo'.
12713  Using the cast as the right-hand side of an assignment to a variable of
12714 union type is equivalent to storing in a member of the union:
12716      union foo u;
12717      /* ... */
12718      u = (union foo) x  ==  u.i = x
12719      u = (union foo) y  ==  u.d = y
12721  You can also use the union cast as a function argument:
12723      void hack (union foo);
12724      /* ... */
12725      hack ((union foo) x);
12727 \x1f
12728 File: gcc.info,  Node: Mixed Declarations,  Next: Function Attributes,  Prev: Case Ranges,  Up: C Extensions
12730 Mixed Declarations and Code
12731 ===========================
12733  ISO C99 and ISO C++ allow declarations and code to be freely mixed
12734 within compound statements.  As an extension, GCC also allows this in
12735 C89 mode.  For example, you could do:
12737      int i;
12738      /* ... */
12739      i++;
12740      int j = i + 2;
12742  Each identifier is visible from where it is declared until the end of
12743 the enclosing block.
12745 \x1f
12746 File: gcc.info,  Node: Function Attributes,  Next: Attribute Syntax,  Prev: Mixed Declarations,  Up: C Extensions
12748 Declaring Attributes of Functions
12749 =================================
12751  In GNU C, you declare certain things about functions called in your
12752 program which help the compiler optimize function calls and check your
12753 code more carefully.
12755  The keyword `__attribute__' allows you to specify special attributes
12756 when making a declaration.  This keyword is followed by an attribute
12757 specification inside double parentheses.  The following attributes are
12758 currently defined for functions on all targets: `noreturn', `noinline',
12759 `always_inline', `pure', `const', `nothrow', `format', `format_arg',
12760 `no_instrument_function', `section', `constructor', `destructor',
12761 `used', `unused', `deprecated', `weak', `malloc', `alias',
12762 `warn_unused_result' and `nonnull'.  Several other attributes are
12763 defined for functions on particular target systems.  Other attributes,
12764 including `section' are supported for variables declarations (*note
12765 Variable Attributes::) and for types (*note Type Attributes::).
12767  You may also specify attributes with `__' preceding and following each
12768 keyword.  This allows you to use them in header files without being
12769 concerned about a possible macro of the same name.  For example, you
12770 may use `__noreturn__' instead of `noreturn'.
12772  *Note Attribute Syntax::, for details of the exact syntax for using
12773 attributes.
12775 `noreturn'
12776      A few standard library functions, such as `abort' and `exit',
12777      cannot return.  GCC knows this automatically.  Some programs define
12778      their own functions that never return.  You can declare them
12779      `noreturn' to tell the compiler this fact.  For example,
12781           void fatal () __attribute__ ((noreturn));
12782           
12783           void
12784           fatal (/* ... */)
12785           {
12786             /* ... */ /* Print error message. */ /* ... */
12787             exit (1);
12788           }
12790      The `noreturn' keyword tells the compiler to assume that `fatal'
12791      cannot return.  It can then optimize without regard to what would
12792      happen if `fatal' ever did return.  This makes slightly better
12793      code.  More importantly, it helps avoid spurious warnings of
12794      uninitialized variables.
12796      The `noreturn' keyword does not affect the exceptional path when
12797      that applies: a `noreturn'-marked function may still return to the
12798      caller by throwing an exception.
12800      Do not assume that registers saved by the calling function are
12801      restored before calling the `noreturn' function.
12803      It does not make sense for a `noreturn' function to have a return
12804      type other than `void'.
12806      The attribute `noreturn' is not implemented in GCC versions
12807      earlier than 2.5.  An alternative way to declare that a function
12808      does not return, which works in the current version and in some
12809      older versions, is as follows:
12811           typedef void voidfn ();
12812           
12813           volatile voidfn fatal;
12815 `noinline'
12816      This function attribute prevents a function from being considered
12817      for inlining.
12819 `always_inline'
12820      Generally, functions are not inlined unless optimization is
12821      specified.  For functions declared inline, this attribute inlines
12822      the function even if no optimization level was specified.
12824 `pure'
12825      Many functions have no effects except the return value and their
12826      return value depends only on the parameters and/or global
12827      variables.  Such a function can be subject to common subexpression
12828      elimination and loop optimization just as an arithmetic operator
12829      would be.  These functions should be declared with the attribute
12830      `pure'.  For example,
12832           int square (int) __attribute__ ((pure));
12834      says that the hypothetical function `square' is safe to call fewer
12835      times than the program says.
12837      Some of common examples of pure functions are `strlen' or `memcmp'.
12838      Interesting non-pure functions are functions with infinite loops
12839      or those depending on volatile memory or other system resource,
12840      that may change between two consecutive calls (such as `feof' in a
12841      multithreading environment).
12843      The attribute `pure' is not implemented in GCC versions earlier
12844      than 2.96.
12846 `const'
12847      Many functions do not examine any values except their arguments,
12848      and have no effects except the return value.  Basically this is
12849      just slightly more strict class than the `pure' attribute above,
12850      since function is not allowed to read global memory.
12852      Note that a function that has pointer arguments and examines the
12853      data pointed to must _not_ be declared `const'.  Likewise, a
12854      function that calls a non-`const' function usually must not be
12855      `const'.  It does not make sense for a `const' function to return
12856      `void'.
12858      The attribute `const' is not implemented in GCC versions earlier
12859      than 2.5.  An alternative way to declare that a function has no
12860      side effects, which works in the current version and in some older
12861      versions, is as follows:
12863           typedef int intfn ();
12864           
12865           extern const intfn square;
12867      This approach does not work in GNU C++ from 2.6.0 on, since the
12868      language specifies that the `const' must be attached to the return
12869      value.
12871 `nothrow'
12872      The `nothrow' attribute is used to inform the compiler that a
12873      function cannot throw an exception.  For example, most functions in
12874      the standard C library can be guaranteed not to throw an exception
12875      with the notable exceptions of `qsort' and `bsearch' that take
12876      function pointer arguments.  The `nothrow' attribute is not
12877      implemented in GCC versions earlier than 3.2.
12879 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
12880      The `format' attribute specifies that a function takes `printf',
12881      `scanf', `strftime' or `strfmon' style arguments which should be
12882      type-checked against a format string.  For example, the
12883      declaration:
12885           extern int
12886           my_printf (void *my_object, const char *my_format, ...)
12887                 __attribute__ ((format (printf, 2, 3)));
12889      causes the compiler to check the arguments in calls to `my_printf'
12890      for consistency with the `printf' style format string argument
12891      `my_format'.
12893      The parameter ARCHETYPE determines how the format string is
12894      interpreted, and should be `printf', `scanf', `strftime' or
12895      `strfmon'.  (You can also use `__printf__', `__scanf__',
12896      `__strftime__' or `__strfmon__'.)  The parameter STRING-INDEX
12897      specifies which argument is the format string argument (starting
12898      from 1), while FIRST-TO-CHECK is the number of the first argument
12899      to check against the format string.  For functions where the
12900      arguments are not available to be checked (such as `vprintf'),
12901      specify the third parameter as zero.  In this case the compiler
12902      only checks the format string for consistency.  For `strftime'
12903      formats, the third parameter is required to be zero.  Since
12904      non-static C++ methods have an implicit `this' argument, the
12905      arguments of such methods should be counted from two, not one, when
12906      giving values for STRING-INDEX and FIRST-TO-CHECK.
12908      In the example above, the format string (`my_format') is the second
12909      argument of the function `my_print', and the arguments to check
12910      start with the third argument, so the correct parameters for the
12911      format attribute are 2 and 3.
12913      The `format' attribute allows you to identify your own functions
12914      which take format strings as arguments, so that GCC can check the
12915      calls to these functions for errors.  The compiler always (unless
12916      `-ffreestanding' is used) checks formats for the standard library
12917      functions `printf', `fprintf', `sprintf', `scanf', `fscanf',
12918      `sscanf', `strftime', `vprintf', `vfprintf' and `vsprintf'
12919      whenever such warnings are requested (using `-Wformat'), so there
12920      is no need to modify the header file `stdio.h'.  In C99 mode, the
12921      functions `snprintf', `vsnprintf', `vscanf', `vfscanf' and
12922      `vsscanf' are also checked.  Except in strictly conforming C
12923      standard modes, the X/Open function `strfmon' is also checked as
12924      are `printf_unlocked' and `fprintf_unlocked'.  *Note Options
12925      Controlling C Dialect: C Dialect Options.
12927 `format_arg (STRING-INDEX)'
12928      The `format_arg' attribute specifies that a function takes a format
12929      string for a `printf', `scanf', `strftime' or `strfmon' style
12930      function and modifies it (for example, to translate it into
12931      another language), so the result can be passed to a `printf',
12932      `scanf', `strftime' or `strfmon' style function (with the
12933      remaining arguments to the format function the same as they would
12934      have been for the unmodified string).  For example, the
12935      declaration:
12937           extern char *
12938           my_dgettext (char *my_domain, const char *my_format)
12939                 __attribute__ ((format_arg (2)));
12941      causes the compiler to check the arguments in calls to a `printf',
12942      `scanf', `strftime' or `strfmon' type function, whose format
12943      string argument is a call to the `my_dgettext' function, for
12944      consistency with the format string argument `my_format'.  If the
12945      `format_arg' attribute had not been specified, all the compiler
12946      could tell in such calls to format functions would be that the
12947      format string argument is not constant; this would generate a
12948      warning when `-Wformat-nonliteral' is used, but the calls could
12949      not be checked without the attribute.
12951      The parameter STRING-INDEX specifies which argument is the format
12952      string argument (starting from one).  Since non-static C++ methods
12953      have an implicit `this' argument, the arguments of such methods
12954      should be counted from two.
12956      The `format-arg' attribute allows you to identify your own
12957      functions which modify format strings, so that GCC can check the
12958      calls to `printf', `scanf', `strftime' or `strfmon' type function
12959      whose operands are a call to one of your own function.  The
12960      compiler always treats `gettext', `dgettext', and `dcgettext' in
12961      this manner except when strict ISO C support is requested by
12962      `-ansi' or an appropriate `-std' option, or `-ffreestanding' is
12963      used.  *Note Options Controlling C Dialect: C Dialect Options.
12965 `nonnull (ARG-INDEX, ...)'
12966      The `nonnull' attribute specifies that some function parameters
12967      should be non-null pointers.  For instance, the declaration:
12969           extern void *
12970           my_memcpy (void *dest, const void *src, size_t len)
12971                 __attribute__((nonnull (1, 2)));
12973      causes the compiler to check that, in calls to `my_memcpy',
12974      arguments DEST and SRC are non-null.  If the compiler determines
12975      that a null pointer is passed in an argument slot marked as
12976      non-null, and the `-Wnonnull' option is enabled, a warning is
12977      issued.  The compiler may also choose to make optimizations based
12978      on the knowledge that certain function arguments will not be null.
12980      If no argument index list is given to the `nonnull' attribute, all
12981      pointer arguments are marked as non-null.  To illustrate, the
12982      following declaration is equivalent to the previous example:
12984           extern void *
12985           my_memcpy (void *dest, const void *src, size_t len)
12986                 __attribute__((nonnull));
12988 `no_instrument_function'
12989      If `-finstrument-functions' is given, profiling function calls will
12990      be generated at entry and exit of most user-compiled functions.
12991      Functions with this attribute will not be so instrumented.
12993 `section ("SECTION-NAME")'
12994      Normally, the compiler places the code it generates in the `text'
12995      section.  Sometimes, however, you need additional sections, or you
12996      need certain particular functions to appear in special sections.
12997      The `section' attribute specifies that a function lives in a
12998      particular section.  For example, the declaration:
13000           extern void foobar (void) __attribute__ ((section ("bar")));
13002      puts the function `foobar' in the `bar' section.
13004      Some file formats do not support arbitrary sections so the
13005      `section' attribute is not available on all platforms.  If you
13006      need to map the entire contents of a module to a particular
13007      section, consider using the facilities of the linker instead.
13009 `constructor'
13010 `destructor'
13011      The `constructor' attribute causes the function to be called
13012      automatically before execution enters `main ()'.  Similarly, the
13013      `destructor' attribute causes the function to be called
13014      automatically after `main ()' has completed or `exit ()' has been
13015      called.  Functions with these attributes are useful for
13016      initializing data that will be used implicitly during the
13017      execution of the program.
13019      These attributes are not currently implemented for Objective-C.
13021 `unused'
13022      This attribute, attached to a function, means that the function is
13023      meant to be possibly unused.  GCC will not produce a warning for
13024      this function.
13026 `used'
13027      This attribute, attached to a function, means that code must be
13028      emitted for the function even if it appears that the function is
13029      not referenced.  This is useful, for example, when the function is
13030      referenced only in inline assembly.
13032 `deprecated'
13033      The `deprecated' attribute results in a warning if the function is
13034      used anywhere in the source file.  This is useful when identifying
13035      functions that are expected to be removed in a future version of a
13036      program.  The warning also includes the location of the declaration
13037      of the deprecated function, to enable users to easily find further
13038      information about why the function is deprecated, or what they
13039      should do instead.  Note that the warnings only occurs for uses:
13041           int old_fn () __attribute__ ((deprecated));
13042           int old_fn ();
13043           int (*fn_ptr)() = old_fn;
13045      results in a warning on line 3 but not line 2.
13047      The `deprecated' attribute can also be used for variables and
13048      types (*note Variable Attributes::, *note Type Attributes::.)
13050 `warn_unused_result'
13051      The `warn_unused_result' attribute causes a warning to be emitted
13052      if a caller of the function with this attribute does not use its
13053      return value.  This is useful for functions where not checking the
13054      result is either a security problem or always a bug, such as
13055      `realloc'.
13057           int fn () __attribute__ ((warn_unused_result));
13058           int foo ()
13059           {
13060             if (fn () < 0) return -1;
13061             fn ();
13062             return 0;
13063           }
13065      results in warning on line 5.
13067 `weak'
13068      The `weak' attribute causes the declaration to be emitted as a weak
13069      symbol rather than a global.  This is primarily useful in defining
13070      library functions which can be overridden in user code, though it
13071      can also be used with non-function declarations.  Weak symbols are
13072      supported for ELF targets, and also for a.out targets when using
13073      the GNU assembler and linker.
13075 `malloc'
13076      The `malloc' attribute is used to tell the compiler that a function
13077      may be treated as if any non-`NULL' pointer it returns cannot
13078      alias any other pointer valid when the function returns.  This
13079      will often improve optimization.  Standard functions with this
13080      property include `malloc' and `calloc'.  `realloc'-like functions
13081      have this property as long as the old pointer is never referred to
13082      (including comparing it to the new pointer) after the function
13083      returns a non-`NULL' value.
13085 `alias ("TARGET")'
13086      The `alias' attribute causes the declaration to be emitted as an
13087      alias for another symbol, which must be specified.  For instance,
13089           void __f () { /* Do something. */; }
13090           void f () __attribute__ ((weak, alias ("__f")));
13092      declares `f' to be a weak alias for `__f'.  In C++, the mangled
13093      name for the target must be used.
13095      Not all target machines support this attribute.
13097 `visibility ("VISIBILITY_TYPE")'
13098      The `visibility' attribute on ELF targets causes the declaration
13099      to be emitted with default, hidden, protected or internal
13100      visibility.
13102           void __attribute__ ((visibility ("protected")))
13103           f () { /* Do something. */; }
13104           int i __attribute__ ((visibility ("hidden")));
13106      See the ELF gABI for complete details, but the short story is:
13108     "default"
13109           Default visibility is the normal case for ELF.  This value is
13110           available for the visibility attribute to override other
13111           options that may change the assumed visibility of symbols.
13113     "hidden"
13114           Hidden visibility indicates that the symbol will not be
13115           placed into the dynamic symbol table, so no other "module"
13116           (executable or shared library) can reference it directly.
13118     "protected"
13119           Protected visibility indicates that the symbol will be placed
13120           in the dynamic symbol table, but that references within the
13121           defining module will bind to the local symbol.  That is, the
13122           symbol cannot be overridden by another module.
13124     "internal"
13125           Internal visibility is like hidden visibility, but with
13126           additional processor specific semantics.  Unless otherwise
13127           specified by the psABI, GCC defines internal visibility to
13128           mean that the function is _never_ called from another module.
13129           Note that hidden symbols, while they cannot be referenced
13130           directly by other modules, can be referenced indirectly via
13131           function pointers.  By indicating that a symbol cannot be
13132           called from outside the module, GCC may for instance omit the
13133           load of a PIC register since it is known that the calling
13134           function loaded the correct value.
13136      Not all ELF targets support this attribute.
13138 `regparm (NUMBER)'
13139      On the Intel 386, the `regparm' attribute causes the compiler to
13140      pass up to NUMBER integer arguments in registers EAX, EDX, and ECX
13141      instead of on the stack.  Functions that take a variable number of
13142      arguments will continue to be passed all of their arguments on the
13143      stack.
13145      Beware that on some ELF systems this attribute is unsuitable for
13146      global functions in shared libraries with lazy binding (which is
13147      the default).  Lazy binding will send the first call via resolving
13148      code in the loader, which might assume EAX, EDX and ECX can be
13149      clobbered, as per the standard calling conventions.  Solaris 8 is
13150      affected by this.  GNU systems with GLIBC 2.1 or higher, and
13151      FreeBSD, are believed to be safe since the loaders there save all
13152      registers.  (Lazy binding can be disabled with the linker or the
13153      loader if desired, to avoid the problem.)
13155 `stdcall'
13156      On the Intel 386, the `stdcall' attribute causes the compiler to
13157      assume that the called function will pop off the stack space used
13158      to pass arguments, unless it takes a variable number of arguments.
13160 `fastcall'
13161      On the Intel 386, the `fastcall' attribute causes the compiler to
13162      pass the first two arguments in the registers ECX and EDX.
13163      Subsequent arguments are passed on the stack. The called function
13164      will pop the arguments off the stack. If the number of arguments
13165      is variable all arguments are pushed on the stack.
13167 `cdecl'
13168      On the Intel 386, the `cdecl' attribute causes the compiler to
13169      assume that the calling function will pop off the stack space used
13170      to pass arguments.  This is useful to override the effects of the
13171      `-mrtd' switch.
13173 `longcall/shortcall'
13174      On the RS/6000 and PowerPC, the `longcall' attribute causes the
13175      compiler to always call this function via a pointer, just as it
13176      would if the `-mlongcall' option had been specified.  The
13177      `shortcall' attribute causes the compiler not to do this.  These
13178      attributes override both the `-mlongcall' switch and the `#pragma
13179      longcall' setting.
13181      *Note RS/6000 and PowerPC Options::, for more information on
13182      whether long calls are necessary.
13184 `long_call/short_call'
13185      This attribute specifies how a particular function is called on
13186      ARM.  Both attributes override the `-mlong-calls' (*note ARM
13187      Options::) command line switch and `#pragma long_calls' settings.
13188      The `long_call' attribute causes the compiler to always call the
13189      function by first loading its address into a register and then
13190      using the contents of that register.   The `short_call' attribute
13191      always places the offset to the function from the call site into
13192      the `BL' instruction directly.
13194 `function_vector'
13195      Use this attribute on the H8/300, H8/300H, and H8S to indicate
13196      that the specified function should be called through the function
13197      vector.  Calling a function through the function vector will
13198      reduce code size, however; the function vector has a limited size
13199      (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
13200      and H8S) and shares space with the interrupt vector.
13202      You must use GAS and GLD from GNU binutils version 2.7 or later for
13203      this attribute to work correctly.
13205 `interrupt'
13206      Use this attribute on the ARM, AVR, C4x, M32R/D and Xstormy16
13207      ports to indicate that the specified function is an interrupt
13208      handler.  The compiler will generate function entry and exit
13209      sequences suitable for use in an interrupt handler when this
13210      attribute is present.
13212      Note, interrupt handlers for the m68k, H8/300, H8/300H, H8S, and
13213      SH processors can be specified via the `interrupt_handler'
13214      attribute.
13216      Note, on the AVR, interrupts will be enabled inside the function.
13218      Note, for the ARM, you can specify the kind of interrupt to be
13219      handled by adding an optional parameter to the interrupt attribute
13220      like this:
13222           void f () __attribute__ ((interrupt ("IRQ")));
13224      Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
13225      and UNDEF.
13227 `interrupt_handler'
13228      Use this attribute on the m68k, H8/300, H8/300H, H8S, and SH to
13229      indicate that the specified function is an interrupt handler.  The
13230      compiler will generate function entry and exit sequences suitable
13231      for use in an interrupt handler when this attribute is present.
13233 `sp_switch'
13234      Use this attribute on the SH to indicate an `interrupt_handler'
13235      function should switch to an alternate stack.  It expects a string
13236      argument that names a global variable holding the address of the
13237      alternate stack.
13239           void *alt_stack;
13240           void f () __attribute__ ((interrupt_handler,
13241                                     sp_switch ("alt_stack")));
13243 `trap_exit'
13244      Use this attribute on the SH for an `interrupt_handler' to return
13245      using `trapa' instead of `rte'.  This attribute expects an integer
13246      argument specifying the trap number to be used.
13248 `eightbit_data'
13249      Use this attribute on the H8/300, H8/300H, and H8S to indicate
13250      that the specified variable should be placed into the eight bit
13251      data section.  The compiler will generate more efficient code for
13252      certain operations on data in the eight bit data area.  Note the
13253      eight bit data area is limited to 256 bytes of data.
13255      You must use GAS and GLD from GNU binutils version 2.7 or later for
13256      this attribute to work correctly.
13258 `tiny_data'
13259      Use this attribute on the H8/300H and H8S to indicate that the
13260      specified variable should be placed into the tiny data section.
13261      The compiler will generate more efficient code for loads and stores
13262      on data in the tiny data section.  Note the tiny data area is
13263      limited to slightly under 32kbytes of data.
13265 `saveall'
13266      Use this attribute on the H8/300, H8/300H, and H8S to indicate that
13267      all registers except the stack pointer should be saved in the
13268      prologue regardless of whether they are used or not.
13270 `signal'
13271      Use this attribute on the AVR to indicate that the specified
13272      function is a signal handler.  The compiler will generate function
13273      entry and exit sequences suitable for use in a signal handler when
13274      this attribute is present.  Interrupts will be disabled inside the
13275      function.
13277 `naked'
13278      Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
13279      that the specified function does not need prologue/epilogue
13280      sequences generated by the compiler.  It is up to the programmer
13281      to provide these sequences.
13283 `model (MODEL-NAME)'
13284      On the M32R/D, use this attribute to set the addressability of an
13285      object, and of the code generated for a function.  The identifier
13286      MODEL-NAME is one of `small', `medium', or `large', representing
13287      each of the code models.
13289      Small model objects live in the lower 16MB of memory (so that their
13290      addresses can be loaded with the `ld24' instruction), and are
13291      callable with the `bl' instruction.
13293      Medium model objects may live anywhere in the 32-bit address space
13294      (the compiler will generate `seth/add3' instructions to load their
13295      addresses), and are callable with the `bl' instruction.
13297      Large model objects may live anywhere in the 32-bit address space
13298      (the compiler will generate `seth/add3' instructions to load their
13299      addresses), and may not be reachable with the `bl' instruction
13300      (the compiler will generate the much slower `seth/add3/jl'
13301      instruction sequence).
13303      On IA-64, use this attribute to set the addressability of an
13304      object.  At present, the only supported identifier for MODEL-NAME
13305      is `small', indicating addressability via "small" (22-bit)
13306      addresses (so that their addresses can be loaded with the `addl'
13307      instruction).  Caveat: such addressing is by definition not
13308      position independent and hence this attribute must not be used for
13309      objects defined by shared libraries.
13311 `far'
13312      On 68HC11 and 68HC12 the `far' attribute causes the compiler to
13313      use a calling convention that takes care of switching memory banks
13314      when entering and leaving a function.  This calling convention is
13315      also the default when using the `-mlong-calls' option.
13317      On 68HC12 the compiler will use the `call' and `rtc' instructions
13318      to call and return from a function.
13320      On 68HC11 the compiler will generate a sequence of instructions to
13321      invoke a board-specific routine to switch the memory bank and call
13322      the real function. The board-specific routine simulates a `call'.
13323      At the end of a function, it will jump to a board-specific routine
13324      instead of using `rts'. The board-specific return routine simulates
13325      the `rtc'.
13327 `near'
13328      On 68HC11 and 68HC12 the `near' attribute causes the compiler to
13329      use the normal calling convention based on `jsr' and `rts'.  This
13330      attribute can be used to cancel the effect of the `-mlong-calls'
13331      option.
13333 `dllimport'
13334      On Microsoft Windows targets, the `dllimport' attribute causes the
13335      compiler to reference a function or variable via a global pointer
13336      to a pointer that is set up by the Microsoft Windows dll library.
13337      The pointer name is formed by combining `_imp__' and the function
13338      or variable name. The attribute implies `extern' storage.
13340      Currently, the attribute is ignored for inlined functions. If the
13341      attribute is applied to a symbol _definition_, an error is
13342      reported.  If a symbol previously declared `dllimport' is later
13343      defined, the attribute is ignored in subsequent references, and a
13344      warning is emitted.  The attribute is also overridden by a
13345      subsequent declaration as `dllexport'.
13347      When applied to C++ classes, the attribute marks non-inlined
13348      member functions and static data members as imports.  However, the
13349      attribute is ignored for virtual methods to allow creation of
13350      vtables using thunks.
13352      On cygwin, mingw and arm-pe targets, `__declspec(dllimport)' is
13353      recognized as a synonym for `__attribute__ ((dllimport))' for
13354      compatibility with other Microsoft Windows compilers.
13356      The use of the `dllimport' attribute on functions is not necessary,
13357      but provides a small performance benefit by eliminating a thunk in
13358      the dll. The use of the `dllimport' attribute on imported
13359      variables was required on older versions of GNU ld, but can now be
13360      avoided by passing the `--enable-auto-import' switch to ld. As
13361      with functions, using the attribute for a variable eliminates a
13362      thunk in the dll.
13364      One drawback to using this attribute is that a pointer to a
13365      function or variable marked as dllimport cannot be used as a
13366      constant address. The attribute can be disabled for functions by
13367      setting the `-mnop-fun-dllimport' flag.
13369 `dllexport'
13370      On Microsoft Windows targets the `dllexport' attribute causes the
13371      compiler to provide a global pointer to a pointer in a dll, so
13372      that it can be referenced with the `dllimport' attribute. The
13373      pointer name is formed by combining `_imp__' and the function or
13374      variable name.
13376      Currently, the `dllexport'attribute is ignored for inlined
13377      functions, but export can be forced by using the
13378      `-fkeep-inline-functions' flag. The attribute is also ignored for
13379      undefined symbols.
13381      When applied to C++ classes. the attribute marks defined
13382      non-inlined member functions and static data members as exports.
13383      Static consts initialized in-class are not marked unless they are
13384      also defined out-of-class.
13386      On cygwin, mingw and arm-pe targets, `__declspec(dllexport)' is
13387      recognized as a synonym for `__attribute__ ((dllexport))' for
13388      compatibility with other Microsoft Windows compilers.
13390      Alternative methods for including the symbol in the dll's export
13391      table are to use a .def file with an `EXPORTS' section or, with
13392      GNU ld, using the `--export-all' linker flag.
13394  You can specify multiple attributes in a declaration by separating them
13395 by commas within the double parentheses or by immediately following an
13396 attribute declaration with another attribute declaration.
13398  Some people object to the `__attribute__' feature, suggesting that ISO
13399 C's `#pragma' should be used instead.  At the time `__attribute__' was
13400 designed, there were two reasons for not doing this.
13402   1. It is impossible to generate `#pragma' commands from a macro.
13404   2. There is no telling what the same `#pragma' might mean in another
13405      compiler.
13407  These two reasons applied to almost any application that might have
13408 been proposed for `#pragma'.  It was basically a mistake to use
13409 `#pragma' for _anything_.
13411  The ISO C99 standard includes `_Pragma', which now allows pragmas to
13412 be generated from macros.  In addition, a `#pragma GCC' namespace is
13413 now in use for GCC-specific pragmas.  However, it has been found
13414 convenient to use `__attribute__' to achieve a natural attachment of
13415 attributes to their corresponding declarations, whereas `#pragma GCC'
13416 is of use for constructs that do not naturally form part of the
13417 grammar.  *Note Miscellaneous Preprocessing Directives: (cpp)Other
13418 Directives.
13420 \x1f
13421 File: gcc.info,  Node: Attribute Syntax,  Next: Function Prototypes,  Prev: Function Attributes,  Up: C Extensions
13423 Attribute Syntax
13424 ================
13426  This section describes the syntax with which `__attribute__' may be
13427 used, and the constructs to which attribute specifiers bind, for the C
13428 language.  Some details may vary for C++ and Objective-C.  Because of
13429 infelicities in the grammar for attributes, some forms described here
13430 may not be successfully parsed in all cases.
13432  There are some problems with the semantics of attributes in C++.  For
13433 example, there are no manglings for attributes, although they may affect
13434 code generation, so problems may arise when attributed types are used in
13435 conjunction with templates or overloading.  Similarly, `typeid' does
13436 not distinguish between types with different attributes.  Support for
13437 attributes in C++ may be restricted in future to attributes on
13438 declarations only, but not on nested declarators.
13440  *Note Function Attributes::, for details of the semantics of attributes
13441 applying to functions.  *Note Variable Attributes::, for details of the
13442 semantics of attributes applying to variables.  *Note Type Attributes::,
13443 for details of the semantics of attributes applying to structure, union
13444 and enumerated types.
13446  An "attribute specifier" is of the form `__attribute__
13447 ((ATTRIBUTE-LIST))'.  An "attribute list" is a possibly empty
13448 comma-separated sequence of "attributes", where each attribute is one
13449 of the following:
13451    * Empty.  Empty attributes are ignored.
13453    * A word (which may be an identifier such as `unused', or a reserved
13454      word such as `const').
13456    * A word, followed by, in parentheses, parameters for the attribute.
13457      These parameters take one of the following forms:
13459         * An identifier.  For example, `mode' attributes use this form.
13461         * An identifier followed by a comma and a non-empty
13462           comma-separated list of expressions.  For example, `format'
13463           attributes use this form.
13465         * A possibly empty comma-separated list of expressions.  For
13466           example, `format_arg' attributes use this form with the list
13467           being a single integer constant expression, and `alias'
13468           attributes use this form with the list being a single string
13469           constant.
13471  An "attribute specifier list" is a sequence of one or more attribute
13472 specifiers, not separated by any other tokens.
13474  In GNU C, an attribute specifier list may appear after the colon
13475 following a label, other than a `case' or `default' label.  The only
13476 attribute it makes sense to use after a label is `unused'.  This
13477 feature is intended for code generated by programs which contains labels
13478 that may be unused but which is compiled with `-Wall'.  It would not
13479 normally be appropriate to use in it human-written code, though it
13480 could be useful in cases where the code that jumps to the label is
13481 contained within an `#ifdef' conditional. GNU C++ does not permit such
13482 placement of attribute lists, as it is permissible for a declaration,
13483 which could begin with an attribute list, to be labelled in C++.
13484 Declarations cannot be labelled in C90 or C99, so the ambiguity does
13485 not arise there.
13487  An attribute specifier list may appear as part of a `struct', `union'
13488 or `enum' specifier.  It may go either immediately after the `struct',
13489 `union' or `enum' keyword, or after the closing brace.  It is ignored
13490 if the content of the structure, union or enumerated type is not
13491 defined in the specifier in which the attribute specifier list is
13492 used--that is, in usages such as `struct __attribute__((foo)) bar' with
13493 no following opening brace.  Where attribute specifiers follow the
13494 closing brace, they are considered to relate to the structure, union or
13495 enumerated type defined, not to any enclosing declaration the type
13496 specifier appears in, and the type defined is not complete until after
13497 the attribute specifiers.
13499  Otherwise, an attribute specifier appears as part of a declaration,
13500 counting declarations of unnamed parameters and type names, and relates
13501 to that declaration (which may be nested in another declaration, for
13502 example in the case of a parameter declaration), or to a particular
13503 declarator within a declaration.  Where an attribute specifier is
13504 applied to a parameter declared as a function or an array, it should
13505 apply to the function or array rather than the pointer to which the
13506 parameter is implicitly converted, but this is not yet correctly
13507 implemented.
13509  Any list of specifiers and qualifiers at the start of a declaration may
13510 contain attribute specifiers, whether or not such a list may in that
13511 context contain storage class specifiers.  (Some attributes, however,
13512 are essentially in the nature of storage class specifiers, and only make
13513 sense where storage class specifiers may be used; for example,
13514 `section'.)  There is one necessary limitation to this syntax: the
13515 first old-style parameter declaration in a function definition cannot
13516 begin with an attribute specifier, because such an attribute applies to
13517 the function instead by syntax described below (which, however, is not
13518 yet implemented in this case).  In some other cases, attribute
13519 specifiers are permitted by this grammar but not yet supported by the
13520 compiler.  All attribute specifiers in this place relate to the
13521 declaration as a whole.  In the obsolescent usage where a type of `int'
13522 is implied by the absence of type specifiers, such a list of specifiers
13523 and qualifiers may be an attribute specifier list with no other
13524 specifiers or qualifiers.
13526  An attribute specifier list may appear immediately before a declarator
13527 (other than the first) in a comma-separated list of declarators in a
13528 declaration of more than one identifier using a single list of
13529 specifiers and qualifiers.  Such attribute specifiers apply only to the
13530 identifier before whose declarator they appear.  For example, in
13532      __attribute__((noreturn)) void d0 (void),
13533          __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
13534           d2 (void)
13536 the `noreturn' attribute applies to all the functions declared; the
13537 `format' attribute only applies to `d1'.
13539  An attribute specifier list may appear immediately before the comma,
13540 `=' or semicolon terminating the declaration of an identifier other
13541 than a function definition.  At present, such attribute specifiers apply
13542 to the declared object or function, but in future they may attach to the
13543 outermost adjacent declarator.  In simple cases there is no difference,
13544 but, for example, in
13546      void (****f)(void) __attribute__((noreturn));
13548 at present the `noreturn' attribute applies to `f', which causes a
13549 warning since `f' is not a function, but in future it may apply to the
13550 function `****f'.  The precise semantics of what attributes in such
13551 cases will apply to are not yet specified.  Where an assembler name for
13552 an object or function is specified (*note Asm Labels::), at present the
13553 attribute must follow the `asm' specification; in future, attributes
13554 before the `asm' specification may apply to the adjacent declarator,
13555 and those after it to the declared object or function.
13557  An attribute specifier list may, in future, be permitted to appear
13558 after the declarator in a function definition (before any old-style
13559 parameter declarations or the function body).
13561  Attribute specifiers may be mixed with type qualifiers appearing inside
13562 the `[]' of a parameter array declarator, in the C99 construct by which
13563 such qualifiers are applied to the pointer to which the array is
13564 implicitly converted.  Such attribute specifiers apply to the pointer,
13565 not to the array, but at present this is not implemented and they are
13566 ignored.
13568  An attribute specifier list may appear at the start of a nested
13569 declarator.  At present, there are some limitations in this usage: the
13570 attributes correctly apply to the declarator, but for most individual
13571 attributes the semantics this implies are not implemented.  When
13572 attribute specifiers follow the `*' of a pointer declarator, they may
13573 be mixed with any type qualifiers present.  The following describes the
13574 formal semantics of this syntax.  It will make the most sense if you
13575 are familiar with the formal specification of declarators in the ISO C
13576 standard.
13578  Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
13579 where `T' contains declaration specifiers that specify a type TYPE
13580 (such as `int') and `D1' is a declarator that contains an identifier
13581 IDENT.  The type specified for IDENT for derived declarators whose type
13582 does not include an attribute specifier is as in the ISO C standard.
13584  If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
13585 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
13586 TYPE" for IDENT, then `T D1' specifies the type
13587 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
13589  If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
13590 D', and the declaration `T D' specifies the type
13591 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
13592 the type "DERIVED-DECLARATOR-TYPE-LIST
13593 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
13595  For example,
13597      void (__attribute__((noreturn)) ****f) (void);
13599 specifies the type "pointer to pointer to pointer to pointer to
13600 non-returning function returning `void'".  As another example,
13602      char *__attribute__((aligned(8))) *f;
13604 specifies the type "pointer to 8-byte-aligned pointer to `char'".  Note
13605 again that this does not work with most attributes; for example, the
13606 usage of `aligned' and `noreturn' attributes given above is not yet
13607 supported.
13609  For compatibility with existing code written for compiler versions that
13610 did not implement attributes on nested declarators, some laxity is
13611 allowed in the placing of attributes.  If an attribute that only applies
13612 to types is applied to a declaration, it will be treated as applying to
13613 the type of that declaration.  If an attribute that only applies to
13614 declarations is applied to the type of a declaration, it will be treated
13615 as applying to that declaration; and, for compatibility with code
13616 placing the attributes immediately before the identifier declared, such
13617 an attribute applied to a function return type will be treated as
13618 applying to the function type, and such an attribute applied to an array
13619 element type will be treated as applying to the array type.  If an
13620 attribute that only applies to function types is applied to a
13621 pointer-to-function type, it will be treated as applying to the pointer
13622 target type; if such an attribute is applied to a function return type
13623 that is not a pointer-to-function type, it will be treated as applying
13624 to the function type.
13626 \x1f
13627 File: gcc.info,  Node: Function Prototypes,  Next: C++ Comments,  Prev: Attribute Syntax,  Up: C Extensions
13629 Prototypes and Old-Style Function Definitions
13630 =============================================
13632  GNU C extends ISO C to allow a function prototype to override a later
13633 old-style non-prototype definition.  Consider the following example:
13635      /* Use prototypes unless the compiler is old-fashioned.  */
13636      #ifdef __STDC__
13637      #define P(x) x
13638      #else
13639      #define P(x) ()
13640      #endif
13641      
13642      /* Prototype function declaration.  */
13643      int isroot P((uid_t));
13644      
13645      /* Old-style function definition.  */
13646      int
13647      isroot (x)   /* ??? lossage here ??? */
13648           uid_t x;
13649      {
13650        return x == 0;
13651      }
13653  Suppose the type `uid_t' happens to be `short'.  ISO C does not allow
13654 this example, because subword arguments in old-style non-prototype
13655 definitions are promoted.  Therefore in this example the function
13656 definition's argument is really an `int', which does not match the
13657 prototype argument type of `short'.
13659  This restriction of ISO C makes it hard to write code that is portable
13660 to traditional C compilers, because the programmer does not know
13661 whether the `uid_t' type is `short', `int', or `long'.  Therefore, in
13662 cases like these GNU C allows a prototype to override a later old-style
13663 definition.  More precisely, in GNU C, a function prototype argument
13664 type overrides the argument type specified by a later old-style
13665 definition if the former type is the same as the latter type before
13666 promotion.  Thus in GNU C the above example is equivalent to the
13667 following:
13669      int isroot (uid_t);
13670      
13671      int
13672      isroot (uid_t x)
13673      {
13674        return x == 0;
13675      }
13677 GNU C++ does not support old-style function definitions, so this
13678 extension is irrelevant.
13680 \x1f
13681 File: gcc.info,  Node: C++ Comments,  Next: Dollar Signs,  Prev: Function Prototypes,  Up: C Extensions
13683 C++ Style Comments
13684 ==================
13686  In GNU C, you may use C++ style comments, which start with `//' and
13687 continue until the end of the line.  Many other C implementations allow
13688 such comments, and they are included in the 1999 C standard.  However,
13689 C++ style comments are not recognized if you specify an `-std' option
13690 specifying a version of ISO C before C99, or `-ansi' (equivalent to
13691 `-std=c89').
13693 \x1f
13694 File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: C++ Comments,  Up: C Extensions
13696 Dollar Signs in Identifier Names
13697 ================================
13699  In GNU C, you may normally use dollar signs in identifier names.  This
13700 is because many traditional C implementations allow such identifiers.
13701 However, dollar signs in identifiers are not supported on a few target
13702 machines, typically because the target assembler does not allow them.
13704 \x1f
13705 File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
13707 The Character <ESC> in Constants
13708 ================================
13710  You can use the sequence `\e' in a string or character constant to
13711 stand for the ASCII character <ESC>.
13713 \x1f
13714 File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Type Attributes,  Up: C Extensions
13716 Inquiring on Alignment of Types or Variables
13717 ============================================
13719  The keyword `__alignof__' allows you to inquire about how an object is
13720 aligned, or the minimum alignment usually required by a type.  Its
13721 syntax is just like `sizeof'.
13723  For example, if the target machine requires a `double' value to be
13724 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
13725 is true on many RISC machines.  On more traditional machine designs,
13726 `__alignof__ (double)' is 4 or even 2.
13728  Some machines never actually require alignment; they allow reference
13729 to any data type even at an odd address.  For these machines,
13730 `__alignof__' reports the _recommended_ alignment of a type.
13732  If the operand of `__alignof__' is an lvalue rather than a type, its
13733 value is the required alignment for its type, taking into account any
13734 minimum alignment specified with GCC's `__attribute__' extension (*note
13735 Variable Attributes::).  For example, after this declaration:
13737      struct foo { int x; char y; } foo1;
13739 the value of `__alignof__ (foo1.y)' is 1, even though its actual
13740 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
13742  It is an error to ask for the alignment of an incomplete type.
13744 \x1f
13745 File: gcc.info,  Node: Variable Attributes,  Next: Type Attributes,  Prev: Character Escapes,  Up: C Extensions
13747 Specifying Attributes of Variables
13748 ==================================
13750  The keyword `__attribute__' allows you to specify special attributes
13751 of variables or structure fields.  This keyword is followed by an
13752 attribute specification inside double parentheses.  Some attributes are
13753 currently defined generically for variables.  Other attributes are
13754 defined for variables on particular target systems.  Other attributes
13755 are available for functions (*note Function Attributes::) and for types
13756 (*note Type Attributes::).  Other front ends might define more
13757 attributes (*note Extensions to the C++ Language: C++ Extensions.).
13759  You may also specify attributes with `__' preceding and following each
13760 keyword.  This allows you to use them in header files without being
13761 concerned about a possible macro of the same name.  For example, you
13762 may use `__aligned__' instead of `aligned'.
13764  *Note Attribute Syntax::, for details of the exact syntax for using
13765 attributes.
13767 `aligned (ALIGNMENT)'
13768      This attribute specifies a minimum alignment for the variable or
13769      structure field, measured in bytes.  For example, the declaration:
13771           int x __attribute__ ((aligned (16))) = 0;
13773      causes the compiler to allocate the global variable `x' on a
13774      16-byte boundary.  On a 68040, this could be used in conjunction
13775      with an `asm' expression to access the `move16' instruction which
13776      requires 16-byte aligned operands.
13778      You can also specify the alignment of structure fields.  For
13779      example, to create a double-word aligned `int' pair, you could
13780      write:
13782           struct foo { int x[2] __attribute__ ((aligned (8))); };
13784      This is an alternative to creating a union with a `double' member
13785      that forces the union to be double-word aligned.
13787      As in the preceding examples, you can explicitly specify the
13788      alignment (in bytes) that you wish the compiler to use for a given
13789      variable or structure field.  Alternatively, you can leave out the
13790      alignment factor and just ask the compiler to align a variable or
13791      field to the maximum useful alignment for the target machine you
13792      are compiling for.  For example, you could write:
13794           short array[3] __attribute__ ((aligned));
13796      Whenever you leave out the alignment factor in an `aligned'
13797      attribute specification, the compiler automatically sets the
13798      alignment for the declared variable or field to the largest
13799      alignment which is ever used for any data type on the target
13800      machine you are compiling for.  Doing this can often make copy
13801      operations more efficient, because the compiler can use whatever
13802      instructions copy the biggest chunks of memory when performing
13803      copies to or from the variables or fields that you have aligned
13804      this way.
13806      The `aligned' attribute can only increase the alignment; but you
13807      can decrease it by specifying `packed' as well.  See below.
13809      Note that the effectiveness of `aligned' attributes may be limited
13810      by inherent limitations in your linker.  On many systems, the
13811      linker is only able to arrange for variables to be aligned up to a
13812      certain maximum alignment.  (For some linkers, the maximum
13813      supported alignment may be very very small.)  If your linker is
13814      only able to align variables up to a maximum of 8 byte alignment,
13815      then specifying `aligned(16)' in an `__attribute__' will still
13816      only provide you with 8 byte alignment.  See your linker
13817      documentation for further information.
13819 `cleanup (CLEANUP_FUNCTION)'
13820      The `cleanup' attribute runs a function when the variable goes out
13821      of scope.  This attribute can only be applied to auto function
13822      scope variables; it may not be applied to parameters or variables
13823      with static storage duration.  The function must take one
13824      parameter, a pointer to a type compatible with the variable.  The
13825      return value of the function (if any) is ignored.
13827      If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
13828      during the stack unwinding that happens during the processing of
13829      the exception.  Note that the `cleanup' attribute does not allow
13830      the exception to be caught, only to perform an action.  It is
13831      undefined what happens if CLEANUP_FUNCTION does not return
13832      normally.
13834 `common'
13835 `nocommon'
13836      The `common' attribute requests GCC to place a variable in
13837      "common" storage.  The `nocommon' attribute requests the opposite
13838      - to allocate space for it directly.
13840      These attributes override the default chosen by the `-fno-common'
13841      and `-fcommon' flags respectively.
13843 `deprecated'
13844      The `deprecated' attribute results in a warning if the variable is
13845      used anywhere in the source file.  This is useful when identifying
13846      variables that are expected to be removed in a future version of a
13847      program.  The warning also includes the location of the declaration
13848      of the deprecated variable, to enable users to easily find further
13849      information about why the variable is deprecated, or what they
13850      should do instead.  Note that the warning only occurs for uses:
13852           extern int old_var __attribute__ ((deprecated));
13853           extern int old_var;
13854           int new_fn () { return old_var; }
13856      results in a warning on line 3 but not line 2.
13858      The `deprecated' attribute can also be used for functions and
13859      types (*note Function Attributes::, *note Type Attributes::.)
13861 `mode (MODE)'
13862      This attribute specifies the data type for the
13863      declaration--whichever type corresponds to the mode MODE.  This in
13864      effect lets you request an integer or floating point type
13865      according to its width.
13867      You may also specify a mode of `byte' or `__byte__' to indicate
13868      the mode corresponding to a one-byte integer, `word' or `__word__'
13869      for the mode of a one-word integer, and `pointer' or `__pointer__'
13870      for the mode used to represent pointers.
13872 `packed'
13873      The `packed' attribute specifies that a variable or structure field
13874      should have the smallest possible alignment--one byte for a
13875      variable, and one bit for a field, unless you specify a larger
13876      value with the `aligned' attribute.
13878      Here is a structure in which the field `x' is packed, so that it
13879      immediately follows `a':
13881           struct foo
13882           {
13883             char a;
13884             int x[2] __attribute__ ((packed));
13885           };
13887 `section ("SECTION-NAME")'
13888      Normally, the compiler places the objects it generates in sections
13889      like `data' and `bss'.  Sometimes, however, you need additional
13890      sections, or you need certain particular variables to appear in
13891      special sections, for example to map to special hardware.  The
13892      `section' attribute specifies that a variable (or function) lives
13893      in a particular section.  For example, this small program uses
13894      several specific section names:
13896           struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
13897           struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
13898           char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
13899           int init_data __attribute__ ((section ("INITDATA"))) = 0;
13900           
13901           main()
13902           {
13903             /* Initialize stack pointer */
13904             init_sp (stack + sizeof (stack));
13905           
13906             /* Initialize initialized data */
13907             memcpy (&init_data, &data, &edata - &data);
13908           
13909             /* Turn on the serial ports */
13910             init_duart (&a);
13911             init_duart (&b);
13912           }
13914      Use the `section' attribute with an _initialized_ definition of a
13915      _global_ variable, as shown in the example.  GCC issues a warning
13916      and otherwise ignores the `section' attribute in uninitialized
13917      variable declarations.
13919      You may only use the `section' attribute with a fully initialized
13920      global definition because of the way linkers work.  The linker
13921      requires each object be defined once, with the exception that
13922      uninitialized variables tentatively go in the `common' (or `bss')
13923      section and can be multiply "defined".  You can force a variable
13924      to be initialized with the `-fno-common' flag or the `nocommon'
13925      attribute.
13927      Some file formats do not support arbitrary sections so the
13928      `section' attribute is not available on all platforms.  If you
13929      need to map the entire contents of a module to a particular
13930      section, consider using the facilities of the linker instead.
13932 `shared'
13933      On Microsoft Windows, in addition to putting variable definitions
13934      in a named section, the section can also be shared among all
13935      running copies of an executable or DLL.  For example, this small
13936      program defines shared data by putting it in a named section
13937      `shared' and marking the section shareable:
13939           int foo __attribute__((section ("shared"), shared)) = 0;
13940           
13941           int
13942           main()
13943           {
13944             /* Read and write foo.  All running
13945                copies see the same value.  */
13946             return 0;
13947           }
13949      You may only use the `shared' attribute along with `section'
13950      attribute with a fully initialized global definition because of
13951      the way linkers work.  See `section' attribute for more
13952      information.
13954      The `shared' attribute is only available on Microsoft Windows.
13956 `tls_model ("TLS_MODEL")'
13957      The `tls_model' attribute sets thread-local storage model (*note
13958      Thread-Local::) of a particular `__thread' variable, overriding
13959      `-ftls-model=' command line switch on a per-variable basis.  The
13960      TLS_MODEL argument should be one of `global-dynamic',
13961      `local-dynamic', `initial-exec' or `local-exec'.
13963      Not all targets support this attribute.
13965 `transparent_union'
13966      This attribute, attached to a function parameter which is a union,
13967      means that the corresponding argument may have the type of any
13968      union member, but the argument is passed as if its type were that
13969      of the first union member.  For more details see *Note Type
13970      Attributes::.  You can also use this attribute on a `typedef' for
13971      a union data type; then it applies to all function parameters with
13972      that type.
13974 `unused'
13975      This attribute, attached to a variable, means that the variable is
13976      meant to be possibly unused.  GCC will not produce a warning for
13977      this variable.
13979 `vector_size (BYTES)'
13980      This attribute specifies the vector size for the variable,
13981      measured in bytes.  For example, the declaration:
13983           int foo __attribute__ ((vector_size (16)));
13985      causes the compiler to set the mode for `foo', to be 16 bytes,
13986      divided into `int' sized units.  Assuming a 32-bit int (a vector of
13987      4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
13989      This attribute is only applicable to integral and float scalars,
13990      although arrays, pointers, and function return values are allowed
13991      in conjunction with this construct.
13993      Aggregates with this attribute are invalid, even if they are of
13994      the same size as a corresponding scalar.  For example, the
13995      declaration:
13997           struct S { int a; };
13998           struct S  __attribute__ ((vector_size (16))) foo;
14000      is invalid even if the size of the structure is the same as the
14001      size of the `int'.
14003 `weak'
14004      The `weak' attribute is described in *Note Function Attributes::.
14006 `dllimport'
14007      The `dllimport' attribute is described in *Note Function
14008      Attributes::.
14010 `dllexport'
14011      The `dllexport' attribute is described in *Note Function
14012      Attributes::.
14014 M32R/D Variable Attributes
14015 --------------------------
14017  One attribute is currently defined for the M32R/D.
14019 `model (MODEL-NAME)'
14020      Use this attribute on the M32R/D to set the addressability of an
14021      object.  The identifier MODEL-NAME is one of `small', `medium', or
14022      `large', representing each of the code models.
14024      Small model objects live in the lower 16MB of memory (so that their
14025      addresses can be loaded with the `ld24' instruction).
14027      Medium and large model objects may live anywhere in the 32-bit
14028      address space (the compiler will generate `seth/add3' instructions
14029      to load their addresses).
14031 i386 Variable Attributes
14032 ------------------------
14034  Two attributes are currently defined for i386 configurations:
14035 `ms_struct' and `gcc_struct'
14037 `ms_struct'
14038 `gcc_struct'
14039      If `packed' is used on a structure, or if bit-fields are used it
14040      may be that the Microsoft ABI packs them differently than GCC
14041      would normally pack them.  Particularly when moving packed data
14042      between functions compiled with GCC and the native Microsoft
14043      compiler (either via function call or as data in a file), it may
14044      be necessary to access either format.
14046      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
14047      Windows X86 compilers to match the native Microsoft compiler.
14049 \x1f
14050 File: gcc.info,  Node: Type Attributes,  Next: Alignment,  Prev: Variable Attributes,  Up: C Extensions
14052 Specifying Attributes of Types
14053 ==============================
14055  The keyword `__attribute__' allows you to specify special attributes
14056 of `struct' and `union' types when you define such types.  This keyword
14057 is followed by an attribute specification inside double parentheses.
14058 Six attributes are currently defined for types: `aligned', `packed',
14059 `transparent_union', `unused', `deprecated' and `may_alias'.  Other
14060 attributes are defined for functions (*note Function Attributes::) and
14061 for variables (*note Variable Attributes::).
14063  You may also specify any one of these attributes with `__' preceding
14064 and following its keyword.  This allows you to use these attributes in
14065 header files without being concerned about a possible macro of the same
14066 name.  For example, you may use `__aligned__' instead of `aligned'.
14068  You may specify the `aligned' and `transparent_union' attributes
14069 either in a `typedef' declaration or just past the closing curly brace
14070 of a complete enum, struct or union type _definition_ and the `packed'
14071 attribute only past the closing brace of a definition.
14073  You may also specify attributes between the enum, struct or union tag
14074 and the name of the type rather than after the closing brace.
14076  *Note Attribute Syntax::, for details of the exact syntax for using
14077 attributes.
14079 `aligned (ALIGNMENT)'
14080      This attribute specifies a minimum alignment (in bytes) for
14081      variables of the specified type.  For example, the declarations:
14083           struct S { short f[3]; } __attribute__ ((aligned (8)));
14084           typedef int more_aligned_int __attribute__ ((aligned (8)));
14086      force the compiler to insure (as far as it can) that each variable
14087      whose type is `struct S' or `more_aligned_int' will be allocated
14088      and aligned _at least_ on a 8-byte boundary.  On a SPARC, having
14089      all variables of type `struct S' aligned to 8-byte boundaries
14090      allows the compiler to use the `ldd' and `std' (doubleword load and
14091      store) instructions when copying one variable of type `struct S' to
14092      another, thus improving run-time efficiency.
14094      Note that the alignment of any given `struct' or `union' type is
14095      required by the ISO C standard to be at least a perfect multiple of
14096      the lowest common multiple of the alignments of all of the members
14097      of the `struct' or `union' in question.  This means that you _can_
14098      effectively adjust the alignment of a `struct' or `union' type by
14099      attaching an `aligned' attribute to any one of the members of such
14100      a type, but the notation illustrated in the example above is a
14101      more obvious, intuitive, and readable way to request the compiler
14102      to adjust the alignment of an entire `struct' or `union' type.
14104      As in the preceding example, you can explicitly specify the
14105      alignment (in bytes) that you wish the compiler to use for a given
14106      `struct' or `union' type.  Alternatively, you can leave out the
14107      alignment factor and just ask the compiler to align a type to the
14108      maximum useful alignment for the target machine you are compiling
14109      for.  For example, you could write:
14111           struct S { short f[3]; } __attribute__ ((aligned));
14113      Whenever you leave out the alignment factor in an `aligned'
14114      attribute specification, the compiler automatically sets the
14115      alignment for the type to the largest alignment which is ever used
14116      for any data type on the target machine you are compiling for.
14117      Doing this can often make copy operations more efficient, because
14118      the compiler can use whatever instructions copy the biggest chunks
14119      of memory when performing copies to or from the variables which
14120      have types that you have aligned this way.
14122      In the example above, if the size of each `short' is 2 bytes, then
14123      the size of the entire `struct S' type is 6 bytes.  The smallest
14124      power of two which is greater than or equal to that is 8, so the
14125      compiler sets the alignment for the entire `struct S' type to 8
14126      bytes.
14128      Note that although you can ask the compiler to select a
14129      time-efficient alignment for a given type and then declare only
14130      individual stand-alone objects of that type, the compiler's
14131      ability to select a time-efficient alignment is primarily useful
14132      only when you plan to create arrays of variables having the
14133      relevant (efficiently aligned) type.  If you declare or use arrays
14134      of variables of an efficiently-aligned type, then it is likely
14135      that your program will also be doing pointer arithmetic (or
14136      subscripting, which amounts to the same thing) on pointers to the
14137      relevant type, and the code that the compiler generates for these
14138      pointer arithmetic operations will often be more efficient for
14139      efficiently-aligned types than for other types.
14141      The `aligned' attribute can only increase the alignment; but you
14142      can decrease it by specifying `packed' as well.  See below.
14144      Note that the effectiveness of `aligned' attributes may be limited
14145      by inherent limitations in your linker.  On many systems, the
14146      linker is only able to arrange for variables to be aligned up to a
14147      certain maximum alignment.  (For some linkers, the maximum
14148      supported alignment may be very very small.)  If your linker is
14149      only able to align variables up to a maximum of 8 byte alignment,
14150      then specifying `aligned(16)' in an `__attribute__' will still
14151      only provide you with 8 byte alignment.  See your linker
14152      documentation for further information.
14154 `packed'
14155      This attribute, attached to `struct' or `union' type definition,
14156      specifies that each member of the structure or union is placed to
14157      minimize the memory required. When attached to an `enum'
14158      definition, it indicates that the smallest integral type should be
14159      used.
14161      Specifying this attribute for `struct' and `union' types is
14162      equivalent to specifying the `packed' attribute on each of the
14163      structure or union members.  Specifying the `-fshort-enums' flag
14164      on the line is equivalent to specifying the `packed' attribute on
14165      all `enum' definitions.
14167      In the following example `struct my_packed_struct''s members are
14168      packed closely together, but the internal layout of its `s' member
14169      is not packed - to do that, `struct my_unpacked_struct' would need
14170      to be packed too.
14172           struct my_unpacked_struct
14173            {
14174               char c;
14175               int i;
14176            };
14177           
14178           struct my_packed_struct __attribute__ ((__packed__))
14179             {
14180                char c;
14181                int  i;
14182                struct my_unpacked_struct s;
14183             };
14185      You may only specify this attribute on the definition of a `enum',
14186      `struct' or `union', not on a `typedef' which does not also define
14187      the enumerated type, structure or union.
14189 `transparent_union'
14190      This attribute, attached to a `union' type definition, indicates
14191      that any function parameter having that union type causes calls to
14192      that function to be treated in a special way.
14194      First, the argument corresponding to a transparent union type can
14195      be of any type in the union; no cast is required.  Also, if the
14196      union contains a pointer type, the corresponding argument can be a
14197      null pointer constant or a void pointer expression; and if the
14198      union contains a void pointer type, the corresponding argument can
14199      be any pointer expression.  If the union member type is a pointer,
14200      qualifiers like `const' on the referenced type must be respected,
14201      just as with normal pointer conversions.
14203      Second, the argument is passed to the function using the calling
14204      conventions of the first member of the transparent union, not the
14205      calling conventions of the union itself.  All members of the union
14206      must have the same machine representation; this is necessary for
14207      this argument passing to work properly.
14209      Transparent unions are designed for library functions that have
14210      multiple interfaces for compatibility reasons.  For example,
14211      suppose the `wait' function must accept either a value of type
14212      `int *' to comply with Posix, or a value of type `union wait *' to
14213      comply with the 4.1BSD interface.  If `wait''s parameter were
14214      `void *', `wait' would accept both kinds of arguments, but it
14215      would also accept any other pointer type and this would make
14216      argument type checking less useful.  Instead, `<sys/wait.h>' might
14217      define the interface as follows:
14219           typedef union
14220             {
14221               int *__ip;
14222               union wait *__up;
14223             } wait_status_ptr_t __attribute__ ((__transparent_union__));
14224           
14225           pid_t wait (wait_status_ptr_t);
14227      This interface allows either `int *' or `union wait *' arguments
14228      to be passed, using the `int *' calling convention.  The program
14229      can call `wait' with arguments of either type:
14231           int w1 () { int w; return wait (&w); }
14232           int w2 () { union wait w; return wait (&w); }
14234      With this interface, `wait''s implementation might look like this:
14236           pid_t wait (wait_status_ptr_t p)
14237           {
14238             return waitpid (-1, p.__ip, 0);
14239           }
14241 `unused'
14242      When attached to a type (including a `union' or a `struct'), this
14243      attribute means that variables of that type are meant to appear
14244      possibly unused.  GCC will not produce a warning for any variables
14245      of that type, even if the variable appears to do nothing.  This is
14246      often the case with lock or thread classes, which are usually
14247      defined and then not referenced, but contain constructors and
14248      destructors that have nontrivial bookkeeping functions.
14250 `deprecated'
14251      The `deprecated' attribute results in a warning if the type is
14252      used anywhere in the source file.  This is useful when identifying
14253      types that are expected to be removed in a future version of a
14254      program.  If possible, the warning also includes the location of
14255      the declaration of the deprecated type, to enable users to easily
14256      find further information about why the type is deprecated, or what
14257      they should do instead.  Note that the warnings only occur for
14258      uses and then only if the type is being applied to an identifier
14259      that itself is not being declared as deprecated.
14261           typedef int T1 __attribute__ ((deprecated));
14262           T1 x;
14263           typedef T1 T2;
14264           T2 y;
14265           typedef T1 T3 __attribute__ ((deprecated));
14266           T3 z __attribute__ ((deprecated));
14268      results in a warning on line 2 and 3 but not lines 4, 5, or 6.  No
14269      warning is issued for line 4 because T2 is not explicitly
14270      deprecated.  Line 5 has no warning because T3 is explicitly
14271      deprecated.  Similarly for line 6.
14273      The `deprecated' attribute can also be used for functions and
14274      variables (*note Function Attributes::, *note Variable
14275      Attributes::.)
14277 `may_alias'
14278      Accesses to objects with types with this attribute are not
14279      subjected to type-based alias analysis, but are instead assumed to
14280      be able to alias any other type of objects, just like the `char'
14281      type.  See `-fstrict-aliasing' for more information on aliasing
14282      issues.
14284      Example of use:
14286           typedef short __attribute__((__may_alias__)) short_a;
14287           
14288           int
14289           main (void)
14290           {
14291             int a = 0x12345678;
14292             short_a *b = (short_a *) &a;
14293           
14294             b[1] = 0;
14295           
14296             if (a == 0x12345678)
14297               abort();
14298           
14299             exit(0);
14300           }
14302      If you replaced `short_a' with `short' in the variable
14303      declaration, the above program would abort when compiled with
14304      `-fstrict-aliasing', which is on by default at `-O2' or above in
14305      recent GCC versions.
14307 i386 Type Attributes
14308 --------------------
14310      Two attributes are currently defined for i386 configurations:
14311 `ms_struct' and `gcc_struct'
14313 `ms_struct'
14314 `gcc_struct'
14315      If `packed' is used on a structure, or if bit-fields are used it
14316      may be that the Microsoft ABI packs them differently than GCC
14317      would normally pack them.  Particularly when moving packed data
14318      between functions compiled with GCC and the native Microsoft
14319      compiler (either via function call or as data in a file), it may
14320      be necessary to access either format.
14322      Currently `-m[no-]ms-bitfields' is provided for the Microsoft
14323      Windows X86 compilers to match the native Microsoft compiler.
14325  To specify multiple attributes, separate them by commas within the
14326 double parentheses: for example, `__attribute__ ((aligned (16),
14327 packed))'.
14329 \x1f
14330 File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
14332 An Inline Function is As Fast As a Macro
14333 ========================================
14335  By declaring a function `inline', you can direct GCC to integrate that
14336 function's code into the code for its callers.  This makes execution
14337 faster by eliminating the function-call overhead; in addition, if any
14338 of the actual argument values are constant, their known values may
14339 permit simplifications at compile time so that not all of the inline
14340 function's code needs to be included.  The effect on code size is less
14341 predictable; object code may be larger or smaller with function
14342 inlining, depending on the particular case.  Inlining of functions is an
14343 optimization and it really "works" only in optimizing compilation.  If
14344 you don't use `-O', no function is really inline.
14346  Inline functions are included in the ISO C99 standard, but there are
14347 currently substantial differences between what GCC implements and what
14348 the ISO C99 standard requires.
14350  To declare a function inline, use the `inline' keyword in its
14351 declaration, like this:
14353      inline int
14354      inc (int *a)
14355      {
14356        (*a)++;
14357      }
14359  (If you are writing a header file to be included in ISO C programs,
14360 write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
14361 You can also make all "simple enough" functions inline with the option
14362 `-finline-functions'.
14364  Note that certain usages in a function definition can make it
14365 unsuitable for inline substitution.  Among these usages are: use of
14366 varargs, use of alloca, use of variable sized data types (*note
14367 Variable Length::), use of computed goto (*note Labels as Values::),
14368 use of nonlocal goto, and nested functions (*note Nested Functions::).
14369 Using `-Winline' will warn when a function marked `inline' could not be
14370 substituted, and will give the reason for the failure.
14372  Note that in C and Objective-C, unlike C++, the `inline' keyword does
14373 not affect the linkage of the function.
14375  GCC automatically inlines member functions defined within the class
14376 body of C++ programs even if they are not explicitly declared `inline'.
14377 (You can override this with `-fno-default-inline'; *note Options
14378 Controlling C++ Dialect: C++ Dialect Options..)
14380  When a function is both inline and `static', if all calls to the
14381 function are integrated into the caller, and the function's address is
14382 never used, then the function's own assembler code is never referenced.
14383 In this case, GCC does not actually output assembler code for the
14384 function, unless you specify the option `-fkeep-inline-functions'.
14385 Some calls cannot be integrated for various reasons (in particular,
14386 calls that precede the function's definition cannot be integrated, and
14387 neither can recursive calls within the definition).  If there is a
14388 nonintegrated call, then the function is compiled to assembler code as
14389 usual.  The function must also be compiled as usual if the program
14390 refers to its address, because that can't be inlined.
14392  When an inline function is not `static', then the compiler must assume
14393 that there may be calls from other source files; since a global symbol
14394 can be defined only once in any program, the function must not be
14395 defined in the other source files, so the calls therein cannot be
14396 integrated.  Therefore, a non-`static' inline function is always
14397 compiled on its own in the usual fashion.
14399  If you specify both `inline' and `extern' in the function definition,
14400 then the definition is used only for inlining.  In no case is the
14401 function compiled on its own, not even if you refer to its address
14402 explicitly.  Such an address becomes an external reference, as if you
14403 had only declared the function, and had not defined it.
14405  This combination of `inline' and `extern' has almost the effect of a
14406 macro.  The way to use it is to put a function definition in a header
14407 file with these keywords, and put another copy of the definition
14408 (lacking `inline' and `extern') in a library file.  The definition in
14409 the header file will cause most calls to the function to be inlined.
14410 If any uses of the function remain, they will refer to the single copy
14411 in the library.
14413  Since GCC eventually will implement ISO C99 semantics for inline
14414 functions, it is best to use `static inline' only to guarantee
14415 compatibility.  (The existing semantics will remain available when
14416 `-std=gnu89' is specified, but eventually the default will be
14417 `-std=gnu99' and that will implement the C99 semantics, though it does
14418 not do so yet.)
14420  GCC does not inline any functions when not optimizing unless you
14421 specify the `always_inline' attribute for the function, like this:
14423      /* Prototype.  */
14424      inline void foo (const char) __attribute__((always_inline));
14426 \x1f
14427 File: gcc.info,  Node: Extended Asm,  Next: Constraints,  Prev: Inline,  Up: C Extensions
14429 Assembler Instructions with C Expression Operands
14430 =================================================
14432  In an assembler instruction using `asm', you can specify the operands
14433 of the instruction using C expressions.  This means you need not guess
14434 which registers or memory locations will contain the data you want to
14435 use.
14437  You must specify an assembler instruction template much like what
14438 appears in a machine description, plus an operand constraint string for
14439 each operand.
14441  For example, here is how to use the 68881's `fsinx' instruction:
14443      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
14445 Here `angle' is the C expression for the input operand while `result'
14446 is that of the output operand.  Each has `"f"' as its operand
14447 constraint, saying that a floating point register is required.  The `='
14448 in `=f' indicates that the operand is an output; all output operands'
14449 constraints must use `='.  The constraints use the same language used
14450 in the machine description (*note Constraints::).
14452  Each operand is described by an operand-constraint string followed by
14453 the C expression in parentheses.  A colon separates the assembler
14454 template from the first output operand and another separates the last
14455 output operand from the first input, if any.  Commas separate the
14456 operands within each group.  The total number of operands is currently
14457 limited to 30; this limitation may be lifted in some future version of
14458 GCC.
14460  If there are no output operands but there are input operands, you must
14461 place two consecutive colons surrounding the place where the output
14462 operands would go.
14464  As of GCC version 3.1, it is also possible to specify input and output
14465 operands using symbolic names which can be referenced within the
14466 assembler code.  These names are specified inside square brackets
14467 preceding the constraint string, and can be referenced inside the
14468 assembler code using `%[NAME]' instead of a percentage sign followed by
14469 the operand number.  Using named operands the above example could look
14470 like:
14472      asm ("fsinx %[angle],%[output]"
14473           : [output] "=f" (result)
14474           : [angle] "f" (angle));
14476 Note that the symbolic operand names have no relation whatsoever to
14477 other C identifiers.  You may use any name you like, even those of
14478 existing C symbols, but you must ensure that no two operands within the
14479 same assembler construct use the same symbolic name.
14481  Output operand expressions must be lvalues; the compiler can check
14482 this.  The input operands need not be lvalues.  The compiler cannot
14483 check whether the operands have data types that are reasonable for the
14484 instruction being executed.  It does not parse the assembler instruction
14485 template and does not know what it means or even whether it is valid
14486 assembler input.  The extended `asm' feature is most often used for
14487 machine instructions the compiler itself does not know exist.  If the
14488 output expression cannot be directly addressed (for example, it is a
14489 bit-field), your constraint must allow a register.  In that case, GCC
14490 will use the register as the output of the `asm', and then store that
14491 register into the output.
14493  The ordinary output operands must be write-only; GCC will assume that
14494 the values in these operands before the instruction are dead and need
14495 not be generated.  Extended asm supports input-output or read-write
14496 operands.  Use the constraint character `+' to indicate such an operand
14497 and list it with the output operands.  You should only use read-write
14498 operands when the constraints for the operand (or the operand in which
14499 only some of the bits are to be changed) allow a register.
14501  You may, as an alternative, logically split its function into two
14502 separate operands, one input operand and one write-only output operand.
14503 The connection between them is expressed by constraints which say they
14504 need to be in the same location when the instruction executes.  You can
14505 use the same C expression for both operands, or different expressions.
14506 For example, here we write the (fictitious) `combine' instruction with
14507 `bar' as its read-only source operand and `foo' as its read-write
14508 destination:
14510      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
14512 The constraint `"0"' for operand 1 says that it must occupy the same
14513 location as operand 0.  A number in constraint is allowed only in an
14514 input operand and it must refer to an output operand.
14516  Only a number in the constraint can guarantee that one operand will be
14517 in the same place as another.  The mere fact that `foo' is the value of
14518 both operands is not enough to guarantee that they will be in the same
14519 place in the generated assembler code.  The following would not work
14520 reliably:
14522      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
14524  Various optimizations or reloading could cause operands 0 and 1 to be
14525 in different registers; GCC knows no reason not to do so.  For example,
14526 the compiler might find a copy of the value of `foo' in one register and
14527 use it for operand 1, but generate the output operand 0 in a different
14528 register (copying it afterward to `foo''s own address).  Of course,
14529 since the register for operand 1 is not even mentioned in the assembler
14530 code, the result will not work, but GCC can't tell that.
14532  As of GCC version 3.1, one may write `[NAME]' instead of the operand
14533 number for a matching constraint.  For example:
14535      asm ("cmoveq %1,%2,%[result]"
14536           : [result] "=r"(result)
14537           : "r" (test), "r"(new), "[result]"(old));
14539  Some instructions clobber specific hard registers.  To describe this,
14540 write a third colon after the input operands, followed by the names of
14541 the clobbered hard registers (given as strings).  Here is a realistic
14542 example for the VAX:
14544      asm volatile ("movc3 %0,%1,%2"
14545                    : /* no outputs */
14546                    : "g" (from), "g" (to), "g" (count)
14547                    : "r0", "r1", "r2", "r3", "r4", "r5");
14549  You may not write a clobber description in a way that overlaps with an
14550 input or output operand.  For example, you may not have an operand
14551 describing a register class with one member if you mention that register
14552 in the clobber list.  Variables declared to live in specific registers
14553 (*note Explicit Reg Vars::), and used as asm input or output operands
14554 must have no part mentioned in the clobber description.  There is no
14555 way for you to specify that an input operand is modified without also
14556 specifying it as an output operand.  Note that if all the output
14557 operands you specify are for this purpose (and hence unused), you will
14558 then also need to specify `volatile' for the `asm' construct, as
14559 described below, to prevent GCC from deleting the `asm' statement as
14560 unused.
14562  If you refer to a particular hardware register from the assembler code,
14563 you will probably have to list the register after the third colon to
14564 tell the compiler the register's value is modified.  In some assemblers,
14565 the register names begin with `%'; to produce one `%' in the assembler
14566 code, you must write `%%' in the input.
14568  If your assembler instruction can alter the condition code register,
14569 add `cc' to the list of clobbered registers.  GCC on some machines
14570 represents the condition codes as a specific hardware register; `cc'
14571 serves to name this register.  On other machines, the condition code is
14572 handled differently, and specifying `cc' has no effect.  But it is
14573 valid no matter what the machine.
14575  If your assembler instructions access memory in an unpredictable
14576 fashion, add `memory' to the list of clobbered registers.  This will
14577 cause GCC to not keep memory values cached in registers across the
14578 assembler instruction and not optimize stores or loads to that memory.
14579 You will also want to add the `volatile' keyword if the memory affected
14580 is not listed in the inputs or outputs of the `asm', as the `memory'
14581 clobber does not count as a side-effect of the `asm'.  If you know how
14582 large the accessed memory is, you can add it as input or output but if
14583 this is not known, you should add `memory'.  As an example, if you
14584 access ten bytes of a string, you can use a memory input like:
14586      {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
14588  Note that in the following example the memory input is necessary,
14589 otherwise GCC might optimize the store to `x' away:
14590      int foo ()
14591      {
14592        int x = 42;
14593        int *y = &x;
14594        int result;
14595        asm ("magic stuff accessing an 'int' pointed to by '%1'"
14596              "=&d" (r) : "a" (y), "m" (*y));
14597        return result;
14598      }
14600  You can put multiple assembler instructions together in a single `asm'
14601 template, separated by the characters normally used in assembly code
14602 for the system.  A combination that works in most places is a newline
14603 to break the line, plus a tab character to move to the instruction field
14604 (written as `\n\t').  Sometimes semicolons can be used, if the
14605 assembler allows semicolons as a line-breaking character.  Note that
14606 some assembler dialects use semicolons to start a comment.  The input
14607 operands are guaranteed not to use any of the clobbered registers, and
14608 neither will the output operands' addresses, so you can read and write
14609 the clobbered registers as many times as you like.  Here is an example
14610 of multiple instructions in a template; it assumes the subroutine
14611 `_foo' accepts arguments in registers 9 and 10:
14613      asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
14614           : /* no outputs */
14615           : "g" (from), "g" (to)
14616           : "r9", "r10");
14618  Unless an output operand has the `&' constraint modifier, GCC may
14619 allocate it in the same register as an unrelated input operand, on the
14620 assumption the inputs are consumed before the outputs are produced.
14621 This assumption may be false if the assembler code actually consists of
14622 more than one instruction.  In such a case, use `&' for each output
14623 operand that may not overlap an input.  *Note Modifiers::.
14625  If you want to test the condition code produced by an assembler
14626 instruction, you must include a branch and a label in the `asm'
14627 construct, as follows:
14629      asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
14630           : "g" (result)
14631           : "g" (input));
14633 This assumes your assembler supports local labels, as the GNU assembler
14634 and most Unix assemblers do.
14636  Speaking of labels, jumps from one `asm' to another are not supported.
14637 The compiler's optimizers do not know about these jumps, and therefore
14638 they cannot take account of them when deciding how to optimize.
14640  Usually the most convenient way to use these `asm' instructions is to
14641 encapsulate them in macros that look like functions.  For example,
14643      #define sin(x)       \
14644      ({ double __value, __arg = (x);   \
14645         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
14646         __value; })
14648 Here the variable `__arg' is used to make sure that the instruction
14649 operates on a proper `double' value, and to accept only those arguments
14650 `x' which can convert automatically to a `double'.
14652  Another way to make sure the instruction operates on the correct data
14653 type is to use a cast in the `asm'.  This is different from using a
14654 variable `__arg' in that it converts more different types.  For
14655 example, if the desired type were `int', casting the argument to `int'
14656 would accept a pointer with no complaint, while assigning the argument
14657 to an `int' variable named `__arg' would warn about using a pointer
14658 unless the caller explicitly casts it.
14660  If an `asm' has output operands, GCC assumes for optimization purposes
14661 the instruction has no side effects except to change the output
14662 operands.  This does not mean instructions with a side effect cannot be
14663 used, but you must be careful, because the compiler may eliminate them
14664 if the output operands aren't used, or move them out of loops, or
14665 replace two with one if they constitute a common subexpression.  Also,
14666 if your instruction does have a side effect on a variable that otherwise
14667 appears not to change, the old value of the variable may be reused later
14668 if it happens to be found in a register.
14670  You can prevent an `asm' instruction from being deleted, moved
14671 significantly, or combined, by writing the keyword `volatile' after the
14672 `asm'.  For example:
14674      #define get_and_set_priority(new)              \
14675      ({ int __old;                                  \
14676         asm volatile ("get_and_set_priority %0, %1" \
14677                       : "=g" (__old) : "g" (new));  \
14678         __old; })
14680 If you write an `asm' instruction with no outputs, GCC will know the
14681 instruction has side-effects and will not delete the instruction or
14682 move it outside of loops.
14684  The `volatile' keyword indicates that the instruction has important
14685 side-effects.  GCC will not delete a volatile `asm' if it is reachable.
14686 (The instruction can still be deleted if GCC can prove that
14687 control-flow will never reach the location of the instruction.)  In
14688 addition, GCC will not reschedule instructions across a volatile `asm'
14689 instruction.  For example:
14691      *(volatile int *)addr = foo;
14692      asm volatile ("eieio" : : );
14694 Assume `addr' contains the address of a memory mapped device register.
14695 The PowerPC `eieio' instruction (Enforce In-order Execution of I/O)
14696 tells the CPU to make sure that the store to that device register
14697 happens before it issues any other I/O.
14699  Note that even a volatile `asm' instruction can be moved in ways that
14700 appear insignificant to the compiler, such as across jump instructions.
14701 You can't expect a sequence of volatile `asm' instructions to remain
14702 perfectly consecutive.  If you want consecutive output, use a single
14703 `asm'.  Also, GCC will perform some optimizations across a volatile
14704 `asm' instruction; GCC does not "forget everything" when it encounters
14705 a volatile `asm' instruction the way some other compilers do.
14707  An `asm' instruction without any operands or clobbers (an "old style"
14708 `asm') will be treated identically to a volatile `asm' instruction.
14710  It is a natural idea to look for a way to give access to the condition
14711 code left by the assembler instruction.  However, when we attempted to
14712 implement this, we found no way to make it work reliably.  The problem
14713 is that output operands might need reloading, which would result in
14714 additional following "store" instructions.  On most machines, these
14715 instructions would alter the condition code before there was time to
14716 test it.  This problem doesn't arise for ordinary "test" and "compare"
14717 instructions because they don't have any output operands.
14719  For reasons similar to those described above, it is not possible to
14720 give an assembler instruction access to the condition code left by
14721 previous instructions.
14723  If you are writing a header file that should be includable in ISO C
14724 programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
14726 Size of an `asm'
14727 ----------------
14729  Some targets require that GCC track the size of each instruction used
14730 in order to generate correct code.  Because the final length of an
14731 `asm' is only known by the assembler, GCC must make an estimate as to
14732 how big it will be.  The estimate is formed by counting the number of
14733 statements in the pattern of the `asm' and multiplying that by the
14734 length of the longest instruction on that processor.  Statements in the
14735 `asm' are identified by newline characters and whatever statement
14736 separator characters are supported by the assembler; on most processors
14737 this is the ``;'' character.
14739  Normally, GCC's estimate is perfectly adequate to ensure that correct
14740 code is generated, but it is possible to confuse the compiler if you use
14741 pseudo instructions or assembler macros that expand into multiple real
14742 instructions or if you use assembler directives that expand to more
14743 space in the object file than would be needed for a single instruction.
14744 If this happens then the assembler will produce a diagnostic saying that
14745 a label is unreachable.
14747 i386 floating point asm operands
14748 --------------------------------
14750  There are several rules on the usage of stack-like regs in
14751 asm_operands insns.  These rules apply only to the operands that are
14752 stack-like regs:
14754   1. Given a set of input regs that die in an asm_operands, it is
14755      necessary to know which are implicitly popped by the asm, and
14756      which must be explicitly popped by gcc.
14758      An input reg that is implicitly popped by the asm must be
14759      explicitly clobbered, unless it is constrained to match an output
14760      operand.
14762   2. For any input reg that is implicitly popped by an asm, it is
14763      necessary to know how to adjust the stack to compensate for the
14764      pop.  If any non-popped input is closer to the top of the
14765      reg-stack than the implicitly popped reg, it would not be possible
14766      to know what the stack looked like--it's not clear how the rest of
14767      the stack "slides up".
14769      All implicitly popped input regs must be closer to the top of the
14770      reg-stack than any input that is not implicitly popped.
14772      It is possible that if an input dies in an insn, reload might use
14773      the input reg for an output reload.  Consider this example:
14775           asm ("foo" : "=t" (a) : "f" (b));
14777      This asm says that input B is not popped by the asm, and that the
14778      asm pushes a result onto the reg-stack, i.e., the stack is one
14779      deeper after the asm than it was before.  But, it is possible that
14780      reload will think that it can use the same reg for both the input
14781      and the output, if input B dies in this insn.
14783      If any input operand uses the `f' constraint, all output reg
14784      constraints must use the `&' earlyclobber.
14786      The asm above would be written as
14788           asm ("foo" : "=&t" (a) : "f" (b));
14790   3. Some operands need to be in particular places on the stack.  All
14791      output operands fall in this category--there is no other way to
14792      know which regs the outputs appear in unless the user indicates
14793      this in the constraints.
14795      Output operands must specifically indicate which reg an output
14796      appears in after an asm.  `=f' is not allowed: the operand
14797      constraints must select a class with a single reg.
14799   4. Output operands may not be "inserted" between existing stack regs.
14800      Since no 387 opcode uses a read/write operand, all output operands
14801      are dead before the asm_operands, and are pushed by the
14802      asm_operands.  It makes no sense to push anywhere but the top of
14803      the reg-stack.
14805      Output operands must start at the top of the reg-stack: output
14806      operands may not "skip" a reg.
14808   5. Some asm statements may need extra stack space for internal
14809      calculations.  This can be guaranteed by clobbering stack registers
14810      unrelated to the inputs and outputs.
14813  Here are a couple of reasonable asms to want to write.  This asm takes
14814 one input, which is internally popped, and produces two outputs.
14816      asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
14818  This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
14819 and replaces them with one output.  The user must code the `st(1)'
14820 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
14822      asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
14824 \x1f
14825 File: gcc.info,  Node: Constraints,  Next: Asm Labels,  Prev: Extended Asm,  Up: C Extensions
14827 Constraints for `asm' Operands
14828 ==============================
14830  Here are specific details on what constraint letters you can use with
14831 `asm' operands.  Constraints can say whether an operand may be in a
14832 register, and which kinds of register; whether the operand can be a
14833 memory reference, and which kinds of address; whether the operand may
14834 be an immediate constant, and which possible values it may have.
14835 Constraints can also require two operands to match.
14837 * Menu:
14839 * Simple Constraints::  Basic use of constraints.
14840 * Multi-Alternative::   When an insn has two alternative constraint-patterns.
14841 * Modifiers::           More precise control over effects of constraints.
14842 * Machine Constraints:: Special constraints for some particular machines.
14844 \x1f
14845 File: gcc.info,  Node: Simple Constraints,  Next: Multi-Alternative,  Up: Constraints
14847 Simple Constraints
14848 ------------------
14850  The simplest kind of constraint is a string full of letters, each of
14851 which describes one kind of operand that is permitted.  Here are the
14852 letters that are allowed:
14854 whitespace
14855      Whitespace characters are ignored and can be inserted at any
14856      position except the first.  This enables each alternative for
14857      different operands to be visually aligned in the machine
14858      description even if they have different number of constraints and
14859      modifiers.
14862      A memory operand is allowed, with any kind of address that the
14863      machine supports in general.
14866      A memory operand is allowed, but only if the address is
14867      "offsettable".  This means that adding a small integer (actually,
14868      the width in bytes of the operand, as determined by its machine
14869      mode) may be added to the address and the result is also a valid
14870      memory address.
14872      For example, an address which is constant is offsettable; so is an
14873      address that is the sum of a register and a constant (as long as a
14874      slightly larger constant is also within the range of
14875      address-offsets supported by the machine); but an autoincrement or
14876      autodecrement address is not offsettable.  More complicated
14877      indirect/indexed addresses may or may not be offsettable depending
14878      on the other addressing modes that the machine supports.
14880      Note that in an output operand which can be matched by another
14881      operand, the constraint letter `o' is valid only when accompanied
14882      by both `<' (if the target machine has predecrement addressing)
14883      and `>' (if the target machine has preincrement addressing).
14886      A memory operand that is not offsettable.  In other words,
14887      anything that would fit the `m' constraint but not the `o'
14888      constraint.
14891      A memory operand with autodecrement addressing (either
14892      predecrement or postdecrement) is allowed.
14895      A memory operand with autoincrement addressing (either
14896      preincrement or postincrement) is allowed.
14899      A register operand is allowed provided that it is in a general
14900      register.
14903      An immediate integer operand (one with constant value) is allowed.
14904      This includes symbolic constants whose values will be known only at
14905      assembly time.
14908      An immediate integer operand with a known numeric value is allowed.
14909      Many systems cannot support assembly-time constants for operands
14910      less than a word wide.  Constraints for these operands should use
14911      `n' rather than `i'.
14913 `I', `J', `K', ... `P'
14914      Other letters in the range `I' through `P' may be defined in a
14915      machine-dependent fashion to permit immediate integer operands with
14916      explicit integer values in specified ranges.  For example, on the
14917      68000, `I' is defined to stand for the range of values 1 to 8.
14918      This is the range permitted as a shift count in the shift
14919      instructions.
14922      An immediate floating operand (expression code `const_double') is
14923      allowed, but only if the target floating point format is the same
14924      as that of the host machine (on which the compiler is running).
14927      An immediate floating operand (expression code `const_double' or
14928      `const_vector') is allowed.
14930 `G', `H'
14931      `G' and `H' may be defined in a machine-dependent fashion to
14932      permit immediate floating operands in particular ranges of values.
14935      An immediate integer operand whose value is not an explicit
14936      integer is allowed.
14938      This might appear strange; if an insn allows a constant operand
14939      with a value not known at compile time, it certainly must allow
14940      any known value.  So why use `s' instead of `i'?  Sometimes it
14941      allows better code to be generated.
14943      For example, on the 68000 in a fullword instruction it is possible
14944      to use an immediate operand; but if the immediate value is between
14945      -128 and 127, better code results from loading the value into a
14946      register and using the register.  This is because the load into
14947      the register can be done with a `moveq' instruction.  We arrange
14948      for this to happen by defining the letter `K' to mean "any integer
14949      outside the range -128 to 127", and then specifying `Ks' in the
14950      operand constraints.
14953      Any register, memory or immediate integer operand is allowed,
14954      except for registers that are not general registers.
14957      Any operand whatsoever is allowed.
14959 `0', `1', `2', ... `9'
14960      An operand that matches the specified operand number is allowed.
14961      If a digit is used together with letters within the same
14962      alternative, the digit should come last.
14964      This number is allowed to be more than a single digit.  If multiple
14965      digits are encountered consecutively, they are interpreted as a
14966      single decimal integer.  There is scant chance for ambiguity,
14967      since to-date it has never been desirable that `10' be interpreted
14968      as matching either operand 1 _or_ operand 0.  Should this be
14969      desired, one can use multiple alternatives instead.
14971      This is called a "matching constraint" and what it really means is
14972      that the assembler has only a single operand that fills two roles
14973      which `asm' distinguishes.  For example, an add instruction uses
14974      two input operands and an output operand, but on most CISC
14975      machines an add instruction really has only two operands, one of
14976      them an input-output operand:
14978           addl #35,r12
14980      Matching constraints are used in these circumstances.  More
14981      precisely, the two operands that match must include one input-only
14982      operand and one output-only operand.  Moreover, the digit must be a
14983      smaller number than the number of the operand that uses it in the
14984      constraint.
14987      An operand that is a valid memory address is allowed.  This is for
14988      "load address" and "push address" instructions.
14990      `p' in the constraint must be accompanied by `address_operand' as
14991      the predicate in the `match_operand'.  This predicate interprets
14992      the mode specified in the `match_operand' as the mode of the memory
14993      reference for which the address would be valid.
14995 OTHER-LETTERS
14996      Other letters can be defined in machine-dependent fashion to stand
14997      for particular classes of registers or other arbitrary operand
14998      types.  `d', `a' and `f' are defined on the 68000/68020 to stand
14999      for data, address and floating point registers.
15001 \x1f
15002 File: gcc.info,  Node: Multi-Alternative,  Next: Modifiers,  Prev: Simple Constraints,  Up: Constraints
15004 Multiple Alternative Constraints
15005 --------------------------------
15007  Sometimes a single instruction has multiple alternative sets of
15008 possible operands.  For example, on the 68000, a logical-or instruction
15009 can combine register or an immediate value into memory, or it can
15010 combine any kind of operand into a register; but it cannot combine one
15011 memory location into another.
15013  These constraints are represented as multiple alternatives.  An
15014 alternative can be described by a series of letters for each operand.
15015 The overall constraint for an operand is made from the letters for this
15016 operand from the first alternative, a comma, the letters for this
15017 operand from the second alternative, a comma, and so on until the last
15018 alternative.
15020  If all the operands fit any one alternative, the instruction is valid.
15021 Otherwise, for each alternative, the compiler counts how many
15022 instructions must be added to copy the operands so that that
15023 alternative applies.  The alternative requiring the least copying is
15024 chosen.  If two alternatives need the same amount of copying, the one
15025 that comes first is chosen.  These choices can be altered with the `?'
15026 and `!' characters:
15029      Disparage slightly the alternative that the `?' appears in, as a
15030      choice when no alternative applies exactly.  The compiler regards
15031      this alternative as one unit more costly for each `?' that appears
15032      in it.
15035      Disparage severely the alternative that the `!' appears in.  This
15036      alternative can still be used if it fits without reloading, but if
15037      reloading is needed, some other alternative will be used.
15039 \x1f
15040 File: gcc.info,  Node: Modifiers,  Next: Machine Constraints,  Prev: Multi-Alternative,  Up: Constraints
15042 Constraint Modifier Characters
15043 ------------------------------
15045  Here are constraint modifier characters.
15048      Means that this operand is write-only for this instruction: the
15049      previous value is discarded and replaced by output data.
15052      Means that this operand is both read and written by the
15053      instruction.
15055      When the compiler fixes up the operands to satisfy the constraints,
15056      it needs to know which operands are inputs to the instruction and
15057      which are outputs from it.  `=' identifies an output; `+'
15058      identifies an operand that is both input and output; all other
15059      operands are assumed to be input only.
15061      If you specify `=' or `+' in a constraint, you put it in the first
15062      character of the constraint string.
15065      Means (in a particular alternative) that this operand is an
15066      "earlyclobber" operand, which is modified before the instruction is
15067      finished using the input operands.  Therefore, this operand may
15068      not lie in a register that is used as an input operand or as part
15069      of any memory address.
15071      `&' applies only to the alternative in which it is written.  In
15072      constraints with multiple alternatives, sometimes one alternative
15073      requires `&' while others do not.  See, for example, the `movdf'
15074      insn of the 68000.
15076      An input operand can be tied to an earlyclobber operand if its only
15077      use as an input occurs before the early result is written.  Adding
15078      alternatives of this form often allows GCC to produce better code
15079      when only some of the inputs can be affected by the earlyclobber.
15080      See, for example, the `mulsi3' insn of the ARM.
15082      `&' does not obviate the need to write `='.
15085      Declares the instruction to be commutative for this operand and the
15086      following operand.  This means that the compiler may interchange
15087      the two operands if that is the cheapest way to make all operands
15088      fit the constraints.  GCC can only handle one commutative pair in
15089      an asm; if you use more, the compiler may fail.
15092      Says that all following characters, up to the next comma, are to be
15093      ignored as a constraint.  They are significant only for choosing
15094      register preferences.
15097      Says that the following character should be ignored when choosing
15098      register preferences.  `*' has no effect on the meaning of the
15099      constraint as a constraint, and no effect on reloading.
15101 \x1f
15102 File: gcc.info,  Node: Machine Constraints,  Prev: Modifiers,  Up: Constraints
15104 Constraints for Particular Machines
15105 -----------------------------------
15107  Whenever possible, you should use the general-purpose constraint
15108 letters in `asm' arguments, since they will convey meaning more readily
15109 to people reading your code.  Failing that, use the constraint letters
15110 that usually have very similar meanings across architectures.  The most
15111 commonly used constraints are `m' and `r' (for memory and
15112 general-purpose registers respectively; *note Simple Constraints::), and
15113 `I', usually the letter indicating the most common immediate-constant
15114 format.
15116  For each machine architecture, the `config/MACHINE/MACHINE.h' file
15117 defines additional constraints.  These constraints are used by the
15118 compiler itself for instruction generation, as well as for `asm'
15119 statements; therefore, some of the constraints are not particularly
15120 interesting for `asm'.  The constraints are defined through these
15121 macros:
15123 `REG_CLASS_FROM_LETTER'
15124      Register class constraints (usually lowercase).
15126 `CONST_OK_FOR_LETTER_P'
15127      Immediate constant constraints, for non-floating point constants of
15128      word size or smaller precision (usually uppercase).
15130 `CONST_DOUBLE_OK_FOR_LETTER_P'
15131      Immediate constant constraints, for all floating point constants
15132      and for constants of greater than word size precision (usually
15133      uppercase).
15135 `EXTRA_CONSTRAINT'
15136      Special cases of registers or memory.  This macro is not required,
15137      and is only defined for some machines.
15139  Inspecting these macro definitions in the compiler source for your
15140 machine is the best way to be certain you have the right constraints.
15141 However, here is a summary of the machine-dependent constraints
15142 available on some particular machines.
15144 _ARM family--`arm.h'_
15146     `f'
15147           Floating-point register
15149     `F'
15150           One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
15151           4.0, 5.0 or 10.0
15153     `G'
15154           Floating-point constant that would satisfy the constraint `F'
15155           if it were negated
15157     `I'
15158           Integer that is valid as an immediate operand in a data
15159           processing instruction.  That is, an integer in the range 0
15160           to 255 rotated by a multiple of 2
15162     `J'
15163           Integer in the range -4095 to 4095
15165     `K'
15166           Integer that satisfies constraint `I' when inverted (ones
15167           complement)
15169     `L'
15170           Integer that satisfies constraint `I' when negated (twos
15171           complement)
15173     `M'
15174           Integer in the range 0 to 32
15176     `Q'
15177           A memory reference where the exact address is in a single
15178           register (``m'' is preferable for `asm' statements)
15180     `R'
15181           An item in the constant pool
15183     `S'
15184           A symbol in the text segment of the current file
15186 _AVR family--`avr.h'_
15188     `l'
15189           Registers from r0 to r15
15191     `a'
15192           Registers from r16 to r23
15194     `d'
15195           Registers from r16 to r31
15197     `w'
15198           Registers from r24 to r31.  These registers can be used in
15199           `adiw' command
15201     `e'
15202           Pointer register (r26-r31)
15204     `b'
15205           Base pointer register (r28-r31)
15207     `q'
15208           Stack pointer register (SPH:SPL)
15210     `t'
15211           Temporary register r0
15213     `x'
15214           Register pair X (r27:r26)
15216     `y'
15217           Register pair Y (r29:r28)
15219     `z'
15220           Register pair Z (r31:r30)
15222     `I'
15223           Constant greater than -1, less than 64
15225     `J'
15226           Constant greater than -64, less than 1
15228     `K'
15229           Constant integer 2
15231     `L'
15232           Constant integer 0
15234     `M'
15235           Constant that fits in 8 bits
15237     `N'
15238           Constant integer -1
15240     `O'
15241           Constant integer 8, 16, or 24
15243     `P'
15244           Constant integer 1
15246     `G'
15247           A floating point constant 0.0
15249 _PowerPC and IBM RS6000--`rs6000.h'_
15251     `b'
15252           Address base register
15254     `f'
15255           Floating point register
15257     `v'
15258           Vector register
15260     `h'
15261           `MQ', `CTR', or `LINK' register
15263     `q'
15264           `MQ' register
15266     `c'
15267           `CTR' register
15269     `l'
15270           `LINK' register
15272     `x'
15273           `CR' register (condition register) number 0
15275     `y'
15276           `CR' register (condition register)
15278     `z'
15279           `FPMEM' stack memory for FPR-GPR transfers
15281     `I'
15282           Signed 16-bit constant
15284     `J'
15285           Unsigned 16-bit constant shifted left 16 bits (use `L'
15286           instead for `SImode' constants)
15288     `K'
15289           Unsigned 16-bit constant
15291     `L'
15292           Signed 16-bit constant shifted left 16 bits
15294     `M'
15295           Constant larger than 31
15297     `N'
15298           Exact power of 2
15300     `O'
15301           Zero
15303     `P'
15304           Constant whose negation is a signed 16-bit constant
15306     `G'
15307           Floating point constant that can be loaded into a register
15308           with one instruction per word
15310     `Q'
15311           Memory operand that is an offset from a register (`m' is
15312           preferable for `asm' statements)
15314     `R'
15315           AIX TOC entry
15317     `S'
15318           Constant suitable as a 64-bit mask operand
15320     `T'
15321           Constant suitable as a 32-bit mask operand
15323     `U'
15324           System V Release 4 small data area reference
15326 _Intel 386--`i386.h'_
15328     `q'
15329           `a', `b', `c', or `d' register for the i386.  For x86-64 it
15330           is equivalent to `r' class. (for 8-bit instructions that do
15331           not use upper halves)
15333     `Q'
15334           `a', `b', `c', or `d' register. (for 8-bit instructions, that
15335           do use upper halves)
15337     `R'
15338           Legacy register--equivalent to `r' class in i386 mode.  (for
15339           non-8-bit registers used together with 8-bit upper halves in
15340           a single instruction)
15342     `A'
15343           Specifies the `a' or `d' registers.  This is primarily useful
15344           for 64-bit integer values (when in 32-bit mode) intended to
15345           be returned with the `d' register holding the most
15346           significant bits and the `a' register holding the least
15347           significant bits.
15349     `f'
15350           Floating point register
15352     `t'
15353           First (top of stack) floating point register
15355     `u'
15356           Second floating point register
15358     `a'
15359           `a' register
15361     `b'
15362           `b' register
15364     `c'
15365           `c' register
15367     `C'
15368           Specifies constant that can be easily constructed in SSE
15369           register without loading it from memory.
15371     `d'
15372           `d' register
15374     `D'
15375           `di' register
15377     `S'
15378           `si' register
15380     `x'
15381           `xmm' SSE register
15383     `y'
15384           MMX register
15386     `I'
15387           Constant in range 0 to 31 (for 32-bit shifts)
15389     `J'
15390           Constant in range 0 to 63 (for 64-bit shifts)
15392     `K'
15393           `0xff'
15395     `L'
15396           `0xffff'
15398     `M'
15399           0, 1, 2, or 3 (shifts for `lea' instruction)
15401     `N'
15402           Constant in range 0 to 255 (for `out' instruction)
15404     `Z'
15405           Constant in range 0 to `0xffffffff' or symbolic reference
15406           known to fit specified range.  (for using immediates in zero
15407           extending 32-bit to 64-bit x86-64 instructions)
15409     `e'
15410           Constant in range -2147483648 to 2147483647 or symbolic
15411           reference known to fit specified range.  (for using
15412           immediates in 64-bit x86-64 instructions)
15414     `G'
15415           Standard 80387 floating point constant
15417 _Intel 960--`i960.h'_
15419     `f'
15420           Floating point register (`fp0' to `fp3')
15422     `l'
15423           Local register (`r0' to `r15')
15425     `b'
15426           Global register (`g0' to `g15')
15428     `d'
15429           Any local or global register
15431     `I'
15432           Integers from 0 to 31
15434     `J'
15435           0
15437     `K'
15438           Integers from -31 to 0
15440     `G'
15441           Floating point 0
15443     `H'
15444           Floating point 1
15446 _Intel IA-64--`ia64.h'_
15448     `a'
15449           General register `r0' to `r3' for `addl' instruction
15451     `b'
15452           Branch register
15454     `c'
15455           Predicate register (`c' as in "conditional")
15457     `d'
15458           Application register residing in M-unit
15460     `e'
15461           Application register residing in I-unit
15463     `f'
15464           Floating-point register
15466     `m'
15467           Memory operand.  Remember that `m' allows postincrement and
15468           postdecrement which require printing with `%Pn' on IA-64.
15469           Use `S' to disallow postincrement and postdecrement.
15471     `G'
15472           Floating-point constant 0.0 or 1.0
15474     `I'
15475           14-bit signed integer constant
15477     `J'
15478           22-bit signed integer constant
15480     `K'
15481           8-bit signed integer constant for logical instructions
15483     `L'
15484           8-bit adjusted signed integer constant for compare pseudo-ops
15486     `M'
15487           6-bit unsigned integer constant for shift counts
15489     `N'
15490           9-bit signed integer constant for load and store
15491           postincrements
15493     `O'
15494           The constant zero
15496     `P'
15497           0 or -1 for `dep' instruction
15499     `Q'
15500           Non-volatile memory for floating-point loads and stores
15502     `R'
15503           Integer constant in the range 1 to 4 for `shladd' instruction
15505     `S'
15506           Memory operand except postincrement and postdecrement
15508 _FRV--`frv.h'_
15510     `a'
15511           Register in the class `ACC_REGS' (`acc0' to `acc7').
15513     `b'
15514           Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
15516     `c'
15517           Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
15518           to `icc3').
15520     `d'
15521           Register in the class `GPR_REGS' (`gr0' to `gr63').
15523     `e'
15524           Register in the class `EVEN_REGS' (`gr0' to `gr63').  Odd
15525           registers are excluded not in the class but through the use
15526           of a machine mode larger than 4 bytes.
15528     `f'
15529           Register in the class `FPR_REGS' (`fr0' to `fr63').
15531     `h'
15532           Register in the class `FEVEN_REGS' (`fr0' to `fr63').  Odd
15533           registers are excluded not in the class but through the use
15534           of a machine mode larger than 4 bytes.
15536     `l'
15537           Register in the class `LR_REG' (the `lr' register).
15539     `q'
15540           Register in the class `QUAD_REGS' (`gr2' to `gr63').
15541           Register numbers not divisible by 4 are excluded not in the
15542           class but through the use of a machine mode larger than 8
15543           bytes.
15545     `t'
15546           Register in the class `ICC_REGS' (`icc0' to `icc3').
15548     `u'
15549           Register in the class `FCC_REGS' (`fcc0' to `fcc3').
15551     `v'
15552           Register in the class `ICR_REGS' (`cc4' to `cc7').
15554     `w'
15555           Register in the class `FCR_REGS' (`cc0' to `cc3').
15557     `x'
15558           Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
15559           Register numbers not divisible by 4 are excluded not in the
15560           class but through the use of a machine mode larger than 8
15561           bytes.
15563     `z'
15564           Register in the class `SPR_REGS' (`lcr' and `lr').
15566     `A'
15567           Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
15569     `B'
15570           Register in the class `ACCG_REGS' (`accg0' to `accg7').
15572     `C'
15573           Register in the class `CR_REGS' (`cc0' to `cc7').
15575     `G'
15576           Floating point constant zero
15578     `I'
15579           6-bit signed integer constant
15581     `J'
15582           10-bit signed integer constant
15584     `L'
15585           16-bit signed integer constant
15587     `M'
15588           16-bit unsigned integer constant
15590     `N'
15591           12-bit signed integer constant that is negative--i.e. in the
15592           range of -2048 to -1
15594     `O'
15595           Constant zero
15597     `P'
15598           12-bit signed integer constant that is greater than
15599           zero--i.e. in the range of 1 to 2047.
15601 _IP2K--`ip2k.h'_
15603     `a'
15604           `DP' or `IP' registers (general address)
15606     `f'
15607           `IP' register
15609     `j'
15610           `IPL' register
15612     `k'
15613           `IPH' register
15615     `b'
15616           `DP' register
15618     `y'
15619           `DPH' register
15621     `z'
15622           `DPL' register
15624     `q'
15625           `SP' register
15627     `c'
15628           `DP' or `SP' registers (offsettable address)
15630     `d'
15631           Non-pointer registers (not `SP', `DP', `IP')
15633     `u'
15634           Non-SP registers (everything except `SP')
15636     `R'
15637           Indirect through `IP' - Avoid this except for `QImode', since
15638           we can't access extra bytes
15640     `S'
15641           Indirect through `SP' or `DP' with short displacement (0..127)
15643     `T'
15644           Data-section immediate value
15646     `I'
15647           Integers from -255 to -1
15649     `J'
15650           Integers from 0 to 7--valid bit number in a register
15652     `K'
15653           Integers from 0 to 127--valid displacement for addressing mode
15655     `L'
15656           Integers from 1 to 127
15658     `M'
15659           Integer -1
15661     `N'
15662           Integer 1
15664     `O'
15665           Zero
15667     `P'
15668           Integers from 0 to 255
15670 _MIPS--`mips.h'_
15672     `d'
15673           General-purpose integer register
15675     `f'
15676           Floating-point register (if available)
15678     `h'
15679           `Hi' register
15681     `l'
15682           `Lo' register
15684     `x'
15685           `Hi' or `Lo' register
15687     `y'
15688           General-purpose integer register
15690     `z'
15691           Floating-point status register
15693     `I'
15694           Signed 16-bit constant (for arithmetic instructions)
15696     `J'
15697           Zero
15699     `K'
15700           Zero-extended 16-bit constant (for logic instructions)
15702     `L'
15703           Constant with low 16 bits zero (can be loaded with `lui')
15705     `M'
15706           32-bit constant which requires two instructions to load (a
15707           constant which is not `I', `K', or `L')
15709     `N'
15710           Negative 16-bit constant
15712     `O'
15713           Exact power of two
15715     `P'
15716           Positive 16-bit constant
15718     `G'
15719           Floating point zero
15721     `Q'
15722           Memory reference that can be loaded with more than one
15723           instruction (`m' is preferable for `asm' statements)
15725     `R'
15726           Memory reference that can be loaded with one instruction (`m'
15727           is preferable for `asm' statements)
15729     `S'
15730           Memory reference in external OSF/rose PIC format (`m' is
15731           preferable for `asm' statements)
15733 _Motorola 680x0--`m68k.h'_
15735     `a'
15736           Address register
15738     `d'
15739           Data register
15741     `f'
15742           68881 floating-point register, if available
15744     `I'
15745           Integer in the range 1 to 8
15747     `J'
15748           16-bit signed number
15750     `K'
15751           Signed number whose magnitude is greater than 0x80
15753     `L'
15754           Integer in the range -8 to -1
15756     `M'
15757           Signed number whose magnitude is greater than 0x100
15759     `G'
15760           Floating point constant that is not a 68881 constant
15762 _Motorola 68HC11 & 68HC12 families--`m68hc11.h'_
15764     `a'
15765           Register 'a'
15767     `b'
15768           Register 'b'
15770     `d'
15771           Register 'd'
15773     `q'
15774           An 8-bit register
15776     `t'
15777           Temporary soft register _.tmp
15779     `u'
15780           A soft register _.d1 to _.d31
15782     `w'
15783           Stack pointer register
15785     `x'
15786           Register 'x'
15788     `y'
15789           Register 'y'
15791     `z'
15792           Pseudo register 'z' (replaced by 'x' or 'y' at the end)
15794     `A'
15795           An address register: x, y or z
15797     `B'
15798           An address register: x or y
15800     `D'
15801           Register pair (x:d) to form a 32-bit value
15803     `L'
15804           Constants in the range -65536 to 65535
15806     `M'
15807           Constants whose 16-bit low part is zero
15809     `N'
15810           Constant integer 1 or -1
15812     `O'
15813           Constant integer 16
15815     `P'
15816           Constants in the range -8 to 2
15818 _SPARC--`sparc.h'_
15820     `f'
15821           Floating-point register on the SPARC-V8 architecture and
15822           lower floating-point register on the SPARC-V9 architecture.
15824     `e'
15825           Floating-point register. It is equivalent to `f' on the
15826           SPARC-V8 architecture and contains both lower and upper
15827           floating-point registers on the SPARC-V9 architecture.
15829     `c'
15830           Floating-point condition code register.
15832     `d'
15833           Lower floating-point register. It is only valid on the
15834           SPARC-V9 architecture when the Visual Instruction Set is
15835           available.
15837     `b'
15838           Floating-point register. It is only valid on the SPARC-V9
15839           architecture when the Visual Instruction Set is available.
15841     `h'
15842           64-bit global or out register for the SPARC-V8+ architecture.
15844     `I'
15845           Signed 13-bit constant
15847     `J'
15848           Zero
15850     `K'
15851           32-bit constant with the low 12 bits clear (a constant that
15852           can be loaded with the `sethi' instruction)
15854     `L'
15855           A constant in the range supported by `movcc' instructions
15857     `M'
15858           A constant in the range supported by `movrcc' instructions
15860     `N'
15861           Same as `K', except that it verifies that bits that are not
15862           in the lower 32-bit range are all zero.  Must be used instead
15863           of `K' for modes wider than `SImode'
15865     `O'
15866           The constant 4096
15868     `G'
15869           Floating-point zero
15871     `H'
15872           Signed 13-bit constant, sign-extended to 32 or 64 bits
15874     `Q'
15875           Floating-point constant whose integral representation can be
15876           moved into an integer register using a single sethi
15877           instruction
15879     `R'
15880           Floating-point constant whose integral representation can be
15881           moved into an integer register using a single mov instruction
15883     `S'
15884           Floating-point constant whose integral representation can be
15885           moved into an integer register using a high/lo_sum
15886           instruction sequence
15888     `T'
15889           Memory address aligned to an 8-byte boundary
15891     `U'
15892           Even register
15894     `W'
15895           Memory address for `e' constraint registers.
15897 _TMS320C3x/C4x--`c4x.h'_
15899     `a'
15900           Auxiliary (address) register (ar0-ar7)
15902     `b'
15903           Stack pointer register (sp)
15905     `c'
15906           Standard (32-bit) precision integer register
15908     `f'
15909           Extended (40-bit) precision register (r0-r11)
15911     `k'
15912           Block count register (bk)
15914     `q'
15915           Extended (40-bit) precision low register (r0-r7)
15917     `t'
15918           Extended (40-bit) precision register (r0-r1)
15920     `u'
15921           Extended (40-bit) precision register (r2-r3)
15923     `v'
15924           Repeat count register (rc)
15926     `x'
15927           Index register (ir0-ir1)
15929     `y'
15930           Status (condition code) register (st)
15932     `z'
15933           Data page register (dp)
15935     `G'
15936           Floating-point zero
15938     `H'
15939           Immediate 16-bit floating-point constant
15941     `I'
15942           Signed 16-bit constant
15944     `J'
15945           Signed 8-bit constant
15947     `K'
15948           Signed 5-bit constant
15950     `L'
15951           Unsigned 16-bit constant
15953     `M'
15954           Unsigned 8-bit constant
15956     `N'
15957           Ones complement of unsigned 16-bit constant
15959     `O'
15960           High 16-bit constant (32-bit constant with 16 LSBs zero)
15962     `Q'
15963           Indirect memory reference with signed 8-bit or index register
15964           displacement
15966     `R'
15967           Indirect memory reference with unsigned 5-bit displacement
15969     `S'
15970           Indirect memory reference with 1 bit or index register
15971           displacement
15973     `T'
15974           Direct memory reference
15976     `U'
15977           Symbolic address
15979 _S/390 and zSeries--`s390.h'_
15981     `a'
15982           Address register (general purpose register except r0)
15984     `d'
15985           Data register (arbitrary general purpose register)
15987     `f'
15988           Floating-point register
15990     `I'
15991           Unsigned 8-bit constant (0-255)
15993     `J'
15994           Unsigned 12-bit constant (0-4095)
15996     `K'
15997           Signed 16-bit constant (-32768-32767)
15999     `L'
16000           Value appropriate as displacement.
16001          `(0..4095)'
16002                for short displacement
16004          `(-524288..524287)'
16005                for long displacement
16007     `M'
16008           Constant integer with a value of 0x7fffffff.
16010     `N'
16011           Multiple letter constraint followed by 4 parameter letters.
16012          `0..9:'
16013                number of the part counting from most to least
16014                significant
16016          `H,Q:'
16017                mode of the part
16019          `D,S,H:'
16020                mode of the containing operand
16022          `0,F:'
16023                value of the other parts (F - all bits set) The
16024           constraint matches if the specified part of a constant has a
16025           value different from it's other parts.
16027     `Q'
16028           Memory reference without index register and with short
16029           displacement.
16031     `R'
16032           Memory reference with index register and short displacement.
16034     `S'
16035           Memory reference without index register but with long
16036           displacement.
16038     `T'
16039           Memory reference with index register and long displacement.
16041     `U'
16042           Pointer with short displacement.
16044     `W'
16045           Pointer with long displacement.
16047     `Y'
16048           Shift count operand.
16050 _Xstormy16--`stormy16.h'_
16052     `a'
16053           Register r0.
16055     `b'
16056           Register r1.
16058     `c'
16059           Register r2.
16061     `d'
16062           Register r8.
16064     `e'
16065           Registers r0 through r7.
16067     `t'
16068           Registers r0 and r1.
16070     `y'
16071           The carry register.
16073     `z'
16074           Registers r8 and r9.
16076     `I'
16077           A constant between 0 and 3 inclusive.
16079     `J'
16080           A constant that has exactly one bit set.
16082     `K'
16083           A constant that has exactly one bit clear.
16085     `L'
16086           A constant between 0 and 255 inclusive.
16088     `M'
16089           A constant between -255 and 0 inclusive.
16091     `N'
16092           A constant between -3 and 0 inclusive.
16094     `O'
16095           A constant between 1 and 4 inclusive.
16097     `P'
16098           A constant between -4 and -1 inclusive.
16100     `Q'
16101           A memory reference that is a stack push.
16103     `R'
16104           A memory reference that is a stack pop.
16106     `S'
16107           A memory reference that refers to a constant address of known
16108           value.
16110     `T'
16111           The register indicated by Rx (not implemented yet).
16113     `U'
16114           A constant that is not between 2 and 15 inclusive.
16116     `Z'
16117           The constant 0.
16119 _Xtensa--`xtensa.h'_
16121     `a'
16122           General-purpose 32-bit register
16124     `b'
16125           One-bit boolean register
16127     `A'
16128           MAC16 40-bit accumulator register
16130     `I'
16131           Signed 12-bit integer constant, for use in MOVI instructions
16133     `J'
16134           Signed 8-bit integer constant, for use in ADDI instructions
16136     `K'
16137           Integer constant valid for BccI instructions
16139     `L'
16140           Unsigned constant valid for BccUI instructions
16142 \x1f
16143 File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Constraints,  Up: C Extensions
16145 Controlling Names Used in Assembler Code
16146 ========================================
16148  You can specify the name to be used in the assembler code for a C
16149 function or variable by writing the `asm' (or `__asm__') keyword after
16150 the declarator as follows:
16152      int foo asm ("myfoo") = 2;
16154 This specifies that the name to be used for the variable `foo' in the
16155 assembler code should be `myfoo' rather than the usual `_foo'.
16157  On systems where an underscore is normally prepended to the name of a C
16158 function or variable, this feature allows you to define names for the
16159 linker that do not start with an underscore.
16161  It does not make sense to use this feature with a non-static local
16162 variable since such variables do not have assembler names.  If you are
16163 trying to put the variable in a particular register, see *Note Explicit
16164 Reg Vars::.  GCC presently accepts such code with a warning, but will
16165 probably be changed to issue an error, rather than a warning, in the
16166 future.
16168  You cannot use `asm' in this way in a function _definition_; but you
16169 can get the same effect by writing a declaration for the function
16170 before its definition and putting `asm' there, like this:
16172      extern func () asm ("FUNC");
16173      
16174      func (x, y)
16175           int x, y;
16176      /* ... */
16178  It is up to you to make sure that the assembler names you choose do not
16179 conflict with any other assembler symbols.  Also, you must not use a
16180 register name; that would produce completely invalid assembler code.
16181 GCC does not as yet have the ability to store static variables in
16182 registers.  Perhaps that will be added.
16184 \x1f
16185 File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
16187 Variables in Specified Registers
16188 ================================
16190  GNU C allows you to put a few global variables into specified hardware
16191 registers.  You can also specify the register in which an ordinary
16192 register variable should be allocated.
16194    * Global register variables reserve registers throughout the program.
16195      This may be useful in programs such as programming language
16196      interpreters which have a couple of global variables that are
16197      accessed very often.
16199    * Local register variables in specific registers do not reserve the
16200      registers.  The compiler's data flow analysis is capable of
16201      determining where the specified registers contain live values, and
16202      where they are available for other uses.  Stores into local
16203      register variables may be deleted when they appear to be dead
16204      according to dataflow analysis.  References to local register
16205      variables may be deleted or moved or simplified.
16207      These local variables are sometimes convenient for use with the
16208      extended `asm' feature (*note Extended Asm::), if you want to
16209      write one output of the assembler instruction directly into a
16210      particular register.  (This will work provided the register you
16211      specify fits the constraints specified for that operand in the
16212      `asm'.)
16214 * Menu:
16216 * Global Reg Vars::
16217 * Local Reg Vars::
16219 \x1f
16220 File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
16222 Defining Global Register Variables
16223 ----------------------------------
16225  You can define a global register variable in GNU C like this:
16227      register int *foo asm ("a5");
16229 Here `a5' is the name of the register which should be used.  Choose a
16230 register which is normally saved and restored by function calls on your
16231 machine, so that library routines will not clobber it.
16233  Naturally the register name is cpu-dependent, so you would need to
16234 conditionalize your program according to cpu type.  The register `a5'
16235 would be a good choice on a 68000 for a variable of pointer type.  On
16236 machines with register windows, be sure to choose a "global" register
16237 that is not affected magically by the function call mechanism.
16239  In addition, operating systems on one type of cpu may differ in how
16240 they name the registers; then you would need additional conditionals.
16241 For example, some 68000 operating systems call this register `%a5'.
16243  Eventually there may be a way of asking the compiler to choose a
16244 register automatically, but first we need to figure out how it should
16245 choose and how to enable you to guide the choice.  No solution is
16246 evident.
16248  Defining a global register variable in a certain register reserves that
16249 register entirely for this use, at least within the current compilation.
16250 The register will not be allocated for any other purpose in the
16251 functions in the current compilation.  The register will not be saved
16252 and restored by these functions.  Stores into this register are never
16253 deleted even if they would appear to be dead, but references may be
16254 deleted or moved or simplified.
16256  It is not safe to access the global register variables from signal
16257 handlers, or from more than one thread of control, because the system
16258 library routines may temporarily use the register for other things
16259 (unless you recompile them specially for the task at hand).
16261  It is not safe for one function that uses a global register variable to
16262 call another such function `foo' by way of a third function `lose' that
16263 was compiled without knowledge of this variable (i.e. in a different
16264 source file in which the variable wasn't declared).  This is because
16265 `lose' might save the register and put some other value there.  For
16266 example, you can't expect a global register variable to be available in
16267 the comparison-function that you pass to `qsort', since `qsort' might
16268 have put something else in that register.  (If you are prepared to
16269 recompile `qsort' with the same global register variable, you can solve
16270 this problem.)
16272  If you want to recompile `qsort' or other source files which do not
16273 actually use your global register variable, so that they will not use
16274 that register for any other purpose, then it suffices to specify the
16275 compiler option `-ffixed-REG'.  You need not actually add a global
16276 register declaration to their source code.
16278  A function which can alter the value of a global register variable
16279 cannot safely be called from a function compiled without this variable,
16280 because it could clobber the value the caller expects to find there on
16281 return.  Therefore, the function which is the entry point into the part
16282 of the program that uses the global register variable must explicitly
16283 save and restore the value which belongs to its caller.
16285  On most machines, `longjmp' will restore to each global register
16286 variable the value it had at the time of the `setjmp'.  On some
16287 machines, however, `longjmp' will not change the value of global
16288 register variables.  To be portable, the function that called `setjmp'
16289 should make other arrangements to save the values of the global register
16290 variables, and to restore them in a `longjmp'.  This way, the same
16291 thing will happen regardless of what `longjmp' does.
16293  All global register variable declarations must precede all function
16294 definitions.  If such a declaration could appear after function
16295 definitions, the declaration would be too late to prevent the register
16296 from being used for other purposes in the preceding functions.
16298  Global register variables may not have initial values, because an
16299 executable file has no means to supply initial contents for a register.
16301  On the SPARC, there are reports that g3 ... g7 are suitable registers,
16302 but certain library functions, such as `getwd', as well as the
16303 subroutines for division and remainder, modify g3 and g4.  g1 and g2
16304 are local temporaries.
16306  On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
16307 course, it will not do to use more than a few of those.
16309 \x1f
16310 File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
16312 Specifying Registers for Local Variables
16313 ----------------------------------------
16315  You can define a local register variable with a specified register
16316 like this:
16318      register int *foo asm ("a5");
16320 Here `a5' is the name of the register which should be used.  Note that
16321 this is the same syntax used for defining global register variables,
16322 but for a local variable it would appear within a function.
16324  Naturally the register name is cpu-dependent, but this is not a
16325 problem, since specific registers are most often useful with explicit
16326 assembler instructions (*note Extended Asm::).  Both of these things
16327 generally require that you conditionalize your program according to cpu
16328 type.
16330  In addition, operating systems on one type of cpu may differ in how
16331 they name the registers; then you would need additional conditionals.
16332 For example, some 68000 operating systems call this register `%a5'.
16334  Defining such a register variable does not reserve the register; it
16335 remains available for other uses in places where flow control determines
16336 the variable's value is not live.  However, these registers are made
16337 unavailable for use in the reload pass; excessive use of this feature
16338 leaves the compiler too few available registers to compile certain
16339 functions.
16341  This option does not guarantee that GCC will generate code that has
16342 this variable in the register you specify at all times.  You may not
16343 code an explicit reference to this register in an `asm' statement and
16344 assume it will always refer to this variable.
16346  Stores into local register variables may be deleted when they appear
16347 to be dead according to dataflow analysis.  References to local
16348 register variables may be deleted or moved or simplified.
16350 \x1f
16351 File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
16353 Alternate Keywords
16354 ==================
16356  `-ansi' and the various `-std' options disable certain keywords.  This
16357 causes trouble when you want to use GNU C extensions, or a
16358 general-purpose header file that should be usable by all programs,
16359 including ISO C programs.  The keywords `asm', `typeof' and `inline'
16360 are not available in programs compiled with `-ansi' or `-std' (although
16361 `inline' can be used in a program compiled with `-std=c99').  The ISO
16362 C99 keyword `restrict' is only available when `-std=gnu99' (which will
16363 eventually be the default) or `-std=c99' (or the equivalent
16364 `-std=iso9899:1999') is used.
16366  The way to solve these problems is to put `__' at the beginning and
16367 end of each problematical keyword.  For example, use `__asm__' instead
16368 of `asm', and `__inline__' instead of `inline'.
16370  Other C compilers won't accept these alternative keywords; if you want
16371 to compile with another compiler, you can define the alternate keywords
16372 as macros to replace them with the customary keywords.  It looks like
16373 this:
16375      #ifndef __GNUC__
16376      #define __asm__ asm
16377      #endif
16379  `-pedantic' and other options cause warnings for many GNU C extensions.
16380 You can prevent such warnings within one expression by writing
16381 `__extension__' before the expression.  `__extension__' has no effect
16382 aside from this.
16384 \x1f
16385 File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
16387 Incomplete `enum' Types
16388 =======================
16390  You can define an `enum' tag without specifying its possible values.
16391 This results in an incomplete type, much like what you get if you write
16392 `struct foo' without describing the elements.  A later declaration
16393 which does specify the possible values completes the type.
16395  You can't allocate variables or storage using the type while it is
16396 incomplete.  However, you can work with pointers to that type.
16398  This extension may not be very useful, but it makes the handling of
16399 `enum' more consistent with the way `struct' and `union' are handled.
16401  This extension is not supported by GNU C++.
16403 \x1f
16404 File: gcc.info,  Node: Function Names,  Next: Return Address,  Prev: Incomplete Enums,  Up: C Extensions
16406 Function Names as Strings
16407 =========================
16409  GCC provides three magic variables which hold the name of the current
16410 function, as a string.  The first of these is `__func__', which is part
16411 of the C99 standard:
16413      The identifier `__func__' is implicitly declared by the translator
16414      as if, immediately following the opening brace of each function
16415      definition, the declaration
16416           static const char __func__[] = "function-name";
16417      
16418      appeared, where function-name is the name of the lexically-enclosing
16419      function.  This name is the unadorned name of the function.
16421  `__FUNCTION__' is another name for `__func__'.  Older versions of GCC
16422 recognize only this name.  However, it is not standardized.  For
16423 maximum portability, we recommend you use `__func__', but provide a
16424 fallback definition with the preprocessor:
16426      #if __STDC_VERSION__ < 199901L
16427      # if __GNUC__ >= 2
16428      #  define __func__ __FUNCTION__
16429      # else
16430      #  define __func__ "<unknown>"
16431      # endif
16432      #endif
16434  In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
16435 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
16436 the function as well as its bare name.  For example, this program:
16438      extern "C" {
16439      extern int printf (char *, ...);
16440      }
16441      
16442      class a {
16443       public:
16444        void sub (int i)
16445          {
16446            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
16447            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
16448          }
16449      };
16450      
16451      int
16452      main (void)
16453      {
16454        a ax;
16455        ax.sub (0);
16456        return 0;
16457      }
16459 gives this output:
16461      __FUNCTION__ = sub
16462      __PRETTY_FUNCTION__ = void a::sub(int)
16464  These identifiers are not preprocessor macros.  In GCC 3.3 and
16465 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
16466 treated as string literals; they could be used to initialize `char'
16467 arrays, and they could be concatenated with other string literals.  GCC
16468 3.4 and later treat them as variables, like `__func__'.  In C++,
16469 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
16471 \x1f
16472 File: gcc.info,  Node: Return Address,  Next: Vector Extensions,  Prev: Function Names,  Up: C Extensions
16474 Getting the Return or Frame Address of a Function
16475 =================================================
16477  These functions may be used to get information about the callers of a
16478 function.
16480  - Built-in Function: void * __builtin_return_address (unsigned int
16481           LEVEL)
16482      This function returns the return address of the current function,
16483      or of one of its callers.  The LEVEL argument is number of frames
16484      to scan up the call stack.  A value of `0' yields the return
16485      address of the current function, a value of `1' yields the return
16486      address of the caller of the current function, and so forth. When
16487      inlining the expected behavior is that the function will return
16488      the address of the function that will be returned to.  To work
16489      around this behavior use the `noinline' function attribute.
16491      The LEVEL argument must be a constant integer.
16493      On some machines it may be impossible to determine the return
16494      address of any function other than the current one; in such cases,
16495      or when the top of the stack has been reached, this function will
16496      return `0' or a random value. In addition,
16497      `__builtin_frame_address' may be used to determine if the top of
16498      the stack has been reached.
16500      This function should only be used with a nonzero argument for
16501      debugging purposes.
16503  - Built-in Function: void * __builtin_frame_address (unsigned int
16504           LEVEL)
16505      This function is similar to `__builtin_return_address', but it
16506      returns the address of the function frame rather than the return
16507      address of the function.  Calling `__builtin_frame_address' with a
16508      value of `0' yields the frame address of the current function, a
16509      value of `1' yields the frame address of the caller of the current
16510      function, and so forth.
16512      The frame is the area on the stack which holds local variables and
16513      saved registers.  The frame address is normally the address of the
16514      first word pushed on to the stack by the function.  However, the
16515      exact definition depends upon the processor and the calling
16516      convention.  If the processor has a dedicated frame pointer
16517      register, and the function has a frame, then
16518      `__builtin_frame_address' will return the value of the frame
16519      pointer register.
16521      On some machines it may be impossible to determine the frame
16522      address of any function other than the current one; in such cases,
16523      or when the top of the stack has been reached, this function will
16524      return `0' if the first frame pointer is properly initialized by
16525      the startup code.
16527      This function should only be used with a nonzero argument for
16528      debugging purposes.
16530 \x1f
16531 File: gcc.info,  Node: Vector Extensions,  Next: Other Builtins,  Prev: Return Address,  Up: C Extensions
16533 Using vector instructions through built-in functions
16534 ====================================================
16536  On some targets, the instruction set contains SIMD vector instructions
16537 that operate on multiple values contained in one large register at the
16538 same time.  For example, on the i386 the MMX, 3Dnow! and SSE extensions
16539 can be used this way.
16541  The first step in using these extensions is to provide the necessary
16542 data types.  This should be done using an appropriate `typedef':
16544      typedef int v4si __attribute__ ((mode(V4SI)));
16546  The base type `int' is effectively ignored by the compiler, the actual
16547 properties of the new type `v4si' are defined by the `__attribute__'.
16548 It defines the machine mode to be used; for vector types these have the
16549 form `VNB'; N should be the number of elements in the vector, and B
16550 should be the base mode of the individual elements.  The following can
16551 be used as base modes:
16553 `QI'
16554      An integer that is as wide as the smallest addressable unit,
16555      usually 8 bits.
16557 `HI'
16558      An integer, twice as wide as a QI mode integer, usually 16 bits.
16560 `SI'
16561      An integer, four times as wide as a QI mode integer, usually 32
16562      bits.
16564 `DI'
16565      An integer, eight times as wide as a QI mode integer, usually 64
16566      bits.
16568 `SF'
16569      A floating point value, as wide as a SI mode integer, usually 32
16570      bits.
16572 `DF'
16573      A floating point value, as wide as a DI mode integer, usually 64
16574      bits.
16576  Specifying a combination that is not valid for the current architecture
16577 will cause GCC to synthesize the instructions using a narrower mode.
16578 For example, if you specify a variable of type `V4SI' and your
16579 architecture does not allow for this specific SIMD type, GCC will
16580 produce code that uses 4 `SIs'.
16582  The types defined in this manner can be used with a subset of normal C
16583 operations.  Currently, GCC will allow using the following operators on
16584 these types: `+, -, *, /, unary minus, ^, |, &, ~'.
16586  The operations behave like C++ `valarrays'.  Addition is defined as
16587 the addition of the corresponding elements of the operands.  For
16588 example, in the code below, each of the 4 elements in A will be added
16589 to the corresponding 4 elements in B and the resulting vector will be
16590 stored in C.
16592      typedef int v4si __attribute__ ((mode(V4SI)));
16593      
16594      v4si a, b, c;
16595      
16596      c = a + b;
16598  Subtraction, multiplication, division, and the logical operations
16599 operate in a similar manner.  Likewise, the result of using the unary
16600 minus or complement operators on a vector type is a vector whose
16601 elements are the negative or complemented values of the corresponding
16602 elements in the operand.
16604  You can declare variables and use them in function calls and returns,
16605 as well as in assignments and some casts.  You can specify a vector
16606 type as a return type for a function.  Vector types can also be used as
16607 function arguments.  It is possible to cast from one vector type to
16608 another, provided they are of the same size (in fact, you can also cast
16609 vectors to and from other datatypes of the same size).
16611  You cannot operate between vectors of different lengths or different
16612 signedness without a cast.
16614  A port that supports hardware vector operations, usually provides a set
16615 of built-in functions that can be used to operate on vectors.  For
16616 example, a function to add two vectors and multiply the result by a
16617 third could look like this:
16619      v4si f (v4si a, v4si b, v4si c)
16620      {
16621        v4si tmp = __builtin_addv4si (a, b);
16622        return __builtin_mulv4si (tmp, c);
16623      }
16625 \x1f
16626 File: gcc.info,  Node: Other Builtins,  Next: Target Builtins,  Prev: Vector Extensions,  Up: C Extensions
16628 Other built-in functions provided by GCC
16629 ========================================
16631  GCC provides a large number of built-in functions other than the ones
16632 mentioned above.  Some of these are for internal use in the processing
16633 of exceptions or variable-length argument lists and will not be
16634 documented here because they may change from time to time; we do not
16635 recommend general use of these functions.
16637  The remaining functions are provided for optimization purposes.
16639  GCC includes built-in versions of many of the functions in the standard
16640 C library.  The versions prefixed with `__builtin_' will always be
16641 treated as having the same meaning as the C library function even if you
16642 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of
16643 these functions are only optimized in certain cases; if they are not
16644 optimized in a particular case, a call to the library function will be
16645 emitted.
16647  Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
16648 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
16649 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
16650 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
16651 `gamma', `gettext', `index', `j0f', `j0l', `j0', `j1f', `j1l', `j1',
16652 `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10',
16653 `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb',
16654 `significandf', `significandl', `significand', `sincosf', `sincosl',
16655 `sincos', `stpcpy', `strdup', `strfmon', `y0f', `y0l', `y0', `y1f',
16656 `y1l', `y1', `ynf', `ynl' and `yn' may be handled as built-in functions.
16657 All these functions have corresponding versions prefixed with
16658 `__builtin_', which may be used even in strict C89 mode.
16660  The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
16661 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
16662 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
16663 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
16664 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
16665 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
16666 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
16667 `cimag', `conjf', `conjl', `conj', `copysignf', `copysignl',
16668 `copysign', `cpowf', `cpowl', `cpow', `cprojf', `cprojl', `cproj',
16669 `crealf', `creall', `creal', `csinf', `csinhf', `csinhl', `csinh',
16670 `csinl', `csin', `csqrtf', `csqrtl', `csqrt', `ctanf', `ctanhf',
16671 `ctanhl', `ctanh', `ctanl', `ctan', `erfcf', `erfcl', `erfc', `erff',
16672 `erfl', `erf', `exp2f', `exp2l', `exp2', `expm1f', `expm1l', `expm1',
16673 `fdimf', `fdiml', `fdim', `fmaf', `fmal', `fmaxf', `fmaxl', `fmax',
16674 `fma', `fminf', `fminl', `fmin', `hypotf', `hypotl', `hypot', `ilogbf',
16675 `ilogbl', `ilogb', `imaxabs', `lgammaf', `lgammal', `lgamma', `llabs',
16676 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
16677 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf', `logbl',
16678 `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl', `lround',
16679 `nearbyintf', `nearbyintl', `nearbyint', `nextafterf', `nextafterl',
16680 `nextafter', `nexttowardf', `nexttowardl', `nexttoward', `remainderf',
16681 `remainderl', `remainder', `remquof', `remquol', `remquo', `rintf',
16682 `rintl', `rint', `roundf', `roundl', `round', `scalblnf', `scalblnl',
16683 `scalbln', `scalbnf', `scalbnl', `scalbn', `snprintf', `tgammaf',
16684 `tgammal', `tgamma', `truncf', `truncl', `trunc', `vfscanf', `vscanf',
16685 `vsnprintf' and `vsscanf' are handled as built-in functions except in
16686 strict ISO C90 mode (`-ansi' or `-std=c89').
16688  There are also built-in versions of the ISO C99 functions `acosf',
16689 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
16690 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
16691 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
16692 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
16693 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
16694 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
16695 recognized in any mode since ISO C90 reserves these names for the
16696 purpose to which ISO C99 puts them.  All these functions have
16697 corresponding versions prefixed with `__builtin_'.
16699  The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
16700 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
16701 `fprintf', `fputs', `frexp', `fscanf', `labs', `ldexp', `log10', `log',
16702 `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf',
16703 `putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf',
16704 `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn',
16705 `strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr',
16706 `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf'
16707 are all recognized as built-in functions unless `-fno-builtin' is
16708 specified (or `-fno-builtin-FUNCTION' is specified for an individual
16709 function).  All of these functions have corresponding versions prefixed
16710 with `__builtin_'.
16712  GCC provides built-in versions of the ISO C99 floating point comparison
16713 macros that avoid raising exceptions for unordered operands.  They have
16714 the same names as the standard macros ( `isgreater', `isgreaterequal',
16715 `isless', `islessequal', `islessgreater', and `isunordered') , with
16716 `__builtin_' prefixed.  We intend for a library implementor to be able
16717 to simply `#define' each standard macro to its built-in equivalent.
16719  - Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
16720      You can use the built-in function `__builtin_types_compatible_p' to
16721      determine whether two types are the same.
16723      This built-in function returns 1 if the unqualified versions of the
16724      types TYPE1 and TYPE2 (which are types, not expressions) are
16725      compatible, 0 otherwise.  The result of this built-in function can
16726      be used in integer constant expressions.
16728      This built-in function ignores top level qualifiers (e.g., `const',
16729      `volatile').  For example, `int' is equivalent to `const int'.
16731      The type `int[]' and `int[5]' are compatible.  On the other hand,
16732      `int' and `char *' are not compatible, even if the size of their
16733      types, on the particular architecture are the same.  Also, the
16734      amount of pointer indirection is taken into account when
16735      determining similarity.  Consequently, `short *' is not similar to
16736      `short **'.  Furthermore, two types that are typedefed are
16737      considered compatible if their underlying types are compatible.
16739      An `enum' type is not considered to be compatible with another
16740      `enum' type even if both are compatible with the same integer
16741      type; this is what the C standard specifies.  For example, `enum
16742      {foo, bar}' is not similar to `enum {hot, dog}'.
16744      You would typically use this function in code whose execution
16745      varies depending on the arguments' types.  For example:
16747           #define foo(x)                                                  \
16748             ({                                                           \
16749               typeof (x) tmp;                                             \
16750               if (__builtin_types_compatible_p (typeof (x), long double)) \
16751                 tmp = foo_long_double (tmp);                              \
16752               else if (__builtin_types_compatible_p (typeof (x), double)) \
16753                 tmp = foo_double (tmp);                                   \
16754               else if (__builtin_types_compatible_p (typeof (x), float))  \
16755                 tmp = foo_float (tmp);                                    \
16756               else                                                        \
16757                 abort ();                                                 \
16758               tmp;                                                        \
16759             })
16761      _Note:_ This construct is only available for C.
16764  - Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, EXP2)
16765      You can use the built-in function `__builtin_choose_expr' to
16766      evaluate code depending on the value of a constant expression.
16767      This built-in function returns EXP1 if CONST_EXP, which is a
16768      constant expression that must be able to be determined at compile
16769      time, is nonzero.  Otherwise it returns 0.
16771      This built-in function is analogous to the `? :' operator in C,
16772      except that the expression returned has its type unaltered by
16773      promotion rules.  Also, the built-in function does not evaluate
16774      the expression that was not chosen.  For example, if CONST_EXP
16775      evaluates to true, EXP2 is not evaluated even if it has
16776      side-effects.
16778      This built-in function can return an lvalue if the chosen argument
16779      is an lvalue.
16781      If EXP1 is returned, the return type is the same as EXP1's type.
16782      Similarly, if EXP2 is returned, its return type is the same as
16783      EXP2.
16785      Example:
16787           #define foo(x)                                                    \
16788             __builtin_choose_expr (                                         \
16789               __builtin_types_compatible_p (typeof (x), double),            \
16790               foo_double (x),                                               \
16791               __builtin_choose_expr (                                       \
16792                 __builtin_types_compatible_p (typeof (x), float),           \
16793                 foo_float (x),                                              \
16794                 /* The void expression results in a compile-time error  \
16795                    when assigning the result to something.  */          \
16796                 (void)0))
16798      _Note:_ This construct is only available for C.  Furthermore, the
16799      unused expression (EXP1 or EXP2 depending on the value of
16800      CONST_EXP) may still generate syntax errors.  This may change in
16801      future revisions.
16804  - Built-in Function: int __builtin_constant_p (EXP)
16805      You can use the built-in function `__builtin_constant_p' to
16806      determine if a value is known to be constant at compile-time and
16807      hence that GCC can perform constant-folding on expressions
16808      involving that value.  The argument of the function is the value
16809      to test.  The function returns the integer 1 if the argument is
16810      known to be a compile-time constant and 0 if it is not known to be
16811      a compile-time constant.  A return of 0 does not indicate that the
16812      value is _not_ a constant, but merely that GCC cannot prove it is
16813      a constant with the specified value of the `-O' option.
16815      You would typically use this function in an embedded application
16816      where memory was a critical resource.  If you have some complex
16817      calculation, you may want it to be folded if it involves
16818      constants, but need to call a function if it does not.  For
16819      example:
16821           #define Scale_Value(X)      \
16822             (__builtin_constant_p (X) \
16823             ? ((X) * SCALE + OFFSET) : Scale (X))
16825      You may use this built-in function in either a macro or an inline
16826      function.  However, if you use it in an inlined function and pass
16827      an argument of the function as the argument to the built-in, GCC
16828      will never return 1 when you call the inline function with a
16829      string constant or compound literal (*note Compound Literals::)
16830      and will not return 1 when you pass a constant numeric value to
16831      the inline function unless you specify the `-O' option.
16833      You may also use `__builtin_constant_p' in initializers for static
16834      data.  For instance, you can write
16836           static const int table[] = {
16837              __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
16838              /* ... */
16839           };
16841      This is an acceptable initializer even if EXPRESSION is not a
16842      constant expression.  GCC must be more conservative about
16843      evaluating the built-in in this case, because it has no
16844      opportunity to perform optimization.
16846      Previous versions of GCC did not accept this built-in in data
16847      initializers.  The earliest version where it is completely safe is
16848      3.0.1.
16850  - Built-in Function: long __builtin_expect (long EXP, long C)
16851      You may use `__builtin_expect' to provide the compiler with branch
16852      prediction information.  In general, you should prefer to use
16853      actual profile feedback for this (`-fprofile-arcs'), as
16854      programmers are notoriously bad at predicting how their programs
16855      actually perform.  However, there are applications in which this
16856      data is hard to collect.
16858      The return value is the value of EXP, which should be an integral
16859      expression.  The value of C must be a compile-time constant.  The
16860      semantics of the built-in are that it is expected that EXP == C.
16861      For example:
16863           if (__builtin_expect (x, 0))
16864             foo ();
16866      would indicate that we do not expect to call `foo', since we
16867      expect `x' to be zero.  Since you are limited to integral
16868      expressions for EXP, you should use constructions such as
16870           if (__builtin_expect (ptr != NULL, 1))
16871             error ();
16873      when testing pointer or floating-point values.
16875  - Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
16876      This function is used to minimize cache-miss latency by moving
16877      data into a cache before it is accessed.  You can insert calls to
16878      `__builtin_prefetch' into code for which you know addresses of
16879      data in memory that is likely to be accessed soon.  If the target
16880      supports them, data prefetch instructions will be generated.  If
16881      the prefetch is done early enough before the access then the data
16882      will be in the cache by the time it is accessed.
16884      The value of ADDR is the address of the memory to prefetch.  There
16885      are two optional arguments, RW and LOCALITY.  The value of RW is a
16886      compile-time constant one or zero; one means that the prefetch is
16887      preparing for a write to the memory address and zero, the default,
16888      means that the prefetch is preparing for a read.  The value
16889      LOCALITY must be a compile-time constant integer between zero and
16890      three.  A value of zero means that the data has no temporal
16891      locality, so it need not be left in the cache after the access.  A
16892      value of three means that the data has a high degree of temporal
16893      locality and should be left in all levels of cache possible.
16894      Values of one and two mean, respectively, a low or moderate degree
16895      of temporal locality.  The default is three.
16897           for (i = 0; i < n; i++)
16898             {
16899               a[i] = a[i] + b[i];
16900               __builtin_prefetch (&a[i+j], 1, 1);
16901               __builtin_prefetch (&b[i+j], 0, 1);
16902               /* ... */
16903             }
16905      Data prefetch does not generate faults if ADDR is invalid, but the
16906      address expression itself must be valid.  For example, a prefetch
16907      of `p->next' will not fault if `p->next' is not a valid address,
16908      but evaluation will fault if `p' is not a valid address.
16910      If the target does not support data prefetch, the address
16911      expression is evaluated if it includes side effects but no other
16912      code is generated and GCC does not issue a warning.
16914  - Built-in Function: double __builtin_huge_val (void)
16915      Returns a positive infinity, if supported by the floating-point
16916      format, else `DBL_MAX'.  This function is suitable for
16917      implementing the ISO C macro `HUGE_VAL'.
16919  - Built-in Function: float __builtin_huge_valf (void)
16920      Similar to `__builtin_huge_val', except the return type is `float'.
16922  - Built-in Function: long double __builtin_huge_vall (void)
16923      Similar to `__builtin_huge_val', except the return type is `long
16924      double'.
16926  - Built-in Function: double __builtin_inf (void)
16927      Similar to `__builtin_huge_val', except a warning is generated if
16928      the target floating-point format does not support infinities.
16929      This function is suitable for implementing the ISO C99 macro
16930      `INFINITY'.
16932  - Built-in Function: float __builtin_inff (void)
16933      Similar to `__builtin_inf', except the return type is `float'.
16935  - Built-in Function: long double __builtin_infl (void)
16936      Similar to `__builtin_inf', except the return type is `long
16937      double'.
16939  - Built-in Function: double __builtin_nan (const char *str)
16940      This is an implementation of the ISO C99 function `nan'.
16942      Since ISO C99 defines this function in terms of `strtod', which we
16943      do not implement, a description of the parsing is in order.  The
16944      string is parsed as by `strtol'; that is, the base is recognized by
16945      leading `0' or `0x' prefixes.  The number parsed is placed in the
16946      significand such that the least significant bit of the number is
16947      at the least significant bit of the significand.  The number is
16948      truncated to fit the significand field provided.  The significand
16949      is forced to be a quiet NaN.
16951      This function, if given a string literal, is evaluated early enough
16952      that it is considered a compile-time constant.
16954  - Built-in Function: float __builtin_nanf (const char *str)
16955      Similar to `__builtin_nan', except the return type is `float'.
16957  - Built-in Function: long double __builtin_nanl (const char *str)
16958      Similar to `__builtin_nan', except the return type is `long
16959      double'.
16961  - Built-in Function: double __builtin_nans (const char *str)
16962      Similar to `__builtin_nan', except the significand is forced to be
16963      a signaling NaN.  The `nans' function is proposed by WG14 N965.
16965  - Built-in Function: float __builtin_nansf (const char *str)
16966      Similar to `__builtin_nans', except the return type is `float'.
16968  - Built-in Function: long double __builtin_nansl (const char *str)
16969      Similar to `__builtin_nans', except the return type is `long
16970      double'.
16972  - Built-in Function: int __builtin_ffs (unsigned int x)
16973      Returns one plus the index of the least significant 1-bit of X, or
16974      if X is zero, returns zero.
16976  - Built-in Function: int __builtin_clz (unsigned int x)
16977      Returns the number of leading 0-bits in X, starting at the most
16978      significant bit position.  If X is 0, the result is undefined.
16980  - Built-in Function: int __builtin_ctz (unsigned int x)
16981      Returns the number of trailing 0-bits in X, starting at the least
16982      significant bit position.  If X is 0, the result is undefined.
16984  - Built-in Function: int __builtin_popcount (unsigned int x)
16985      Returns the number of 1-bits in X.
16987  - Built-in Function: int __builtin_parity (unsigned int x)
16988      Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
16990  - Built-in Function: int __builtin_ffsl (unsigned long)
16991      Similar to `__builtin_ffs', except the argument type is `unsigned
16992      long'.
16994  - Built-in Function: int __builtin_clzl (unsigned long)
16995      Similar to `__builtin_clz', except the argument type is `unsigned
16996      long'.
16998  - Built-in Function: int __builtin_ctzl (unsigned long)
16999      Similar to `__builtin_ctz', except the argument type is `unsigned
17000      long'.
17002  - Built-in Function: int __builtin_popcountl (unsigned long)
17003      Similar to `__builtin_popcount', except the argument type is
17004      `unsigned long'.
17006  - Built-in Function: int __builtin_parityl (unsigned long)
17007      Similar to `__builtin_parity', except the argument type is
17008      `unsigned long'.
17010  - Built-in Function: int __builtin_ffsll (unsigned long long)
17011      Similar to `__builtin_ffs', except the argument type is `unsigned
17012      long long'.
17014  - Built-in Function: int __builtin_clzll (unsigned long long)
17015      Similar to `__builtin_clz', except the argument type is `unsigned
17016      long long'.
17018  - Built-in Function: int __builtin_ctzll (unsigned long long)
17019      Similar to `__builtin_ctz', except the argument type is `unsigned
17020      long long'.
17022  - Built-in Function: int __builtin_popcountll (unsigned long long)
17023      Similar to `__builtin_popcount', except the argument type is
17024      `unsigned long long'.
17026  - Built-in Function: int __builtin_parityll (unsigned long long)
17027      Similar to `__builtin_parity', except the argument type is
17028      `unsigned long long'.
17030 \x1f
17031 File: gcc.info,  Node: Target Builtins,  Next: Pragmas,  Prev: Other Builtins,  Up: C Extensions
17033 Built-in Functions Specific to Particular Target Machines
17034 =========================================================
17036  On some target machines, GCC supports many built-in functions specific
17037 to those machines.  Generally these generate calls to specific machine
17038 instructions, but allow the compiler to schedule those calls.
17040 * Menu:
17042 * Alpha Built-in Functions::
17043 * ARM Built-in Functions::
17044 * X86 Built-in Functions::
17045 * PowerPC AltiVec Built-in Functions::
17047 \x1f
17048 File: gcc.info,  Node: Alpha Built-in Functions,  Next: ARM Built-in Functions,  Up: Target Builtins
17050 Alpha Built-in Functions
17051 ------------------------
17053  These built-in functions are available for the Alpha family of
17054 processors, depending on the command-line switches used.
17056  The following built-in functions are always available.  They all
17057 generate the machine instruction that is part of the name.
17059      long __builtin_alpha_implver (void)
17060      long __builtin_alpha_rpcc (void)
17061      long __builtin_alpha_amask (long)
17062      long __builtin_alpha_cmpbge (long, long)
17063      long __builtin_alpha_extbl (long, long)
17064      long __builtin_alpha_extwl (long, long)
17065      long __builtin_alpha_extll (long, long)
17066      long __builtin_alpha_extql (long, long)
17067      long __builtin_alpha_extwh (long, long)
17068      long __builtin_alpha_extlh (long, long)
17069      long __builtin_alpha_extqh (long, long)
17070      long __builtin_alpha_insbl (long, long)
17071      long __builtin_alpha_inswl (long, long)
17072      long __builtin_alpha_insll (long, long)
17073      long __builtin_alpha_insql (long, long)
17074      long __builtin_alpha_inswh (long, long)
17075      long __builtin_alpha_inslh (long, long)
17076      long __builtin_alpha_insqh (long, long)
17077      long __builtin_alpha_mskbl (long, long)
17078      long __builtin_alpha_mskwl (long, long)
17079      long __builtin_alpha_mskll (long, long)
17080      long __builtin_alpha_mskql (long, long)
17081      long __builtin_alpha_mskwh (long, long)
17082      long __builtin_alpha_msklh (long, long)
17083      long __builtin_alpha_mskqh (long, long)
17084      long __builtin_alpha_umulh (long, long)
17085      long __builtin_alpha_zap (long, long)
17086      long __builtin_alpha_zapnot (long, long)
17088  The following built-in functions are always with `-mmax' or
17089 `-mcpu=CPU' where CPU is `pca56' or later.  They all generate the
17090 machine instruction that is part of the name.
17092      long __builtin_alpha_pklb (long)
17093      long __builtin_alpha_pkwb (long)
17094      long __builtin_alpha_unpkbl (long)
17095      long __builtin_alpha_unpkbw (long)
17096      long __builtin_alpha_minub8 (long, long)
17097      long __builtin_alpha_minsb8 (long, long)
17098      long __builtin_alpha_minuw4 (long, long)
17099      long __builtin_alpha_minsw4 (long, long)
17100      long __builtin_alpha_maxub8 (long, long)
17101      long __builtin_alpha_maxsb8 (long, long)
17102      long __builtin_alpha_maxuw4 (long, long)
17103      long __builtin_alpha_maxsw4 (long, long)
17104      long __builtin_alpha_perr (long, long)
17106  The following built-in functions are always with `-mcix' or
17107 `-mcpu=CPU' where CPU is `ev67' or later.  They all generate the
17108 machine instruction that is part of the name.
17110      long __builtin_alpha_cttz (long)
17111      long __builtin_alpha_ctlz (long)
17112      long __builtin_alpha_ctpop (long)
17114  The following builtins are available on systems that use the OSF/1
17115 PALcode.  Normally they invoke the `rduniq' and `wruniq' PAL calls, but
17116 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
17118      void *__builtin_thread_pointer (void)
17119      void __builtin_set_thread_pointer (void *)
17121 \x1f
17122 File: gcc.info,  Node: ARM Built-in Functions,  Next: X86 Built-in Functions,  Prev: Alpha Built-in Functions,  Up: Target Builtins
17124 ARM Built-in Functions
17125 ----------------------
17127  These built-in functions are available for the ARM family of
17128 processors, when the `-mcpu=iwmmxt' switch is used:
17130      typedef int v2si __attribute__ ((vector_size (8)));
17131      typedef short v4hi __attribute__ ((vector_size (8)));
17132      typedef char v8qi __attribute__ ((vector_size (8)));
17133      
17134      int __builtin_arm_getwcx (int)
17135      void __builtin_arm_setwcx (int, int)
17136      int __builtin_arm_textrmsb (v8qi, int)
17137      int __builtin_arm_textrmsh (v4hi, int)
17138      int __builtin_arm_textrmsw (v2si, int)
17139      int __builtin_arm_textrmub (v8qi, int)
17140      int __builtin_arm_textrmuh (v4hi, int)
17141      int __builtin_arm_textrmuw (v2si, int)
17142      v8qi __builtin_arm_tinsrb (v8qi, int)
17143      v4hi __builtin_arm_tinsrh (v4hi, int)
17144      v2si __builtin_arm_tinsrw (v2si, int)
17145      long long __builtin_arm_tmia (long long, int, int)
17146      long long __builtin_arm_tmiabb (long long, int, int)
17147      long long __builtin_arm_tmiabt (long long, int, int)
17148      long long __builtin_arm_tmiaph (long long, int, int)
17149      long long __builtin_arm_tmiatb (long long, int, int)
17150      long long __builtin_arm_tmiatt (long long, int, int)
17151      int __builtin_arm_tmovmskb (v8qi)
17152      int __builtin_arm_tmovmskh (v4hi)
17153      int __builtin_arm_tmovmskw (v2si)
17154      long long __builtin_arm_waccb (v8qi)
17155      long long __builtin_arm_wacch (v4hi)
17156      long long __builtin_arm_waccw (v2si)
17157      v8qi __builtin_arm_waddb (v8qi, v8qi)
17158      v8qi __builtin_arm_waddbss (v8qi, v8qi)
17159      v8qi __builtin_arm_waddbus (v8qi, v8qi)
17160      v4hi __builtin_arm_waddh (v4hi, v4hi)
17161      v4hi __builtin_arm_waddhss (v4hi, v4hi)
17162      v4hi __builtin_arm_waddhus (v4hi, v4hi)
17163      v2si __builtin_arm_waddw (v2si, v2si)
17164      v2si __builtin_arm_waddwss (v2si, v2si)
17165      v2si __builtin_arm_waddwus (v2si, v2si)
17166      v8qi __builtin_arm_walign (v8qi, v8qi, int)
17167      long long __builtin_arm_wand(long long, long long)
17168      long long __builtin_arm_wandn (long long, long long)
17169      v8qi __builtin_arm_wavg2b (v8qi, v8qi)
17170      v8qi __builtin_arm_wavg2br (v8qi, v8qi)
17171      v4hi __builtin_arm_wavg2h (v4hi, v4hi)
17172      v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
17173      v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
17174      v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
17175      v2si __builtin_arm_wcmpeqw (v2si, v2si)
17176      v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
17177      v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
17178      v2si __builtin_arm_wcmpgtsw (v2si, v2si)
17179      v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
17180      v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
17181      v2si __builtin_arm_wcmpgtuw (v2si, v2si)
17182      long long __builtin_arm_wmacs (long long, v4hi, v4hi)
17183      long long __builtin_arm_wmacsz (v4hi, v4hi)
17184      long long __builtin_arm_wmacu (long long, v4hi, v4hi)
17185      long long __builtin_arm_wmacuz (v4hi, v4hi)
17186      v4hi __builtin_arm_wmadds (v4hi, v4hi)
17187      v4hi __builtin_arm_wmaddu (v4hi, v4hi)
17188      v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
17189      v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
17190      v2si __builtin_arm_wmaxsw (v2si, v2si)
17191      v8qi __builtin_arm_wmaxub (v8qi, v8qi)
17192      v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
17193      v2si __builtin_arm_wmaxuw (v2si, v2si)
17194      v8qi __builtin_arm_wminsb (v8qi, v8qi)
17195      v4hi __builtin_arm_wminsh (v4hi, v4hi)
17196      v2si __builtin_arm_wminsw (v2si, v2si)
17197      v8qi __builtin_arm_wminub (v8qi, v8qi)
17198      v4hi __builtin_arm_wminuh (v4hi, v4hi)
17199      v2si __builtin_arm_wminuw (v2si, v2si)
17200      v4hi __builtin_arm_wmulsm (v4hi, v4hi)
17201      v4hi __builtin_arm_wmulul (v4hi, v4hi)
17202      v4hi __builtin_arm_wmulum (v4hi, v4hi)
17203      long long __builtin_arm_wor (long long, long long)
17204      v2si __builtin_arm_wpackdss (long long, long long)
17205      v2si __builtin_arm_wpackdus (long long, long long)
17206      v8qi __builtin_arm_wpackhss (v4hi, v4hi)
17207      v8qi __builtin_arm_wpackhus (v4hi, v4hi)
17208      v4hi __builtin_arm_wpackwss (v2si, v2si)
17209      v4hi __builtin_arm_wpackwus (v2si, v2si)
17210      long long __builtin_arm_wrord (long long, long long)
17211      long long __builtin_arm_wrordi (long long, int)
17212      v4hi __builtin_arm_wrorh (v4hi, long long)
17213      v4hi __builtin_arm_wrorhi (v4hi, int)
17214      v2si __builtin_arm_wrorw (v2si, long long)
17215      v2si __builtin_arm_wrorwi (v2si, int)
17216      v2si __builtin_arm_wsadb (v8qi, v8qi)
17217      v2si __builtin_arm_wsadbz (v8qi, v8qi)
17218      v2si __builtin_arm_wsadh (v4hi, v4hi)
17219      v2si __builtin_arm_wsadhz (v4hi, v4hi)
17220      v4hi __builtin_arm_wshufh (v4hi, int)
17221      long long __builtin_arm_wslld (long long, long long)
17222      long long __builtin_arm_wslldi (long long, int)
17223      v4hi __builtin_arm_wsllh (v4hi, long long)
17224      v4hi __builtin_arm_wsllhi (v4hi, int)
17225      v2si __builtin_arm_wsllw (v2si, long long)
17226      v2si __builtin_arm_wsllwi (v2si, int)
17227      long long __builtin_arm_wsrad (long long, long long)
17228      long long __builtin_arm_wsradi (long long, int)
17229      v4hi __builtin_arm_wsrah (v4hi, long long)
17230      v4hi __builtin_arm_wsrahi (v4hi, int)
17231      v2si __builtin_arm_wsraw (v2si, long long)
17232      v2si __builtin_arm_wsrawi (v2si, int)
17233      long long __builtin_arm_wsrld (long long, long long)
17234      long long __builtin_arm_wsrldi (long long, int)
17235      v4hi __builtin_arm_wsrlh (v4hi, long long)
17236      v4hi __builtin_arm_wsrlhi (v4hi, int)
17237      v2si __builtin_arm_wsrlw (v2si, long long)
17238      v2si __builtin_arm_wsrlwi (v2si, int)
17239      v8qi __builtin_arm_wsubb (v8qi, v8qi)
17240      v8qi __builtin_arm_wsubbss (v8qi, v8qi)
17241      v8qi __builtin_arm_wsubbus (v8qi, v8qi)
17242      v4hi __builtin_arm_wsubh (v4hi, v4hi)
17243      v4hi __builtin_arm_wsubhss (v4hi, v4hi)
17244      v4hi __builtin_arm_wsubhus (v4hi, v4hi)
17245      v2si __builtin_arm_wsubw (v2si, v2si)
17246      v2si __builtin_arm_wsubwss (v2si, v2si)
17247      v2si __builtin_arm_wsubwus (v2si, v2si)
17248      v4hi __builtin_arm_wunpckehsb (v8qi)
17249      v2si __builtin_arm_wunpckehsh (v4hi)
17250      long long __builtin_arm_wunpckehsw (v2si)
17251      v4hi __builtin_arm_wunpckehub (v8qi)
17252      v2si __builtin_arm_wunpckehuh (v4hi)
17253      long long __builtin_arm_wunpckehuw (v2si)
17254      v4hi __builtin_arm_wunpckelsb (v8qi)
17255      v2si __builtin_arm_wunpckelsh (v4hi)
17256      long long __builtin_arm_wunpckelsw (v2si)
17257      v4hi __builtin_arm_wunpckelub (v8qi)
17258      v2si __builtin_arm_wunpckeluh (v4hi)
17259      long long __builtin_arm_wunpckeluw (v2si)
17260      v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
17261      v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
17262      v2si __builtin_arm_wunpckihw (v2si, v2si)
17263      v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
17264      v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
17265      v2si __builtin_arm_wunpckilw (v2si, v2si)
17266      long long __builtin_arm_wxor (long long, long long)
17267      long long __builtin_arm_wzero ()
17269 \x1f
17270 File: gcc.info,  Node: X86 Built-in Functions,  Next: PowerPC AltiVec Built-in Functions,  Prev: ARM Built-in Functions,  Up: Target Builtins
17272 X86 Built-in Functions
17273 ----------------------
17275  These built-in functions are available for the i386 and x86-64 family
17276 of computers, depending on the command-line switches used.
17278  The following machine modes are available for use with MMX built-in
17279 functions (*note Vector Extensions::): `V2SI' for a vector of two
17280 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
17281 `V8QI' for a vector of eight 8-bit integers.  Some of the built-in
17282 functions operate on MMX registers as a whole 64-bit entity, these use
17283 `DI' as their mode.
17285  If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
17286 of two 32-bit floating point values.
17288  If SSE extensions are enabled, `V4SF' is used for a vector of four
17289 32-bit floating point values.  Some instructions use a vector of four
17290 32-bit integers, these use `V4SI'.  Finally, some instructions operate
17291 on an entire vector register, interpreting it as a 128-bit integer,
17292 these use mode `TI'.
17294  The following built-in functions are made available by `-mmmx'.  All
17295 of them generate the machine instruction that is part of the name.
17297      v8qi __builtin_ia32_paddb (v8qi, v8qi)
17298      v4hi __builtin_ia32_paddw (v4hi, v4hi)
17299      v2si __builtin_ia32_paddd (v2si, v2si)
17300      v8qi __builtin_ia32_psubb (v8qi, v8qi)
17301      v4hi __builtin_ia32_psubw (v4hi, v4hi)
17302      v2si __builtin_ia32_psubd (v2si, v2si)
17303      v8qi __builtin_ia32_paddsb (v8qi, v8qi)
17304      v4hi __builtin_ia32_paddsw (v4hi, v4hi)
17305      v8qi __builtin_ia32_psubsb (v8qi, v8qi)
17306      v4hi __builtin_ia32_psubsw (v4hi, v4hi)
17307      v8qi __builtin_ia32_paddusb (v8qi, v8qi)
17308      v4hi __builtin_ia32_paddusw (v4hi, v4hi)
17309      v8qi __builtin_ia32_psubusb (v8qi, v8qi)
17310      v4hi __builtin_ia32_psubusw (v4hi, v4hi)
17311      v4hi __builtin_ia32_pmullw (v4hi, v4hi)
17312      v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
17313      di __builtin_ia32_pand (di, di)
17314      di __builtin_ia32_pandn (di,di)
17315      di __builtin_ia32_por (di, di)
17316      di __builtin_ia32_pxor (di, di)
17317      v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
17318      v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
17319      v2si __builtin_ia32_pcmpeqd (v2si, v2si)
17320      v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
17321      v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
17322      v2si __builtin_ia32_pcmpgtd (v2si, v2si)
17323      v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
17324      v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
17325      v2si __builtin_ia32_punpckhdq (v2si, v2si)
17326      v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
17327      v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
17328      v2si __builtin_ia32_punpckldq (v2si, v2si)
17329      v8qi __builtin_ia32_packsswb (v4hi, v4hi)
17330      v4hi __builtin_ia32_packssdw (v2si, v2si)
17331      v8qi __builtin_ia32_packuswb (v4hi, v4hi)
17333  The following built-in functions are made available either with
17334 `-msse', or with a combination of `-m3dnow' and `-march=athlon'.  All
17335 of them generate the machine instruction that is part of the name.
17337      v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
17338      v8qi __builtin_ia32_pavgb (v8qi, v8qi)
17339      v4hi __builtin_ia32_pavgw (v4hi, v4hi)
17340      v4hi __builtin_ia32_psadbw (v8qi, v8qi)
17341      v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
17342      v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
17343      v8qi __builtin_ia32_pminub (v8qi, v8qi)
17344      v4hi __builtin_ia32_pminsw (v4hi, v4hi)
17345      int __builtin_ia32_pextrw (v4hi, int)
17346      v4hi __builtin_ia32_pinsrw (v4hi, int, int)
17347      int __builtin_ia32_pmovmskb (v8qi)
17348      void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
17349      void __builtin_ia32_movntq (di *, di)
17350      void __builtin_ia32_sfence (void)
17352  The following built-in functions are available when `-msse' is used.
17353 All of them generate the machine instruction that is part of the name.
17355      int __builtin_ia32_comieq (v4sf, v4sf)
17356      int __builtin_ia32_comineq (v4sf, v4sf)
17357      int __builtin_ia32_comilt (v4sf, v4sf)
17358      int __builtin_ia32_comile (v4sf, v4sf)
17359      int __builtin_ia32_comigt (v4sf, v4sf)
17360      int __builtin_ia32_comige (v4sf, v4sf)
17361      int __builtin_ia32_ucomieq (v4sf, v4sf)
17362      int __builtin_ia32_ucomineq (v4sf, v4sf)
17363      int __builtin_ia32_ucomilt (v4sf, v4sf)
17364      int __builtin_ia32_ucomile (v4sf, v4sf)
17365      int __builtin_ia32_ucomigt (v4sf, v4sf)
17366      int __builtin_ia32_ucomige (v4sf, v4sf)
17367      v4sf __builtin_ia32_addps (v4sf, v4sf)
17368      v4sf __builtin_ia32_subps (v4sf, v4sf)
17369      v4sf __builtin_ia32_mulps (v4sf, v4sf)
17370      v4sf __builtin_ia32_divps (v4sf, v4sf)
17371      v4sf __builtin_ia32_addss (v4sf, v4sf)
17372      v4sf __builtin_ia32_subss (v4sf, v4sf)
17373      v4sf __builtin_ia32_mulss (v4sf, v4sf)
17374      v4sf __builtin_ia32_divss (v4sf, v4sf)
17375      v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
17376      v4si __builtin_ia32_cmpltps (v4sf, v4sf)
17377      v4si __builtin_ia32_cmpleps (v4sf, v4sf)
17378      v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
17379      v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
17380      v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
17381      v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
17382      v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
17383      v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
17384      v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
17385      v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
17386      v4si __builtin_ia32_cmpordps (v4sf, v4sf)
17387      v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
17388      v4si __builtin_ia32_cmpltss (v4sf, v4sf)
17389      v4si __builtin_ia32_cmpless (v4sf, v4sf)
17390      v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
17391      v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
17392      v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
17393      v4si __builtin_ia32_cmpnless (v4sf, v4sf)
17394      v4si __builtin_ia32_cmpordss (v4sf, v4sf)
17395      v4sf __builtin_ia32_maxps (v4sf, v4sf)
17396      v4sf __builtin_ia32_maxss (v4sf, v4sf)
17397      v4sf __builtin_ia32_minps (v4sf, v4sf)
17398      v4sf __builtin_ia32_minss (v4sf, v4sf)
17399      v4sf __builtin_ia32_andps (v4sf, v4sf)
17400      v4sf __builtin_ia32_andnps (v4sf, v4sf)
17401      v4sf __builtin_ia32_orps (v4sf, v4sf)
17402      v4sf __builtin_ia32_xorps (v4sf, v4sf)
17403      v4sf __builtin_ia32_movss (v4sf, v4sf)
17404      v4sf __builtin_ia32_movhlps (v4sf, v4sf)
17405      v4sf __builtin_ia32_movlhps (v4sf, v4sf)
17406      v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
17407      v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
17408      v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
17409      v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
17410      v2si __builtin_ia32_cvtps2pi (v4sf)
17411      int __builtin_ia32_cvtss2si (v4sf)
17412      v2si __builtin_ia32_cvttps2pi (v4sf)
17413      int __builtin_ia32_cvttss2si (v4sf)
17414      v4sf __builtin_ia32_rcpps (v4sf)
17415      v4sf __builtin_ia32_rsqrtps (v4sf)
17416      v4sf __builtin_ia32_sqrtps (v4sf)
17417      v4sf __builtin_ia32_rcpss (v4sf)
17418      v4sf __builtin_ia32_rsqrtss (v4sf)
17419      v4sf __builtin_ia32_sqrtss (v4sf)
17420      v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
17421      void __builtin_ia32_movntps (float *, v4sf)
17422      int __builtin_ia32_movmskps (v4sf)
17424  The following built-in functions are available when `-msse' is used.
17426 `v4sf __builtin_ia32_loadaps (float *)'
17427      Generates the `movaps' machine instruction as a load from memory.
17429 `void __builtin_ia32_storeaps (float *, v4sf)'
17430      Generates the `movaps' machine instruction as a store to memory.
17432 `v4sf __builtin_ia32_loadups (float *)'
17433      Generates the `movups' machine instruction as a load from memory.
17435 `void __builtin_ia32_storeups (float *, v4sf)'
17436      Generates the `movups' machine instruction as a store to memory.
17438 `v4sf __builtin_ia32_loadsss (float *)'
17439      Generates the `movss' machine instruction as a load from memory.
17441 `void __builtin_ia32_storess (float *, v4sf)'
17442      Generates the `movss' machine instruction as a store to memory.
17444 `v4sf __builtin_ia32_loadhps (v4sf, v2si *)'
17445      Generates the `movhps' machine instruction as a load from memory.
17447 `v4sf __builtin_ia32_loadlps (v4sf, v2si *)'
17448      Generates the `movlps' machine instruction as a load from memory
17450 `void __builtin_ia32_storehps (v4sf, v2si *)'
17451      Generates the `movhps' machine instruction as a store to memory.
17453 `void __builtin_ia32_storelps (v4sf, v2si *)'
17454      Generates the `movlps' machine instruction as a store to memory.
17456  The following built-in functions are available when `-msse3' is used.
17457 All of them generate the machine instruction that is part of the name.
17459      v2df __builtin_ia32_addsubpd (v2df, v2df)
17460      v2df __builtin_ia32_addsubps (v2df, v2df)
17461      v2df __builtin_ia32_haddpd (v2df, v2df)
17462      v2df __builtin_ia32_haddps (v2df, v2df)
17463      v2df __builtin_ia32_hsubpd (v2df, v2df)
17464      v2df __builtin_ia32_hsubps (v2df, v2df)
17465      v16qi __builtin_ia32_lddqu (char const *)
17466      void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
17467      v2df __builtin_ia32_movddup (v2df)
17468      v4sf __builtin_ia32_movshdup (v4sf)
17469      v4sf __builtin_ia32_movsldup (v4sf)
17470      void __builtin_ia32_mwait (unsigned int, unsigned int)
17472  The following built-in functions are available when `-msse3' is used.
17474 `v2df __builtin_ia32_loadddup (double const *)'
17475      Generates the `movddup' machine instruction as a load from memory.
17477  The following built-in functions are available when `-m3dnow' is used.
17478 All of them generate the machine instruction that is part of the name.
17480      void __builtin_ia32_femms (void)
17481      v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
17482      v2si __builtin_ia32_pf2id (v2sf)
17483      v2sf __builtin_ia32_pfacc (v2sf, v2sf)
17484      v2sf __builtin_ia32_pfadd (v2sf, v2sf)
17485      v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
17486      v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
17487      v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
17488      v2sf __builtin_ia32_pfmax (v2sf, v2sf)
17489      v2sf __builtin_ia32_pfmin (v2sf, v2sf)
17490      v2sf __builtin_ia32_pfmul (v2sf, v2sf)
17491      v2sf __builtin_ia32_pfrcp (v2sf)
17492      v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
17493      v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
17494      v2sf __builtin_ia32_pfrsqrt (v2sf)
17495      v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
17496      v2sf __builtin_ia32_pfsub (v2sf, v2sf)
17497      v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
17498      v2sf __builtin_ia32_pi2fd (v2si)
17499      v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
17501  The following built-in functions are available when both `-m3dnow' and
17502 `-march=athlon' are used.  All of them generate the machine instruction
17503 that is part of the name.
17505      v2si __builtin_ia32_pf2iw (v2sf)
17506      v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
17507      v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
17508      v2sf __builtin_ia32_pi2fw (v2si)
17509      v2sf __builtin_ia32_pswapdsf (v2sf)
17510      v2si __builtin_ia32_pswapdsi (v2si)
17512 \x1f
17513 File: gcc.info,  Node: PowerPC AltiVec Built-in Functions,  Prev: X86 Built-in Functions,  Up: Target Builtins
17515 PowerPC AltiVec Built-in Functions
17516 ----------------------------------
17518  GCC provides an interface for the PowerPC family of processors to
17519 access the AltiVec operations described in Motorola's AltiVec
17520 Programming Interface Manual.  The interface is made available by
17521 including `<altivec.h>' and using `-maltivec' and `-mabi=altivec'.  The
17522 interface supports the following vector types.
17524      vector unsigned char
17525      vector signed char
17526      vector bool char
17527      
17528      vector unsigned short
17529      vector signed short
17530      vector bool short
17531      vector pixel
17532      
17533      vector unsigned int
17534      vector signed int
17535      vector bool int
17536      vector float
17538  GCC's implementation of the high-level language interface available
17539 from C and C++ code differs from Motorola's documentation in several
17540 ways.
17542    * A vector constant is a list of constant expressions within curly
17543      braces.
17545    * A vector initializer requires no cast if the vector constant is of
17546      the same type as the variable it is initializing.
17548    * If `signed' or `unsigned' is omitted, the vector type defaults to
17549      `signed' for `vector int' or `vector short' and to `unsigned' for
17550      `vector char'.
17552    * Compiling with `-maltivec' adds keywords `__vector', `__pixel',
17553      and `__bool'.  Macros `vector', `pixel', and `bool' are defined in
17554      `<altivec.h>' and can be undefined.
17556    * GCC allows using a `typedef' name as the type specifier for a
17557      vector type.
17559    * For C, overloaded functions are implemented with macros so the
17560      following does not work:
17562             vec_add ((vector signed int){1, 2, 3, 4}, foo);
17564      Since `vec_add' is a macro, the vector constant in the example is
17565      treated as four separate arguments.  Wrap the entire argument in
17566      parentheses for this to work.
17568  _Note:_ Only the `<altivec.h>' interface is supported.  Internally,
17569 GCC uses built-in functions to achieve the functionality in the
17570 aforementioned header file, but they are not supported and are subject
17571 to change without notice.
17573  The following interfaces are supported for the generic and specific
17574 AltiVec operations and the AltiVec predicates.  In cases where there is
17575 a direct mapping between generic and specific operations, only the
17576 generic names are shown here, although the specific operations can also
17577 be used.
17579  Arguments that are documented as `const int' require literal integral
17580 values within the range required for that operation.
17582      vector signed char vec_abs (vector signed char);
17583      vector signed short vec_abs (vector signed short);
17584      vector signed int vec_abs (vector signed int);
17585      vector float vec_abs (vector float);
17586      
17587      vector signed char vec_abss (vector signed char);
17588      vector signed short vec_abss (vector signed short);
17589      vector signed int vec_abss (vector signed int);
17590      
17591      vector signed char vec_add (vector bool char, vector signed char);
17592      vector signed char vec_add (vector signed char, vector bool char);
17593      vector signed char vec_add (vector signed char, vector signed char);
17594      vector unsigned char vec_add (vector bool char, vector unsigned char);
17595      vector unsigned char vec_add (vector unsigned char, vector bool char);
17596      vector unsigned char vec_add (vector unsigned char,
17597                                    vector unsigned char);
17598      vector signed short vec_add (vector bool short, vector signed short);
17599      vector signed short vec_add (vector signed short, vector bool short);
17600      vector signed short vec_add (vector signed short, vector signed short);
17601      vector unsigned short vec_add (vector bool short,
17602                                     vector unsigned short);
17603      vector unsigned short vec_add (vector unsigned short,
17604                                     vector bool short);
17605      vector unsigned short vec_add (vector unsigned short,
17606                                     vector unsigned short);
17607      vector signed int vec_add (vector bool int, vector signed int);
17608      vector signed int vec_add (vector signed int, vector bool int);
17609      vector signed int vec_add (vector signed int, vector signed int);
17610      vector unsigned int vec_add (vector bool int, vector unsigned int);
17611      vector unsigned int vec_add (vector unsigned int, vector bool int);
17612      vector unsigned int vec_add (vector unsigned int, vector unsigned int);
17613      vector float vec_add (vector float, vector float);
17614      
17615      vector float vec_vaddfp (vector float, vector float);
17616      
17617      vector signed int vec_vadduwm (vector bool int, vector signed int);
17618      vector signed int vec_vadduwm (vector signed int, vector bool int);
17619      vector signed int vec_vadduwm (vector signed int, vector signed int);
17620      vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
17621      vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
17622      vector unsigned int vec_vadduwm (vector unsigned int,
17623                                       vector unsigned int);
17624      
17625      vector signed short vec_vadduhm (vector bool short,
17626                                       vector signed short);
17627      vector signed short vec_vadduhm (vector signed short,
17628                                       vector bool short);
17629      vector signed short vec_vadduhm (vector signed short,
17630                                       vector signed short);
17631      vector unsigned short vec_vadduhm (vector bool short,
17632                                         vector unsigned short);
17633      vector unsigned short vec_vadduhm (vector unsigned short,
17634                                         vector bool short);
17635      vector unsigned short vec_vadduhm (vector unsigned short,
17636                                         vector unsigned short);
17637      
17638      vector signed char vec_vaddubm (vector bool char, vector signed char);
17639      vector signed char vec_vaddubm (vector signed char, vector bool char);
17640      vector signed char vec_vaddubm (vector signed char, vector signed char);
17641      vector unsigned char vec_vaddubm (vector bool char,
17642                                        vector unsigned char);
17643      vector unsigned char vec_vaddubm (vector unsigned char,
17644                                        vector bool char);
17645      vector unsigned char vec_vaddubm (vector unsigned char,
17646                                        vector unsigned char);
17647      
17648      vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
17649      
17650      vector unsigned char vec_adds (vector bool char, vector unsigned char);
17651      vector unsigned char vec_adds (vector unsigned char, vector bool char);
17652      vector unsigned char vec_adds (vector unsigned char,
17653                                     vector unsigned char);
17654      vector signed char vec_adds (vector bool char, vector signed char);
17655      vector signed char vec_adds (vector signed char, vector bool char);
17656      vector signed char vec_adds (vector signed char, vector signed char);
17657      vector unsigned short vec_adds (vector bool short,
17658                                      vector unsigned short);
17659      vector unsigned short vec_adds (vector unsigned short,
17660                                      vector bool short);
17661      vector unsigned short vec_adds (vector unsigned short,
17662                                      vector unsigned short);
17663      vector signed short vec_adds (vector bool short, vector signed short);
17664      vector signed short vec_adds (vector signed short, vector bool short);
17665      vector signed short vec_adds (vector signed short, vector signed short);
17666      vector unsigned int vec_adds (vector bool int, vector unsigned int);
17667      vector unsigned int vec_adds (vector unsigned int, vector bool int);
17668      vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
17669      vector signed int vec_adds (vector bool int, vector signed int);
17670      vector signed int vec_adds (vector signed int, vector bool int);
17671      vector signed int vec_adds (vector signed int, vector signed int);
17672      
17673      vector signed int vec_vaddsws (vector bool int, vector signed int);
17674      vector signed int vec_vaddsws (vector signed int, vector bool int);
17675      vector signed int vec_vaddsws (vector signed int, vector signed int);
17676      
17677      vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
17678      vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
17679      vector unsigned int vec_vadduws (vector unsigned int,
17680                                       vector unsigned int);
17681      
17682      vector signed short vec_vaddshs (vector bool short,
17683                                       vector signed short);
17684      vector signed short vec_vaddshs (vector signed short,
17685                                       vector bool short);
17686      vector signed short vec_vaddshs (vector signed short,
17687                                       vector signed short);
17688      
17689      vector unsigned short vec_vadduhs (vector bool short,
17690                                         vector unsigned short);
17691      vector unsigned short vec_vadduhs (vector unsigned short,
17692                                         vector bool short);
17693      vector unsigned short vec_vadduhs (vector unsigned short,
17694                                         vector unsigned short);
17695      
17696      vector signed char vec_vaddsbs (vector bool char, vector signed char);
17697      vector signed char vec_vaddsbs (vector signed char, vector bool char);
17698      vector signed char vec_vaddsbs (vector signed char, vector signed char);
17699      
17700      vector unsigned char vec_vaddubs (vector bool char,
17701                                        vector unsigned char);
17702      vector unsigned char vec_vaddubs (vector unsigned char,
17703                                        vector bool char);
17704      vector unsigned char vec_vaddubs (vector unsigned char,
17705                                        vector unsigned char);
17706      
17707      vector float vec_and (vector float, vector float);
17708      vector float vec_and (vector float, vector bool int);
17709      vector float vec_and (vector bool int, vector float);
17710      vector bool int vec_and (vector bool int, vector bool int);
17711      vector signed int vec_and (vector bool int, vector signed int);
17712      vector signed int vec_and (vector signed int, vector bool int);
17713      vector signed int vec_and (vector signed int, vector signed int);
17714      vector unsigned int vec_and (vector bool int, vector unsigned int);
17715      vector unsigned int vec_and (vector unsigned int, vector bool int);
17716      vector unsigned int vec_and (vector unsigned int, vector unsigned int);
17717      vector bool short vec_and (vector bool short, vector bool short);
17718      vector signed short vec_and (vector bool short, vector signed short);
17719      vector signed short vec_and (vector signed short, vector bool short);
17720      vector signed short vec_and (vector signed short, vector signed short);
17721      vector unsigned short vec_and (vector bool short,
17722                                     vector unsigned short);
17723      vector unsigned short vec_and (vector unsigned short,
17724                                     vector bool short);
17725      vector unsigned short vec_and (vector unsigned short,
17726                                     vector unsigned short);
17727      vector signed char vec_and (vector bool char, vector signed char);
17728      vector bool char vec_and (vector bool char, vector bool char);
17729      vector signed char vec_and (vector signed char, vector bool char);
17730      vector signed char vec_and (vector signed char, vector signed char);
17731      vector unsigned char vec_and (vector bool char, vector unsigned char);
17732      vector unsigned char vec_and (vector unsigned char, vector bool char);
17733      vector unsigned char vec_and (vector unsigned char,
17734                                    vector unsigned char);
17735      
17736      vector float vec_andc (vector float, vector float);
17737      vector float vec_andc (vector float, vector bool int);
17738      vector float vec_andc (vector bool int, vector float);
17739      vector bool int vec_andc (vector bool int, vector bool int);
17740      vector signed int vec_andc (vector bool int, vector signed int);
17741      vector signed int vec_andc (vector signed int, vector bool int);
17742      vector signed int vec_andc (vector signed int, vector signed int);
17743      vector unsigned int vec_andc (vector bool int, vector unsigned int);
17744      vector unsigned int vec_andc (vector unsigned int, vector bool int);
17745      vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
17746      vector bool short vec_andc (vector bool short, vector bool short);
17747      vector signed short vec_andc (vector bool short, vector signed short);
17748      vector signed short vec_andc (vector signed short, vector bool short);
17749      vector signed short vec_andc (vector signed short, vector signed short);
17750      vector unsigned short vec_andc (vector bool short,
17751                                      vector unsigned short);
17752      vector unsigned short vec_andc (vector unsigned short,
17753                                      vector bool short);
17754      vector unsigned short vec_andc (vector unsigned short,
17755                                      vector unsigned short);
17756      vector signed char vec_andc (vector bool char, vector signed char);
17757      vector bool char vec_andc (vector bool char, vector bool char);
17758      vector signed char vec_andc (vector signed char, vector bool char);
17759      vector signed char vec_andc (vector signed char, vector signed char);
17760      vector unsigned char vec_andc (vector bool char, vector unsigned char);
17761      vector unsigned char vec_andc (vector unsigned char, vector bool char);
17762      vector unsigned char vec_andc (vector unsigned char,
17763                                     vector unsigned char);
17764      
17765      vector unsigned char vec_avg (vector unsigned char,
17766                                    vector unsigned char);
17767      vector signed char vec_avg (vector signed char, vector signed char);
17768      vector unsigned short vec_avg (vector unsigned short,
17769                                     vector unsigned short);
17770      vector signed short vec_avg (vector signed short, vector signed short);
17771      vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
17772      vector signed int vec_avg (vector signed int, vector signed int);
17773      
17774      vector signed int vec_vavgsw (vector signed int, vector signed int);
17775      
17776      vector unsigned int vec_vavguw (vector unsigned int,
17777                                      vector unsigned int);
17778      
17779      vector signed short vec_vavgsh (vector signed short,
17780                                      vector signed short);
17781      
17782      vector unsigned short vec_vavguh (vector unsigned short,
17783                                        vector unsigned short);
17784      
17785      vector signed char vec_vavgsb (vector signed char, vector signed char);
17786      
17787      vector unsigned char vec_vavgub (vector unsigned char,
17788                                       vector unsigned char);
17789      
17790      vector float vec_ceil (vector float);
17791      
17792      vector signed int vec_cmpb (vector float, vector float);
17793      
17794      vector bool char vec_cmpeq (vector signed char, vector signed char);
17795      vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
17796      vector bool short vec_cmpeq (vector signed short, vector signed short);
17797      vector bool short vec_cmpeq (vector unsigned short,
17798                                   vector unsigned short);
17799      vector bool int vec_cmpeq (vector signed int, vector signed int);
17800      vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
17801      vector bool int vec_cmpeq (vector float, vector float);
17802      
17803      vector bool int vec_vcmpeqfp (vector float, vector float);
17804      
17805      vector bool int vec_vcmpequw (vector signed int, vector signed int);
17806      vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
17807      
17808      vector bool short vec_vcmpequh (vector signed short,
17809                                      vector signed short);
17810      vector bool short vec_vcmpequh (vector unsigned short,
17811                                      vector unsigned short);
17812      
17813      vector bool char vec_vcmpequb (vector signed char, vector signed char);
17814      vector bool char vec_vcmpequb (vector unsigned char,
17815                                     vector unsigned char);
17816      
17817      vector bool int vec_cmpge (vector float, vector float);
17818      
17819      vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
17820      vector bool char vec_cmpgt (vector signed char, vector signed char);
17821      vector bool short vec_cmpgt (vector unsigned short,
17822                                   vector unsigned short);
17823      vector bool short vec_cmpgt (vector signed short, vector signed short);
17824      vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
17825      vector bool int vec_cmpgt (vector signed int, vector signed int);
17826      vector bool int vec_cmpgt (vector float, vector float);
17827      
17828      vector bool int vec_vcmpgtfp (vector float, vector float);
17829      
17830      vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
17831      
17832      vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
17833      
17834      vector bool short vec_vcmpgtsh (vector signed short,
17835                                      vector signed short);
17836      
17837      vector bool short vec_vcmpgtuh (vector unsigned short,
17838                                      vector unsigned short);
17839      
17840      vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
17841      
17842      vector bool char vec_vcmpgtub (vector unsigned char,
17843                                     vector unsigned char);
17844      
17845      vector bool int vec_cmple (vector float, vector float);
17846      
17847      vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
17848      vector bool char vec_cmplt (vector signed char, vector signed char);
17849      vector bool short vec_cmplt (vector unsigned short,
17850                                   vector unsigned short);
17851      vector bool short vec_cmplt (vector signed short, vector signed short);
17852      vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
17853      vector bool int vec_cmplt (vector signed int, vector signed int);
17854      vector bool int vec_cmplt (vector float, vector float);
17855      
17856      vector float vec_ctf (vector unsigned int, const int);
17857      vector float vec_ctf (vector signed int, const int);
17858      
17859      vector float vec_vcfsx (vector signed int, const int);
17860      
17861      vector float vec_vcfux (vector unsigned int, const int);
17862      
17863      vector signed int vec_cts (vector float, const int);
17864      
17865      vector unsigned int vec_ctu (vector float, const int);
17866      
17867      void vec_dss (const int);
17868      
17869      void vec_dssall (void);
17870      
17871      void vec_dst (const vector unsigned char *, int, const int);
17872      void vec_dst (const vector signed char *, int, const int);
17873      void vec_dst (const vector bool char *, int, const int);
17874      void vec_dst (const vector unsigned short *, int, const int);
17875      void vec_dst (const vector signed short *, int, const int);
17876      void vec_dst (const vector bool short *, int, const int);
17877      void vec_dst (const vector pixel *, int, const int);
17878      void vec_dst (const vector unsigned int *, int, const int);
17879      void vec_dst (const vector signed int *, int, const int);
17880      void vec_dst (const vector bool int *, int, const int);
17881      void vec_dst (const vector float *, int, const int);
17882      void vec_dst (const unsigned char *, int, const int);
17883      void vec_dst (const signed char *, int, const int);
17884      void vec_dst (const unsigned short *, int, const int);
17885      void vec_dst (const short *, int, const int);
17886      void vec_dst (const unsigned int *, int, const int);
17887      void vec_dst (const int *, int, const int);
17888      void vec_dst (const unsigned long *, int, const int);
17889      void vec_dst (const long *, int, const int);
17890      void vec_dst (const float *, int, const int);
17891      
17892      void vec_dstst (const vector unsigned char *, int, const int);
17893      void vec_dstst (const vector signed char *, int, const int);
17894      void vec_dstst (const vector bool char *, int, const int);
17895      void vec_dstst (const vector unsigned short *, int, const int);
17896      void vec_dstst (const vector signed short *, int, const int);
17897      void vec_dstst (const vector bool short *, int, const int);
17898      void vec_dstst (const vector pixel *, int, const int);
17899      void vec_dstst (const vector unsigned int *, int, const int);
17900      void vec_dstst (const vector signed int *, int, const int);
17901      void vec_dstst (const vector bool int *, int, const int);
17902      void vec_dstst (const vector float *, int, const int);
17903      void vec_dstst (const unsigned char *, int, const int);
17904      void vec_dstst (const signed char *, int, const int);
17905      void vec_dstst (const unsigned short *, int, const int);
17906      void vec_dstst (const short *, int, const int);
17907      void vec_dstst (const unsigned int *, int, const int);
17908      void vec_dstst (const int *, int, const int);
17909      void vec_dstst (const unsigned long *, int, const int);
17910      void vec_dstst (const long *, int, const int);
17911      void vec_dstst (const float *, int, const int);
17912      
17913      void vec_dststt (const vector unsigned char *, int, const int);
17914      void vec_dststt (const vector signed char *, int, const int);
17915      void vec_dststt (const vector bool char *, int, const int);
17916      void vec_dststt (const vector unsigned short *, int, const int);
17917      void vec_dststt (const vector signed short *, int, const int);
17918      void vec_dststt (const vector bool short *, int, const int);
17919      void vec_dststt (const vector pixel *, int, const int);
17920      void vec_dststt (const vector unsigned int *, int, const int);
17921      void vec_dststt (const vector signed int *, int, const int);
17922      void vec_dststt (const vector bool int *, int, const int);
17923      void vec_dststt (const vector float *, int, const int);
17924      void vec_dststt (const unsigned char *, int, const int);
17925      void vec_dststt (const signed char *, int, const int);
17926      void vec_dststt (const unsigned short *, int, const int);
17927      void vec_dststt (const short *, int, const int);
17928      void vec_dststt (const unsigned int *, int, const int);
17929      void vec_dststt (const int *, int, const int);
17930      void vec_dststt (const unsigned long *, int, const int);
17931      void vec_dststt (const long *, int, const int);
17932      void vec_dststt (const float *, int, const int);
17933      
17934      void vec_dstt (const vector unsigned char *, int, const int);
17935      void vec_dstt (const vector signed char *, int, const int);
17936      void vec_dstt (const vector bool char *, int, const int);
17937      void vec_dstt (const vector unsigned short *, int, const int);
17938      void vec_dstt (const vector signed short *, int, const int);
17939      void vec_dstt (const vector bool short *, int, const int);
17940      void vec_dstt (const vector pixel *, int, const int);
17941      void vec_dstt (const vector unsigned int *, int, const int);
17942      void vec_dstt (const vector signed int *, int, const int);
17943      void vec_dstt (const vector bool int *, int, const int);
17944      void vec_dstt (const vector float *, int, const int);
17945      void vec_dstt (const unsigned char *, int, const int);
17946      void vec_dstt (const signed char *, int, const int);
17947      void vec_dstt (const unsigned short *, int, const int);
17948      void vec_dstt (const short *, int, const int);
17949      void vec_dstt (const unsigned int *, int, const int);
17950      void vec_dstt (const int *, int, const int);
17951      void vec_dstt (const unsigned long *, int, const int);
17952      void vec_dstt (const long *, int, const int);
17953      void vec_dstt (const float *, int, const int);
17954      
17955      vector float vec_expte (vector float);
17956      
17957      vector float vec_floor (vector float);
17958      
17959      vector float vec_ld (int, const vector float *);
17960      vector float vec_ld (int, const float *);
17961      vector bool int vec_ld (int, const vector bool int *);
17962      vector signed int vec_ld (int, const vector signed int *);
17963      vector signed int vec_ld (int, const int *);
17964      vector signed int vec_ld (int, const long *);
17965      vector unsigned int vec_ld (int, const vector unsigned int *);
17966      vector unsigned int vec_ld (int, const unsigned int *);
17967      vector unsigned int vec_ld (int, const unsigned long *);
17968      vector bool short vec_ld (int, const vector bool short *);
17969      vector pixel vec_ld (int, const vector pixel *);
17970      vector signed short vec_ld (int, const vector signed short *);
17971      vector signed short vec_ld (int, const short *);
17972      vector unsigned short vec_ld (int, const vector unsigned short *);
17973      vector unsigned short vec_ld (int, const unsigned short *);
17974      vector bool char vec_ld (int, const vector bool char *);
17975      vector signed char vec_ld (int, const vector signed char *);
17976      vector signed char vec_ld (int, const signed char *);
17977      vector unsigned char vec_ld (int, const vector unsigned char *);
17978      vector unsigned char vec_ld (int, const unsigned char *);
17979      
17980      vector signed char vec_lde (int, const signed char *);
17981      vector unsigned char vec_lde (int, const unsigned char *);
17982      vector signed short vec_lde (int, const short *);
17983      vector unsigned short vec_lde (int, const unsigned short *);
17984      vector float vec_lde (int, const float *);
17985      vector signed int vec_lde (int, const int *);
17986      vector unsigned int vec_lde (int, const unsigned int *);
17987      vector signed int vec_lde (int, const long *);
17988      vector unsigned int vec_lde (int, const unsigned long *);
17989      
17990      vector float vec_lvewx (int, float *);
17991      vector signed int vec_lvewx (int, int *);
17992      vector unsigned int vec_lvewx (int, unsigned int *);
17993      vector signed int vec_lvewx (int, long *);
17994      vector unsigned int vec_lvewx (int, unsigned long *);
17995      
17996      vector signed short vec_lvehx (int, short *);
17997      vector unsigned short vec_lvehx (int, unsigned short *);
17998      
17999      vector signed char vec_lvebx (int, char *);
18000      vector unsigned char vec_lvebx (int, unsigned char *);
18001      
18002      vector float vec_ldl (int, const vector float *);
18003      vector float vec_ldl (int, const float *);
18004      vector bool int vec_ldl (int, const vector bool int *);
18005      vector signed int vec_ldl (int, const vector signed int *);
18006      vector signed int vec_ldl (int, const int *);
18007      vector signed int vec_ldl (int, const long *);
18008      vector unsigned int vec_ldl (int, const vector unsigned int *);
18009      vector unsigned int vec_ldl (int, const unsigned int *);
18010      vector unsigned int vec_ldl (int, const unsigned long *);
18011      vector bool short vec_ldl (int, const vector bool short *);
18012      vector pixel vec_ldl (int, const vector pixel *);
18013      vector signed short vec_ldl (int, const vector signed short *);
18014      vector signed short vec_ldl (int, const short *);
18015      vector unsigned short vec_ldl (int, const vector unsigned short *);
18016      vector unsigned short vec_ldl (int, const unsigned short *);
18017      vector bool char vec_ldl (int, const vector bool char *);
18018      vector signed char vec_ldl (int, const vector signed char *);
18019      vector signed char vec_ldl (int, const signed char *);
18020      vector unsigned char vec_ldl (int, const vector unsigned char *);
18021      vector unsigned char vec_ldl (int, const unsigned char *);
18022      
18023      vector float vec_loge (vector float);
18024      
18025      vector unsigned char vec_lvsl (int, const volatile unsigned char *);
18026      vector unsigned char vec_lvsl (int, const volatile signed char *);
18027      vector unsigned char vec_lvsl (int, const volatile unsigned short *);
18028      vector unsigned char vec_lvsl (int, const volatile short *);
18029      vector unsigned char vec_lvsl (int, const volatile unsigned int *);
18030      vector unsigned char vec_lvsl (int, const volatile int *);
18031      vector unsigned char vec_lvsl (int, const volatile unsigned long *);
18032      vector unsigned char vec_lvsl (int, const volatile long *);
18033      vector unsigned char vec_lvsl (int, const volatile float *);
18034      
18035      vector unsigned char vec_lvsr (int, const volatile unsigned char *);
18036      vector unsigned char vec_lvsr (int, const volatile signed char *);
18037      vector unsigned char vec_lvsr (int, const volatile unsigned short *);
18038      vector unsigned char vec_lvsr (int, const volatile short *);
18039      vector unsigned char vec_lvsr (int, const volatile unsigned int *);
18040      vector unsigned char vec_lvsr (int, const volatile int *);
18041      vector unsigned char vec_lvsr (int, const volatile unsigned long *);
18042      vector unsigned char vec_lvsr (int, const volatile long *);
18043      vector unsigned char vec_lvsr (int, const volatile float *);
18044      
18045      vector float vec_madd (vector float, vector float, vector float);
18046      
18047      vector signed short vec_madds (vector signed short,
18048                                     vector signed short,
18049                                     vector signed short);
18050      
18051      vector unsigned char vec_max (vector bool char, vector unsigned char);
18052      vector unsigned char vec_max (vector unsigned char, vector bool char);
18053      vector unsigned char vec_max (vector unsigned char,
18054                                    vector unsigned char);
18055      vector signed char vec_max (vector bool char, vector signed char);
18056      vector signed char vec_max (vector signed char, vector bool char);
18057      vector signed char vec_max (vector signed char, vector signed char);
18058      vector unsigned short vec_max (vector bool short,
18059                                     vector unsigned short);
18060      vector unsigned short vec_max (vector unsigned short,
18061                                     vector bool short);
18062      vector unsigned short vec_max (vector unsigned short,
18063                                     vector unsigned short);
18064      vector signed short vec_max (vector bool short, vector signed short);
18065      vector signed short vec_max (vector signed short, vector bool short);
18066      vector signed short vec_max (vector signed short, vector signed short);
18067      vector unsigned int vec_max (vector bool int, vector unsigned int);
18068      vector unsigned int vec_max (vector unsigned int, vector bool int);
18069      vector unsigned int vec_max (vector unsigned int, vector unsigned int);
18070      vector signed int vec_max (vector bool int, vector signed int);
18071      vector signed int vec_max (vector signed int, vector bool int);
18072      vector signed int vec_max (vector signed int, vector signed int);
18073      vector float vec_max (vector float, vector float);
18074      
18075      vector float vec_vmaxfp (vector float, vector float);
18076      
18077      vector signed int vec_vmaxsw (vector bool int, vector signed int);
18078      vector signed int vec_vmaxsw (vector signed int, vector bool int);
18079      vector signed int vec_vmaxsw (vector signed int, vector signed int);
18080      
18081      vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
18082      vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
18083      vector unsigned int vec_vmaxuw (vector unsigned int,
18084                                      vector unsigned int);
18085      
18086      vector signed short vec_vmaxsh (vector bool short, vector signed short);
18087      vector signed short vec_vmaxsh (vector signed short, vector bool short);
18088      vector signed short vec_vmaxsh (vector signed short,
18089                                      vector signed short);
18090      
18091      vector unsigned short vec_vmaxuh (vector bool short,
18092                                        vector unsigned short);
18093      vector unsigned short vec_vmaxuh (vector unsigned short,
18094                                        vector bool short);
18095      vector unsigned short vec_vmaxuh (vector unsigned short,
18096                                        vector unsigned short);
18097      
18098      vector signed char vec_vmaxsb (vector bool char, vector signed char);
18099      vector signed char vec_vmaxsb (vector signed char, vector bool char);
18100      vector signed char vec_vmaxsb (vector signed char, vector signed char);
18101      
18102      vector unsigned char vec_vmaxub (vector bool char,
18103                                       vector unsigned char);
18104      vector unsigned char vec_vmaxub (vector unsigned char,
18105                                       vector bool char);
18106      vector unsigned char vec_vmaxub (vector unsigned char,
18107                                       vector unsigned char);
18108      
18109      vector bool char vec_mergeh (vector bool char, vector bool char);
18110      vector signed char vec_mergeh (vector signed char, vector signed char);
18111      vector unsigned char vec_mergeh (vector unsigned char,
18112                                       vector unsigned char);
18113      vector bool short vec_mergeh (vector bool short, vector bool short);
18114      vector pixel vec_mergeh (vector pixel, vector pixel);
18115      vector signed short vec_mergeh (vector signed short,
18116                                      vector signed short);
18117      vector unsigned short vec_mergeh (vector unsigned short,
18118                                        vector unsigned short);
18119      vector float vec_mergeh (vector float, vector float);
18120      vector bool int vec_mergeh (vector bool int, vector bool int);
18121      vector signed int vec_mergeh (vector signed int, vector signed int);
18122      vector unsigned int vec_mergeh (vector unsigned int,
18123                                      vector unsigned int);
18124      
18125      vector float vec_vmrghw (vector float, vector float);
18126      vector bool int vec_vmrghw (vector bool int, vector bool int);
18127      vector signed int vec_vmrghw (vector signed int, vector signed int);
18128      vector unsigned int vec_vmrghw (vector unsigned int,
18129                                      vector unsigned int);
18130      
18131      vector bool short vec_vmrghh (vector bool short, vector bool short);
18132      vector signed short vec_vmrghh (vector signed short,
18133                                      vector signed short);
18134      vector unsigned short vec_vmrghh (vector unsigned short,
18135                                        vector unsigned short);
18136      vector pixel vec_vmrghh (vector pixel, vector pixel);
18137      
18138      vector bool char vec_vmrghb (vector bool char, vector bool char);
18139      vector signed char vec_vmrghb (vector signed char, vector signed char);
18140      vector unsigned char vec_vmrghb (vector unsigned char,
18141                                       vector unsigned char);
18142      
18143      vector bool char vec_mergel (vector bool char, vector bool char);
18144      vector signed char vec_mergel (vector signed char, vector signed char);
18145      vector unsigned char vec_mergel (vector unsigned char,
18146                                       vector unsigned char);
18147      vector bool short vec_mergel (vector bool short, vector bool short);
18148      vector pixel vec_mergel (vector pixel, vector pixel);
18149      vector signed short vec_mergel (vector signed short,
18150                                      vector signed short);
18151      vector unsigned short vec_mergel (vector unsigned short,
18152                                        vector unsigned short);
18153      vector float vec_mergel (vector float, vector float);
18154      vector bool int vec_mergel (vector bool int, vector bool int);
18155      vector signed int vec_mergel (vector signed int, vector signed int);
18156      vector unsigned int vec_mergel (vector unsigned int,
18157                                      vector unsigned int);
18158      
18159      vector float vec_vmrglw (vector float, vector float);
18160      vector signed int vec_vmrglw (vector signed int, vector signed int);
18161      vector unsigned int vec_vmrglw (vector unsigned int,
18162                                      vector unsigned int);
18163      vector bool int vec_vmrglw (vector bool int, vector bool int);
18164      
18165      vector bool short vec_vmrglh (vector bool short, vector bool short);
18166      vector signed short vec_vmrglh (vector signed short,
18167                                      vector signed short);
18168      vector unsigned short vec_vmrglh (vector unsigned short,
18169                                        vector unsigned short);
18170      vector pixel vec_vmrglh (vector pixel, vector pixel);
18171      
18172      vector bool char vec_vmrglb (vector bool char, vector bool char);
18173      vector signed char vec_vmrglb (vector signed char, vector signed char);
18174      vector unsigned char vec_vmrglb (vector unsigned char,
18175                                       vector unsigned char);
18176      
18177      vector unsigned short vec_mfvscr (void);
18178      
18179      vector unsigned char vec_min (vector bool char, vector unsigned char);
18180      vector unsigned char vec_min (vector unsigned char, vector bool char);
18181      vector unsigned char vec_min (vector unsigned char,
18182                                    vector unsigned char);
18183      vector signed char vec_min (vector bool char, vector signed char);
18184      vector signed char vec_min (vector signed char, vector bool char);
18185      vector signed char vec_min (vector signed char, vector signed char);
18186      vector unsigned short vec_min (vector bool short,
18187                                     vector unsigned short);
18188      vector unsigned short vec_min (vector unsigned short,
18189                                     vector bool short);
18190      vector unsigned short vec_min (vector unsigned short,
18191                                     vector unsigned short);
18192      vector signed short vec_min (vector bool short, vector signed short);
18193      vector signed short vec_min (vector signed short, vector bool short);
18194      vector signed short vec_min (vector signed short, vector signed short);
18195      vector unsigned int vec_min (vector bool int, vector unsigned int);
18196      vector unsigned int vec_min (vector unsigned int, vector bool int);
18197      vector unsigned int vec_min (vector unsigned int, vector unsigned int);
18198      vector signed int vec_min (vector bool int, vector signed int);
18199      vector signed int vec_min (vector signed int, vector bool int);
18200      vector signed int vec_min (vector signed int, vector signed int);
18201      vector float vec_min (vector float, vector float);
18202      
18203      vector float vec_vminfp (vector float, vector float);
18204      
18205      vector signed int vec_vminsw (vector bool int, vector signed int);
18206      vector signed int vec_vminsw (vector signed int, vector bool int);
18207      vector signed int vec_vminsw (vector signed int, vector signed int);
18208      
18209      vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
18210      vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
18211      vector unsigned int vec_vminuw (vector unsigned int,
18212                                      vector unsigned int);
18213      
18214      vector signed short vec_vminsh (vector bool short, vector signed short);
18215      vector signed short vec_vminsh (vector signed short, vector bool short);
18216      vector signed short vec_vminsh (vector signed short,
18217                                      vector signed short);
18218      
18219      vector unsigned short vec_vminuh (vector bool short,
18220                                        vector unsigned short);
18221      vector unsigned short vec_vminuh (vector unsigned short,
18222                                        vector bool short);
18223      vector unsigned short vec_vminuh (vector unsigned short,
18224                                        vector unsigned short);
18225      
18226      vector signed char vec_vminsb (vector bool char, vector signed char);
18227      vector signed char vec_vminsb (vector signed char, vector bool char);
18228      vector signed char vec_vminsb (vector signed char, vector signed char);
18229      
18230      vector unsigned char vec_vminub (vector bool char,
18231                                       vector unsigned char);
18232      vector unsigned char vec_vminub (vector unsigned char,
18233                                       vector bool char);
18234      vector unsigned char vec_vminub (vector unsigned char,
18235                                       vector unsigned char);
18236      
18237      vector signed short vec_mladd (vector signed short,
18238                                     vector signed short,
18239                                     vector signed short);
18240      vector signed short vec_mladd (vector signed short,
18241                                     vector unsigned short,
18242                                     vector unsigned short);
18243      vector signed short vec_mladd (vector unsigned short,
18244                                     vector signed short,
18245                                     vector signed short);
18246      vector unsigned short vec_mladd (vector unsigned short,
18247                                       vector unsigned short,
18248                                       vector unsigned short);
18249      
18250      vector signed short vec_mradds (vector signed short,
18251                                      vector signed short,
18252                                      vector signed short);
18253      
18254      vector unsigned int vec_msum (vector unsigned char,
18255                                    vector unsigned char,
18256                                    vector unsigned int);
18257      vector signed int vec_msum (vector signed char,
18258                                  vector unsigned char,
18259                                  vector signed int);
18260      vector unsigned int vec_msum (vector unsigned short,
18261                                    vector unsigned short,
18262                                    vector unsigned int);
18263      vector signed int vec_msum (vector signed short,
18264                                  vector signed short,
18265                                  vector signed int);
18266      
18267      vector signed int vec_vmsumshm (vector signed short,
18268                                      vector signed short,
18269                                      vector signed int);
18270      
18271      vector unsigned int vec_vmsumuhm (vector unsigned short,
18272                                        vector unsigned short,
18273                                        vector unsigned int);
18274      
18275      vector signed int vec_vmsummbm (vector signed char,
18276                                      vector unsigned char,
18277                                      vector signed int);
18278      
18279      vector unsigned int vec_vmsumubm (vector unsigned char,
18280                                        vector unsigned char,
18281                                        vector unsigned int);
18282      
18283      vector unsigned int vec_msums (vector unsigned short,
18284                                     vector unsigned short,
18285                                     vector unsigned int);
18286      vector signed int vec_msums (vector signed short,
18287                                   vector signed short,
18288                                   vector signed int);
18289      
18290      vector signed int vec_vmsumshs (vector signed short,
18291                                      vector signed short,
18292                                      vector signed int);
18293      
18294      vector unsigned int vec_vmsumuhs (vector unsigned short,
18295                                        vector unsigned short,
18296                                        vector unsigned int);
18297      
18298      void vec_mtvscr (vector signed int);
18299      void vec_mtvscr (vector unsigned int);
18300      void vec_mtvscr (vector bool int);
18301      void vec_mtvscr (vector signed short);
18302      void vec_mtvscr (vector unsigned short);
18303      void vec_mtvscr (vector bool short);
18304      void vec_mtvscr (vector pixel);
18305      void vec_mtvscr (vector signed char);
18306      void vec_mtvscr (vector unsigned char);
18307      void vec_mtvscr (vector bool char);
18308      
18309      vector unsigned short vec_mule (vector unsigned char,
18310                                      vector unsigned char);
18311      vector signed short vec_mule (vector signed char,
18312                                    vector signed char);
18313      vector unsigned int vec_mule (vector unsigned short,
18314                                    vector unsigned short);
18315      vector signed int vec_mule (vector signed short, vector signed short);
18316      
18317      vector signed int vec_vmulesh (vector signed short,
18318                                     vector signed short);
18319      
18320      vector unsigned int vec_vmuleuh (vector unsigned short,
18321                                       vector unsigned short);
18322      
18323      vector signed short vec_vmulesb (vector signed char,
18324                                       vector signed char);
18325      
18326      vector unsigned short vec_vmuleub (vector unsigned char,
18327                                        vector unsigned char);
18328      
18329      vector unsigned short vec_mulo (vector unsigned char,
18330                                      vector unsigned char);
18331      vector signed short vec_mulo (vector signed char, vector signed char);
18332      vector unsigned int vec_mulo (vector unsigned short,
18333                                    vector unsigned short);
18334      vector signed int vec_mulo (vector signed short, vector signed short);
18335      
18336      vector signed int vec_vmulosh (vector signed short,
18337                                     vector signed short);
18338      
18339      vector unsigned int vec_vmulouh (vector unsigned short,
18340                                       vector unsigned short);
18341      
18342      vector signed short vec_vmulosb (vector signed char,
18343                                       vector signed char);
18344      
18345      vector unsigned short vec_vmuloub (vector unsigned char,
18346                                         vector unsigned char);
18347      
18348      vector float vec_nmsub (vector float, vector float, vector float);
18349      
18350      vector float vec_nor (vector float, vector float);
18351      vector signed int vec_nor (vector signed int, vector signed int);
18352      vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
18353      vector bool int vec_nor (vector bool int, vector bool int);
18354      vector signed short vec_nor (vector signed short, vector signed short);
18355      vector unsigned short vec_nor (vector unsigned short,
18356                                     vector unsigned short);
18357      vector bool short vec_nor (vector bool short, vector bool short);
18358      vector signed char vec_nor (vector signed char, vector signed char);
18359      vector unsigned char vec_nor (vector unsigned char,
18360                                    vector unsigned char);
18361      vector bool char vec_nor (vector bool char, vector bool char);
18362      
18363      vector float vec_or (vector float, vector float);
18364      vector float vec_or (vector float, vector bool int);
18365      vector float vec_or (vector bool int, vector float);
18366      vector bool int vec_or (vector bool int, vector bool int);
18367      vector signed int vec_or (vector bool int, vector signed int);
18368      vector signed int vec_or (vector signed int, vector bool int);
18369      vector signed int vec_or (vector signed int, vector signed int);
18370      vector unsigned int vec_or (vector bool int, vector unsigned int);
18371      vector unsigned int vec_or (vector unsigned int, vector bool int);
18372      vector unsigned int vec_or (vector unsigned int, vector unsigned int);
18373      vector bool short vec_or (vector bool short, vector bool short);
18374      vector signed short vec_or (vector bool short, vector signed short);
18375      vector signed short vec_or (vector signed short, vector bool short);
18376      vector signed short vec_or (vector signed short, vector signed short);
18377      vector unsigned short vec_or (vector bool short, vector unsigned short);
18378      vector unsigned short vec_or (vector unsigned short, vector bool short);
18379      vector unsigned short vec_or (vector unsigned short,
18380                                    vector unsigned short);
18381      vector signed char vec_or (vector bool char, vector signed char);
18382      vector bool char vec_or (vector bool char, vector bool char);
18383      vector signed char vec_or (vector signed char, vector bool char);
18384      vector signed char vec_or (vector signed char, vector signed char);
18385      vector unsigned char vec_or (vector bool char, vector unsigned char);
18386      vector unsigned char vec_or (vector unsigned char, vector bool char);
18387      vector unsigned char vec_or (vector unsigned char,
18388                                   vector unsigned char);
18389      
18390      vector signed char vec_pack (vector signed short, vector signed short);
18391      vector unsigned char vec_pack (vector unsigned short,
18392                                     vector unsigned short);
18393      vector bool char vec_pack (vector bool short, vector bool short);
18394      vector signed short vec_pack (vector signed int, vector signed int);
18395      vector unsigned short vec_pack (vector unsigned int,
18396                                      vector unsigned int);
18397      vector bool short vec_pack (vector bool int, vector bool int);
18398      
18399      vector bool short vec_vpkuwum (vector bool int, vector bool int);
18400      vector signed short vec_vpkuwum (vector signed int, vector signed int);
18401      vector unsigned short vec_vpkuwum (vector unsigned int,
18402                                         vector unsigned int);
18403      
18404      vector bool char vec_vpkuhum (vector bool short, vector bool short);
18405      vector signed char vec_vpkuhum (vector signed short,
18406                                      vector signed short);
18407      vector unsigned char vec_vpkuhum (vector unsigned short,
18408                                        vector unsigned short);
18409      
18410      vector pixel vec_packpx (vector unsigned int, vector unsigned int);
18411      
18412      vector unsigned char vec_packs (vector unsigned short,
18413                                      vector unsigned short);
18414      vector signed char vec_packs (vector signed short, vector signed short);
18415      vector unsigned short vec_packs (vector unsigned int,
18416                                       vector unsigned int);
18417      vector signed short vec_packs (vector signed int, vector signed int);
18418      
18419      vector signed short vec_vpkswss (vector signed int, vector signed int);
18420      
18421      vector unsigned short vec_vpkuwus (vector unsigned int,
18422                                         vector unsigned int);
18423      
18424      vector signed char vec_vpkshss (vector signed short,
18425                                      vector signed short);
18426      
18427      vector unsigned char vec_vpkuhus (vector unsigned short,
18428                                        vector unsigned short);
18429      
18430      vector unsigned char vec_packsu (vector unsigned short,
18431                                       vector unsigned short);
18432      vector unsigned char vec_packsu (vector signed short,
18433                                       vector signed short);
18434      vector unsigned short vec_packsu (vector unsigned int,
18435                                        vector unsigned int);
18436      vector unsigned short vec_packsu (vector signed int, vector signed int);
18437      
18438      vector unsigned short vec_vpkswus (vector signed int,
18439                                         vector signed int);
18440      
18441      vector unsigned char vec_vpkshus (vector signed short,
18442                                        vector signed short);
18443      
18444      vector float vec_perm (vector float,
18445                             vector float,
18446                             vector unsigned char);
18447      vector signed int vec_perm (vector signed int,
18448                                  vector signed int,
18449                                  vector unsigned char);
18450      vector unsigned int vec_perm (vector unsigned int,
18451                                    vector unsigned int,
18452                                    vector unsigned char);
18453      vector bool int vec_perm (vector bool int,
18454                                vector bool int,
18455                                vector unsigned char);
18456      vector signed short vec_perm (vector signed short,
18457                                    vector signed short,
18458                                    vector unsigned char);
18459      vector unsigned short vec_perm (vector unsigned short,
18460                                      vector unsigned short,
18461                                      vector unsigned char);
18462      vector bool short vec_perm (vector bool short,
18463                                  vector bool short,
18464                                  vector unsigned char);
18465      vector pixel vec_perm (vector pixel,
18466                             vector pixel,
18467                             vector unsigned char);
18468      vector signed char vec_perm (vector signed char,
18469                                   vector signed char,
18470                                   vector unsigned char);
18471      vector unsigned char vec_perm (vector unsigned char,
18472                                     vector unsigned char,
18473                                     vector unsigned char);
18474      vector bool char vec_perm (vector bool char,
18475                                 vector bool char,
18476                                 vector unsigned char);
18477      
18478      vector float vec_re (vector float);
18479      
18480      vector signed char vec_rl (vector signed char,
18481                                 vector unsigned char);
18482      vector unsigned char vec_rl (vector unsigned char,
18483                                   vector unsigned char);
18484      vector signed short vec_rl (vector signed short, vector unsigned short);
18485      vector unsigned short vec_rl (vector unsigned short,
18486                                    vector unsigned short);
18487      vector signed int vec_rl (vector signed int, vector unsigned int);
18488      vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
18489      
18490      vector signed int vec_vrlw (vector signed int, vector unsigned int);
18491      vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
18492      
18493      vector signed short vec_vrlh (vector signed short,
18494                                    vector unsigned short);
18495      vector unsigned short vec_vrlh (vector unsigned short,
18496                                      vector unsigned short);
18497      
18498      vector signed char vec_vrlb (vector signed char, vector unsigned char);
18499      vector unsigned char vec_vrlb (vector unsigned char,
18500                                     vector unsigned char);
18501      
18502      vector float vec_round (vector float);
18503      
18504      vector float vec_rsqrte (vector float);
18505      
18506      vector float vec_sel (vector float, vector float, vector bool int);
18507      vector float vec_sel (vector float, vector float, vector unsigned int);
18508      vector signed int vec_sel (vector signed int,
18509                                 vector signed int,
18510                                 vector bool int);
18511      vector signed int vec_sel (vector signed int,
18512                                 vector signed int,
18513                                 vector unsigned int);
18514      vector unsigned int vec_sel (vector unsigned int,
18515                                   vector unsigned int,
18516                                   vector bool int);
18517      vector unsigned int vec_sel (vector unsigned int,
18518                                   vector unsigned int,
18519                                   vector unsigned int);
18520      vector bool int vec_sel (vector bool int,
18521                               vector bool int,
18522                               vector bool int);
18523      vector bool int vec_sel (vector bool int,
18524                               vector bool int,
18525                               vector unsigned int);
18526      vector signed short vec_sel (vector signed short,
18527                                   vector signed short,
18528                                   vector bool short);
18529      vector signed short vec_sel (vector signed short,
18530                                   vector signed short,
18531                                   vector unsigned short);
18532      vector unsigned short vec_sel (vector unsigned short,
18533                                     vector unsigned short,
18534                                     vector bool short);
18535      vector unsigned short vec_sel (vector unsigned short,
18536                                     vector unsigned short,
18537                                     vector unsigned short);
18538      vector bool short vec_sel (vector bool short,
18539                                 vector bool short,
18540                                 vector bool short);
18541      vector bool short vec_sel (vector bool short,
18542                                 vector bool short,
18543                                 vector unsigned short);
18544      vector signed char vec_sel (vector signed char,
18545                                  vector signed char,
18546                                  vector bool char);
18547      vector signed char vec_sel (vector signed char,
18548                                  vector signed char,
18549                                  vector unsigned char);
18550      vector unsigned char vec_sel (vector unsigned char,
18551                                    vector unsigned char,
18552                                    vector bool char);
18553      vector unsigned char vec_sel (vector unsigned char,
18554                                    vector unsigned char,
18555                                    vector unsigned char);
18556      vector bool char vec_sel (vector bool char,
18557                                vector bool char,
18558                                vector bool char);
18559      vector bool char vec_sel (vector bool char,
18560                                vector bool char,
18561                                vector unsigned char);
18562      
18563      vector signed char vec_sl (vector signed char,
18564                                 vector unsigned char);
18565      vector unsigned char vec_sl (vector unsigned char,
18566                                   vector unsigned char);
18567      vector signed short vec_sl (vector signed short, vector unsigned short);
18568      vector unsigned short vec_sl (vector unsigned short,
18569                                    vector unsigned short);
18570      vector signed int vec_sl (vector signed int, vector unsigned int);
18571      vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
18572      
18573      vector signed int vec_vslw (vector signed int, vector unsigned int);
18574      vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
18575      
18576      vector signed short vec_vslh (vector signed short,
18577                                    vector unsigned short);
18578      vector unsigned short vec_vslh (vector unsigned short,
18579                                      vector unsigned short);
18580      
18581      vector signed char vec_vslb (vector signed char, vector unsigned char);
18582      vector unsigned char vec_vslb (vector unsigned char,
18583                                     vector unsigned char);
18584      
18585      vector float vec_sld (vector float, vector float, const int);
18586      vector signed int vec_sld (vector signed int,
18587                                 vector signed int,
18588                                 const int);
18589      vector unsigned int vec_sld (vector unsigned int,
18590                                   vector unsigned int,
18591                                   const int);
18592      vector bool int vec_sld (vector bool int,
18593                               vector bool int,
18594                               const int);
18595      vector signed short vec_sld (vector signed short,
18596                                   vector signed short,
18597                                   const int);
18598      vector unsigned short vec_sld (vector unsigned short,
18599                                     vector unsigned short,
18600                                     const int);
18601      vector bool short vec_sld (vector bool short,
18602                                 vector bool short,
18603                                 const int);
18604      vector pixel vec_sld (vector pixel,
18605                            vector pixel,
18606                            const int);
18607      vector signed char vec_sld (vector signed char,
18608                                  vector signed char,
18609                                  const int);
18610      vector unsigned char vec_sld (vector unsigned char,
18611                                    vector unsigned char,
18612                                    const int);
18613      vector bool char vec_sld (vector bool char,
18614                                vector bool char,
18615                                const int);
18616      
18617      vector signed int vec_sll (vector signed int,
18618                                 vector unsigned int);
18619      vector signed int vec_sll (vector signed int,
18620                                 vector unsigned short);
18621      vector signed int vec_sll (vector signed int,
18622                                 vector unsigned char);
18623      vector unsigned int vec_sll (vector unsigned int,
18624                                   vector unsigned int);
18625      vector unsigned int vec_sll (vector unsigned int,
18626                                   vector unsigned short);
18627      vector unsigned int vec_sll (vector unsigned int,
18628                                   vector unsigned char);
18629      vector bool int vec_sll (vector bool int,
18630                               vector unsigned int);
18631      vector bool int vec_sll (vector bool int,
18632                               vector unsigned short);
18633      vector bool int vec_sll (vector bool int,
18634                               vector unsigned char);
18635      vector signed short vec_sll (vector signed short,
18636                                   vector unsigned int);
18637      vector signed short vec_sll (vector signed short,
18638                                   vector unsigned short);
18639      vector signed short vec_sll (vector signed short,
18640                                   vector unsigned char);
18641      vector unsigned short vec_sll (vector unsigned short,
18642                                     vector unsigned int);
18643      vector unsigned short vec_sll (vector unsigned short,
18644                                     vector unsigned short);
18645      vector unsigned short vec_sll (vector unsigned short,
18646                                     vector unsigned char);
18647      vector bool short vec_sll (vector bool short, vector unsigned int);
18648      vector bool short vec_sll (vector bool short, vector unsigned short);
18649      vector bool short vec_sll (vector bool short, vector unsigned char);
18650      vector pixel vec_sll (vector pixel, vector unsigned int);
18651      vector pixel vec_sll (vector pixel, vector unsigned short);
18652      vector pixel vec_sll (vector pixel, vector unsigned char);
18653      vector signed char vec_sll (vector signed char, vector unsigned int);
18654      vector signed char vec_sll (vector signed char, vector unsigned short);
18655      vector signed char vec_sll (vector signed char, vector unsigned char);
18656      vector unsigned char vec_sll (vector unsigned char,
18657                                    vector unsigned int);
18658      vector unsigned char vec_sll (vector unsigned char,
18659                                    vector unsigned short);
18660      vector unsigned char vec_sll (vector unsigned char,
18661                                    vector unsigned char);
18662      vector bool char vec_sll (vector bool char, vector unsigned int);
18663      vector bool char vec_sll (vector bool char, vector unsigned short);
18664      vector bool char vec_sll (vector bool char, vector unsigned char);
18665      
18666      vector float vec_slo (vector float, vector signed char);
18667      vector float vec_slo (vector float, vector unsigned char);
18668      vector signed int vec_slo (vector signed int, vector signed char);
18669      vector signed int vec_slo (vector signed int, vector unsigned char);
18670      vector unsigned int vec_slo (vector unsigned int, vector signed char);
18671      vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
18672      vector signed short vec_slo (vector signed short, vector signed char);
18673      vector signed short vec_slo (vector signed short, vector unsigned char);
18674      vector unsigned short vec_slo (vector unsigned short,
18675                                     vector signed char);
18676      vector unsigned short vec_slo (vector unsigned short,
18677                                     vector unsigned char);
18678      vector pixel vec_slo (vector pixel, vector signed char);
18679      vector pixel vec_slo (vector pixel, vector unsigned char);
18680      vector signed char vec_slo (vector signed char, vector signed char);
18681      vector signed char vec_slo (vector signed char, vector unsigned char);
18682      vector unsigned char vec_slo (vector unsigned char, vector signed char);
18683      vector unsigned char vec_slo (vector unsigned char,
18684                                    vector unsigned char);
18685      
18686      vector signed char vec_splat (vector signed char, const int);
18687      vector unsigned char vec_splat (vector unsigned char, const int);
18688      vector bool char vec_splat (vector bool char, const int);
18689      vector signed short vec_splat (vector signed short, const int);
18690      vector unsigned short vec_splat (vector unsigned short, const int);
18691      vector bool short vec_splat (vector bool short, const int);
18692      vector pixel vec_splat (vector pixel, const int);
18693      vector float vec_splat (vector float, const int);
18694      vector signed int vec_splat (vector signed int, const int);
18695      vector unsigned int vec_splat (vector unsigned int, const int);
18696      vector bool int vec_splat (vector bool int, const int);
18697      
18698      vector float vec_vspltw (vector float, const int);
18699      vector signed int vec_vspltw (vector signed int, const int);
18700      vector unsigned int vec_vspltw (vector unsigned int, const int);
18701      vector bool int vec_vspltw (vector bool int, const int);
18702      
18703      vector bool short vec_vsplth (vector bool short, const int);
18704      vector signed short vec_vsplth (vector signed short, const int);
18705      vector unsigned short vec_vsplth (vector unsigned short, const int);
18706      vector pixel vec_vsplth (vector pixel, const int);
18707      
18708      vector signed char vec_vspltb (vector signed char, const int);
18709      vector unsigned char vec_vspltb (vector unsigned char, const int);
18710      vector bool char vec_vspltb (vector bool char, const int);
18711      
18712      vector signed char vec_splat_s8 (const int);
18713      
18714      vector signed short vec_splat_s16 (const int);
18715      
18716      vector signed int vec_splat_s32 (const int);
18717      
18718      vector unsigned char vec_splat_u8 (const int);
18719      
18720      vector unsigned short vec_splat_u16 (const int);
18721      
18722      vector unsigned int vec_splat_u32 (const int);
18723      
18724      vector signed char vec_sr (vector signed char, vector unsigned char);
18725      vector unsigned char vec_sr (vector unsigned char,
18726                                   vector unsigned char);
18727      vector signed short vec_sr (vector signed short,
18728                                  vector unsigned short);
18729      vector unsigned short vec_sr (vector unsigned short,
18730                                    vector unsigned short);
18731      vector signed int vec_sr (vector signed int, vector unsigned int);
18732      vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
18733      
18734      vector signed int vec_vsrw (vector signed int, vector unsigned int);
18735      vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
18736      
18737      vector signed short vec_vsrh (vector signed short,
18738                                    vector unsigned short);
18739      vector unsigned short vec_vsrh (vector unsigned short,
18740                                      vector unsigned short);
18741      
18742      vector signed char vec_vsrb (vector signed char, vector unsigned char);
18743      vector unsigned char vec_vsrb (vector unsigned char,
18744                                     vector unsigned char);
18745      
18746      vector signed char vec_sra (vector signed char, vector unsigned char);
18747      vector unsigned char vec_sra (vector unsigned char,
18748                                    vector unsigned char);
18749      vector signed short vec_sra (vector signed short,
18750                                   vector unsigned short);
18751      vector unsigned short vec_sra (vector unsigned short,
18752                                     vector unsigned short);
18753      vector signed int vec_sra (vector signed int, vector unsigned int);
18754      vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
18755      
18756      vector signed int vec_vsraw (vector signed int, vector unsigned int);
18757      vector unsigned int vec_vsraw (vector unsigned int,
18758                                     vector unsigned int);
18759      
18760      vector signed short vec_vsrah (vector signed short,
18761                                     vector unsigned short);
18762      vector unsigned short vec_vsrah (vector unsigned short,
18763                                       vector unsigned short);
18764      
18765      vector signed char vec_vsrab (vector signed char, vector unsigned char);
18766      vector unsigned char vec_vsrab (vector unsigned char,
18767                                      vector unsigned char);
18768      
18769      vector signed int vec_srl (vector signed int, vector unsigned int);
18770      vector signed int vec_srl (vector signed int, vector unsigned short);
18771      vector signed int vec_srl (vector signed int, vector unsigned char);
18772      vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
18773      vector unsigned int vec_srl (vector unsigned int,
18774                                   vector unsigned short);
18775      vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
18776      vector bool int vec_srl (vector bool int, vector unsigned int);
18777      vector bool int vec_srl (vector bool int, vector unsigned short);
18778      vector bool int vec_srl (vector bool int, vector unsigned char);
18779      vector signed short vec_srl (vector signed short, vector unsigned int);
18780      vector signed short vec_srl (vector signed short,
18781                                   vector unsigned short);
18782      vector signed short vec_srl (vector signed short, vector unsigned char);
18783      vector unsigned short vec_srl (vector unsigned short,
18784                                     vector unsigned int);
18785      vector unsigned short vec_srl (vector unsigned short,
18786                                     vector unsigned short);
18787      vector unsigned short vec_srl (vector unsigned short,
18788                                     vector unsigned char);
18789      vector bool short vec_srl (vector bool short, vector unsigned int);
18790      vector bool short vec_srl (vector bool short, vector unsigned short);
18791      vector bool short vec_srl (vector bool short, vector unsigned char);
18792      vector pixel vec_srl (vector pixel, vector unsigned int);
18793      vector pixel vec_srl (vector pixel, vector unsigned short);
18794      vector pixel vec_srl (vector pixel, vector unsigned char);
18795      vector signed char vec_srl (vector signed char, vector unsigned int);
18796      vector signed char vec_srl (vector signed char, vector unsigned short);
18797      vector signed char vec_srl (vector signed char, vector unsigned char);
18798      vector unsigned char vec_srl (vector unsigned char,
18799                                    vector unsigned int);
18800      vector unsigned char vec_srl (vector unsigned char,
18801                                    vector unsigned short);
18802      vector unsigned char vec_srl (vector unsigned char,
18803                                    vector unsigned char);
18804      vector bool char vec_srl (vector bool char, vector unsigned int);
18805      vector bool char vec_srl (vector bool char, vector unsigned short);
18806      vector bool char vec_srl (vector bool char, vector unsigned char);
18807      
18808      vector float vec_sro (vector float, vector signed char);
18809      vector float vec_sro (vector float, vector unsigned char);
18810      vector signed int vec_sro (vector signed int, vector signed char);
18811      vector signed int vec_sro (vector signed int, vector unsigned char);
18812      vector unsigned int vec_sro (vector unsigned int, vector signed char);
18813      vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
18814      vector signed short vec_sro (vector signed short, vector signed char);
18815      vector signed short vec_sro (vector signed short, vector unsigned char);
18816      vector unsigned short vec_sro (vector unsigned short,
18817                                     vector signed char);
18818      vector unsigned short vec_sro (vector unsigned short,
18819                                     vector unsigned char);
18820      vector pixel vec_sro (vector pixel, vector signed char);
18821      vector pixel vec_sro (vector pixel, vector unsigned char);
18822      vector signed char vec_sro (vector signed char, vector signed char);
18823      vector signed char vec_sro (vector signed char, vector unsigned char);
18824      vector unsigned char vec_sro (vector unsigned char, vector signed char);
18825      vector unsigned char vec_sro (vector unsigned char,
18826                                    vector unsigned char);
18827      
18828      void vec_st (vector float, int, vector float *);
18829      void vec_st (vector float, int, float *);
18830      void vec_st (vector signed int, int, vector signed int *);
18831      void vec_st (vector signed int, int, int *);
18832      void vec_st (vector unsigned int, int, vector unsigned int *);
18833      void vec_st (vector unsigned int, int, unsigned int *);
18834      void vec_st (vector bool int, int, vector bool int *);
18835      void vec_st (vector bool int, int, unsigned int *);
18836      void vec_st (vector bool int, int, int *);
18837      void vec_st (vector signed short, int, vector signed short *);
18838      void vec_st (vector signed short, int, short *);
18839      void vec_st (vector unsigned short, int, vector unsigned short *);
18840      void vec_st (vector unsigned short, int, unsigned short *);
18841      void vec_st (vector bool short, int, vector bool short *);
18842      void vec_st (vector bool short, int, unsigned short *);
18843      void vec_st (vector pixel, int, vector pixel *);
18844      void vec_st (vector pixel, int, unsigned short *);
18845      void vec_st (vector pixel, int, short *);
18846      void vec_st (vector bool short, int, short *);
18847      void vec_st (vector signed char, int, vector signed char *);
18848      void vec_st (vector signed char, int, signed char *);
18849      void vec_st (vector unsigned char, int, vector unsigned char *);
18850      void vec_st (vector unsigned char, int, unsigned char *);
18851      void vec_st (vector bool char, int, vector bool char *);
18852      void vec_st (vector bool char, int, unsigned char *);
18853      void vec_st (vector bool char, int, signed char *);
18854      
18855      void vec_ste (vector signed char, int, signed char *);
18856      void vec_ste (vector unsigned char, int, unsigned char *);
18857      void vec_ste (vector bool char, int, signed char *);
18858      void vec_ste (vector bool char, int, unsigned char *);
18859      void vec_ste (vector signed short, int, short *);
18860      void vec_ste (vector unsigned short, int, unsigned short *);
18861      void vec_ste (vector bool short, int, short *);
18862      void vec_ste (vector bool short, int, unsigned short *);
18863      void vec_ste (vector pixel, int, short *);
18864      void vec_ste (vector pixel, int, unsigned short *);
18865      void vec_ste (vector float, int, float *);
18866      void vec_ste (vector signed int, int, int *);
18867      void vec_ste (vector unsigned int, int, unsigned int *);
18868      void vec_ste (vector bool int, int, int *);
18869      void vec_ste (vector bool int, int, unsigned int *);
18870      
18871      void vec_stvewx (vector float, int, float *);
18872      void vec_stvewx (vector signed int, int, int *);
18873      void vec_stvewx (vector unsigned int, int, unsigned int *);
18874      void vec_stvewx (vector bool int, int, int *);
18875      void vec_stvewx (vector bool int, int, unsigned int *);
18876      
18877      void vec_stvehx (vector signed short, int, short *);
18878      void vec_stvehx (vector unsigned short, int, unsigned short *);
18879      void vec_stvehx (vector bool short, int, short *);
18880      void vec_stvehx (vector bool short, int, unsigned short *);
18881      void vec_stvehx (vector pixel, int, short *);
18882      void vec_stvehx (vector pixel, int, unsigned short *);
18883      
18884      void vec_stvebx (vector signed char, int, signed char *);
18885      void vec_stvebx (vector unsigned char, int, unsigned char *);
18886      void vec_stvebx (vector bool char, int, signed char *);
18887      void vec_stvebx (vector bool char, int, unsigned char *);
18888      
18889      void vec_stl (vector float, int, vector float *);
18890      void vec_stl (vector float, int, float *);
18891      void vec_stl (vector signed int, int, vector signed int *);
18892      void vec_stl (vector signed int, int, int *);
18893      void vec_stl (vector unsigned int, int, vector unsigned int *);
18894      void vec_stl (vector unsigned int, int, unsigned int *);
18895      void vec_stl (vector bool int, int, vector bool int *);
18896      void vec_stl (vector bool int, int, unsigned int *);
18897      void vec_stl (vector bool int, int, int *);
18898      void vec_stl (vector signed short, int, vector signed short *);
18899      void vec_stl (vector signed short, int, short *);
18900      void vec_stl (vector unsigned short, int, vector unsigned short *);
18901      void vec_stl (vector unsigned short, int, unsigned short *);
18902      void vec_stl (vector bool short, int, vector bool short *);
18903      void vec_stl (vector bool short, int, unsigned short *);
18904      void vec_stl (vector bool short, int, short *);
18905      void vec_stl (vector pixel, int, vector pixel *);
18906      void vec_stl (vector pixel, int, unsigned short *);
18907      void vec_stl (vector pixel, int, short *);
18908      void vec_stl (vector signed char, int, vector signed char *);
18909      void vec_stl (vector signed char, int, signed char *);
18910      void vec_stl (vector unsigned char, int, vector unsigned char *);
18911      void vec_stl (vector unsigned char, int, unsigned char *);
18912      void vec_stl (vector bool char, int, vector bool char *);
18913      void vec_stl (vector bool char, int, unsigned char *);
18914      void vec_stl (vector bool char, int, signed char *);
18915      
18916      vector signed char vec_sub (vector bool char, vector signed char);
18917      vector signed char vec_sub (vector signed char, vector bool char);
18918      vector signed char vec_sub (vector signed char, vector signed char);
18919      vector unsigned char vec_sub (vector bool char, vector unsigned char);
18920      vector unsigned char vec_sub (vector unsigned char, vector bool char);
18921      vector unsigned char vec_sub (vector unsigned char,
18922                                    vector unsigned char);
18923      vector signed short vec_sub (vector bool short, vector signed short);
18924      vector signed short vec_sub (vector signed short, vector bool short);
18925      vector signed short vec_sub (vector signed short, vector signed short);
18926      vector unsigned short vec_sub (vector bool short,
18927                                     vector unsigned short);
18928      vector unsigned short vec_sub (vector unsigned short,
18929                                     vector bool short);
18930      vector unsigned short vec_sub (vector unsigned short,
18931                                     vector unsigned short);
18932      vector signed int vec_sub (vector bool int, vector signed int);
18933      vector signed int vec_sub (vector signed int, vector bool int);
18934      vector signed int vec_sub (vector signed int, vector signed int);
18935      vector unsigned int vec_sub (vector bool int, vector unsigned int);
18936      vector unsigned int vec_sub (vector unsigned int, vector bool int);
18937      vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
18938      vector float vec_sub (vector float, vector float);
18939      
18940      vector float vec_vsubfp (vector float, vector float);
18941      
18942      vector signed int vec_vsubuwm (vector bool int, vector signed int);
18943      vector signed int vec_vsubuwm (vector signed int, vector bool int);
18944      vector signed int vec_vsubuwm (vector signed int, vector signed int);
18945      vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
18946      vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
18947      vector unsigned int vec_vsubuwm (vector unsigned int,
18948                                       vector unsigned int);
18949      
18950      vector signed short vec_vsubuhm (vector bool short,
18951                                       vector signed short);
18952      vector signed short vec_vsubuhm (vector signed short,
18953                                       vector bool short);
18954      vector signed short vec_vsubuhm (vector signed short,
18955                                       vector signed short);
18956      vector unsigned short vec_vsubuhm (vector bool short,
18957                                         vector unsigned short);
18958      vector unsigned short vec_vsubuhm (vector unsigned short,
18959                                         vector bool short);
18960      vector unsigned short vec_vsubuhm (vector unsigned short,
18961                                         vector unsigned short);
18962      
18963      vector signed char vec_vsububm (vector bool char, vector signed char);
18964      vector signed char vec_vsububm (vector signed char, vector bool char);
18965      vector signed char vec_vsububm (vector signed char, vector signed char);
18966      vector unsigned char vec_vsububm (vector bool char,
18967                                        vector unsigned char);
18968      vector unsigned char vec_vsububm (vector unsigned char,
18969                                        vector bool char);
18970      vector unsigned char vec_vsububm (vector unsigned char,
18971                                        vector unsigned char);
18972      
18973      vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
18974      
18975      vector unsigned char vec_subs (vector bool char, vector unsigned char);
18976      vector unsigned char vec_subs (vector unsigned char, vector bool char);
18977      vector unsigned char vec_subs (vector unsigned char,
18978                                     vector unsigned char);
18979      vector signed char vec_subs (vector bool char, vector signed char);
18980      vector signed char vec_subs (vector signed char, vector bool char);
18981      vector signed char vec_subs (vector signed char, vector signed char);
18982      vector unsigned short vec_subs (vector bool short,
18983                                      vector unsigned short);
18984      vector unsigned short vec_subs (vector unsigned short,
18985                                      vector bool short);
18986      vector unsigned short vec_subs (vector unsigned short,
18987                                      vector unsigned short);
18988      vector signed short vec_subs (vector bool short, vector signed short);
18989      vector signed short vec_subs (vector signed short, vector bool short);
18990      vector signed short vec_subs (vector signed short, vector signed short);
18991      vector unsigned int vec_subs (vector bool int, vector unsigned int);
18992      vector unsigned int vec_subs (vector unsigned int, vector bool int);
18993      vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
18994      vector signed int vec_subs (vector bool int, vector signed int);
18995      vector signed int vec_subs (vector signed int, vector bool int);
18996      vector signed int vec_subs (vector signed int, vector signed int);
18997      
18998      vector signed int vec_vsubsws (vector bool int, vector signed int);
18999      vector signed int vec_vsubsws (vector signed int, vector bool int);
19000      vector signed int vec_vsubsws (vector signed int, vector signed int);
19001      
19002      vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
19003      vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
19004      vector unsigned int vec_vsubuws (vector unsigned int,
19005                                       vector unsigned int);
19006      
19007      vector signed short vec_vsubshs (vector bool short,
19008                                       vector signed short);
19009      vector signed short vec_vsubshs (vector signed short,
19010                                       vector bool short);
19011      vector signed short vec_vsubshs (vector signed short,
19012                                       vector signed short);
19013      
19014      vector unsigned short vec_vsubuhs (vector bool short,
19015                                         vector unsigned short);
19016      vector unsigned short vec_vsubuhs (vector unsigned short,
19017                                         vector bool short);
19018      vector unsigned short vec_vsubuhs (vector unsigned short,
19019                                         vector unsigned short);
19020      
19021      vector signed char vec_vsubsbs (vector bool char, vector signed char);
19022      vector signed char vec_vsubsbs (vector signed char, vector bool char);
19023      vector signed char vec_vsubsbs (vector signed char, vector signed char);
19024      
19025      vector unsigned char vec_vsububs (vector bool char,
19026                                        vector unsigned char);
19027      vector unsigned char vec_vsububs (vector unsigned char,
19028                                        vector bool char);
19029      vector unsigned char vec_vsububs (vector unsigned char,
19030                                        vector unsigned char);
19031      
19032      vector unsigned int vec_sum4s (vector unsigned char,
19033                                     vector unsigned int);
19034      vector signed int vec_sum4s (vector signed char, vector signed int);
19035      vector signed int vec_sum4s (vector signed short, vector signed int);
19036      
19037      vector signed int vec_vsum4shs (vector signed short, vector signed int);
19038      
19039      vector signed int vec_vsum4sbs (vector signed char, vector signed int);
19040      
19041      vector unsigned int vec_vsum4ubs (vector unsigned char,
19042                                        vector unsigned int);
19043      
19044      vector signed int vec_sum2s (vector signed int, vector signed int);
19045      
19046      vector signed int vec_sums (vector signed int, vector signed int);
19047      
19048      vector float vec_trunc (vector float);
19049      
19050      vector signed short vec_unpackh (vector signed char);
19051      vector bool short vec_unpackh (vector bool char);
19052      vector signed int vec_unpackh (vector signed short);
19053      vector bool int vec_unpackh (vector bool short);
19054      vector unsigned int vec_unpackh (vector pixel);
19055      
19056      vector bool int vec_vupkhsh (vector bool short);
19057      vector signed int vec_vupkhsh (vector signed short);
19058      
19059      vector unsigned int vec_vupkhpx (vector pixel);
19060      
19061      vector bool short vec_vupkhsb (vector bool char);
19062      vector signed short vec_vupkhsb (vector signed char);
19063      
19064      vector signed short vec_unpackl (vector signed char);
19065      vector bool short vec_unpackl (vector bool char);
19066      vector unsigned int vec_unpackl (vector pixel);
19067      vector signed int vec_unpackl (vector signed short);
19068      vector bool int vec_unpackl (vector bool short);
19069      
19070      vector unsigned int vec_vupklpx (vector pixel);
19071      
19072      vector bool int vec_vupklsh (vector bool short);
19073      vector signed int vec_vupklsh (vector signed short);
19074      
19075      vector bool short vec_vupklsb (vector bool char);
19076      vector signed short vec_vupklsb (vector signed char);
19077      
19078      vector float vec_xor (vector float, vector float);
19079      vector float vec_xor (vector float, vector bool int);
19080      vector float vec_xor (vector bool int, vector float);
19081      vector bool int vec_xor (vector bool int, vector bool int);
19082      vector signed int vec_xor (vector bool int, vector signed int);
19083      vector signed int vec_xor (vector signed int, vector bool int);
19084      vector signed int vec_xor (vector signed int, vector signed int);
19085      vector unsigned int vec_xor (vector bool int, vector unsigned int);
19086      vector unsigned int vec_xor (vector unsigned int, vector bool int);
19087      vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
19088      vector bool short vec_xor (vector bool short, vector bool short);
19089      vector signed short vec_xor (vector bool short, vector signed short);
19090      vector signed short vec_xor (vector signed short, vector bool short);
19091      vector signed short vec_xor (vector signed short, vector signed short);
19092      vector unsigned short vec_xor (vector bool short,
19093                                     vector unsigned short);
19094      vector unsigned short vec_xor (vector unsigned short,
19095                                     vector bool short);
19096      vector unsigned short vec_xor (vector unsigned short,
19097                                     vector unsigned short);
19098      vector signed char vec_xor (vector bool char, vector signed char);
19099      vector bool char vec_xor (vector bool char, vector bool char);
19100      vector signed char vec_xor (vector signed char, vector bool char);
19101      vector signed char vec_xor (vector signed char, vector signed char);
19102      vector unsigned char vec_xor (vector bool char, vector unsigned char);
19103      vector unsigned char vec_xor (vector unsigned char, vector bool char);
19104      vector unsigned char vec_xor (vector unsigned char,
19105                                    vector unsigned char);
19106      
19107      int vec_all_eq (vector signed char, vector bool char);
19108      int vec_all_eq (vector signed char, vector signed char);
19109      int vec_all_eq (vector unsigned char, vector bool char);
19110      int vec_all_eq (vector unsigned char, vector unsigned char);
19111      int vec_all_eq (vector bool char, vector bool char);
19112      int vec_all_eq (vector bool char, vector unsigned char);
19113      int vec_all_eq (vector bool char, vector signed char);
19114      int vec_all_eq (vector signed short, vector bool short);
19115      int vec_all_eq (vector signed short, vector signed short);
19116      int vec_all_eq (vector unsigned short, vector bool short);
19117      int vec_all_eq (vector unsigned short, vector unsigned short);
19118      int vec_all_eq (vector bool short, vector bool short);
19119      int vec_all_eq (vector bool short, vector unsigned short);
19120      int vec_all_eq (vector bool short, vector signed short);
19121      int vec_all_eq (vector pixel, vector pixel);
19122      int vec_all_eq (vector signed int, vector bool int);
19123      int vec_all_eq (vector signed int, vector signed int);
19124      int vec_all_eq (vector unsigned int, vector bool int);
19125      int vec_all_eq (vector unsigned int, vector unsigned int);
19126      int vec_all_eq (vector bool int, vector bool int);
19127      int vec_all_eq (vector bool int, vector unsigned int);
19128      int vec_all_eq (vector bool int, vector signed int);
19129      int vec_all_eq (vector float, vector float);
19130      
19131      int vec_all_ge (vector bool char, vector unsigned char);
19132      int vec_all_ge (vector unsigned char, vector bool char);
19133      int vec_all_ge (vector unsigned char, vector unsigned char);
19134      int vec_all_ge (vector bool char, vector signed char);
19135      int vec_all_ge (vector signed char, vector bool char);
19136      int vec_all_ge (vector signed char, vector signed char);
19137      int vec_all_ge (vector bool short, vector unsigned short);
19138      int vec_all_ge (vector unsigned short, vector bool short);
19139      int vec_all_ge (vector unsigned short, vector unsigned short);
19140      int vec_all_ge (vector signed short, vector signed short);
19141      int vec_all_ge (vector bool short, vector signed short);
19142      int vec_all_ge (vector signed short, vector bool short);
19143      int vec_all_ge (vector bool int, vector unsigned int);
19144      int vec_all_ge (vector unsigned int, vector bool int);
19145      int vec_all_ge (vector unsigned int, vector unsigned int);
19146      int vec_all_ge (vector bool int, vector signed int);
19147      int vec_all_ge (vector signed int, vector bool int);
19148      int vec_all_ge (vector signed int, vector signed int);
19149      int vec_all_ge (vector float, vector float);
19150      
19151      int vec_all_gt (vector bool char, vector unsigned char);
19152      int vec_all_gt (vector unsigned char, vector bool char);
19153      int vec_all_gt (vector unsigned char, vector unsigned char);
19154      int vec_all_gt (vector bool char, vector signed char);
19155      int vec_all_gt (vector signed char, vector bool char);
19156      int vec_all_gt (vector signed char, vector signed char);
19157      int vec_all_gt (vector bool short, vector unsigned short);
19158      int vec_all_gt (vector unsigned short, vector bool short);
19159      int vec_all_gt (vector unsigned short, vector unsigned short);
19160      int vec_all_gt (vector bool short, vector signed short);
19161      int vec_all_gt (vector signed short, vector bool short);
19162      int vec_all_gt (vector signed short, vector signed short);
19163      int vec_all_gt (vector bool int, vector unsigned int);
19164      int vec_all_gt (vector unsigned int, vector bool int);
19165      int vec_all_gt (vector unsigned int, vector unsigned int);
19166      int vec_all_gt (vector bool int, vector signed int);
19167      int vec_all_gt (vector signed int, vector bool int);
19168      int vec_all_gt (vector signed int, vector signed int);
19169      int vec_all_gt (vector float, vector float);
19170      
19171      int vec_all_in (vector float, vector float);
19172      
19173      int vec_all_le (vector bool char, vector unsigned char);
19174      int vec_all_le (vector unsigned char, vector bool char);
19175      int vec_all_le (vector unsigned char, vector unsigned char);
19176      int vec_all_le (vector bool char, vector signed char);
19177      int vec_all_le (vector signed char, vector bool char);
19178      int vec_all_le (vector signed char, vector signed char);
19179      int vec_all_le (vector bool short, vector unsigned short);
19180      int vec_all_le (vector unsigned short, vector bool short);
19181      int vec_all_le (vector unsigned short, vector unsigned short);
19182      int vec_all_le (vector bool short, vector signed short);
19183      int vec_all_le (vector signed short, vector bool short);
19184      int vec_all_le (vector signed short, vector signed short);
19185      int vec_all_le (vector bool int, vector unsigned int);
19186      int vec_all_le (vector unsigned int, vector bool int);
19187      int vec_all_le (vector unsigned int, vector unsigned int);
19188      int vec_all_le (vector bool int, vector signed int);
19189      int vec_all_le (vector signed int, vector bool int);
19190      int vec_all_le (vector signed int, vector signed int);
19191      int vec_all_le (vector float, vector float);
19192      
19193      int vec_all_lt (vector bool char, vector unsigned char);
19194      int vec_all_lt (vector unsigned char, vector bool char);
19195      int vec_all_lt (vector unsigned char, vector unsigned char);
19196      int vec_all_lt (vector bool char, vector signed char);
19197      int vec_all_lt (vector signed char, vector bool char);
19198      int vec_all_lt (vector signed char, vector signed char);
19199      int vec_all_lt (vector bool short, vector unsigned short);
19200      int vec_all_lt (vector unsigned short, vector bool short);
19201      int vec_all_lt (vector unsigned short, vector unsigned short);
19202      int vec_all_lt (vector bool short, vector signed short);
19203      int vec_all_lt (vector signed short, vector bool short);
19204      int vec_all_lt (vector signed short, vector signed short);
19205      int vec_all_lt (vector bool int, vector unsigned int);
19206      int vec_all_lt (vector unsigned int, vector bool int);
19207      int vec_all_lt (vector unsigned int, vector unsigned int);
19208      int vec_all_lt (vector bool int, vector signed int);
19209      int vec_all_lt (vector signed int, vector bool int);
19210      int vec_all_lt (vector signed int, vector signed int);
19211      int vec_all_lt (vector float, vector float);
19212      
19213      int vec_all_nan (vector float);
19214      
19215      int vec_all_ne (vector signed char, vector bool char);
19216      int vec_all_ne (vector signed char, vector signed char);
19217      int vec_all_ne (vector unsigned char, vector bool char);
19218      int vec_all_ne (vector unsigned char, vector unsigned char);
19219      int vec_all_ne (vector bool char, vector bool char);
19220      int vec_all_ne (vector bool char, vector unsigned char);
19221      int vec_all_ne (vector bool char, vector signed char);
19222      int vec_all_ne (vector signed short, vector bool short);
19223      int vec_all_ne (vector signed short, vector signed short);
19224      int vec_all_ne (vector unsigned short, vector bool short);
19225      int vec_all_ne (vector unsigned short, vector unsigned short);
19226      int vec_all_ne (vector bool short, vector bool short);
19227      int vec_all_ne (vector bool short, vector unsigned short);
19228      int vec_all_ne (vector bool short, vector signed short);
19229      int vec_all_ne (vector pixel, vector pixel);
19230      int vec_all_ne (vector signed int, vector bool int);
19231      int vec_all_ne (vector signed int, vector signed int);
19232      int vec_all_ne (vector unsigned int, vector bool int);
19233      int vec_all_ne (vector unsigned int, vector unsigned int);
19234      int vec_all_ne (vector bool int, vector bool int);
19235      int vec_all_ne (vector bool int, vector unsigned int);
19236      int vec_all_ne (vector bool int, vector signed int);
19237      int vec_all_ne (vector float, vector float);
19238      
19239      int vec_all_nge (vector float, vector float);
19240      
19241      int vec_all_ngt (vector float, vector float);
19242      
19243      int vec_all_nle (vector float, vector float);
19244      
19245      int vec_all_nlt (vector float, vector float);
19246      
19247      int vec_all_numeric (vector float);
19248      
19249      int vec_any_eq (vector signed char, vector bool char);
19250      int vec_any_eq (vector signed char, vector signed char);
19251      int vec_any_eq (vector unsigned char, vector bool char);
19252      int vec_any_eq (vector unsigned char, vector unsigned char);
19253      int vec_any_eq (vector bool char, vector bool char);
19254      int vec_any_eq (vector bool char, vector unsigned char);
19255      int vec_any_eq (vector bool char, vector signed char);
19256      int vec_any_eq (vector signed short, vector bool short);
19257      int vec_any_eq (vector signed short, vector signed short);
19258      int vec_any_eq (vector unsigned short, vector bool short);
19259      int vec_any_eq (vector unsigned short, vector unsigned short);
19260      int vec_any_eq (vector bool short, vector bool short);
19261      int vec_any_eq (vector bool short, vector unsigned short);
19262      int vec_any_eq (vector bool short, vector signed short);
19263      int vec_any_eq (vector pixel, vector pixel);
19264      int vec_any_eq (vector signed int, vector bool int);
19265      int vec_any_eq (vector signed int, vector signed int);
19266      int vec_any_eq (vector unsigned int, vector bool int);
19267      int vec_any_eq (vector unsigned int, vector unsigned int);
19268      int vec_any_eq (vector bool int, vector bool int);
19269      int vec_any_eq (vector bool int, vector unsigned int);
19270      int vec_any_eq (vector bool int, vector signed int);
19271      int vec_any_eq (vector float, vector float);
19272      
19273      int vec_any_ge (vector signed char, vector bool char);
19274      int vec_any_ge (vector unsigned char, vector bool char);
19275      int vec_any_ge (vector unsigned char, vector unsigned char);
19276      int vec_any_ge (vector signed char, vector signed char);
19277      int vec_any_ge (vector bool char, vector unsigned char);
19278      int vec_any_ge (vector bool char, vector signed char);
19279      int vec_any_ge (vector unsigned short, vector bool short);
19280      int vec_any_ge (vector unsigned short, vector unsigned short);
19281      int vec_any_ge (vector signed short, vector signed short);
19282      int vec_any_ge (vector signed short, vector bool short);
19283      int vec_any_ge (vector bool short, vector unsigned short);
19284      int vec_any_ge (vector bool short, vector signed short);
19285      int vec_any_ge (vector signed int, vector bool int);
19286      int vec_any_ge (vector unsigned int, vector bool int);
19287      int vec_any_ge (vector unsigned int, vector unsigned int);
19288      int vec_any_ge (vector signed int, vector signed int);
19289      int vec_any_ge (vector bool int, vector unsigned int);
19290      int vec_any_ge (vector bool int, vector signed int);
19291      int vec_any_ge (vector float, vector float);
19292      
19293      int vec_any_gt (vector bool char, vector unsigned char);
19294      int vec_any_gt (vector unsigned char, vector bool char);
19295      int vec_any_gt (vector unsigned char, vector unsigned char);
19296      int vec_any_gt (vector bool char, vector signed char);
19297      int vec_any_gt (vector signed char, vector bool char);
19298      int vec_any_gt (vector signed char, vector signed char);
19299      int vec_any_gt (vector bool short, vector unsigned short);
19300      int vec_any_gt (vector unsigned short, vector bool short);
19301      int vec_any_gt (vector unsigned short, vector unsigned short);
19302      int vec_any_gt (vector bool short, vector signed short);
19303      int vec_any_gt (vector signed short, vector bool short);
19304      int vec_any_gt (vector signed short, vector signed short);
19305      int vec_any_gt (vector bool int, vector unsigned int);
19306      int vec_any_gt (vector unsigned int, vector bool int);
19307      int vec_any_gt (vector unsigned int, vector unsigned int);
19308      int vec_any_gt (vector bool int, vector signed int);
19309      int vec_any_gt (vector signed int, vector bool int);
19310      int vec_any_gt (vector signed int, vector signed int);
19311      int vec_any_gt (vector float, vector float);
19312      
19313      int vec_any_le (vector bool char, vector unsigned char);
19314      int vec_any_le (vector unsigned char, vector bool char);
19315      int vec_any_le (vector unsigned char, vector unsigned char);
19316      int vec_any_le (vector bool char, vector signed char);
19317      int vec_any_le (vector signed char, vector bool char);
19318      int vec_any_le (vector signed char, vector signed char);
19319      int vec_any_le (vector bool short, vector unsigned short);
19320      int vec_any_le (vector unsigned short, vector bool short);
19321      int vec_any_le (vector unsigned short, vector unsigned short);
19322      int vec_any_le (vector bool short, vector signed short);
19323      int vec_any_le (vector signed short, vector bool short);
19324      int vec_any_le (vector signed short, vector signed short);
19325      int vec_any_le (vector bool int, vector unsigned int);
19326      int vec_any_le (vector unsigned int, vector bool int);
19327      int vec_any_le (vector unsigned int, vector unsigned int);
19328      int vec_any_le (vector bool int, vector signed int);
19329      int vec_any_le (vector signed int, vector bool int);
19330      int vec_any_le (vector signed int, vector signed int);
19331      int vec_any_le (vector float, vector float);
19332      
19333      int vec_any_lt (vector bool char, vector unsigned char);
19334      int vec_any_lt (vector unsigned char, vector bool char);
19335      int vec_any_lt (vector unsigned char, vector unsigned char);
19336      int vec_any_lt (vector bool char, vector signed char);
19337      int vec_any_lt (vector signed char, vector bool char);
19338      int vec_any_lt (vector signed char, vector signed char);
19339      int vec_any_lt (vector bool short, vector unsigned short);
19340      int vec_any_lt (vector unsigned short, vector bool short);
19341      int vec_any_lt (vector unsigned short, vector unsigned short);
19342      int vec_any_lt (vector bool short, vector signed short);
19343      int vec_any_lt (vector signed short, vector bool short);
19344      int vec_any_lt (vector signed short, vector signed short);
19345      int vec_any_lt (vector bool int, vector unsigned int);
19346      int vec_any_lt (vector unsigned int, vector bool int);
19347      int vec_any_lt (vector unsigned int, vector unsigned int);
19348      int vec_any_lt (vector bool int, vector signed int);
19349      int vec_any_lt (vector signed int, vector bool int);
19350      int vec_any_lt (vector signed int, vector signed int);
19351      int vec_any_lt (vector float, vector float);
19352      
19353      int vec_any_nan (vector float);
19354      
19355      int vec_any_ne (vector signed char, vector bool char);
19356      int vec_any_ne (vector signed char, vector signed char);
19357      int vec_any_ne (vector unsigned char, vector bool char);
19358      int vec_any_ne (vector unsigned char, vector unsigned char);
19359      int vec_any_ne (vector bool char, vector bool char);
19360      int vec_any_ne (vector bool char, vector unsigned char);
19361      int vec_any_ne (vector bool char, vector signed char);
19362      int vec_any_ne (vector signed short, vector bool short);
19363      int vec_any_ne (vector signed short, vector signed short);
19364      int vec_any_ne (vector unsigned short, vector bool short);
19365      int vec_any_ne (vector unsigned short, vector unsigned short);
19366      int vec_any_ne (vector bool short, vector bool short);
19367      int vec_any_ne (vector bool short, vector unsigned short);
19368      int vec_any_ne (vector bool short, vector signed short);
19369      int vec_any_ne (vector pixel, vector pixel);
19370      int vec_any_ne (vector signed int, vector bool int);
19371      int vec_any_ne (vector signed int, vector signed int);
19372      int vec_any_ne (vector unsigned int, vector bool int);
19373      int vec_any_ne (vector unsigned int, vector unsigned int);
19374      int vec_any_ne (vector bool int, vector bool int);
19375      int vec_any_ne (vector bool int, vector unsigned int);
19376      int vec_any_ne (vector bool int, vector signed int);
19377      int vec_any_ne (vector float, vector float);
19378      
19379      int vec_any_nge (vector float, vector float);
19380      
19381      int vec_any_ngt (vector float, vector float);
19382      
19383      int vec_any_nle (vector float, vector float);
19384      
19385      int vec_any_nlt (vector float, vector float);
19386      
19387      int vec_any_numeric (vector float);
19388      
19389      int vec_any_out (vector float, vector float);
19391 \x1f
19392 File: gcc.info,  Node: Pragmas,  Next: Unnamed Fields,  Prev: Target Builtins,  Up: C Extensions
19394 Pragmas Accepted by GCC
19395 =======================
19397  GCC supports several types of pragmas, primarily in order to compile
19398 code originally written for other compilers.  Note that in general we
19399 do not recommend the use of pragmas; *Note Function Attributes::, for
19400 further explanation.
19402 * Menu:
19404 * ARM Pragmas::
19405 * RS/6000 and PowerPC Pragmas::
19406 * Darwin Pragmas::
19407 * Solaris Pragmas::
19408 * Tru64 Pragmas::
19410 \x1f
19411 File: gcc.info,  Node: ARM Pragmas,  Next: RS/6000 and PowerPC Pragmas,  Up: Pragmas
19413 ARM Pragmas
19414 -----------
19416  The ARM target defines pragmas for controlling the default addition of
19417 `long_call' and `short_call' attributes to functions.  *Note Function
19418 Attributes::, for information about the effects of these attributes.
19420 `long_calls'
19421      Set all subsequent functions to have the `long_call' attribute.
19423 `no_long_calls'
19424      Set all subsequent functions to have the `short_call' attribute.
19426 `long_calls_off'
19427      Do not affect the `long_call' or `short_call' attributes of
19428      subsequent functions.
19430 \x1f
19431 File: gcc.info,  Node: RS/6000 and PowerPC Pragmas,  Next: Darwin Pragmas,  Prev: ARM Pragmas,  Up: Pragmas
19433 RS/6000 and PowerPC Pragmas
19434 ---------------------------
19436  The RS/6000 and PowerPC targets define one pragma for controlling
19437 whether or not the `longcall' attribute is added to function
19438 declarations by default.  This pragma overrides the `-mlongcall'
19439 option, but not the `longcall' and `shortcall' attributes.  *Note
19440 RS/6000 and PowerPC Options::, for more information about when long
19441 calls are and are not necessary.
19443 `longcall (1)'
19444      Apply the `longcall' attribute to all subsequent function
19445      declarations.
19447 `longcall (0)'
19448      Do not apply the `longcall' attribute to subsequent function
19449      declarations.
19451 \x1f
19452 File: gcc.info,  Node: Darwin Pragmas,  Next: Solaris Pragmas,  Prev: RS/6000 and PowerPC Pragmas,  Up: Pragmas
19454 Darwin Pragmas
19455 --------------
19457  The following pragmas are available for all architectures running the
19458 Darwin operating system.  These are useful for compatibility with other
19459 Mac OS compilers.
19461 `mark TOKENS...'
19462      This pragma is accepted, but has no effect.
19464 `options align=ALIGNMENT'
19465      This pragma sets the alignment of fields in structures.  The
19466      values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
19467      `power', to emulate PowerPC alignment.  Uses of this pragma nest
19468      properly; to restore the previous setting, use `reset' for the
19469      ALIGNMENT.
19471 `segment TOKENS...'
19472      This pragma is accepted, but has no effect.
19474 `unused (VAR [, VAR]...)'
19475      This pragma declares variables to be possibly unused.  GCC will not
19476      produce warnings for the listed variables.  The effect is similar
19477      to that of the `unused' attribute, except that this pragma may
19478      appear anywhere within the variables' scopes.
19480 \x1f
19481 File: gcc.info,  Node: Solaris Pragmas,  Next: Tru64 Pragmas,  Prev: Darwin Pragmas,  Up: Pragmas
19483 Solaris Pragmas
19484 ---------------
19486  For compatibility with the SunPRO compiler, the following pragma is
19487 supported.
19489 `redefine_extname OLDNAME NEWNAME'
19490      This pragma gives the C function OLDNAME the assembler label
19491      NEWNAME.  The pragma must appear before the function declaration.
19492      This pragma is equivalent to the asm labels extension (*note Asm
19493      Labels::).  The preprocessor defines `__PRAGMA_REDEFINE_EXTNAME'
19494      if the pragma is available.
19496 \x1f
19497 File: gcc.info,  Node: Tru64 Pragmas,  Prev: Solaris Pragmas,  Up: Pragmas
19499 Tru64 Pragmas
19500 -------------
19502  For compatibility with the Compaq C compiler, the following pragma is
19503 supported.
19505 `extern_prefix STRING'
19506      This pragma renames all subsequent function and variable
19507      declarations such that STRING is prepended to the name.  This
19508      effect may be terminated by using another `extern_prefix' pragma
19509      with the empty string.
19511      This pragma is similar in intent to to the asm labels extension
19512      (*note Asm Labels::) in that the system programmer wants to change
19513      the assembly-level ABI without changing the source-level API.  The
19514      preprocessor defines `__PRAGMA_EXTERN_PREFIX' if the pragma is
19515      available.
19517 \x1f
19518 File: gcc.info,  Node: Unnamed Fields,  Next: Thread-Local,  Prev: Pragmas,  Up: C Extensions
19520 Unnamed struct/union fields within structs/unions.
19521 ==================================================
19523  For compatibility with other compilers, GCC allows you to define a
19524 structure or union that contains, as fields, structures and unions
19525 without names.  For example:
19527      struct {
19528        int a;
19529        union {
19530          int b;
19531          float c;
19532        };
19533        int d;
19534      } foo;
19536  In this example, the user would be able to access members of the
19537 unnamed union with code like `foo.b'.  Note that only unnamed structs
19538 and unions are allowed, you may not have, for example, an unnamed `int'.
19540  You must never create such structures that cause ambiguous field
19541 definitions.  For example, this structure:
19543      struct {
19544        int a;
19545        struct {
19546          int a;
19547        };
19548      } foo;
19550  It is ambiguous which `a' is being referred to with `foo.a'.  Such
19551 constructs are not supported and must be avoided.  In the future, such
19552 constructs may be detected and treated as compilation errors.
19554 \x1f
19555 File: gcc.info,  Node: Thread-Local,  Prev: Unnamed Fields,  Up: C Extensions
19557 Thread-Local Storage
19558 ====================
19560  Thread-local storage (TLS) is a mechanism by which variables are
19561 allocated such that there is one instance of the variable per extant
19562 thread.  The run-time model GCC uses to implement this originates in
19563 the IA-64 processor-specific ABI, but has since been migrated to other
19564 processors as well.  It requires significant support from the linker
19565 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
19566 `libpthread.so'), so it is not available everywhere.
19568  At the user level, the extension is visible with a new storage class
19569 keyword: `__thread'.  For example:
19571      __thread int i;
19572      extern __thread struct state s;
19573      static __thread char *p;
19575  The `__thread' specifier may be used alone, with the `extern' or
19576 `static' specifiers, but with no other storage class specifier.  When
19577 used with `extern' or `static', `__thread' must appear immediately
19578 after the other storage class specifier.
19580  The `__thread' specifier may be applied to any global, file-scoped
19581 static, function-scoped static, or static data member of a class.  It
19582 may not be applied to block-scoped automatic or non-static data member.
19584  When the address-of operator is applied to a thread-local variable, it
19585 is evaluated at run-time and returns the address of the current thread's
19586 instance of that variable.  An address so obtained may be used by any
19587 thread.  When a thread terminates, any pointers to thread-local
19588 variables in that thread become invalid.
19590  No static initialization may refer to the address of a thread-local
19591 variable.
19593  In C++, if an initializer is present for a thread-local variable, it
19594 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
19595 standard.
19597  See ELF Handling For Thread-Local Storage
19598 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
19599 the four thread-local storage addressing models, and how the run-time
19600 is expected to function.
19602 * Menu:
19604 * C99 Thread-Local Edits::
19605 * C++98 Thread-Local Edits::
19607 \x1f
19608 File: gcc.info,  Node: C99 Thread-Local Edits,  Next: C++98 Thread-Local Edits,  Up: Thread-Local
19610 ISO/IEC 9899:1999 Edits for Thread-Local Storage
19611 ------------------------------------------------
19613  The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
19614 document the exact semantics of the language extension.
19616    * `5.1.2  Execution environments'
19618      Add new text after paragraph 1
19620           Within either execution environment, a "thread" is a flow of
19621           control within a program.  It is implementation defined
19622           whether or not there may be more than one thread associated
19623           with a program.  It is implementation defined how threads
19624           beyond the first are created, the name and type of the
19625           function called at thread startup, and how threads may be
19626           terminated.  However, objects with thread storage duration
19627           shall be initialized before thread startup.
19629    * `6.2.4  Storage durations of objects'
19631      Add new text before paragraph 3
19633           An object whose identifier is declared with the storage-class
19634           specifier `__thread' has "thread storage duration".  Its
19635           lifetime is the entire execution of the thread, and its
19636           stored value is initialized only once, prior to thread
19637           startup.
19639    * `6.4.1  Keywords'
19641      Add `__thread'.
19643    * `6.7.1  Storage-class specifiers'
19645      Add `__thread' to the list of storage class specifiers in
19646      paragraph 1.
19648      Change paragraph 2 to
19650           With the exception of `__thread', at most one storage-class
19651           specifier may be given [...].  The `__thread' specifier may
19652           be used alone, or immediately following `extern' or `static'.
19654      Add new text after paragraph 6
19656           The declaration of an identifier for a variable that has
19657           block scope that specifies `__thread' shall also specify
19658           either `extern' or `static'.
19660           The `__thread' specifier shall be used only with variables.
19662 \x1f
19663 File: gcc.info,  Node: C++98 Thread-Local Edits,  Prev: C99 Thread-Local Edits,  Up: Thread-Local
19665 ISO/IEC 14882:1998 Edits for Thread-Local Storage
19666 -------------------------------------------------
19668  The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
19669 that document the exact semantics of the language extension.
19671    * [intro.execution]
19673      New text after paragraph 4
19675           A "thread" is a flow of control within the abstract machine.
19676           It is implementation defined whether or not there may be more
19677           than one thread.
19679      New text after paragraph 7
19681           It is unspecified whether additional action must be taken to
19682           ensure when and whether side effects are visible to other
19683           threads.
19685    * [lex.key]
19687      Add `__thread'.
19689    * [basic.start.main]
19691      Add after paragraph 5
19693           The thread that begins execution at the `main' function is
19694           called the "main thread".  It is implementation defined how
19695           functions beginning threads other than the main thread are
19696           designated or typed.  A function so designated, as well as
19697           the `main' function, is called a "thread startup function".
19698           It is implementation defined what happens if a thread startup
19699           function returns.  It is implementation defined what happens
19700           to other threads when any thread calls `exit'.
19702    * [basic.start.init]
19704      Add after paragraph 4
19706           The storage for an object of thread storage duration shall be
19707           statically initialized before the first statement of the
19708           thread startup function.  An object of thread storage
19709           duration shall not require dynamic initialization.
19711    * [basic.start.term]
19713      Add after paragraph 3
19715           The type of an object with thread storage duration shall not
19716           have a non-trivial destructor, nor shall it be an array type
19717           whose elements (directly or indirectly) have non-trivial
19718           destructors.
19720    * [basic.stc]
19722      Add "thread storage duration" to the list in paragraph 1.
19724      Change paragraph 2
19726           Thread, static, and automatic storage durations are
19727           associated with objects introduced by declarations [...].
19729      Add `__thread' to the list of specifiers in paragraph 3.
19731    * [basic.stc.thread]
19733      New section before [basic.stc.static]
19735           The keyword `__thread' applied to a non-local object gives the
19736           object thread storage duration.
19738           A local variable or class data member declared both `static'
19739           and `__thread' gives the variable or member thread storage
19740           duration.
19742    * [basic.stc.static]
19744      Change paragraph 1
19746           All objects which have neither thread storage duration,
19747           dynamic storage duration nor are local [...].
19749    * [dcl.stc]
19751      Add `__thread' to the list in paragraph 1.
19753      Change paragraph 1
19755           With the exception of `__thread', at most one
19756           STORAGE-CLASS-SPECIFIER shall appear in a given
19757           DECL-SPECIFIER-SEQ.  The `__thread' specifier may be used
19758           alone, or immediately following the `extern' or `static'
19759           specifiers.  [...]
19761      Add after paragraph 5
19763           The `__thread' specifier can be applied only to the names of
19764           objects and to anonymous unions.
19766    * [class.mem]
19768      Add after paragraph 6
19770           Non-`static' members shall not be `__thread'.
19772 \x1f
19773 File: gcc.info,  Node: C++ Extensions,  Next: Objective-C,  Prev: C Extensions,  Up: Top
19775 Extensions to the C++ Language
19776 ******************************
19778  The GNU compiler provides these extensions to the C++ language (and you
19779 can also use most of the C language extensions in your C++ programs).
19780 If you want to write code that checks whether these features are
19781 available, you can test for the GNU compiler the same way as for C
19782 programs: check for a predefined macro `__GNUC__'.  You can also use
19783 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
19784 (cpp)Common Predefined Macros.).
19786 * Menu:
19788 * Min and Max::         C++ Minimum and maximum operators.
19789 * Volatiles::           What constitutes an access to a volatile object.
19790 * Restricted Pointers:: C99 restricted pointers and references.
19791 * Vague Linkage::       Where G++ puts inlines, vtables and such.
19792 * C++ Interface::       You can use a single C++ header file for both
19793                         declarations and definitions.
19794 * Template Instantiation:: Methods for ensuring that exactly one copy of
19795                         each needed template instantiation is emitted.
19796 * Bound member functions:: You can extract a function pointer to the
19797                         method denoted by a `->*' or `.*' expression.
19798 * C++ Attributes::      Variable, function, and type attributes for C++ only.
19799 * Strong Using::      Strong using-directives for namespace composition.
19800 * Offsetof::            Special syntax for implementing `offsetof'.
19801 * Java Exceptions::     Tweaking exception handling to work with Java.
19802 * Deprecated Features:: Things will disappear from g++.
19803 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
19805 \x1f
19806 File: gcc.info,  Node: Min and Max,  Next: Volatiles,  Up: C++ Extensions
19808 Minimum and Maximum Operators in C++
19809 ====================================
19811  It is very convenient to have operators which return the "minimum" or
19812 the "maximum" of two arguments.  In GNU C++ (but not in GNU C),
19814 `A <? B'
19815      is the "minimum", returning the smaller of the numeric values A
19816      and B;
19818 `A >? B'
19819      is the "maximum", returning the larger of the numeric values A and
19820      B.
19822  These operations are not primitive in ordinary C++, since you can use
19823 a macro to return the minimum of two things in C++, as in the following
19824 example.
19826      #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
19828 You might then use `int min = MIN (i, j);' to set MIN to the minimum
19829 value of variables I and J.
19831  However, side effects in `X' or `Y' may cause unintended behavior.
19832 For example, `MIN (i++, j++)' will fail, incrementing the smaller
19833 counter twice.  The GNU C `typeof' extension allows you to write safe
19834 macros that avoid this kind of problem (*note Typeof::).  However,
19835 writing `MIN' and `MAX' as macros also forces you to use function-call
19836 notation for a fundamental arithmetic operation.  Using GNU C++
19837 extensions, you can write `int min = i <? j;' instead.
19839  Since `<?' and `>?' are built into the compiler, they properly handle
19840 expressions with side-effects;  `int min = i++ <? j++;' works correctly.
19842 \x1f
19843 File: gcc.info,  Node: Volatiles,  Next: Restricted Pointers,  Prev: Min and Max,  Up: C++ Extensions
19845 When is a Volatile Object Accessed?
19846 ===================================
19848  Both the C and C++ standard have the concept of volatile objects.
19849 These are normally accessed by pointers and used for accessing
19850 hardware.  The standards encourage compilers to refrain from
19851 optimizations concerning accesses to volatile objects that it might
19852 perform on non-volatile objects.  The C standard leaves it
19853 implementation defined as to what constitutes a volatile access.  The
19854 C++ standard omits to specify this, except to say that C++ should
19855 behave in a similar manner to C with respect to volatiles, where
19856 possible.  The minimum either standard specifies is that at a sequence
19857 point all previous accesses to volatile objects have stabilized and no
19858 subsequent accesses have occurred.  Thus an implementation is free to
19859 reorder and combine volatile accesses which occur between sequence
19860 points, but cannot do so for accesses across a sequence point.  The use
19861 of volatiles does not allow you to violate the restriction on updating
19862 objects multiple times within a sequence point.
19864  In most expressions, it is intuitively obvious what is a read and what
19865 is a write.  For instance
19867      volatile int *dst = SOMEVALUE;
19868      volatile int *src = SOMEOTHERVALUE;
19869      *dst = *src;
19871 will cause a read of the volatile object pointed to by SRC and stores
19872 the value into the volatile object pointed to by DST.  There is no
19873 guarantee that these reads and writes are atomic, especially for objects
19874 larger than `int'.
19876  Less obvious expressions are where something which looks like an access
19877 is used in a void context.  An example would be,
19879      volatile int *src = SOMEVALUE;
19880      *src;
19882  With C, such expressions are rvalues, and as rvalues cause a read of
19883 the object, GCC interprets this as a read of the volatile being pointed
19884 to.  The C++ standard specifies that such expressions do not undergo
19885 lvalue to rvalue conversion, and that the type of the dereferenced
19886 object may be incomplete.  The C++ standard does not specify explicitly
19887 that it is this lvalue to rvalue conversion which is responsible for
19888 causing an access.  However, there is reason to believe that it is,
19889 because otherwise certain simple expressions become undefined.  However,
19890 because it would surprise most programmers, G++ treats dereferencing a
19891 pointer to volatile object of complete type in a void context as a read
19892 of the object.  When the object has incomplete type, G++ issues a
19893 warning.
19895      struct S;
19896      struct T {int m;};
19897      volatile S *ptr1 = SOMEVALUE;
19898      volatile T *ptr2 = SOMEVALUE;
19899      *ptr1;
19900      *ptr2;
19902  In this example, a warning is issued for `*ptr1', and `*ptr2' causes a
19903 read of the object pointed to.  If you wish to force an error on the
19904 first case, you must force a conversion to rvalue with, for instance a
19905 static cast, `static_cast<S>(*ptr1)'.
19907  When using a reference to volatile, G++ does not treat equivalent
19908 expressions as accesses to volatiles, but instead issues a warning that
19909 no volatile is accessed.  The rationale for this is that otherwise it
19910 becomes difficult to determine where volatile access occur, and not
19911 possible to ignore the return value from functions returning volatile
19912 references.  Again, if you wish to force a read, cast the reference to
19913 an rvalue.
19915 \x1f
19916 File: gcc.info,  Node: Restricted Pointers,  Next: Vague Linkage,  Prev: Volatiles,  Up: C++ Extensions
19918 Restricting Pointer Aliasing
19919 ============================
19921  As with the C front end, G++ understands the C99 feature of restricted
19922 pointers, specified with the `__restrict__', or `__restrict' type
19923 qualifier.  Because you cannot compile C++ by specifying the `-std=c99'
19924 language flag, `restrict' is not a keyword in C++.
19926  In addition to allowing restricted pointers, you can specify restricted
19927 references, which indicate that the reference is not aliased in the
19928 local context.
19930      void fn (int *__restrict__ rptr, int &__restrict__ rref)
19931      {
19932        /* ... */
19933      }
19935 In the body of `fn', RPTR points to an unaliased integer and RREF
19936 refers to a (different) unaliased integer.
19938  You may also specify whether a member function's THIS pointer is
19939 unaliased by using `__restrict__' as a member function qualifier.
19941      void T::fn () __restrict__
19942      {
19943        /* ... */
19944      }
19946 Within the body of `T::fn', THIS will have the effective definition `T
19947 *__restrict__ const this'.  Notice that the interpretation of a
19948 `__restrict__' member function qualifier is different to that of
19949 `const' or `volatile' qualifier, in that it is applied to the pointer
19950 rather than the object.  This is consistent with other compilers which
19951 implement restricted pointers.
19953  As with all outermost parameter qualifiers, `__restrict__' is ignored
19954 in function definition matching.  This means you only need to specify
19955 `__restrict__' in a function definition, rather than in a function
19956 prototype as well.
19958 \x1f
19959 File: gcc.info,  Node: Vague Linkage,  Next: C++ Interface,  Prev: Restricted Pointers,  Up: C++ Extensions
19961 Vague Linkage
19962 =============
19964  There are several constructs in C++ which require space in the object
19965 file but are not clearly tied to a single translation unit.  We say that
19966 these constructs have "vague linkage".  Typically such constructs are
19967 emitted wherever they are needed, though sometimes we can be more
19968 clever.
19970 Inline Functions
19971      Inline functions are typically defined in a header file which can
19972      be included in many different compilations.  Hopefully they can
19973      usually be inlined, but sometimes an out-of-line copy is
19974      necessary, if the address of the function is taken or if inlining
19975      fails.  In general, we emit an out-of-line copy in all translation
19976      units where one is needed.  As an exception, we only emit inline
19977      virtual functions with the vtable, since it will always require a
19978      copy.
19980      Local static variables and string constants used in an inline
19981      function are also considered to have vague linkage, since they
19982      must be shared between all inlined and out-of-line instances of
19983      the function.
19985 VTables
19986      C++ virtual functions are implemented in most compilers using a
19987      lookup table, known as a vtable.  The vtable contains pointers to
19988      the virtual functions provided by a class, and each object of the
19989      class contains a pointer to its vtable (or vtables, in some
19990      multiple-inheritance situations).  If the class declares any
19991      non-inline, non-pure virtual functions, the first one is chosen as
19992      the "key method" for the class, and the vtable is only emitted in
19993      the translation unit where the key method is defined.
19995      _Note:_ If the chosen key method is later defined as inline, the
19996      vtable will still be emitted in every translation unit which
19997      defines it.  Make sure that any inline virtuals are declared
19998      inline in the class body, even if they are not defined there.
20000 type_info objects
20001      C++ requires information about types to be written out in order to
20002      implement `dynamic_cast', `typeid' and exception handling.  For
20003      polymorphic classes (classes with virtual functions), the type_info
20004      object is written out along with the vtable so that `dynamic_cast'
20005      can determine the dynamic type of a class object at runtime.  For
20006      all other types, we write out the type_info object when it is
20007      used: when applying `typeid' to an expression, throwing an object,
20008      or referring to a type in a catch clause or exception
20009      specification.
20011 Template Instantiations
20012      Most everything in this section also applies to template
20013      instantiations, but there are other options as well.  *Note
20014      Where's the Template?: Template Instantiation.
20016  When used with GNU ld version 2.8 or later on an ELF system such as
20017 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
20018 these constructs will be discarded at link time.  This is known as
20019 COMDAT support.
20021  On targets that don't support COMDAT, but do support weak symbols, GCC
20022 will use them.  This way one copy will override all the others, but the
20023 unused copies will still take up space in the executable.
20025  For targets which do not support either COMDAT or weak symbols, most
20026 entities with vague linkage will be emitted as local symbols to avoid
20027 duplicate definition errors from the linker.  This will not happen for
20028 local statics in inlines, however, as having multiple copies will
20029 almost certainly break things.
20031  *Note Declarations and Definitions in One Header: C++ Interface, for
20032 another way to control placement of these constructs.
20034 \x1f
20035 File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Vague Linkage,  Up: C++ Extensions
20037 #pragma interface and implementation
20038 ====================================
20040  `#pragma interface' and `#pragma implementation' provide the user with
20041 a way of explicitly directing the compiler to emit entities with vague
20042 linkage (and debugging information) in a particular translation unit.
20044  _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
20045 cases, because of COMDAT support and the "key method" heuristic
20046 mentioned in *Note Vague Linkage::.  Using them can actually cause your
20047 program to grow due to unnecesary out-of-line copies of inline
20048 functions.  Currently the only benefit of these `#pragma's is reduced
20049 duplication of debugging information, and that should be addressed soon
20050 on DWARF 2 targets with the use of COMDAT sections.
20052 `#pragma interface'
20053 `#pragma interface "SUBDIR/OBJECTS.h"'
20054      Use this directive in _header files_ that define object classes,
20055      to save space in most of the object files that use those classes.
20056      Normally, local copies of certain information (backup copies of
20057      inline member functions, debugging information, and the internal
20058      tables that implement virtual functions) must be kept in each
20059      object file that includes class definitions.  You can use this
20060      pragma to avoid such duplication.  When a header file containing
20061      `#pragma interface' is included in a compilation, this auxiliary
20062      information will not be generated (unless the main input source
20063      file itself uses `#pragma implementation').  Instead, the object
20064      files will contain references to be resolved at link time.
20066      The second form of this directive is useful for the case where you
20067      have multiple headers with the same name in different directories.
20068      If you use this form, you must specify the same string to `#pragma
20069      implementation'.
20071 `#pragma implementation'
20072 `#pragma implementation "OBJECTS.h"'
20073      Use this pragma in a _main input file_, when you want full output
20074      from included header files to be generated (and made globally
20075      visible).  The included header file, in turn, should use `#pragma
20076      interface'.  Backup copies of inline member functions, debugging
20077      information, and the internal tables used to implement virtual
20078      functions are all generated in implementation files.
20080      If you use `#pragma implementation' with no argument, it applies to
20081      an include file with the same basename(1) as your source file.
20082      For example, in `allclass.cc', giving just `#pragma implementation'
20083      by itself is equivalent to `#pragma implementation "allclass.h"'.
20085      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
20086      an implementation file whenever you would include it from
20087      `allclass.cc' even if you never specified `#pragma
20088      implementation'.  This was deemed to be more trouble than it was
20089      worth, however, and disabled.
20091      Use the string argument if you want a single implementation file to
20092      include code from multiple header files.  (You must also use
20093      `#include' to include the header file; `#pragma implementation'
20094      only specifies how to use the file--it doesn't actually include
20095      it.)
20097      There is no way to split up the contents of a single header file
20098      into multiple implementation files.
20100  `#pragma implementation' and `#pragma interface' also have an effect
20101 on function inlining.
20103  If you define a class in a header file marked with `#pragma
20104 interface', the effect on an inline function defined in that class is
20105 similar to an explicit `extern' declaration--the compiler emits no code
20106 at all to define an independent version of the function.  Its
20107 definition is used only for inlining with its callers.
20109  Conversely, when you include the same header file in a main source file
20110 that declares it as `#pragma implementation', the compiler emits code
20111 for the function itself; this defines a version of the function that
20112 can be found via pointers (or by callers compiled without inlining).
20113 If all calls to the function can be inlined, you can avoid emitting the
20114 function by compiling with `-fno-implement-inlines'.  If any calls were
20115 not inlined, you will get linker errors.
20117  ---------- Footnotes ----------
20119  (1) A file's "basename" was the name stripped of all leading path
20120 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
20122 \x1f
20123 File: gcc.info,  Node: Template Instantiation,  Next: Bound member functions,  Prev: C++ Interface,  Up: C++ Extensions
20125 Where's the Template?
20126 =====================
20128  C++ templates are the first language feature to require more
20129 intelligence from the environment than one usually finds on a UNIX
20130 system.  Somehow the compiler and linker have to make sure that each
20131 template instance occurs exactly once in the executable if it is needed,
20132 and not at all otherwise.  There are two basic approaches to this
20133 problem, which are referred to as the Borland model and the Cfront
20134 model.
20136 Borland model
20137      Borland C++ solved the template instantiation problem by adding
20138      the code equivalent of common blocks to their linker; the compiler
20139      emits template instances in each translation unit that uses them,
20140      and the linker collapses them together.  The advantage of this
20141      model is that the linker only has to consider the object files
20142      themselves; there is no external complexity to worry about.  This
20143      disadvantage is that compilation time is increased because the
20144      template code is being compiled repeatedly.  Code written for this
20145      model tends to include definitions of all templates in the header
20146      file, since they must be seen to be instantiated.
20148 Cfront model
20149      The AT&T C++ translator, Cfront, solved the template instantiation
20150      problem by creating the notion of a template repository, an
20151      automatically maintained place where template instances are
20152      stored.  A more modern version of the repository works as follows:
20153      As individual object files are built, the compiler places any
20154      template definitions and instantiations encountered in the
20155      repository.  At link time, the link wrapper adds in the objects in
20156      the repository and compiles any needed instances that were not
20157      previously emitted.  The advantages of this model are more optimal
20158      compilation speed and the ability to use the system linker; to
20159      implement the Borland model a compiler vendor also needs to
20160      replace the linker.  The disadvantages are vastly increased
20161      complexity, and thus potential for error; for some code this can be
20162      just as transparent, but in practice it can been very difficult to
20163      build multiple programs in one directory and one program in
20164      multiple directories.  Code written for this model tends to
20165      separate definitions of non-inline member templates into a
20166      separate file, which should be compiled separately.
20168  When used with GNU ld version 2.8 or later on an ELF system such as
20169 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
20170 Borland model.  On other systems, G++ implements neither automatic
20171 model.
20173  A future version of G++ will support a hybrid model whereby the
20174 compiler will emit any instantiations for which the template definition
20175 is included in the compile, and store template definitions and
20176 instantiation context information into the object file for the rest.
20177 The link wrapper will extract that information as necessary and invoke
20178 the compiler to produce the remaining instantiations.  The linker will
20179 then combine duplicate instantiations.
20181  In the mean time, you have the following options for dealing with
20182 template instantiations:
20184   1. Compile your template-using code with `-frepo'.  The compiler will
20185      generate files with the extension `.rpo' listing all of the
20186      template instantiations used in the corresponding object files
20187      which could be instantiated there; the link wrapper, `collect2',
20188      will then update the `.rpo' files to tell the compiler where to
20189      place those instantiations and rebuild any affected object files.
20190      The link-time overhead is negligible after the first pass, as the
20191      compiler will continue to place the instantiations in the same
20192      files.
20194      This is your best option for application code written for the
20195      Borland model, as it will just work.  Code written for the Cfront
20196      model will need to be modified so that the template definitions
20197      are available at one or more points of instantiation; usually this
20198      is as simple as adding `#include <tmethods.cc>' to the end of each
20199      template header.
20201      For library code, if you want the library to provide all of the
20202      template instantiations it needs, just try to link all of its
20203      object files together; the link will fail, but cause the
20204      instantiations to be generated as a side effect.  Be warned,
20205      however, that this may cause conflicts if multiple libraries try
20206      to provide the same instantiations.  For greater control, use
20207      explicit instantiation as described in the next option.
20209   2. Compile your code with `-fno-implicit-templates' to disable the
20210      implicit generation of template instances, and explicitly
20211      instantiate all the ones you use.  This approach requires more
20212      knowledge of exactly which instances you need than do the others,
20213      but it's less mysterious and allows greater control.  You can
20214      scatter the explicit instantiations throughout your program,
20215      perhaps putting them in the translation units where the instances
20216      are used or the translation units that define the templates
20217      themselves; you can put all of the explicit instantiations you
20218      need into one big file; or you can create small files like
20220           #include "Foo.h"
20221           #include "Foo.cc"
20222           
20223           template class Foo<int>;
20224           template ostream& operator <<
20225                           (ostream&, const Foo<int>&);
20227      for each of the instances you need, and create a template
20228      instantiation library from those.
20230      If you are using Cfront-model code, you can probably get away with
20231      not using `-fno-implicit-templates' when compiling files that don't
20232      `#include' the member template definitions.
20234      If you use one big file to do the instantiations, you may want to
20235      compile it without `-fno-implicit-templates' so you get all of the
20236      instances required by your explicit instantiations (but not by any
20237      other files) without having to specify them as well.
20239      G++ has extended the template instantiation syntax given in the ISO
20240      standard to allow forward declaration of explicit instantiations
20241      (with `extern'), instantiation of the compiler support data for a
20242      template class (i.e. the vtable) without instantiating any of its
20243      members (with `inline'), and instantiation of only the static data
20244      members of a template class, without the support data or member
20245      functions (with (`static'):
20247           extern template int max (int, int);
20248           inline template class Foo<int>;
20249           static template class Foo<int>;
20251   3. Do nothing.  Pretend G++ does implement automatic instantiation
20252      management.  Code written for the Borland model will work fine, but
20253      each translation unit will contain instances of each of the
20254      templates it uses.  In a large program, this can lead to an
20255      unacceptable amount of code duplication.
20257 \x1f
20258 File: gcc.info,  Node: Bound member functions,  Next: C++ Attributes,  Prev: Template Instantiation,  Up: C++ Extensions
20260 Extracting the function pointer from a bound pointer to member function
20261 =======================================================================
20263  In C++, pointer to member functions (PMFs) are implemented using a wide
20264 pointer of sorts to handle all the possible call mechanisms; the PMF
20265 needs to store information about how to adjust the `this' pointer, and
20266 if the function pointed to is virtual, where to find the vtable, and
20267 where in the vtable to look for the member function.  If you are using
20268 PMFs in an inner loop, you should really reconsider that decision.  If
20269 that is not an option, you can extract the pointer to the function that
20270 would be called for a given object/PMF pair and call it directly inside
20271 the inner loop, to save a bit of time.
20273  Note that you will still be paying the penalty for the call through a
20274 function pointer; on most modern architectures, such a call defeats the
20275 branch prediction features of the CPU.  This is also true of normal
20276 virtual function calls.
20278  The syntax for this extension is
20280      extern A a;
20281      extern int (A::*fp)();
20282      typedef int (*fptr)(A *);
20283      
20284      fptr p = (fptr)(a.*fp);
20286  For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
20287 object is needed to obtain the address of the function.  They can be
20288 converted to function pointers directly:
20290      fptr p1 = (fptr)(&A::foo);
20292  You must specify `-Wno-pmf-conversions' to use this extension.
20294 \x1f
20295 File: gcc.info,  Node: C++ Attributes,  Next: Strong Using,  Prev: Bound member functions,  Up: C++ Extensions
20297 C++-Specific Variable, Function, and Type Attributes
20298 ====================================================
20300  Some attributes only make sense for C++ programs.
20302 `init_priority (PRIORITY)'
20303      In Standard C++, objects defined at namespace scope are guaranteed
20304      to be initialized in an order in strict accordance with that of
20305      their definitions _in a given translation unit_.  No guarantee is
20306      made for initializations across translation units.  However, GNU
20307      C++ allows users to control the order of initialization of objects
20308      defined at namespace scope with the `init_priority' attribute by
20309      specifying a relative PRIORITY, a constant integral expression
20310      currently bounded between 101 and 65535 inclusive.  Lower numbers
20311      indicate a higher priority.
20313      In the following example, `A' would normally be created before
20314      `B', but the `init_priority' attribute has reversed that order:
20316           Some_Class  A  __attribute__ ((init_priority (2000)));
20317           Some_Class  B  __attribute__ ((init_priority (543)));
20319      Note that the particular values of PRIORITY do not matter; only
20320      their relative ordering.
20322 `java_interface'
20323      This type attribute informs C++ that the class is a Java
20324      interface.  It may only be applied to classes declared within an
20325      `extern "Java"' block.  Calls to methods declared in this
20326      interface will be dispatched using GCJ's interface table
20327      mechanism, instead of regular virtual table dispatch.
20329  See also *Note Strong Using::.
20331 \x1f
20332 File: gcc.info,  Node: Strong Using,  Next: Offsetof,  Prev: C++ Attributes,  Up: C++ Extensions
20334 Strong Using
20335 ============
20337  *Caution:* The semantics of this extension are not fully defined.
20338 Users should refrain from using this extension as its semantics may
20339 change subtly over time.  It is possible that this extension wil be
20340 removed in future versions of G++.
20342  A using-directive with `__attribute ((strong))' is stronger than a
20343 normal using-directive in two ways:
20345    * Templates from the used namespace can be specialized as though
20346      they were members of the using namespace.
20348    * The using namespace is considered an associated namespace of all
20349      templates in the used namespace for purposes of argument-dependent
20350      name lookup.
20352  This is useful for composing a namespace transparently from
20353 implementation namespaces.  For example:
20355      namespace std {
20356        namespace debug {
20357          template <class T> struct A { };
20358        }
20359        using namespace debug __attribute ((__strong__));
20360        template <> struct A<int> { };   // ok to specialize
20361      
20362        template <class T> void f (A<T>);
20363      }
20364      
20365      int main()
20366      {
20367        f (std::A<float>());             // lookup finds std::f
20368        f (std::A<int>());
20369      }
20371 \x1f
20372 File: gcc.info,  Node: Offsetof,  Next: Java Exceptions,  Prev: Strong Using,  Up: C++ Extensions
20374 Offsetof
20375 ========
20377  G++ uses a syntactic extension to implement the `offsetof' macro.
20379  In particular:
20381        __offsetof__ (expression)
20383  is equivalent to the parenthesized expression, except that the
20384 expression is considered an integral constant expression even if it
20385 contains certain operators that are not normally permitted in an
20386 integral constant expression.  Users should never use `__offsetof__'
20387 directly; the only valid use of `__offsetof__' is to implement the
20388 `offsetof' macro in `<stddef.h>'.
20390 \x1f
20391 File: gcc.info,  Node: Java Exceptions,  Next: Deprecated Features,  Prev: Offsetof,  Up: C++ Extensions
20393 Java Exceptions
20394 ===============
20396  The Java language uses a slightly different exception handling model
20397 from C++.  Normally, GNU C++ will automatically detect when you are
20398 writing C++ code that uses Java exceptions, and handle them
20399 appropriately.  However, if C++ code only needs to execute destructors
20400 when Java exceptions are thrown through it, GCC will guess incorrectly.
20401 Sample problematic code is:
20403        struct S { ~S(); };
20404        extern void bar();    // is written in Java, and may throw exceptions
20405        void foo()
20406        {
20407          S s;
20408          bar();
20409        }
20411 The usual effect of an incorrect guess is a link failure, complaining of
20412 a missing routine called `__gxx_personality_v0'.
20414  You can inform the compiler that Java exceptions are to be used in a
20415 translation unit, irrespective of what it might think, by writing
20416 `#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
20417 must appear before any functions that throw or catch exceptions, or run
20418 destructors when exceptions are thrown through them.
20420  You cannot mix Java and C++ exceptions in the same translation unit.
20421 It is believed to be safe to throw a C++ exception from one file through
20422 another file compiled for the Java exception model, or vice versa, but
20423 there may be bugs in this area.
20425 \x1f
20426 File: gcc.info,  Node: Deprecated Features,  Next: Backwards Compatibility,  Prev: Java Exceptions,  Up: C++ Extensions
20428 Deprecated Features
20429 ===================
20431  In the past, the GNU C++ compiler was extended to experiment with new
20432 features, at a time when the C++ language was still evolving.  Now that
20433 the C++ standard is complete, some of those features are superseded by
20434 superior alternatives.  Using the old features might cause a warning in
20435 some cases that the feature will be dropped in the future.  In other
20436 cases, the feature might be gone already.
20438  While the list below is not exhaustive, it documents some of the
20439 options that are now deprecated:
20441 `-fexternal-templates'
20442 `-falt-external-templates'
20443      These are two of the many ways for G++ to implement template
20444      instantiation.  *Note Template Instantiation::.  The C++ standard
20445      clearly defines how template definitions have to be organized
20446      across implementation units.  G++ has an implicit instantiation
20447      mechanism that should work just fine for standard-conforming code.
20449 `-fstrict-prototype'
20450 `-fno-strict-prototype'
20451      Previously it was possible to use an empty prototype parameter
20452      list to indicate an unspecified number of parameters (like C),
20453      rather than no parameters, as C++ demands.  This feature has been
20454      removed, except where it is required for backwards compatibility
20455      *Note Backwards Compatibility::.
20457  The named return value extension has been deprecated, and is now
20458 removed from G++.
20460  The use of initializer lists with new expressions has been deprecated,
20461 and is now removed from G++.
20463  Floating and complex non-type template parameters have been deprecated,
20464 and are now removed from G++.
20466  The implicit typename extension has been deprecated and is now removed
20467 from G++.
20469  The use of default arguments in function pointers, function typedefs
20470 and and other places where they are not permitted by the standard is
20471 deprecated and will be removed from a future version of G++.
20473 \x1f
20474 File: gcc.info,  Node: Backwards Compatibility,  Prev: Deprecated Features,  Up: C++ Extensions
20476 Backwards Compatibility
20477 =======================
20479  Now that there is a definitive ISO standard C++, G++ has a
20480 specification to adhere to.  The C++ language evolved over time, and
20481 features that used to be acceptable in previous drafts of the standard,
20482 such as the ARM [Annotated C++ Reference Manual], are no longer
20483 accepted.  In order to allow compilation of C++ written to such drafts,
20484 G++ contains some backwards compatibilities.  _All such backwards
20485 compatibility features are liable to disappear in future versions of
20486 G++._ They should be considered deprecated *Note Deprecated Features::.
20488 `For scope'
20489      If a variable is declared at for scope, it used to remain in scope
20490      until the end of the scope which contained the for statement
20491      (rather than just within the for scope).  G++ retains this, but
20492      issues a warning, if such a variable is accessed outside the for
20493      scope.
20495 `Implicit C language'
20496      Old C system header files did not contain an `extern "C" {...}'
20497      scope to set the language.  On such systems, all header files are
20498      implicitly scoped inside a C language scope.  Also, an empty
20499      prototype `()' will be treated as an unspecified number of
20500      arguments, rather than no arguments, as C++ demands.
20502 \x1f
20503 File: gcc.info,  Node: Objective-C,  Next: Compatibility,  Prev: C++ Extensions,  Up: Top
20505 GNU Objective-C runtime features
20506 ********************************
20508  This document is meant to describe some of the GNU Objective-C runtime
20509 features.  It is not intended to teach you Objective-C, there are
20510 several resources on the Internet that present the language.  Questions
20511 and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
20513 * Menu:
20515 * Executing code before main::
20516 * Type encoding::
20517 * Garbage Collection::
20518 * Constant string objects::
20519 * compatibility_alias::
20521 \x1f
20522 File: gcc.info,  Node: Executing code before main,  Next: Type encoding,  Prev: Objective-C,  Up: Objective-C
20524 `+load': Executing code before main
20525 ===================================
20527  The GNU Objective-C runtime provides a way that allows you to execute
20528 code before the execution of the program enters the `main' function.
20529 The code is executed on a per-class and a per-category basis, through a
20530 special class method `+load'.
20532  This facility is very useful if you want to initialize global variables
20533 which can be accessed by the program directly, without sending a message
20534 to the class first.  The usual way to initialize global variables, in
20535 the `+initialize' method, might not be useful because `+initialize' is
20536 only called when the first message is sent to a class object, which in
20537 some cases could be too late.
20539  Suppose for example you have a `FileStream' class that declares
20540 `Stdin', `Stdout' and `Stderr' as global variables, like below:
20543      FileStream *Stdin = nil;
20544      FileStream *Stdout = nil;
20545      FileStream *Stderr = nil;
20546      
20547      @implementation FileStream
20548      
20549      + (void)initialize
20550      {
20551          Stdin = [[FileStream new] initWithFd:0];
20552          Stdout = [[FileStream new] initWithFd:1];
20553          Stderr = [[FileStream new] initWithFd:2];
20554      }
20555      
20556      /* Other methods here */
20557      @end
20559  In this example, the initialization of `Stdin', `Stdout' and `Stderr'
20560 in `+initialize' occurs too late.  The programmer can send a message to
20561 one of these objects before the variables are actually initialized,
20562 thus sending messages to the `nil' object.  The `+initialize' method
20563 which actually initializes the global variables is not invoked until
20564 the first message is sent to the class object.  The solution would
20565 require these variables to be initialized just before entering `main'.
20567  The correct solution of the above problem is to use the `+load' method
20568 instead of `+initialize':
20571      @implementation FileStream
20572      
20573      + (void)load
20574      {
20575          Stdin = [[FileStream new] initWithFd:0];
20576          Stdout = [[FileStream new] initWithFd:1];
20577          Stderr = [[FileStream new] initWithFd:2];
20578      }
20579      
20580      /* Other methods here */
20581      @end
20583  The `+load' is a method that is not overridden by categories.  If a
20584 class and a category of it both implement `+load', both methods are
20585 invoked.  This allows some additional initializations to be performed in
20586 a category.
20588  This mechanism is not intended to be a replacement for `+initialize'.
20589 You should be aware of its limitations when you decide to use it
20590 instead of `+initialize'.
20592 * Menu:
20594 * What you can and what you cannot do in +load::
20596 \x1f
20597 File: gcc.info,  Node: What you can and what you cannot do in +load,  Prev: Executing code before main,  Up: Executing code before main
20599 What you can and what you cannot do in `+load'
20600 ----------------------------------------------
20602  The `+load' implementation in the GNU runtime guarantees you the
20603 following things:
20605    * you can write whatever C code you like;
20607    * you can send messages to Objective-C constant strings (`@"this is a
20608      constant string"');
20610    * you can allocate and send messages to objects whose class is
20611      implemented in the same file;
20613    * the `+load' implementation of all super classes of a class are
20614      executed before the `+load' of that class is executed;
20616    * the `+load' implementation of a class is executed before the
20617      `+load' implementation of any category.
20620  In particular, the following things, even if they can work in a
20621 particular case, are not guaranteed:
20623    * allocation of or sending messages to arbitrary objects;
20625    * allocation of or sending messages to objects whose classes have a
20626      category implemented in the same file;
20629  You should make no assumptions about receiving `+load' in sibling
20630 classes when you write `+load' of a class.  The order in which sibling
20631 classes receive `+load' is not guaranteed.
20633  The order in which `+load' and `+initialize' are called could be
20634 problematic if this matters.  If you don't allocate objects inside
20635 `+load', it is guaranteed that `+load' is called before `+initialize'.
20636 If you create an object inside `+load' the `+initialize' method of
20637 object's class is invoked even if `+load' was not invoked.  Note if you
20638 explicitly call `+load' on a class, `+initialize' will be called first.
20639 To avoid possible problems try to implement only one of these methods.
20641  The `+load' method is also invoked when a bundle is dynamically loaded
20642 into your running program.  This happens automatically without any
20643 intervening operation from you.  When you write bundles and you need to
20644 write `+load' you can safely create and send messages to objects whose
20645 classes already exist in the running program.  The same restrictions as
20646 above apply to classes defined in bundle.
20648 \x1f
20649 File: gcc.info,  Node: Type encoding,  Next: Garbage Collection,  Prev: Executing code before main,  Up: Objective-C
20651 Type encoding
20652 =============
20654  The Objective-C compiler generates type encodings for all the types.
20655 These type encodings are used at runtime to find out information about
20656 selectors and methods and about objects and classes.
20658  The types are encoded in the following way:
20660 `char'             `c'
20661 `unsigned char'    `C'
20662 `short'            `s'
20663 `unsigned short'   `S'
20664 `int'              `i'
20665 `unsigned int'     `I'
20666 `long'             `l'
20667 `unsigned long'    `L'
20668 `long long'        `q'
20669 `unsigned long     `Q'
20670 long'              
20671 `float'            `f'
20672 `double'           `d'
20673 `void'             `v'
20674 `id'               `@'
20675 `Class'            `#'
20676 `SEL'              `:'
20677 `char*'            `*'
20678 unknown type       `?'
20679 bit-fields         `b' followed by the starting position of the
20680                    bit-field, the type of the bit-field and the size of
20681                    the bit-field (the bit-fields encoding was changed
20682                    from the NeXT's compiler encoding, see below)
20684  The encoding of bit-fields has changed to allow bit-fields to be
20685 properly handled by the runtime functions that compute sizes and
20686 alignments of types that contain bit-fields.  The previous encoding
20687 contained only the size of the bit-field.  Using only this information
20688 it is not possible to reliably compute the size occupied by the
20689 bit-field.  This is very important in the presence of the Boehm's
20690 garbage collector because the objects are allocated using the typed
20691 memory facility available in this collector.  The typed memory
20692 allocation requires information about where the pointers are located
20693 inside the object.
20695  The position in the bit-field is the position, counting in bits, of the
20696 bit closest to the beginning of the structure.
20698  The non-atomic types are encoded as follows:
20700 pointers       `^' followed by the pointed type.
20701 arrays         `[' followed by the number of elements in the array
20702                followed by the type of the elements followed by `]'
20703 structures     `{' followed by the name of the structure (or `?' if the
20704                structure is unnamed), the `=' sign, the type of the
20705                members and by `}'
20706 unions         `(' followed by the name of the structure (or `?' if the
20707                union is unnamed), the `=' sign, the type of the members
20708                followed by `)'
20710  Here are some types and their encodings, as they are generated by the
20711 compiler on an i386 machine:
20714 Objective-C type   Compiler encoding
20715      int a[10];    `[10i]'
20716      struct {      `{?=i[3f]b128i3b131i2c}'
20717        int i;      
20718        float f[3]; 
20719        int a:3;    
20720        int b:2;    
20721        char c;     
20722      }             
20725  In addition to the types the compiler also encodes the type
20726 specifiers.  The table below describes the encoding of the current
20727 Objective-C type specifiers:
20730 Specifier          Encoding
20731 `const'            `r'
20732 `in'               `n'
20733 `inout'            `N'
20734 `out'              `o'
20735 `bycopy'           `O'
20736 `oneway'           `V'
20739  The type specifiers are encoded just before the type.  Unlike types
20740 however, the type specifiers are only encoded when they appear in method
20741 argument types.
20743 \x1f
20744 File: gcc.info,  Node: Garbage Collection,  Next: Constant string objects,  Prev: Type encoding,  Up: Objective-C
20746 Garbage Collection
20747 ==================
20749  Support for a new memory management policy has been added by using a
20750 powerful conservative garbage collector, known as the
20751 Boehm-Demers-Weiser conservative garbage collector.  It is available
20752 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
20754  To enable the support for it you have to configure the compiler using
20755 an additional argument, `--enable-objc-gc'.  You need to have garbage
20756 collector installed before building the compiler.  This will build an
20757 additional runtime library which has several enhancements to support
20758 the garbage collector.  The new library has a new name, `libobjc_gc.a'
20759 to not conflict with the non-garbage-collected library.
20761  When the garbage collector is used, the objects are allocated using the
20762 so-called typed memory allocation mechanism available in the
20763 Boehm-Demers-Weiser collector.  This mode requires precise information
20764 on where pointers are located inside objects.  This information is
20765 computed once per class, immediately after the class has been
20766 initialized.
20768  There is a new runtime function `class_ivar_set_gcinvisible()' which
20769 can be used to declare a so-called "weak pointer" reference.  Such a
20770 pointer is basically hidden for the garbage collector; this can be
20771 useful in certain situations, especially when you want to keep track of
20772 the allocated objects, yet allow them to be collected.  This kind of
20773 pointers can only be members of objects, you cannot declare a global
20774 pointer as a weak reference.  Every type which is a pointer type can be
20775 declared a weak pointer, including `id', `Class' and `SEL'.
20777  Here is an example of how to use this feature.  Suppose you want to
20778 implement a class whose instances hold a weak pointer reference; the
20779 following class does this:
20782      @interface WeakPointer : Object
20783      {
20784          const void* weakPointer;
20785      }
20786      
20787      - initWithPointer:(const void*)p;
20788      - (const void*)weakPointer;
20789      @end
20790      
20791      
20792      @implementation WeakPointer
20793      
20794      + (void)initialize
20795      {
20796        class_ivar_set_gcinvisible (self, "weakPointer", YES);
20797      }
20798      
20799      - initWithPointer:(const void*)p
20800      {
20801        weakPointer = p;
20802        return self;
20803      }
20804      
20805      - (const void*)weakPointer
20806      {
20807        return weakPointer;
20808      }
20809      
20810      @end
20812  Weak pointers are supported through a new type character specifier
20813 represented by the `!' character.  The `class_ivar_set_gcinvisible()'
20814 function adds or removes this specifier to the string type description
20815 of the instance variable named as argument.
20817 \x1f
20818 File: gcc.info,  Node: Constant string objects,  Next: compatibility_alias,  Prev: Garbage Collection,  Up: Objective-C
20820 Constant string objects
20821 =======================
20823  GNU Objective-C provides constant string objects that are generated
20824 directly by the compiler.  You declare a constant string object by
20825 prefixing a C constant string with the character `@':
20827        id myString = @"this is a constant string object";
20829  The constant string objects are by default instances of the
20830 `NXConstantString' class which is provided by the GNU Objective-C
20831 runtime.  To get the definition of this class you must include the
20832 `objc/NXConstStr.h' header file.
20834  User defined libraries may want to implement their own constant string
20835 class.  To be able to support them, the GNU Objective-C compiler
20836 provides a new command line options
20837 `-fconstant-string-class=CLASS-NAME'.  The provided class should adhere
20838 to a strict structure, the same as `NXConstantString''s structure:
20841      @interface MyConstantStringClass
20842      {
20843        Class isa;
20844        char *c_string;
20845        unsigned int len;
20846      }
20847      @end
20849  `NXConstantString' inherits from `Object'; user class libraries may
20850 choose to inherit the customized constant string class from a different
20851 class than `Object'.  There is no requirement in the methods the
20852 constant string class has to implement, but the final ivar layout of
20853 the class must be the compatible with the given structure.
20855  When the compiler creates the statically allocated constant string
20856 object, the `c_string' field will be filled by the compiler with the
20857 string; the `length' field will be filled by the compiler with the
20858 string length; the `isa' pointer will be filled with `NULL' by the
20859 compiler, and it will later be fixed up automatically at runtime by the
20860 GNU Objective-C runtime library to point to the class which was set by
20861 the `-fconstant-string-class' option when the object file is loaded (if
20862 you wonder how it works behind the scenes, the name of the class to
20863 use, and the list of static objects to fixup, are stored by the
20864 compiler in the object file in a place where the GNU runtime library
20865 will find them at runtime).
20867  As a result, when a file is compiled with the
20868 `-fconstant-string-class' option, all the constant string objects will
20869 be instances of the class specified as argument to this option.  It is
20870 possible to have multiple compilation units referring to different
20871 constant string classes, neither the compiler nor the linker impose any
20872 restrictions in doing this.
20874 \x1f
20875 File: gcc.info,  Node: compatibility_alias,  Prev: Constant string objects,  Up: Objective-C
20877 compatibility_alias
20878 ===================
20880  This is a feature of the Objective-C compiler rather than of the
20881 runtime, anyway since it is documented nowhere and its existence was
20882 forgotten, we are documenting it here.
20884  The keyword `@compatibility_alias' allows you to define a class name
20885 as equivalent to another class name.  For example:
20887      @compatibility_alias WOApplication GSWApplication;
20889  tells the compiler that each time it encounters `WOApplication' as a
20890 class name, it should replace it with `GSWApplication' (that is,
20891 `WOApplication' is just an alias for `GSWApplication').
20893  There are some constraints on how this can be used--
20895    * `WOApplication' (the alias) must not be an existing class;
20897    * `GSWApplication' (the real class) must be an existing class.
20900 \x1f
20901 File: gcc.info,  Node: Compatibility,  Next: Gcov,  Prev: Objective-C,  Up: Top
20903 Binary Compatibility
20904 ********************
20906  Binary compatibility encompasses several related concepts:
20908 "application binary interface (ABI)"
20909      The set of runtime conventions followed by all of the tools that
20910      deal with binary representations of a program, including
20911      compilers, assemblers, linkers, and language runtime support.
20912      Some ABIs are formal with a written specification, possibly
20913      designed by multiple interested parties.  Others are simply the
20914      way things are actually done by a particular set of tools.
20916 "ABI conformance"
20917      A compiler conforms to an ABI if it generates code that follows
20918      all of the specifications enumerated by that ABI.  A library
20919      conforms to an ABI if it is implemented according to that ABI.  An
20920      application conforms to an ABI if it is built using tools that
20921      conform to that ABI and does not contain source code that
20922      specifically changes behavior specified by the ABI.
20924 "calling conventions"
20925      Calling conventions are a subset of an ABI that specify of how
20926      arguments are passed and function results are returned.
20928 "interoperability"
20929      Different sets of tools are interoperable if they generate files
20930      that can be used in the same program.  The set of tools includes
20931      compilers, assemblers, linkers, libraries, header files, startup
20932      files, and debuggers.  Binaries produced by different sets of
20933      tools are not interoperable unless they implement the same ABI.
20934      This applies to different versions of the same tools as well as
20935      tools from different vendors.
20937 "intercallability"
20938      Whether a function in a binary built by one set of tools can call a
20939      function in a binary built by a different set of tools is a subset
20940      of interoperability.
20942 "implementation-defined features"
20943      Language standards include lists of implementation-defined
20944      features whose behavior can vary from one implementation to
20945      another.  Some of these features are normally covered by a
20946      platform's ABI and others are not.  The features that are not
20947      covered by an ABI generally affect how a program behaves, but not
20948      intercallability.
20950 "compatibility"
20951      Conformance to the same ABI and the same behavior of
20952      implementation-defined features are both relevant for
20953      compatibility.
20955  The application binary interface implemented by a C or C++ compiler
20956 affects code generation and runtime support for:
20958    * size and alignment of data types
20960    * layout of structured types
20962    * calling conventions
20964    * register usage conventions
20966    * interfaces for runtime arithmetic support
20968    * object file formats
20970  In addition, the application binary interface implemented by a C++
20971 compiler affects code generation and runtime support for:
20972    * name mangling
20974    * exception handling
20976    * invoking constructors and destructors
20978    * layout, alignment, and padding of classes
20980    * layout and alignment of virtual tables
20982  Some GCC compilation options cause the compiler to generate code that
20983 does not conform to the platform's default ABI.  Other options cause
20984 different program behavior for implementation-defined features that are
20985 not covered by an ABI.  These options are provided for consistency with
20986 other compilers that do not follow the platform's default ABI or the
20987 usual behavior of implementation-defined features for the platform.  Be
20988 very careful about using such options.
20990  Most platforms have a well-defined ABI that covers C code, but ABIs
20991 that cover C++ functionality are not yet common.
20993  Starting with GCC 3.2, GCC binary conventions for C++ are based on a
20994 written, vendor-neutral C++ ABI that was designed to be specific to
20995 64-bit Itanium but also includes generic specifications that apply to
20996 any platform.  This C++ ABI is also implemented by other compiler
20997 vendors on some platforms, notably GNU/Linux and BSD systems.  We have
20998 tried hard to provide a stable ABI that will be compatible with future
20999 GCC releases, but it is possible that we will encounter problems that
21000 make this difficult.  Such problems could include different
21001 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
21002 bugs in the implementation of the ABI in different compilers.  GCC's
21003 `-Wabi' switch warns when G++ generates code that is probably not
21004 compatible with the C++ ABI.
21006  The C++ library used with a C++ compiler includes the Standard C++
21007 Library, with functionality defined in the C++ Standard, plus language
21008 runtime support.  The runtime support is included in a C++ ABI, but
21009 there is no formal ABI for the Standard C++ Library.  Two
21010 implementations of that library are interoperable if one follows the
21011 de-facto ABI of the other and if they are both built with the same
21012 compiler, or with compilers that conform to the same ABI for C++
21013 compiler and runtime support.
21015  When G++ and another C++ compiler conform to the same C++ ABI, but the
21016 implementations of the Standard C++ Library that they normally use do
21017 not follow the same ABI for the Standard C++ Library, object files
21018 built with those compilers can be used in the same program only if they
21019 use the same C++ library.  This requires specifying the location of the
21020 C++ library header files when invoking the compiler whose usual library
21021 is not being used.  The location of GCC's C++ header files depends on
21022 how the GCC build was configured, but can be seen by using the G++ `-v'
21023 option.  With default configuration options for G++ 3.3 the compile
21024 line for a different C++ compiler needs to include
21026          -IGCC_INSTALL_DIRECTORY/include/c++/3.3
21028  Similarly, compiling code with G++ that must use a C++ library other
21029 than the GNU C++ library requires specifying the location of the header
21030 files for that other library.
21032  The most straightforward way to link a program to use a particular C++
21033 library is to use a C++ driver that specifies that C++ library by
21034 default.  The `g++' driver, for example, tells the linker where to find
21035 GCC's C++ library (`libstdc++') plus the other libraries and startup
21036 files it needs, in the proper order.
21038  If a program must use a different C++ library and it's not possible to
21039 do the final link using a C++ driver that uses that library by default,
21040 it is necessary to tell `g++' the location and name of that library.
21041 It might also be necessary to specify different startup files and other
21042 runtime support libraries, and to suppress the use of GCC's support
21043 libraries with one or more of the options `-nostdlib', `-nostartfiles',
21044 and `-nodefaultlibs'.
21046 \x1f
21047 File: gcc.info,  Node: Gcov,  Next: Trouble,  Prev: Compatibility,  Up: Top
21049 `gcov'--a Test Coverage Program
21050 *******************************
21052  `gcov' is a tool you can use in conjunction with GCC to test code
21053 coverage in your programs.
21055 * Menu:
21057 * Gcov Intro::                  Introduction to gcov.
21058 * Invoking Gcov::               How to use gcov.
21059 * Gcov and Optimization::       Using gcov with GCC optimization.
21060 * Gcov Data Files::             The files used by gcov.
21062 \x1f
21063 File: gcc.info,  Node: Gcov Intro,  Next: Invoking Gcov,  Up: Gcov
21065 Introduction to `gcov'
21066 ======================
21068  `gcov' is a test coverage program.  Use it in concert with GCC to
21069 analyze your programs to help create more efficient, faster running
21070 code and to discover untested parts of your program.  You can use
21071 `gcov' as a profiling tool to help discover where your optimization
21072 efforts will best affect your code.  You can also use `gcov' along with
21073 the other profiling tool, `gprof', to assess which parts of your code
21074 use the greatest amount of computing time.
21076  Profiling tools help you analyze your code's performance.  Using a
21077 profiler such as `gcov' or `gprof', you can find out some basic
21078 performance statistics, such as:
21080    * how often each line of code executes
21082    * what lines of code are actually executed
21084    * how much computing time each section of code uses
21086  Once you know these things about how your code works when compiled, you
21087 can look at each module to see which modules should be optimized.
21088 `gcov' helps you determine where to work on optimization.
21090  Software developers also use coverage testing in concert with
21091 testsuites, to make sure software is actually good enough for a release.
21092 Testsuites can verify that a program works as expected; a coverage
21093 program tests to see how much of the program is exercised by the
21094 testsuite.  Developers can then determine what kinds of test cases need
21095 to be added to the testsuites to create both better testing and a better
21096 final product.
21098  You should compile your code without optimization if you plan to use
21099 `gcov' because the optimization, by combining some lines of code into
21100 one function, may not give you as much information as you need to look
21101 for `hot spots' where the code is using a great deal of computer time.
21102 Likewise, because `gcov' accumulates statistics by line (at the lowest
21103 resolution), it works best with a programming style that places only
21104 one statement on each line.  If you use complicated macros that expand
21105 to loops or to other control structures, the statistics are less
21106 helpful--they only report on the line where the macro call appears.  If
21107 your complex macros behave like functions, you can replace them with
21108 inline functions to solve this problem.
21110  `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
21111 many times each line of a source file `SOURCEFILE.c' has executed.  You
21112 can use these logfiles along with `gprof' to aid in fine-tuning the
21113 performance of your programs.  `gprof' gives timing information you can
21114 use along with the information you get from `gcov'.
21116  `gcov' works only on code compiled with GCC.  It is not compatible
21117 with any other profiling or test coverage mechanism.
21119 \x1f
21120 File: gcc.info,  Node: Invoking Gcov,  Next: Gcov and Optimization,  Prev: Gcov Intro,  Up: Gcov
21122 Invoking gcov
21123 =============
21125      gcov [OPTIONS] SOURCEFILE
21127  `gcov' accepts the following options:
21129 `-h'
21130 `--help'
21131      Display help about using `gcov' (on the standard output), and exit
21132      without doing any further processing.
21134 `-v'
21135 `--version'
21136      Display the `gcov' version number (on the standard output), and
21137      exit without doing any further processing.
21139 `-a'
21140 `--all-blocks'
21141      Write individual execution counts for every basic block. Normally
21142      gcov outputs execution counts only for the main blocks of a line.
21143      With this option you can determine if blocks within a single line
21144      are not being executed.
21146 `-b'
21147 `--branch-probabilities'
21148      Write branch frequencies to the output file, and write branch
21149      summary info to the standard output.  This option allows you to
21150      see how often each branch in your program was taken. Unconditional
21151      branches will not be shown, unless the `-u' option is given.
21153 `-c'
21154 `--branch-counts'
21155      Write branch frequencies as the number of branches taken, rather
21156      than the percentage of branches taken.
21158 `-n'
21159 `--no-output'
21160      Do not create the `gcov' output file.
21162 `-l'
21163 `--long-file-names'
21164      Create long file names for included source files.  For example, if
21165      the header file `x.h' contains code, and was included in the file
21166      `a.c', then running `gcov' on the file `a.c' will produce an
21167      output file called `a.c##x.h.gcov' instead of `x.h.gcov'.  This
21168      can be useful if `x.h' is included in multiple source files. If
21169      you uses the `-p' option, both the including and included file
21170      names will be complete path names.
21172 `-p'
21173 `--preserve-paths'
21174      Preserve complete path information in the names of generated
21175      `.gcov' files. Without this option, just the filename component is
21176      used. With this option, all directories are used, with '/'
21177      characters translated to '#' characters, '.' directory components
21178      removed and '..'  components renamed to '^'. This is useful if
21179      sourcefiles are in several different directories. It also affects
21180      the `-l' option.
21182 `-f'
21183 `--function-summaries'
21184      Output summaries for each function in addition to the file level
21185      summary.
21187 `-o DIRECTORY|FILE'
21188 `--object-directory DIRECTORY'
21189 `--object-file FILE'
21190      Specify either the directory containing the gcov data files, or the
21191      object path name. The `.gcno', and `.gcda' data files are searched
21192      for using this option. If a directory is specified, the data files
21193      are in that directory and named after the source file name,
21194      without its extension. If a file is specified here, the data files
21195      are named after that file, without its extension. If this option
21196      is not supplied, it defaults to the current directory.
21198 `-u'
21199 `--unconditional-branches'
21200      When branch counts are given, include those of unconditional
21201      branches.  Unconditional branches are normally not interesting.
21203  `gcov' should be run with the current directory the same as that when
21204 you invoked the compiler. Otherwise it will not be able to locate the
21205 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the
21206 current directory. These contain the coverage information of the source
21207 file they correspond to.  One `.gcov' file is produced for each source
21208 file containing code, which was compiled to produce the data files. The
21209 MANGLEDNAME part of the output file name is usually simply the source
21210 file name, but can be something more complicated if the `-l' or `-p'
21211 options are given. Refer to those options for details.
21213  The `.gcov' files contain the ':' separated fields along with program
21214 source code. The format is
21216      EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
21218  Additional block information may succeed each line, when requested by
21219 command line option. The EXECUTION_COUNT is `-' for lines containing no
21220 code and `#####' for lines which were never executed. Some lines of
21221 information at the start have LINE_NUMBER of zero.
21223  When printing percentages, 0% and 100% are only printed when the values
21224 are _exactly_ 0% and 100% respectively. Other values which would
21225 conventionally be rounded to 0% or 100% are instead printed as the
21226 nearest non-boundary value.
21228  When using `gcov', you must first compile your program with two
21229 special GCC options: `-fprofile-arcs -ftest-coverage'.  This tells the
21230 compiler to generate additional information needed by gcov (basically a
21231 flow graph of the program) and also includes additional code in the
21232 object files for generating the extra profiling information needed by
21233 gcov.  These additional files are placed in the directory where the
21234 object file is located.
21236  Running the program will cause profile output to be generated.  For
21237 each source file compiled with `-fprofile-arcs', an accompanying
21238 `.gcda' file will be placed in the object file directory.
21240  Running `gcov' with your program's source file names as arguments will
21241 now produce a listing of the code along with frequency of execution for
21242 each line.  For example, if your program is called `tmp.c', this is
21243 what you see when you use the basic `gcov' facility:
21245      $ gcc -fprofile-arcs -ftest-coverage tmp.c
21246      $ a.out
21247      $ gcov tmp.c
21248      90.00% of 10 source lines executed in file tmp.c
21249      Creating tmp.c.gcov.
21251  The file `tmp.c.gcov' contains output from `gcov'.  Here is a sample:
21253              -:    0:Source:tmp.c
21254              -:    0:Graph:tmp.gcno
21255              -:    0:Data:tmp.gcda
21256              -:    0:Runs:1
21257              -:    0:Programs:1
21258              -:    1:#include <stdio.h>
21259              -:    2:
21260              -:    3:int main (void)
21261      function main called 1 returned 1 blocks executed 75%
21262              1:    4:{
21263              1:    5:  int i, total;
21264              -:    6:
21265              1:    7:  total = 0;
21266              -:    8:
21267             11:    9:  for (i = 0; i < 10; i++)
21268             10:   10:    total += i;
21269              -:   11:
21270              1:   12:  if (total != 45)
21271          #####:   13:    printf ("Failure\n");
21272              -:   14:  else
21273              1:   15:    printf ("Success\n");
21274              1:   16:  return 0;
21275              -:   17:}
21277  When you use the `-a' option, you will get individual block counts,
21278 and the output looks like this:
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:    4-block  0
21291              1:    5:  int i, total;
21292              -:    6:
21293              1:    7:  total = 0;
21294              -:    8:
21295             11:    9:  for (i = 0; i < 10; i++)
21296             11:    9-block  0
21297             10:   10:    total += i;
21298             10:   10-block  0
21299              -:   11:
21300              1:   12:  if (total != 45)
21301              1:   12-block  0
21302          #####:   13:    printf ("Failure\n");
21303          $$$$$:   13-block  0
21304              -:   14:  else
21305              1:   15:    printf ("Success\n");
21306              1:   15-block  0
21307              1:   16:  return 0;
21308              1:   16-block  0
21309              -:   17:}
21311  In this mode, each basic block is only shown on one line - the last
21312 line of the block. A multi-line block will only contribute to the
21313 execution count of that last line, and other lines will not be shown to
21314 contain code, unless previous blocks end on those lines.  The total
21315 execution count of a line is shown and subsequent lines show the
21316 execution counts for individual blocks that end on that line. After each
21317 block, the branch and call counts of the block will be shown, if the
21318 `-b' option is given.
21320  Because of the way GCC instruments calls, a call count can be shown
21321 after a line with no individual blocks.  As you can see, line 13
21322 contains a basic block that was not executed.
21324  When you use the `-b' option, your output looks like this:
21326      $ gcov -b tmp.c
21327      90.00% of 10 source lines executed in file tmp.c
21328      80.00% of 5 branches executed in file tmp.c
21329      80.00% of 5 branches taken at least once in file tmp.c
21330      50.00% of 2 calls executed in file tmp.c
21331      Creating tmp.c.gcov.
21333  Here is a sample of a resulting `tmp.c.gcov' file:
21335              -:    0:Source:tmp.c
21336              -:    0:Graph:tmp.gcno
21337              -:    0:Data:tmp.gcda
21338              -:    0:Runs:1
21339              -:    0:Programs:1
21340              -:    1:#include <stdio.h>
21341              -:    2:
21342              -:    3:int main (void)
21343      function main called 1 returned 1 blocks executed 75%
21344              1:    4:{
21345              1:    5:  int i, total;
21346              -:    6:
21347              1:    7:  total = 0;
21348              -:    8:
21349             11:    9:  for (i = 0; i < 10; i++)
21350      branch  0 taken 91% (fallthrough)
21351      branch  1 taken 9%
21352             10:   10:    total += i;
21353              -:   11:
21354              1:   12:  if (total != 45)
21355      branch  0 taken 0% (fallthrough)
21356      branch  1 taken 100%
21357          #####:   13:    printf ("Failure\n");
21358      call    0 never executed
21359              -:   14:  else
21360              1:   15:    printf ("Success\n");
21361      call    0 called 1 returned 100%
21362              1:   16:  return 0;
21363              -:   17:}
21365  For each basic block, a line is printed after the last line of the
21366 basic block describing the branch or call that ends the basic block.
21367 There can be multiple branches and calls listed for a single source
21368 line if there are multiple basic blocks that end on that line.  In this
21369 case, the branches and calls are each given a number.  There is no
21370 simple way to map these branches and calls back to source constructs.
21371 In general, though, the lowest numbered branch or call will correspond
21372 to the leftmost construct on the source line.
21374  For a branch, if it was executed at least once, then a percentage
21375 indicating the number of times the branch was taken divided by the
21376 number of times the branch was executed will be printed.  Otherwise, the
21377 message "never executed" is printed.
21379  For a call, if it was executed at least once, then a percentage
21380 indicating the number of times the call returned divided by the number
21381 of times the call was executed will be printed.  This will usually be
21382 100%, but may be less for functions call `exit' or `longjmp', and thus
21383 may not return every time they are called.
21385  The execution counts are cumulative.  If the example program were
21386 executed again without removing the `.gcda' file, the count for the
21387 number of times each line in the source was executed would be added to
21388 the results of the previous run(s).  This is potentially useful in
21389 several ways.  For example, it could be used to accumulate data over a
21390 number of program runs as part of a test verification suite, or to
21391 provide more accurate long-term information over a large number of
21392 program runs.
21394  The data in the `.gcda' files is saved immediately before the program
21395 exits.  For each source file compiled with `-fprofile-arcs', the
21396 profiling code first attempts to read in an existing `.gcda' file; if
21397 the file doesn't match the executable (differing number of basic block
21398 counts) it will ignore the contents of the file.  It then adds in the
21399 new execution counts and finally writes the data to the file.
21401 \x1f
21402 File: gcc.info,  Node: Gcov and Optimization,  Next: Gcov Data Files,  Prev: Invoking Gcov,  Up: Gcov
21404 Using `gcov' with GCC Optimization
21405 ==================================
21407  If you plan to use `gcov' to help optimize your code, you must first
21408 compile your program with two special GCC options: `-fprofile-arcs
21409 -ftest-coverage'.  Aside from that, you can use any other GCC options;
21410 but if you want to prove that every single line in your program was
21411 executed, you should not compile with optimization at the same time.
21412 On some machines the optimizer can eliminate some simple code lines by
21413 combining them with other lines.  For example, code like this:
21415      if (a != b)
21416        c = 1;
21417      else
21418        c = 0;
21420 can be compiled into one instruction on some machines.  In this case,
21421 there is no way for `gcov' to calculate separate execution counts for
21422 each line because there isn't separate code for each line.  Hence the
21423 `gcov' output looks like this if you compiled the program with
21424 optimization:
21426            100:   12:if (a != b)
21427            100:   13:  c = 1;
21428            100:   14:else
21429            100:   15:  c = 0;
21431  The output shows that this block of code, combined by optimization,
21432 executed 100 times.  In one sense this result is correct, because there
21433 was only one instruction representing all four of these lines.  However,
21434 the output does not indicate how many times the result was 0 and how
21435 many times the result was 1.
21437  Inlineable functions can create unexpected line counts.  Line counts
21438 are shown for the source code of the inlineable function, but what is
21439 shown depends on where the function is inlined, or if it is not inlined
21440 at all.
21442  If the function is not inlined, the compiler must emit an out of line
21443 copy of the function, in any object file that needs it.  If `fileA.o'
21444 and `fileB.o' both contain out of line bodies of a particular
21445 inlineable function, they will also both contain coverage counts for
21446 that function.  When `fileA.o' and `fileB.o' are linked together, the
21447 linker will, on many systems, select one of those out of line bodies
21448 for all calls to that function, and remove or ignore the other.
21449 Unfortunately, it will not remove the coverage counters for the unused
21450 function body.  Hence when instrumented, all but one use of that
21451 function will show zero counts.
21453  If the function is inlined in several places, the block structure in
21454 each location might not be the same.  For instance, a condition might
21455 now be calculable at compile time in some instances.  Because the
21456 coverage of all the uses of the inline function will be shown for the
21457 same source lines, the line counts themselves might seem inconsistent.
21459 \x1f
21460 File: gcc.info,  Node: Gcov Data Files,  Prev: Gcov and Optimization,  Up: Gcov
21462 Brief description of `gcov' data files
21463 ======================================
21465  `gcov' uses two files for profiling.  The names of these files are
21466 derived from the original _object_ file by substituting the file suffix
21467 with either `.gcno', or `.gcda'.  All of these files are placed in the
21468 same directory as the object file, and contain data stored in a
21469 platform-independent format.
21471  The `.gcno' file is generated when the source file is compiled with
21472 the GCC `-ftest-coverage' option.  It contains information to
21473 reconstruct the basic block graphs and assign source line numbers to
21474 blocks.
21476  The `.gcda' file is generated when a program containing object files
21477 built with the GCC `-fprofile-arcs' option is executed.  A separate
21478 `.gcda' file is created for each object file compiled with this option.
21479 It contains arc transition counts, and some summary information.
21481  The full details of the file format is specified in `gcov-io.h', and
21482 functions provided in that header file should be used to access the
21483 coverage files.
21485 \x1f
21486 File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Gcov,  Up: Top
21488 Known Causes of Trouble with GCC
21489 ********************************
21491  This section describes known problems that affect users of GCC.  Most
21492 of these are not GCC bugs per se--if they were, we would fix them.  But
21493 the result for a user may be like the result of a bug.
21495  Some of these problems are due to bugs in other software, some are
21496 missing features that are too much work to add, and some are places
21497 where people's opinions differ as to what is best.
21499 * Menu:
21501 * Actual Bugs::               Bugs we will fix later.
21502 * Cross-Compiler Problems::   Common problems of cross compiling with GCC.
21503 * Interoperation::      Problems using GCC with other compilers,
21504                            and with certain linkers, assemblers and debuggers.
21505 * External Bugs::       Problems compiling certain programs.
21506 * Incompatibilities::   GCC is incompatible with traditional C.
21507 * Fixed Headers::       GCC uses corrected versions of system header files.
21508                            This is necessary, but doesn't always work smoothly.
21509 * Standard Libraries::  GCC uses the system C library, which might not be
21510                            compliant with the ISO C standard.
21511 * Disappointments::     Regrettable things we can't change, but not quite bugs.
21512 * C++ Misunderstandings::     Common misunderstandings with GNU C++.
21513 * Protoize Caveats::    Things to watch out for when using `protoize'.
21514 * Non-bugs::            Things we think are right, but some others disagree.
21515 * Warnings and Errors:: Which problems in your code get warnings,
21516                          and which get errors.
21518 \x1f
21519 File: gcc.info,  Node: Actual Bugs,  Next: Cross-Compiler Problems,  Up: Trouble
21521 Actual Bugs We Haven't Fixed Yet
21522 ================================
21524    * The `fixincludes' script interacts badly with automounters; if the
21525      directory of system header files is automounted, it tends to be
21526      unmounted while `fixincludes' is running.  This would seem to be a
21527      bug in the automounter.  We don't know any good way to work around
21528      it.
21530    * The `fixproto' script will sometimes add prototypes for the
21531      `sigsetjmp' and `siglongjmp' functions that reference the
21532      `jmp_buf' type before that type is defined.  To work around this,
21533      edit the offending file and place the typedef in front of the
21534      prototypes.
21536    * When `-pedantic-errors' is specified, GCC will incorrectly give an
21537      error message when a function name is specified in an expression
21538      involving the comma operator.
21540 \x1f
21541 File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Actual Bugs,  Up: Trouble
21543 Cross-Compiler Problems
21544 =======================
21546  You may run into problems with cross compilation on certain machines,
21547 for several reasons.
21549    * Cross compilation can run into trouble for certain machines because
21550      some target machines' assemblers require floating point numbers to
21551      be written as _integer_ constants in certain contexts.
21553      The compiler writes these integer constants by examining the
21554      floating point value as an integer and printing that integer,
21555      because this is simple to write and independent of the details of
21556      the floating point representation.  But this does not work if the
21557      compiler is running on a different machine with an incompatible
21558      floating point format, or even a different byte-ordering.
21560      In addition, correct constant folding of floating point values
21561      requires representing them in the target machine's format.  (The C
21562      standard does not quite require this, but in practice it is the
21563      only way to win.)
21565      It is now possible to overcome these problems by defining macros
21566      such as `REAL_VALUE_TYPE'.  But doing so is a substantial amount of
21567      work for each target machine.  *Note Cross Compilation and
21568      Floating Point: (gccint)Cross-compilation.
21570    * At present, the program `mips-tfile' which adds debug support to
21571      object files on MIPS systems does not work in a cross compile
21572      environment.
21574 \x1f
21575 File: gcc.info,  Node: Interoperation,  Next: External Bugs,  Prev: Cross-Compiler Problems,  Up: Trouble
21577 Interoperation
21578 ==============
21580  This section lists various difficulties encountered in using GCC
21581 together with other compilers or with the assemblers, linkers,
21582 libraries and debuggers on certain systems.
21584    * On many platforms, GCC supports a different ABI for C++ than do
21585      other compilers, so the object files compiled by GCC cannot be
21586      used with object files generated by another C++ compiler.
21588      An area where the difference is most apparent is name mangling.
21589      The use of different name mangling is intentional, to protect you
21590      from more subtle problems.  Compilers differ as to many internal
21591      details of C++ implementation, including: how class instances are
21592      laid out, how multiple inheritance is implemented, and how virtual
21593      function calls are handled.  If the name encoding were made the
21594      same, your programs would link against libraries provided from
21595      other compilers--but the programs would then crash when run.
21596      Incompatible libraries are then detected at link time, rather than
21597      at run time.
21599    * Older GDB versions sometimes fail to read the output of GCC version
21600      2.  If you have trouble, get GDB version 4.4 or later.
21602    * DBX rejects some files produced by GCC, though it accepts similar
21603      constructs in output from PCC.  Until someone can supply a coherent
21604      description of what is valid DBX input and what is not, there is
21605      nothing that can be done about these problems.
21607    * The GNU assembler (GAS) does not support PIC.  To generate PIC
21608      code, you must use some other assembler, such as `/bin/as'.
21610    * On some BSD systems, including some versions of Ultrix, use of
21611      profiling causes static variable destructors (currently used only
21612      in C++) not to be run.
21614    * On some SGI systems, when you use `-lgl_s' as an option, it gets
21615      translated magically to `-lgl_s -lX11_s -lc_s'.  Naturally, this
21616      does not happen when you use GCC.  You must specify all three
21617      options explicitly.
21619    * On a SPARC, GCC aligns all values of type `double' on an 8-byte
21620      boundary, and it expects every `double' to be so aligned.  The Sun
21621      compiler usually gives `double' values 8-byte alignment, with one
21622      exception: function arguments of type `double' may not be aligned.
21624      As a result, if a function compiled with Sun CC takes the address
21625      of an argument of type `double' and passes this pointer of type
21626      `double *' to a function compiled with GCC, dereferencing the
21627      pointer may cause a fatal signal.
21629      One way to solve this problem is to compile your entire program
21630      with GCC.  Another solution is to modify the function that is
21631      compiled with Sun CC to copy the argument into a local variable;
21632      local variables are always properly aligned.  A third solution is
21633      to modify the function that uses the pointer to dereference it via
21634      the following function `access_double' instead of directly with
21635      `*':
21637           inline double
21638           access_double (double *unaligned_ptr)
21639           {
21640             union d2i { double d; int i[2]; };
21641           
21642             union d2i *p = (union d2i *) unaligned_ptr;
21643             union d2i u;
21644           
21645             u.i[0] = p->i[0];
21646             u.i[1] = p->i[1];
21647           
21648             return u.d;
21649           }
21651      Storing into the pointer can be done likewise with the same union.
21653    * On Solaris, the `malloc' function in the `libmalloc.a' library may
21654      allocate memory that is only 4 byte aligned.  Since GCC on the
21655      SPARC assumes that doubles are 8 byte aligned, this may result in a
21656      fatal signal if doubles are stored in memory allocated by the
21657      `libmalloc.a' library.
21659      The solution is to not use the `libmalloc.a' library.  Use instead
21660      `malloc' and related functions from `libc.a'; they do not have
21661      this problem.
21663    * Sun forgot to include a static version of `libdl.a' with some
21664      versions of SunOS (mainly 4.1).  This results in undefined symbols
21665      when linking static binaries (that is, if you use `-static').  If
21666      you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when
21667      linking, compile and link against the file `mit/util/misc/dlsym.c'
21668      from the MIT version of X windows.
21670    * The 128-bit long double format that the SPARC port supports
21671      currently works by using the architecturally defined quad-word
21672      floating point instructions.  Since there is no hardware that
21673      supports these instructions they must be emulated by the operating
21674      system.  Long doubles do not work in Sun OS versions 4.0.3 and
21675      earlier, because the kernel emulator uses an obsolete and
21676      incompatible format.  Long doubles do not work in Sun OS version
21677      4.1.1 due to a problem in a Sun library.  Long doubles do work on
21678      Sun OS versions 4.1.2 and higher, but GCC does not enable them by
21679      default.  Long doubles appear to work in Sun OS 5.x (Solaris 2.x).
21681    * On HP-UX version 9.01 on the HP PA, the HP compiler `cc' does not
21682      compile GCC correctly.  We do not yet know why.  However, GCC
21683      compiled on earlier HP-UX versions works properly on HP-UX 9.01
21684      and can compile itself properly on 9.01.
21686    * On the HP PA machine, ADB sometimes fails to work on functions
21687      compiled with GCC.  Specifically, it fails to work on functions
21688      that use `alloca' or variable-size arrays.  This is because GCC
21689      doesn't generate HP-UX unwind descriptors for such functions.  It
21690      may even be impossible to generate them.
21692    * Debugging (`-g') is not supported on the HP PA machine, unless you
21693      use the preliminary GNU tools.
21695    * Taking the address of a label may generate errors from the HP-UX
21696      PA assembler.  GAS for the PA does not have this problem.
21698    * Using floating point parameters for indirect calls to static
21699      functions will not work when using the HP assembler.  There simply
21700      is no way for GCC to specify what registers hold arguments for
21701      static functions when using the HP assembler.  GAS for the PA does
21702      not have this problem.
21704    * In extremely rare cases involving some very large functions you may
21705      receive errors from the HP linker complaining about an out of
21706      bounds unconditional branch offset.  This used to occur more often
21707      in previous versions of GCC, but is now exceptionally rare.  If
21708      you should run into it, you can work around by making your
21709      function smaller.
21711    * GCC compiled code sometimes emits warnings from the HP-UX
21712      assembler of the form:
21714           (warning) Use of GR3 when
21715             frame >= 8192 may cause conflict.
21717      These warnings are harmless and can be safely ignored.
21719    * On the IBM RS/6000, compiling code of the form
21721           extern int foo;
21722           
21723           ... foo ...
21724           
21725           static int foo;
21727      will cause the linker to report an undefined symbol `foo'.
21728      Although this behavior differs from most other systems, it is not a
21729      bug because redefining an `extern' variable as `static' is
21730      undefined in ISO C.
21732    * In extremely rare cases involving some very large functions you may
21733      receive errors from the AIX Assembler complaining about a
21734      displacement that is too large.  If you should run into it, you
21735      can work around by making your function smaller.
21737    * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
21738      semantics which merges global symbols between libraries and
21739      applications, especially necessary for C++ streams functionality.
21740      This is not the default behavior of AIX shared libraries and
21741      dynamic linking.  `libstdc++.a' is built on AIX with
21742      "runtime-linking" enabled so that symbol merging can occur.  To
21743      utilize this feature, the application linked with `libstdc++.a'
21744      must include the `-Wl,-brtl' flag on the link line.  G++ cannot
21745      impose this because this option may interfere with the semantics
21746      of the user program and users may not always use `g++' to link his
21747      or her application. Applications are not required to use the
21748      `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
21749      library which is not dependent on the symbol merging semantics
21750      will continue to function correctly.
21752    * An application can interpose its own definition of functions for
21753      functions invoked by `libstdc++.a' with "runtime-linking" enabled
21754      on AIX.  To accomplish this the application must be linked with
21755      "runtime-linking" option and the functions explicitly must be
21756      exported by the application (`-Wl,-brtl,-bE:exportfile').
21758    * AIX on the RS/6000 provides support (NLS) for environments outside
21759      of the United States.  Compilers and assemblers use NLS to support
21760      locale-specific representations of various objects including
21761      floating-point numbers (`.' vs `,' for separating decimal
21762      fractions). There have been problems reported where the library
21763      linked with GCC does not produce the same floating-point formats
21764      that the assembler accepts. If you have this problem, set the
21765      `LANG' environment variable to `C' or `En_US'.
21767    * Even if you specify `-fdollars-in-identifiers', you cannot
21768      successfully use `$' in identifiers on the RS/6000 due to a
21769      restriction in the IBM assembler.  GAS supports these identifiers.
21771    * On Ultrix, the Fortran compiler expects registers 2 through 5 to
21772      be saved by function calls.  However, the C compiler uses
21773      conventions compatible with BSD Unix: registers 2 through 5 may be
21774      clobbered by function calls.
21776      GCC uses the same convention as the Ultrix C compiler.  You can use
21777      these options to produce code compatible with the Fortran compiler:
21779           -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
21781    * On the Alpha, you may get assembler errors about invalid syntax as
21782      a result of floating point constants.  This is due to a bug in the
21783      C library functions `ecvt', `fcvt' and `gcvt'.  Given valid
21784      floating point numbers, they sometimes print `NaN'.
21786 \x1f
21787 File: gcc.info,  Node: External Bugs,  Next: Incompatibilities,  Prev: Interoperation,  Up: Trouble
21789 Problems Compiling Certain Programs
21790 ===================================
21792  Certain programs have problems compiling.
21794    * Parse errors may occur compiling X11 on a Decstation running
21795      Ultrix 4.2 because of problems in DEC's versions of the X11 header
21796      files `X11/Xlib.h' and `X11/Xutil.h'.  People recommend adding
21797      `-I/usr/include/mit' to use the MIT versions of the header files,
21798      or fixing the header files by adding this:
21800           #ifdef __STDC__
21801           #define NeedFunctionPrototypes 0
21802           #endif
21804    * On various 386 Unix systems derived from System V, including SCO,
21805      ISC, and ESIX, you may get error messages about running out of
21806      virtual memory while compiling certain programs.
21808      You can prevent this problem by linking GCC with the GNU malloc
21809      (which thus replaces the malloc that comes with the system).  GNU
21810      malloc is available as a separate package, and also in the file
21811      `src/gmalloc.c' in the GNU Emacs 19 distribution.
21813      If you have installed GNU malloc as a separate library package,
21814      use this option when you relink GCC:
21816           MALLOC=/usr/local/lib/libgmalloc.a
21818      Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy
21819      the object file to `gmalloc.o' and use this option when you relink
21820      GCC:
21822           MALLOC=gmalloc.o
21824 \x1f
21825 File: gcc.info,  Node: Incompatibilities,  Next: Fixed Headers,  Prev: External Bugs,  Up: Trouble
21827 Incompatibilities of GCC
21828 ========================
21830  There are several noteworthy incompatibilities between GNU C and K&R
21831 (non-ISO) versions of C.
21833    * GCC normally makes string constants read-only.  If several
21834      identical-looking string constants are used, GCC stores only one
21835      copy of the string.
21837      One consequence is that you cannot call `mktemp' with a string
21838      constant argument.  The function `mktemp' always alters the string
21839      its argument points to.
21841      Another consequence is that `sscanf' does not work on some systems
21842      when passed a string constant as its format control string or
21843      input.  This is because `sscanf' incorrectly tries to write into
21844      the string constant.  Likewise `fscanf' and `scanf'.
21846      The best solution to these problems is to change the program to use
21847      `char'-array variables with initialization strings for these
21848      purposes instead of string constants.  But if this is not possible,
21849      you can use the `-fwritable-strings' flag, which directs GCC to
21850      handle string constants the same way most C compilers do.
21852    * `-2147483648' is positive.
21854      This is because 2147483648 cannot fit in the type `int', so
21855      (following the ISO C rules) its data type is `unsigned long int'.
21856      Negating this value yields 2147483648 again.
21858    * GCC does not substitute macro arguments when they appear inside of
21859      string constants.  For example, the following macro in GCC
21861           #define foo(a) "a"
21863      will produce output `"a"' regardless of what the argument A is.
21865    * When you use `setjmp' and `longjmp', the only automatic variables
21866      guaranteed to remain valid are those declared `volatile'.  This is
21867      a consequence of automatic register allocation.  Consider this
21868      function:
21870           jmp_buf j;
21871           
21872           foo ()
21873           {
21874             int a, b;
21875           
21876             a = fun1 ();
21877             if (setjmp (j))
21878               return a;
21879           
21880             a = fun2 ();
21881             /* `longjmp (j)' may occur in `fun3'. */
21882             return a + fun3 ();
21883           }
21885      Here `a' may or may not be restored to its first value when the
21886      `longjmp' occurs.  If `a' is allocated in a register, then its
21887      first value is restored; otherwise, it keeps the last value stored
21888      in it.
21890      If you use the `-W' option with the `-O' option, you will get a
21891      warning when GCC thinks such a problem might be possible.
21893    * Programs that use preprocessing directives in the middle of macro
21894      arguments do not work with GCC.  For example, a program like this
21895      will not work:
21897           foobar (
21898           #define luser
21899                   hack)
21901      ISO C does not permit such a construct.
21903    * K&R compilers allow comments to cross over an inclusion boundary
21904      (i.e. started in an include file and ended in the including file).
21906    * Declarations of external variables and functions within a block
21907      apply only to the block containing the declaration.  In other
21908      words, they have the same scope as any other declaration in the
21909      same place.
21911      In some other C compilers, a `extern' declaration affects all the
21912      rest of the file even if it happens within a block.
21914    * In traditional C, you can combine `long', etc., with a typedef
21915      name, as shown here:
21917           typedef int foo;
21918           typedef long foo bar;
21920      In ISO C, this is not allowed: `long' and other type modifiers
21921      require an explicit `int'.
21923    * PCC allows typedef names to be used as function parameters.
21925    * Traditional C allows the following erroneous pair of declarations
21926      to appear together in a given scope:
21928           typedef int foo;
21929           typedef foo foo;
21931    * GCC treats all characters of identifiers as significant.
21932      According to K&R-1 (2.2), "No more than the first eight characters
21933      are significant, although more may be used.".  Also according to
21934      K&R-1 (2.2), "An identifier is a sequence of letters and digits;
21935      the first character must be a letter.  The underscore _ counts as
21936      a letter.", but GCC also allows dollar signs in identifiers.
21938    * PCC allows whitespace in the middle of compound assignment
21939      operators such as `+='.  GCC, following the ISO standard, does not
21940      allow this.
21942    * GCC complains about unterminated character constants inside of
21943      preprocessing conditionals that fail.  Some programs have English
21944      comments enclosed in conditionals that are guaranteed to fail; if
21945      these comments contain apostrophes, GCC will probably report an
21946      error.  For example, this code would produce an error:
21948           #if 0
21949           You can't expect this to work.
21950           #endif
21952      The best solution to such a problem is to put the text into an
21953      actual C comment delimited by `/*...*/'.
21955    * Many user programs contain the declaration `long time ();'.  In the
21956      past, the system header files on many systems did not actually
21957      declare `time', so it did not matter what type your program
21958      declared it to return.  But in systems with ISO C headers, `time'
21959      is declared to return `time_t', and if that is not the same as
21960      `long', then `long time ();' is erroneous.
21962      The solution is to change your program to use appropriate system
21963      headers (`<time.h>' on systems with ISO C headers) and not to
21964      declare `time' if the system header files declare it, or failing
21965      that to use `time_t' as the return type of `time'.
21967    * When compiling functions that return `float', PCC converts it to a
21968      double.  GCC actually returns a `float'.  If you are concerned
21969      with PCC compatibility, you should declare your functions to return
21970      `double'; you might as well say what you mean.
21972    * When compiling functions that return structures or unions, GCC
21973      output code normally uses a method different from that used on most
21974      versions of Unix.  As a result, code compiled with GCC cannot call
21975      a structure-returning function compiled with PCC, and vice versa.
21977      The method used by GCC is as follows: a structure or union which is
21978      1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or
21979      union with any other size is stored into an address supplied by
21980      the caller (usually in a special, fixed register, but on some
21981      machines it is passed on the stack).  The target hook
21982      `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
21984      By contrast, PCC on most target machines returns structures and
21985      unions of any size by copying the data into an area of static
21986      storage, and then returning the address of that storage as if it
21987      were a pointer value.  The caller must copy the data from that
21988      memory area to the place where the value is wanted.  GCC does not
21989      use this method because it is slower and nonreentrant.
21991      On some newer machines, PCC uses a reentrant convention for all
21992      structure and union returning.  GCC on most of these machines uses
21993      a compatible convention when returning structures and unions in
21994      memory, but still returns small structures and unions in registers.
21996      You can tell GCC to use a compatible convention for all structure
21997      and union returning with the option `-fpcc-struct-return'.
21999    * GCC complains about program fragments such as `0x74ae-0x4000'
22000      which appear to be two hexadecimal constants separated by the minus
22001      operator.  Actually, this string is a single "preprocessing token".
22002      Each such token must correspond to one token in C.  Since this
22003      does not, GCC prints an error message.  Although it may appear
22004      obvious that what is meant is an operator and two values, the ISO
22005      C standard specifically requires that this be treated as erroneous.
22007      A "preprocessing token" is a "preprocessing number" if it begins
22008      with a digit and is followed by letters, underscores, digits,
22009      periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
22010      character sequences.  (In strict C89 mode, the sequences `p+',
22011      `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
22013      To make the above program fragment valid, place whitespace in
22014      front of the minus sign.  This whitespace will end the
22015      preprocessing number.
22017 \x1f
22018 File: gcc.info,  Node: Fixed Headers,  Next: Standard Libraries,  Prev: Incompatibilities,  Up: Trouble
22020 Fixed Header Files
22021 ==================
22023  GCC needs to install corrected versions of some system header files.
22024 This is because most target systems have some header files that won't
22025 work with GCC unless they are changed.  Some have bugs, some are
22026 incompatible with ISO C, and some depend on special features of other
22027 compilers.
22029  Installing GCC automatically creates and installs the fixed header
22030 files, by running a program called `fixincludes' (or for certain
22031 targets an alternative such as `fixinc.svr4').  Normally, you don't
22032 need to pay attention to this.  But there are cases where it doesn't do
22033 the right thing automatically.
22035    * If you update the system's header files, such as by installing a
22036      new system version, the fixed header files of GCC are not
22037      automatically updated.  The easiest way to update them is to
22038      reinstall GCC.  (If you want to be clever, look in the makefile
22039      and you can find a shortcut.)
22041    * On some systems, in particular SunOS 4, header file directories
22042      contain machine-specific symbolic links in certain places.  This
22043      makes it possible to share most of the header files among hosts
22044      running the same version of SunOS 4 on different machine models.
22046      The programs that fix the header files do not understand this
22047      special way of using symbolic links; therefore, the directory of
22048      fixed header files is good only for the machine model used to
22049      build it.
22051      In SunOS 4, only programs that look inside the kernel will notice
22052      the difference between machine models.  Therefore, for most
22053      purposes, you need not be concerned about this.
22055      It is possible to make separate sets of fixed header files for the
22056      different machine models, and arrange a structure of symbolic
22057      links so as to use the proper set, but you'll have to do this by
22058      hand.
22060    * On Lynxos, GCC by default does not fix the header files.  This is
22061      because bugs in the shell cause the `fixincludes' script to fail.
22063      This means you will encounter problems due to bugs in the system
22064      header files.  It may be no comfort that they aren't GCC's fault,
22065      but it does mean that there's nothing for us to do about them.
22067 \x1f
22068 File: gcc.info,  Node: Standard Libraries,  Next: Disappointments,  Prev: Fixed Headers,  Up: Trouble
22070 Standard Libraries
22071 ==================
22073  GCC by itself attempts to be a conforming freestanding implementation.
22074 *Note Language Standards Supported by GCC: Standards, for details of
22075 what this means.  Beyond the library facilities required of such an
22076 implementation, the rest of the C library is supplied by the vendor of
22077 the operating system.  If that C library doesn't conform to the C
22078 standards, then your programs might get warnings (especially when using
22079 `-Wall') that you don't expect.
22081  For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
22082 while the C standard says that `sprintf' returns an `int'.  The
22083 `fixincludes' program could make the prototype for this function match
22084 the Standard, but that would be wrong, since the function will still
22085 return `char *'.
22087  If you need a Standard compliant library, then you need to find one, as
22088 GCC does not provide one.  The GNU C library (called `glibc') provides
22089 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
22090 HURD-based GNU systems; no recent version of it supports other systems,
22091 though some very old versions did.  Version 2.2 of the GNU C library
22092 includes nearly complete C99 support.  You could also ask your
22093 operating system vendor if newer libraries are available.
22095 \x1f
22096 File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Standard Libraries,  Up: Trouble
22098 Disappointments and Misunderstandings
22099 =====================================
22101  These problems are perhaps regrettable, but we don't know any practical
22102 way around them.
22104    * Certain local variables aren't recognized by debuggers when you
22105      compile with optimization.
22107      This occurs because sometimes GCC optimizes the variable out of
22108      existence.  There is no way to tell the debugger how to compute the
22109      value such a variable "would have had", and it is not clear that
22110      would be desirable anyway.  So GCC simply does not mention the
22111      eliminated variable when it writes debugging information.
22113      You have to expect a certain amount of disagreement between the
22114      executable and your source code, when you use optimization.
22116    * Users often think it is a bug when GCC reports an error for code
22117      like this:
22119           int foo (struct mumble *);
22120           
22121           struct mumble { ... };
22122           
22123           int foo (struct mumble *x)
22124           { ... }
22126      This code really is erroneous, because the scope of `struct
22127      mumble' in the prototype is limited to the argument list
22128      containing it.  It does not refer to the `struct mumble' defined
22129      with file scope immediately below--they are two unrelated types
22130      with similar names in different scopes.
22132      But in the definition of `foo', the file-scope type is used
22133      because that is available to be inherited.  Thus, the definition
22134      and the prototype do not match, and you get an error.
22136      This behavior may seem silly, but it's what the ISO standard
22137      specifies.  It is easy enough for you to make your code work by
22138      moving the definition of `struct mumble' above the prototype.
22139      It's not worth being incompatible with ISO C just to avoid an
22140      error for the example shown above.
22142    * Accesses to bit-fields even in volatile objects works by accessing
22143      larger objects, such as a byte or a word.  You cannot rely on what
22144      size of object is accessed in order to read or write the
22145      bit-field; it may even vary for a given bit-field according to the
22146      precise usage.
22148      If you care about controlling the amount of memory that is
22149      accessed, use volatile but do not use bit-fields.
22151    * GCC comes with shell scripts to fix certain known problems in
22152      system header files.  They install corrected copies of various
22153      header files in a special directory where only GCC will normally
22154      look for them.  The scripts adapt to various systems by searching
22155      all the system header files for the problem cases that we know
22156      about.
22158      If new system header files are installed, nothing automatically
22159      arranges to update the corrected header files.  You will have to
22160      reinstall GCC to fix the new header files.  More specifically, go
22161      to the build directory and delete the files `stmp-fixinc' and
22162      `stmp-headers', and the subdirectory `include'; then do `make
22163      install' again.
22165    * On 68000 and x86 systems, for instance, you can get paradoxical
22166      results if you test the precise values of floating point numbers.
22167      For example, you can find that a floating point value which is not
22168      a NaN is not equal to itself.  This results from the fact that the
22169      floating point registers hold a few more bits of precision than
22170      fit in a `double' in memory.  Compiled code moves values between
22171      memory and floating point registers at its convenience, and moving
22172      them into memory truncates them.
22174      You can partially avoid this problem by using the `-ffloat-store'
22175      option (*note Optimize Options::).
22177    * On AIX and other platforms without weak symbol support, templates
22178      need to be instantiated explicitly and symbols for static members
22179      of templates will not be generated.
22181    * On AIX, GCC scans object files and library archives for static
22182      constructors and destructors when linking an application before the
22183      linker prunes unreferenced symbols.  This is necessary to prevent
22184      the AIX linker from mistakenly assuming that static constructor or
22185      destructor are unused and removing them before the scanning can
22186      occur.  All static constructors and destructors found will be
22187      referenced even though the modules in which they occur may not be
22188      used by the program.  This may lead to both increased executable
22189      size and unexpected symbol references.
22191 \x1f
22192 File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
22194 Common Misunderstandings with GNU C++
22195 =====================================
22197  C++ is a complex language and an evolving one, and its standard
22198 definition (the ISO C++ standard) was only recently completed.  As a
22199 result, your C++ compiler may occasionally surprise you, even when its
22200 behavior is correct.  This section discusses some areas that frequently
22201 give rise to questions of this sort.
22203 * Menu:
22205 * Static Definitions::  Static member declarations are not definitions
22206 * Name lookup::         Name lookup, templates, and accessing members of base classes
22207 * Temporaries::         Temporaries may vanish before you expect
22208 * Copy Assignment::     Copy Assignment operators copy virtual bases twice
22210 \x1f
22211 File: gcc.info,  Node: Static Definitions,  Next: Name lookup,  Up: C++ Misunderstandings
22213 Declare _and_ Define Static Members
22214 -----------------------------------
22216  When a class has static data members, it is not enough to _declare_
22217 the static member; you must also _define_ it.  For example:
22219      class Foo
22220      {
22221        ...
22222        void method();
22223        static int bar;
22224      };
22226  This declaration only establishes that the class `Foo' has an `int'
22227 named `Foo::bar', and a member function named `Foo::method'.  But you
22228 still need to define _both_ `method' and `bar' elsewhere.  According to
22229 the ISO standard, you must supply an initializer in one (and only one)
22230 source file, such as:
22232      int Foo::bar = 0;
22234  Other C++ compilers may not correctly implement the standard behavior.
22235 As a result, when you switch to `g++' from one of these compilers, you
22236 may discover that a program that appeared to work correctly in fact
22237 does not conform to the standard: `g++' reports as undefined symbols
22238 any static data members that lack definitions.
22240 \x1f
22241 File: gcc.info,  Node: Name lookup,  Next: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
22243 Name lookup, templates, and accessing members of base classes
22244 -------------------------------------------------------------
22246  The C++ standard prescribes that all names that are not dependent on
22247 template parameters are bound to their present definitions when parsing
22248 a template function or class.(1)  Only names that are dependent are
22249 looked up at the point of instantiation.  For example, consider
22251        void foo(double);
22252      
22253        struct A {
22254          template <typename T>
22255          void f () {
22256            foo (1);        // 1
22257            int i = N;      // 2
22258            T t;
22259            t.bar();        // 3
22260            foo (t);        // 4
22261          }
22262      
22263          static const int N;
22264        };
22266  Here, the names `foo' and `N' appear in a context that does not depend
22267 on the type of `T'.  The compiler will thus require that they are
22268 defined in the context of use in the template, not only before the
22269 point of instantiation, and will here use `::foo(double)' and `A::N',
22270 respectively.  In particular, it will convert the integer value to a
22271 `double' when passing it to `::foo(double)'.
22273  Conversely, `bar' and the call to `foo' in the fourth marked line are
22274 used in contexts that do depend on the type of `T', so they are only
22275 looked up at the point of instantiation, and you can provide
22276 declarations for them after declaring the template, but before
22277 instantiating it.  In particular, if you instantiate `A::f<int>', the
22278 last line will call an overloaded `::foo(int)' if one was provided,
22279 even if after the declaration of `struct A'.
22281  This distinction between lookup of dependent and non-dependent names is
22282 called two-stage (or dependent) name lookup.  G++ implements it since
22283 version 3.4.
22285  Two-stage name lookup sometimes leads to situations with behavior
22286 different from non-template codes. The most common is probably this:
22288        template <typename T> struct Base {
22289          int i;
22290        };
22291      
22292        template <typename T> struct Derived : public Base<T> {
22293          int get_i() { return i; }
22294        };
22296  In `get_i()', `i' is not used in a dependent context, so the compiler
22297 will look for a name declared at the enclosing namespace scope (which
22298 is the global scope here).  It will not look into the base class, since
22299 that is dependent and you may declare specializations of `Base' even
22300 after declaring `Derived', so the compiler can't really know what `i'
22301 would refer to.  If there is no global variable `i', then you will get
22302 an error message.
22304  In order to make it clear that you want the member of the base class,
22305 you need to defer lookup until instantiation time, at which the base
22306 class is known.  For this, you need to access `i' in a dependent
22307 context, by either using `this->i' (remember that `this' is of type
22308 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
22309 Alternatively, `Base<T>::i' might be brought into scope by a
22310 `using'-declaration.
22312  Another, similar example involves calling member functions of a base
22313 class:
22315        template <typename T> struct Base {
22316            int f();
22317        };
22318      
22319        template <typename T> struct Derived : Base<T> {
22320            int g() { return f(); };
22321        };
22323  Again, the call to `f()' is not dependent on template arguments (there
22324 are no arguments that depend on the type `T', and it is also not
22325 otherwise specified that the call should be in a dependent context).
22326 Thus a global declaration of such a function must be available, since
22327 the one in the base class is not visible until instantiation time.  The
22328 compiler will consequently produce the following error message:
22330        x.cc: In member function `int Derived<T>::g()':
22331        x.cc:6: error: there are no arguments to `f' that depend on a template
22332           parameter, so a declaration of `f' must be available
22333        x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
22334           allowing the use of an undeclared name is deprecated)
22336  To make the code valid either use `this->f()', or `Base<T>::f()'.
22337 Using the `-fpermissive' flag will also let the compiler accept the
22338 code, by marking all function calls for which no declaration is visible
22339 at the time of definition of the template for later lookup at
22340 instantiation time, as if it were a dependent call.  We do not
22341 recommend using `-fpermissive' to work around invalid code, and it will
22342 also only catch cases where functions in base classes are called, not
22343 where variables in base classes are used (as in the example above).
22345  Note that some compilers (including G++ versions prior to 3.4) get
22346 these examples wrong and accept above code without an error.  Those
22347 compilers do not implement two-stage name lookup correctly.
22349  ---------- Footnotes ----------
22351  (1) The C++ standard just uses the term "dependent" for names that
22352 depend on the type or value of template parameters.  This shorter term
22353 will also be used in the rest of this section.
22355 \x1f
22356 File: gcc.info,  Node: Temporaries,  Next: Copy Assignment,  Prev: Name lookup,  Up: C++ Misunderstandings
22358 Temporaries May Vanish Before You Expect
22359 ----------------------------------------
22361  It is dangerous to use pointers or references to _portions_ of a
22362 temporary object.  The compiler may very well delete the object before
22363 you expect it to, leaving a pointer to garbage.  The most common place
22364 where this problem crops up is in classes like string classes,
22365 especially ones that define a conversion function to type `char *' or
22366 `const char *'--which is one reason why the standard `string' class
22367 requires you to call the `c_str' member function.  However, any class
22368 that returns a pointer to some internal structure is potentially
22369 subject to this problem.
22371  For example, a program may use a function `strfunc' that returns
22372 `string' objects, and another function `charfunc' that operates on
22373 pointers to `char':
22375      string strfunc ();
22376      void charfunc (const char *);
22377      
22378      void
22379      f ()
22380      {
22381        const char *p = strfunc().c_str();
22382        ...
22383        charfunc (p);
22384        ...
22385        charfunc (p);
22386      }
22388 In this situation, it may seem reasonable to save a pointer to the C
22389 string returned by the `c_str' member function and use that rather than
22390 call `c_str' repeatedly.  However, the temporary string created by the
22391 call to `strfunc' is destroyed after `p' is initialized, at which point
22392 `p' is left pointing to freed memory.
22394  Code like this may run successfully under some other compilers,
22395 particularly obsolete cfront-based compilers that delete temporaries
22396 along with normal local variables.  However, the GNU C++ behavior is
22397 standard-conforming, so if your program depends on late destruction of
22398 temporaries it is not portable.
22400  The safe way to write such code is to give the temporary a name, which
22401 forces it to remain until the end of the scope of the name.  For
22402 example:
22404      const string& tmp = strfunc ();
22405      charfunc (tmp.c_str ());
22407 \x1f
22408 File: gcc.info,  Node: Copy Assignment,  Prev: Temporaries,  Up: C++ Misunderstandings
22410 Implicit Copy-Assignment for Virtual Bases
22411 ------------------------------------------
22413  When a base class is virtual, only one subobject of the base class
22414 belongs to each full object.  Also, the constructors and destructors are
22415 invoked only once, and called from the most-derived class.  However,
22416 such objects behave unspecified when being assigned.  For example:
22418      struct Base{
22419        char *name;
22420        Base(char *n) : name(strdup(n)){}
22421        Base& operator= (const Base& other){
22422         free (name);
22423         name = strdup (other.name);
22424        }
22425      };
22426      
22427      struct A:virtual Base{
22428        int val;
22429        A():Base("A"){}
22430      };
22431      
22432      struct B:virtual Base{
22433        int bval;
22434        B():Base("B"){}
22435      };
22436      
22437      struct Derived:public A, public B{
22438        Derived():Base("Derived"){}
22439      };
22440      
22441      void func(Derived &d1, Derived &d2)
22442      {
22443        d1 = d2;
22444      }
22446  The C++ standard specifies that `Base::Base' is only called once when
22447 constructing or copy-constructing a Derived object.  It is unspecified
22448 whether `Base::operator=' is called more than once when the implicit
22449 copy-assignment for Derived objects is invoked (as it is inside `func'
22450 in the example).
22452  G++ implements the "intuitive" algorithm for copy-assignment: assign
22453 all direct bases, then assign all members.  In that algorithm, the
22454 virtual base subobject can be encountered more than once.  In the
22455 example, copying proceeds in the following order: `val', `name' (via
22456 `strdup'), `bval', and `name' again.
22458  If application code relies on copy-assignment, a user-defined
22459 copy-assignment operator removes any uncertainties.  With such an
22460 operator, the application can define whether and how the virtual base
22461 subobject is assigned.
22463 \x1f
22464 File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
22466 Caveats of using `protoize'
22467 ===========================
22469  The conversion programs `protoize' and `unprotoize' can sometimes
22470 change a source file in a way that won't work unless you rearrange it.
22472    * `protoize' can insert references to a type name or type tag before
22473      the definition, or in a file where they are not defined.
22475      If this happens, compiler error messages should show you where the
22476      new references are, so fixing the file by hand is straightforward.
22478    * There are some C constructs which `protoize' cannot figure out.
22479      For example, it can't determine argument types for declaring a
22480      pointer-to-function variable; this you must do by hand.  `protoize'
22481      inserts a comment containing `???' each time it finds such a
22482      variable; so you can find all such variables by searching for this
22483      string.  ISO C does not require declaring the argument types of
22484      pointer-to-function types.
22486    * Using `unprotoize' can easily introduce bugs.  If the program
22487      relied on prototypes to bring about conversion of arguments, these
22488      conversions will not take place in the program without prototypes.
22489      One case in which you can be sure `unprotoize' is safe is when you
22490      are removing prototypes that were made with `protoize'; if the
22491      program worked before without any prototypes, it will work again
22492      without them.
22494      You can find all the places where this problem might occur by
22495      compiling the program with the `-Wconversion' option.  It prints a
22496      warning whenever an argument is converted.
22498    * Both conversion programs can be confused if there are macro calls
22499      in and around the text to be converted.  In other words, the
22500      standard syntax for a declaration or definition must not result
22501      from expanding a macro.  This problem is inherent in the design of
22502      C and cannot be fixed.  If only a few functions have confusing
22503      macro calls, you can easily convert them manually.
22505    * `protoize' cannot get the argument types for a function whose
22506      definition was not actually compiled due to preprocessing
22507      conditionals.  When this happens, `protoize' changes nothing in
22508      regard to such a function.  `protoize' tries to detect such
22509      instances and warn about them.
22511      You can generally work around this problem by using `protoize' step
22512      by step, each time specifying a different set of `-D' options for
22513      compilation, until all of the functions have been converted.
22514      There is no automatic way to verify that you have got them all,
22515      however.
22517    * Confusion may result if there is an occasion to convert a function
22518      declaration or definition in a region of source code where there
22519      is more than one formal parameter list present.  Thus, attempts to
22520      convert code containing multiple (conditionally compiled) versions
22521      of a single function header (in the same vicinity) may not produce
22522      the desired (or expected) results.
22524      If you plan on converting source files which contain such code, it
22525      is recommended that you first make sure that each conditionally
22526      compiled region of source code which contains an alternative
22527      function header also contains at least one additional follower
22528      token (past the final right parenthesis of the function header).
22529      This should circumvent the problem.
22531    * `unprotoize' can become confused when trying to convert a function
22532      definition or declaration which contains a declaration for a
22533      pointer-to-function formal argument which has the same name as the
22534      function being defined or declared.  We recommend you avoid such
22535      choices of formal parameter names.
22537    * You might also want to correct some of the indentation by hand and
22538      break long lines.  (The conversion programs don't write lines
22539      longer than eighty characters in any case.)
22541 \x1f
22542 File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
22544 Certain Changes We Don't Want to Make
22545 =====================================
22547  This section lists changes that people frequently request, but which
22548 we do not make because we think GCC is better without them.
22550    * Checking the number and type of arguments to a function which has
22551      an old-fashioned definition and no prototype.
22553      Such a feature would work only occasionally--only for calls that
22554      appear in the same file as the called function, following the
22555      definition.  The only way to check all calls reliably is to add a
22556      prototype for the function.  But adding a prototype eliminates the
22557      motivation for this feature.  So the feature is not worthwhile.
22559    * Warning about using an expression whose type is signed as a shift
22560      count.
22562      Shift count operands are probably signed more often than unsigned.
22563      Warning about this would cause far more annoyance than good.
22565    * Warning about assigning a signed value to an unsigned variable.
22567      Such assignments must be very common; warning about them would
22568      cause more annoyance than good.
22570    * Warning when a non-void function value is ignored.
22572      C contains many standard functions that return a value that most
22573      programs choose to ignore.  One obvious example is `printf'.
22574      Warning about this practice only leads the defensive programmer to
22575      clutter programs with dozens of casts to `void'.  Such casts are
22576      required so frequently that they become visual noise.  Writing
22577      those casts becomes so automatic that they no longer convey useful
22578      information about the intentions of the programmer.  For functions
22579      where the return value should never be ignored, use the
22580      `warn_unused_result' function attribute (*note Function
22581      Attributes::).
22583    * Making `-fshort-enums' the default.
22585      This would cause storage layout to be incompatible with most other
22586      C compilers.  And it doesn't seem very important, given that you
22587      can get the same result in other ways.  The case where it matters
22588      most is when the enumeration-valued object is inside a structure,
22589      and in that case you can specify a field width explicitly.
22591    * Making bit-fields unsigned by default on particular machines where
22592      "the ABI standard" says to do so.
22594      The ISO C standard leaves it up to the implementation whether a
22595      bit-field declared plain `int' is signed or not.  This in effect
22596      creates two alternative dialects of C.
22598      The GNU C compiler supports both dialects; you can specify the
22599      signed dialect with `-fsigned-bitfields' and the unsigned dialect
22600      with `-funsigned-bitfields'.  However, this leaves open the
22601      question of which dialect to use by default.
22603      Currently, the preferred dialect makes plain bit-fields signed,
22604      because this is simplest.  Since `int' is the same as `signed int'
22605      in every other context, it is cleanest for them to be the same in
22606      bit-fields as well.
22608      Some computer manufacturers have published Application Binary
22609      Interface standards which specify that plain bit-fields should be
22610      unsigned.  It is a mistake, however, to say anything about this
22611      issue in an ABI.  This is because the handling of plain bit-fields
22612      distinguishes two dialects of C.  Both dialects are meaningful on
22613      every type of machine.  Whether a particular object file was
22614      compiled using signed bit-fields or unsigned is of no concern to
22615      other object files, even if they access the same bit-fields in the
22616      same data structures.
22618      A given program is written in one or the other of these two
22619      dialects.  The program stands a chance to work on most any machine
22620      if it is compiled with the proper dialect.  It is unlikely to work
22621      at all if compiled with the wrong dialect.
22623      Many users appreciate the GNU C compiler because it provides an
22624      environment that is uniform across machines.  These users would be
22625      inconvenienced if the compiler treated plain bit-fields
22626      differently on certain machines.
22628      Occasionally users write programs intended only for a particular
22629      machine type.  On these occasions, the users would benefit if the
22630      GNU C compiler were to support by default the same dialect as the
22631      other compilers on that machine.  But such applications are rare.
22632      And users writing a program to run on more than one type of
22633      machine cannot possibly benefit from this kind of compatibility.
22635      This is why GCC does and will treat plain bit-fields in the same
22636      fashion on all types of machines (by default).
22638      There are some arguments for making bit-fields unsigned by default
22639      on all machines.  If, for example, this becomes a universal de
22640      facto standard, it would make sense for GCC to go along with it.
22641      This is something to be considered in the future.
22643      (Of course, users strongly concerned about portability should
22644      indicate explicitly in each bit-field whether it is signed or not.
22645      In this way, they write programs which have the same meaning in
22646      both C dialects.)
22648    * Undefining `__STDC__' when `-ansi' is not used.
22650      Currently, GCC defines `__STDC__' unconditionally.  This provides
22651      good results in practice.
22653      Programmers normally use conditionals on `__STDC__' to ask whether
22654      it is safe to use certain features of ISO C, such as function
22655      prototypes or ISO token concatenation.  Since plain `gcc' supports
22656      all the features of ISO C, the correct answer to these questions is
22657      "yes".
22659      Some users try to use `__STDC__' to check for the availability of
22660      certain library facilities.  This is actually incorrect usage in
22661      an ISO C program, because the ISO C standard says that a conforming
22662      freestanding implementation should define `__STDC__' even though it
22663      does not have the library facilities.  `gcc -ansi -pedantic' is a
22664      conforming freestanding implementation, and it is therefore
22665      required to define `__STDC__', even though it does not come with
22666      an ISO C library.
22668      Sometimes people say that defining `__STDC__' in a compiler that
22669      does not completely conform to the ISO C standard somehow violates
22670      the standard.  This is illogical.  The standard is a standard for
22671      compilers that claim to support ISO C, such as `gcc -ansi'--not
22672      for other compilers such as plain `gcc'.  Whatever the ISO C
22673      standard says is relevant to the design of plain `gcc' without
22674      `-ansi' only for pragmatic reasons, not as a requirement.
22676      GCC normally defines `__STDC__' to be 1, and in addition defines
22677      `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
22678      option for strict conformance to some version of ISO C.  On some
22679      hosts, system include files use a different convention, where
22680      `__STDC__' is normally 0, but is 1 if the user specifies strict
22681      conformance to the C Standard.  GCC follows the host convention
22682      when processing system include files, but when processing user
22683      files it follows the usual GNU C convention.
22685    * Undefining `__STDC__' in C++.
22687      Programs written to compile with C++-to-C translators get the
22688      value of `__STDC__' that goes with the C compiler that is
22689      subsequently used.  These programs must test `__STDC__' to
22690      determine what kind of C preprocessor that compiler uses: whether
22691      they should concatenate tokens in the ISO C fashion or in the
22692      traditional fashion.
22694      These programs work properly with GNU C++ if `__STDC__' is defined.
22695      They would not work otherwise.
22697      In addition, many header files are written to provide prototypes
22698      in ISO C but not in traditional C.  Many of these header files can
22699      work without change in C++ provided `__STDC__' is defined.  If
22700      `__STDC__' is not defined, they will all fail, and will all need
22701      to be changed to test explicitly for C++ as well.
22703    * Deleting "empty" loops.
22705      Historically, GCC has not deleted "empty" loops under the
22706      assumption that the most likely reason you would put one in a
22707      program is to have a delay, so deleting them will not make real
22708      programs run any faster.
22710      However, the rationale here is that optimization of a nonempty loop
22711      cannot produce an empty one, which holds for C but is not always
22712      the case for C++.
22714      Moreover, with `-funroll-loops' small "empty" loops are already
22715      removed, so the current behavior is both sub-optimal and
22716      inconsistent and will change in the future.
22718    * Making side effects happen in the same order as in some other
22719      compiler.
22721      It is never safe to depend on the order of evaluation of side
22722      effects.  For example, a function call like this may very well
22723      behave differently from one compiler to another:
22725           void func (int, int);
22726           
22727           int i = 2;
22728           func (i++, i++);
22730      There is no guarantee (in either the C or the C++ standard language
22731      definitions) that the increments will be evaluated in any
22732      particular order.  Either increment might happen first.  `func'
22733      might get the arguments `2, 3', or it might get `3, 2', or even
22734      `2, 2'.
22736    * Not allowing structures with volatile fields in registers.
22738      Strictly speaking, there is no prohibition in the ISO C standard
22739      against allowing structures with volatile fields in registers, but
22740      it does not seem to make any sense and is probably not what you
22741      wanted to do.  So the compiler will give an error message in this
22742      case.
22744    * Making certain warnings into errors by default.
22746      Some ISO C testsuites report failure when the compiler does not
22747      produce an error message for a certain program.
22749      ISO C requires a "diagnostic" message for certain kinds of invalid
22750      programs, but a warning is defined by GCC to count as a
22751      diagnostic.  If GCC produces a warning but not an error, that is
22752      correct ISO C support.  If testsuites call this "failure", they
22753      should be run with the GCC option `-pedantic-errors', which will
22754      turn these warnings into errors.
22757 \x1f
22758 File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
22760 Warning Messages and Error Messages
22761 ===================================
22763  The GNU compiler can produce two kinds of diagnostics: errors and
22764 warnings.  Each kind has a different purpose:
22766      "Errors" report problems that make it impossible to compile your
22767      program.  GCC reports errors with the source file name and line
22768      number where the problem is apparent.
22770      "Warnings" report other unusual conditions in your code that _may_
22771      indicate a problem, although compilation can (and does) proceed.
22772      Warning messages also report the source file name and line number,
22773      but include the text `warning:' to distinguish them from error
22774      messages.
22776  Warnings may indicate danger points where you should check to make sure
22777 that your program really does what you intend; or the use of obsolete
22778 features; or the use of nonstandard features of GNU C or C++.  Many
22779 warnings are issued only if you ask for them, with one of the `-W'
22780 options (for instance, `-Wall' requests a variety of useful warnings).
22782  GCC always tries to compile your program if possible; it never
22783 gratuitously rejects a program whose meaning is clear merely because
22784 (for instance) it fails to conform to a standard.  In some cases,
22785 however, the C and C++ standards specify that certain extensions are
22786 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
22787 The `-pedantic' option tells GCC to issue warnings in such cases;
22788 `-pedantic-errors' says to make them errors instead.  This does not
22789 mean that _all_ non-ISO constructs get warnings or errors.
22791  *Note Options to Request or Suppress Warnings: Warning Options, for
22792 more detail on these and related command-line options.
22794 \x1f
22795 File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
22797 Reporting Bugs
22798 **************
22800  Your bug reports play an essential role in making GCC reliable.
22802  When you encounter a problem, the first thing to do is to see if it is
22803 already known.  *Note Trouble::.  If it isn't known, then you should
22804 report the problem.
22806 * Menu:
22808 * Criteria:  Bug Criteria.   Have you really found a bug?
22809 * Reporting: Bug Reporting.  How to report a bug effectively.
22810 * Known: Trouble.            Known problems.
22811 * Help: Service.             Where to ask for help.
22813 \x1f
22814 File: gcc.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Bugs
22816 Have You Found a Bug?
22817 =====================
22819  If you are not sure whether you have found a bug, here are some
22820 guidelines:
22822    * If the compiler gets a fatal signal, for any input whatever, that
22823      is a compiler bug.  Reliable compilers never crash.
22825    * If the compiler produces invalid assembly code, for any input
22826      whatever (except an `asm' statement), that is a compiler bug,
22827      unless the compiler reports errors (not just warnings) which would
22828      ordinarily prevent the assembler from being run.
22830    * If the compiler produces valid assembly code that does not
22831      correctly execute the input source code, that is a compiler bug.
22833      However, you must double-check to make sure, because you may have a
22834      program whose behavior is undefined, which happened by chance to
22835      give the desired results with another C or C++ compiler.
22837      For example, in many nonoptimizing compilers, you can write `x;'
22838      at the end of a function instead of `return x;', with the same
22839      results.  But the value of the function is undefined if `return'
22840      is omitted; it is not a bug when GCC produces different results.
22842      Problems often result from expressions with two increment
22843      operators, as in `f (*p++, *p++)'.  Your previous compiler might
22844      have interpreted that expression the way you intended; GCC might
22845      interpret it another way.  Neither compiler is wrong.  The bug is
22846      in your code.
22848      After you have localized the error to a single source line, it
22849      should be easy to check for these things.  If your program is
22850      correct and well defined, you have found a compiler bug.
22852    * If the compiler produces an error message for valid input, that is
22853      a compiler bug.
22855    * If the compiler does not produce an error message for invalid
22856      input, that is a compiler bug.  However, you should note that your
22857      idea of "invalid input" might be someone else's idea of "an
22858      extension" or "support for traditional practice".
22860    * If you are an experienced user of one of the languages GCC
22861      supports, your suggestions for improvement of GCC are welcome in
22862      any case.
22864 \x1f
22865 File: gcc.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
22867 How and where to Report Bugs
22868 ============================
22870  Bugs should be reported to the GCC bug database.  Please refer to
22871 `http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
22872 submit bug reports.  Copies of this file in HTML (`bugs.html') and
22873 plain text (`BUGS') are also part of GCC releases.
22875 \x1f
22876 File: gcc.info,  Node: Service,  Next: Contributing,  Prev: Bugs,  Up: Top
22878 How To Get Help with GCC
22879 ************************
22881  If you need help installing, using or changing GCC, there are two ways
22882 to find it:
22884    * Send a message to a suitable network mailing list.  First try
22885      <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
22886      that brings no response, try <gcc@gcc.gnu.org>.  For help changing
22887      GCC, ask <gcc@gcc.gnu.org>.  If you think you have found a bug in
22888      GCC, please report it following the instructions at *note Bug
22889      Reporting::.
22891    * Look in the service directory for someone who might help you for a
22892      fee.  The service directory is found at
22893      `http://www.gnu.org/prep/service.html'.
22895  For further information, see `http://gcc.gnu.org/faq.html#support'.
22897 \x1f
22898 File: gcc.info,  Node: Contributing,  Next: Funding,  Prev: Service,  Up: Top
22900 Contributing to GCC Development
22901 *******************************
22903  If you would like to help pretest GCC releases to assure they work
22904 well, current development sources are available by CVS (see
22905 `http://gcc.gnu.org/cvs.html').  Source and binary snapshots are also
22906 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
22908  If you would like to work on improvements to GCC, please read the
22909 advice at these URLs:
22911      `http://gcc.gnu.org/contribute.html'
22912      `http://gcc.gnu.org/contributewhy.html'
22914 for information on how to make useful contributions and avoid
22915 duplication of effort.  Suggested projects are listed at
22916 `http://gcc.gnu.org/projects/'.
22918 \x1f
22919 File: gcc.info,  Node: Funding,  Next: GNU Project,  Prev: Contributing,  Up: Top
22921 Funding Free Software
22922 *********************
22924  If you want to have more free software a few years from now, it makes
22925 sense for you to help encourage people to contribute funds for its
22926 development.  The most effective approach known is to encourage
22927 commercial redistributors to donate.
22929  Users of free software systems can boost the pace of development by
22930 encouraging for-a-fee distributors to donate part of their selling price
22931 to free software developers--the Free Software Foundation, and others.
22933  The way to convince distributors to do this is to demand it and expect
22934 it from them.  So when you compare distributors, judge them partly by
22935 how much they give to free software development.  Show distributors
22936 they must compete to be the one who gives the most.
22938  To make this approach work, you must insist on numbers that you can
22939 compare, such as, "We will donate ten dollars to the Frobnitz project
22940 for each disk sold."  Don't be satisfied with a vague promise, such as
22941 "A portion of the profits are donated," since it doesn't give a basis
22942 for comparison.
22944  Even a precise fraction "of the profits from this disk" is not very
22945 meaningful, since creative accounting and unrelated business decisions
22946 can greatly alter what fraction of the sales price counts as profit.
22947 If the price you pay is $50, ten percent of the profit is probably less
22948 than a dollar; it might be a few cents, or nothing at all.
22950  Some redistributors do development work themselves.  This is useful
22951 too; but to keep everyone honest, you need to inquire how much they do,
22952 and what kind.  Some kinds of development make much more long-term
22953 difference than others.  For example, maintaining a separate version of
22954 a program contributes very little; maintaining the standard version of a
22955 program for the whole community contributes much.  Easy new ports
22956 contribute little, since someone else would surely do them; difficult
22957 ports such as adding a new CPU to the GNU Compiler Collection
22958 contribute more; major new features or packages contribute the most.
22960  By establishing the idea that supporting further development is "the
22961 proper thing to do" when distributing free software for a fee, we can
22962 assure a steady flow of resources into making more free software.
22964      Copyright (C) 1994 Free Software Foundation, Inc.
22965      Verbatim copying and redistribution of this section is permitted
22966      without royalty; alteration is not permitted.
22968 \x1f
22969 File: gcc.info,  Node: GNU Project,  Next: Copying,  Prev: Funding,  Up: Top
22971 The GNU Project and GNU/Linux
22972 *****************************
22974  The GNU Project was launched in 1984 to develop a complete Unix-like
22975 operating system which is free software: the GNU system.  (GNU is a
22976 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
22977 Variants of the GNU operating system, which use the kernel Linux, are
22978 now widely used; though these systems are often referred to as "Linux",
22979 they are more accurately called GNU/Linux systems.
22981  For more information, see:
22982      `http://www.gnu.org/'
22983      `http://www.gnu.org/gnu/linux-and-gnu.html'
22985 \x1f
22986 File: gcc.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: GNU Project,  Up: Top
22988 GNU GENERAL PUBLIC LICENSE
22989 **************************
22991                          Version 2, June 1991
22992      Copyright (C) 1989, 1991 Free Software Foundation, Inc.
22993      59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
22994      
22995      Everyone is permitted to copy and distribute verbatim copies
22996      of this license document, but changing it is not allowed.
22998 Preamble
22999 ========
23001  The licenses for most software are designed to take away your freedom
23002 to share and change it.  By contrast, the GNU General Public License is
23003 intended to guarantee your freedom to share and change free
23004 software--to make sure the software is free for all its users.  This
23005 General Public License applies to most of the Free Software
23006 Foundation's software and to any other program whose authors commit to
23007 using it.  (Some other Free Software Foundation software is covered by
23008 the GNU Library General Public License instead.)  You can apply it to
23009 your programs, too.
23011  When we speak of free software, we are referring to freedom, not
23012 price.  Our General Public Licenses are designed to make sure that you
23013 have the freedom to distribute copies of free software (and charge for
23014 this service if you wish), that you receive source code or can get it
23015 if you want it, that you can change the software or use pieces of it in
23016 new free programs; and that you know you can do these things.
23018  To protect your rights, we need to make restrictions that forbid
23019 anyone to deny you these rights or to ask you to surrender the rights.
23020 These restrictions translate to certain responsibilities for you if you
23021 distribute copies of the software, or if you modify it.
23023  For example, if you distribute copies of such a program, whether
23024 gratis or for a fee, you must give the recipients all the rights that
23025 you have.  You must make sure that they, too, receive or can get the
23026 source code.  And you must show them these terms so they know their
23027 rights.
23029  We protect your rights with two steps: (1) copyright the software, and
23030 (2) offer you this license which gives you legal permission to copy,
23031 distribute and/or modify the software.
23033  Also, for each author's protection and ours, we want to make certain
23034 that everyone understands that there is no warranty for this free
23035 software.  If the software is modified by someone else and passed on, we
23036 want its recipients to know that what they have is not the original, so
23037 that any problems introduced by others will not reflect on the original
23038 authors' reputations.
23040  Finally, any free program is threatened constantly by software
23041 patents.  We wish to avoid the danger that redistributors of a free
23042 program will individually obtain patent licenses, in effect making the
23043 program proprietary.  To prevent this, we have made it clear that any
23044 patent must be licensed for everyone's free use or not licensed at all.
23046  The precise terms and conditions for copying, distribution and
23047 modification follow.
23049     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
23050   0. This License applies to any program or other work which contains a
23051      notice placed by the copyright holder saying it may be distributed
23052      under the terms of this General Public License.  The "Program",
23053      below, refers to any such program or work, and a "work based on
23054      the Program" means either the Program or any derivative work under
23055      copyright law: that is to say, a work containing the Program or a
23056      portion of it, either verbatim or with modifications and/or
23057      translated into another language.  (Hereinafter, translation is
23058      included without limitation in the term "modification".)  Each
23059      licensee is addressed as "you".
23061      Activities other than copying, distribution and modification are
23062      not covered by this License; they are outside its scope.  The act
23063      of running the Program is not restricted, and the output from the
23064      Program is covered only if its contents constitute a work based on
23065      the Program (independent of having been made by running the
23066      Program).  Whether that is true depends on what the Program does.
23068   1. You may copy and distribute verbatim copies of the Program's
23069      source code as you receive it, in any medium, provided that you
23070      conspicuously and appropriately publish on each copy an appropriate
23071      copyright notice and disclaimer of warranty; keep intact all the
23072      notices that refer to this License and to the absence of any
23073      warranty; and give any other recipients of the Program a copy of
23074      this License along with the Program.
23076      You may charge a fee for the physical act of transferring a copy,
23077      and you may at your option offer warranty protection in exchange
23078      for a fee.
23080   2. You may modify your copy or copies of the Program or any portion
23081      of it, thus forming a work based on the Program, and copy and
23082      distribute such modifications or work under the terms of Section 1
23083      above, provided that you also meet all of these conditions:
23085        a. You must cause the modified files to carry prominent notices
23086           stating that you changed the files and the date of any change.
23088        b. You must cause any work that you distribute or publish, that
23089           in whole or in part contains or is derived from the Program
23090           or any part thereof, to be licensed as a whole at no charge
23091           to all third parties under the terms of this License.
23093        c. If the modified program normally reads commands interactively
23094           when run, you must cause it, when started running for such
23095           interactive use in the most ordinary way, to print or display
23096           an announcement including an appropriate copyright notice and
23097           a notice that there is no warranty (or else, saying that you
23098           provide a warranty) and that users may redistribute the
23099           program under these conditions, and telling the user how to
23100           view a copy of this License.  (Exception: if the Program
23101           itself is interactive but does not normally print such an
23102           announcement, your work based on the Program is not required
23103           to print an announcement.)
23105      These requirements apply to the modified work as a whole.  If
23106      identifiable sections of that work are not derived from the
23107      Program, and can be reasonably considered independent and separate
23108      works in themselves, then this License, and its terms, do not
23109      apply to those sections when you distribute them as separate
23110      works.  But when you distribute the same sections as part of a
23111      whole which is a work based on the Program, the distribution of
23112      the whole must be on the terms of this License, whose permissions
23113      for other licensees extend to the entire whole, and thus to each
23114      and every part regardless of who wrote it.
23116      Thus, it is not the intent of this section to claim rights or
23117      contest your rights to work written entirely by you; rather, the
23118      intent is to exercise the right to control the distribution of
23119      derivative or collective works based on the Program.
23121      In addition, mere aggregation of another work not based on the
23122      Program with the Program (or with a work based on the Program) on
23123      a volume of a storage or distribution medium does not bring the
23124      other work under the scope of this License.
23126   3. You may copy and distribute the Program (or a work based on it,
23127      under Section 2) in object code or executable form under the terms
23128      of Sections 1 and 2 above provided that you also do one of the
23129      following:
23131        a. Accompany it with the complete corresponding machine-readable
23132           source code, which must be distributed under the terms of
23133           Sections 1 and 2 above on a medium customarily used for
23134           software interchange; or,
23136        b. Accompany it with a written offer, valid for at least three
23137           years, to give any third party, for a charge no more than your
23138           cost of physically performing source distribution, a complete
23139           machine-readable copy of the corresponding source code, to be
23140           distributed under the terms of Sections 1 and 2 above on a
23141           medium customarily used for software interchange; or,
23143        c. Accompany it with the information you received as to the offer
23144           to distribute corresponding source code.  (This alternative is
23145           allowed only for noncommercial distribution and only if you
23146           received the program in object code or executable form with
23147           such an offer, in accord with Subsection b above.)
23149      The source code for a work means the preferred form of the work for
23150      making modifications to it.  For an executable work, complete
23151      source code means all the source code for all modules it contains,
23152      plus any associated interface definition files, plus the scripts
23153      used to control compilation and installation of the executable.
23154      However, as a special exception, the source code distributed need
23155      not include anything that is normally distributed (in either
23156      source or binary form) with the major components (compiler,
23157      kernel, and so on) of the operating system on which the executable
23158      runs, unless that component itself accompanies the executable.
23160      If distribution of executable or object code is made by offering
23161      access to copy from a designated place, then offering equivalent
23162      access to copy the source code from the same place counts as
23163      distribution of the source code, even though third parties are not
23164      compelled to copy the source along with the object code.
23166   4. You may not copy, modify, sublicense, or distribute the Program
23167      except as expressly provided under this License.  Any attempt
23168      otherwise to copy, modify, sublicense or distribute the Program is
23169      void, and will automatically terminate your rights under this
23170      License.  However, parties who have received copies, or rights,
23171      from you under this License will not have their licenses
23172      terminated so long as such parties remain in full compliance.
23174   5. You are not required to accept this License, since you have not
23175      signed it.  However, nothing else grants you permission to modify
23176      or distribute the Program or its derivative works.  These actions
23177      are prohibited by law if you do not accept this License.
23178      Therefore, by modifying or distributing the Program (or any work
23179      based on the Program), you indicate your acceptance of this
23180      License to do so, and all its terms and conditions for copying,
23181      distributing or modifying the Program or works based on it.
23183   6. Each time you redistribute the Program (or any work based on the
23184      Program), the recipient automatically receives a license from the
23185      original licensor to copy, distribute or modify the Program
23186      subject to these terms and conditions.  You may not impose any
23187      further restrictions on the recipients' exercise of the rights
23188      granted herein.  You are not responsible for enforcing compliance
23189      by third parties to this License.
23191   7. If, as a consequence of a court judgment or allegation of patent
23192      infringement or for any other reason (not limited to patent
23193      issues), conditions are imposed on you (whether by court order,
23194      agreement or otherwise) that contradict the conditions of this
23195      License, they do not excuse you from the conditions of this
23196      License.  If you cannot distribute so as to satisfy simultaneously
23197      your obligations under this License and any other pertinent
23198      obligations, then as a consequence you may not distribute the
23199      Program at all.  For example, if a patent license would not permit
23200      royalty-free redistribution of the Program by all those who
23201      receive copies directly or indirectly through you, then the only
23202      way you could satisfy both it and this License would be to refrain
23203      entirely from distribution of the Program.
23205      If any portion of this section is held invalid or unenforceable
23206      under any particular circumstance, the balance of the section is
23207      intended to apply and the section as a whole is intended to apply
23208      in other circumstances.
23210      It is not the purpose of this section to induce you to infringe any
23211      patents or other property right claims or to contest validity of
23212      any such claims; this section has the sole purpose of protecting
23213      the integrity of the free software distribution system, which is
23214      implemented by public license practices.  Many people have made
23215      generous contributions to the wide range of software distributed
23216      through that system in reliance on consistent application of that
23217      system; it is up to the author/donor to decide if he or she is
23218      willing to distribute software through any other system and a
23219      licensee cannot impose that choice.
23221      This section is intended to make thoroughly clear what is believed
23222      to be a consequence of the rest of this License.
23224   8. If the distribution and/or use of the Program is restricted in
23225      certain countries either by patents or by copyrighted interfaces,
23226      the original copyright holder who places the Program under this
23227      License may add an explicit geographical distribution limitation
23228      excluding those countries, so that distribution is permitted only
23229      in or among countries not thus excluded.  In such case, this
23230      License incorporates the limitation as if written in the body of
23231      this License.
23233   9. The Free Software Foundation may publish revised and/or new
23234      versions of the General Public License from time to time.  Such
23235      new versions will be similar in spirit to the present version, but
23236      may differ in detail to address new problems or concerns.
23238      Each version is given a distinguishing version number.  If the
23239      Program specifies a version number of this License which applies
23240      to it and "any later version", you have the option of following
23241      the terms and conditions either of that version or of any later
23242      version published by the Free Software Foundation.  If the Program
23243      does not specify a version number of this License, you may choose
23244      any version ever published by the Free Software Foundation.
23246  10. If you wish to incorporate parts of the Program into other free
23247      programs whose distribution conditions are different, write to the
23248      author to ask for permission.  For software which is copyrighted
23249      by the Free Software Foundation, write to the Free Software
23250      Foundation; we sometimes make exceptions for this.  Our decision
23251      will be guided by the two goals of preserving the free status of
23252      all derivatives of our free software and of promoting the sharing
23253      and reuse of software generally.
23255                                 NO WARRANTY
23257  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
23258      WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
23259      LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
23260      HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
23261      WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
23262      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
23263      FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
23264      QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
23265      PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
23266      SERVICING, REPAIR OR CORRECTION.
23268  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
23269      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
23270      MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
23271      LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
23272      INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
23273      INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
23274      DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
23275      OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
23276      OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
23277      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
23279                       END OF TERMS AND CONDITIONS
23281 How to Apply These Terms to Your New Programs
23282 =============================================
23284  If you develop a new program, and you want it to be of the greatest
23285 possible use to the public, the best way to achieve this is to make it
23286 free software which everyone can redistribute and change under these
23287 terms.
23289  To do so, attach the following notices to the program.  It is safest
23290 to attach them to the start of each source file to most effectively
23291 convey the exclusion of warranty; and each file should have at least
23292 the "copyright" line and a pointer to where the full notice is found.
23294      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
23295      Copyright (C) YEAR  NAME OF AUTHOR
23296      
23297      This program is free software; you can redistribute it and/or modify
23298      it under the terms of the GNU General Public License as published by
23299      the Free Software Foundation; either version 2 of the License, or
23300      (at your option) any later version.
23301      
23302      This program is distributed in the hope that it will be useful,
23303      but WITHOUT ANY WARRANTY; without even the implied warranty of
23304      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23305      GNU General Public License for more details.
23306      
23307      You should have received a copy of the GNU General Public License
23308      along with this program; if not, write to the Free Software Foundation,
23309      Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23311  Also add information on how to contact you by electronic and paper
23312 mail.
23314  If the program is interactive, make it output a short notice like this
23315 when it starts in an interactive mode:
23317      Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
23318      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
23319      type `show w'.
23320      This is free software, and you are welcome to redistribute it
23321      under certain conditions; type `show c' for details.
23323  The hypothetical commands `show w' and `show c' should show the
23324 appropriate parts of the General Public License.  Of course, the
23325 commands you use may be called something other than `show w' and `show
23326 c'; they could even be mouse-clicks or menu items--whatever suits your
23327 program.
23329  You should also get your employer (if you work as a programmer) or your
23330 school, if any, to sign a "copyright disclaimer" for the program, if
23331 necessary.  Here is a sample; alter the names:
23333      Yoyodyne, Inc., hereby disclaims all copyright interest in the program
23334      `Gnomovision' (which makes passes at compilers) written by James Hacker.
23335      
23336      SIGNATURE OF TY COON, 1 April 1989
23337      Ty Coon, President of Vice
23339  This General Public License does not permit incorporating your program
23340 into proprietary programs.  If your program is a subroutine library,
23341 you may consider it more useful to permit linking proprietary
23342 applications with the library.  If this is what you want to do, use the
23343 GNU Library General Public License instead of this License.
23345 \x1f
23346 File: gcc.info,  Node: GNU Free Documentation License,  Next: Contributors,  Prev: Copying,  Up: Top
23348 GNU Free Documentation License
23349 ******************************
23351                       Version 1.2, November 2002
23352      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
23353      59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
23354      
23355      Everyone is permitted to copy and distribute verbatim copies
23356      of this license document, but changing it is not allowed.
23358   0. PREAMBLE
23360      The purpose of this License is to make a manual, textbook, or other
23361      functional and useful document "free" in the sense of freedom: to
23362      assure everyone the effective freedom to copy and redistribute it,
23363      with or without modifying it, either commercially or
23364      noncommercially.  Secondarily, this License preserves for the
23365      author and publisher a way to get credit for their work, while not
23366      being considered responsible for modifications made by others.
23368      This License is a kind of "copyleft", which means that derivative
23369      works of the document must themselves be free in the same sense.
23370      It complements the GNU General Public License, which is a copyleft
23371      license designed for free software.
23373      We have designed this License in order to use it for manuals for
23374      free software, because free software needs free documentation: a
23375      free program should come with manuals providing the same freedoms
23376      that the software does.  But this License is not limited to
23377      software manuals; it can be used for any textual work, regardless
23378      of subject matter or whether it is published as a printed book.
23379      We recommend this License principally for works whose purpose is
23380      instruction or reference.
23382   1. APPLICABILITY AND DEFINITIONS
23384      This License applies to any manual or other work, in any medium,
23385      that contains a notice placed by the copyright holder saying it
23386      can be distributed under the terms of this License.  Such a notice
23387      grants a world-wide, royalty-free license, unlimited in duration,
23388      to use that work under the conditions stated herein.  The
23389      "Document", below, refers to any such manual or work.  Any member
23390      of the public is a licensee, and is addressed as "you".  You
23391      accept the license if you copy, modify or distribute the work in a
23392      way requiring permission under copyright law.
23394      A "Modified Version" of the Document means any work containing the
23395      Document or a portion of it, either copied verbatim, or with
23396      modifications and/or translated into another language.
23398      A "Secondary Section" is a named appendix or a front-matter section
23399      of the Document that deals exclusively with the relationship of the
23400      publishers or authors of the Document to the Document's overall
23401      subject (or to related matters) and contains nothing that could
23402      fall directly within that overall subject.  (Thus, if the Document
23403      is in part a textbook of mathematics, a Secondary Section may not
23404      explain any mathematics.)  The relationship could be a matter of
23405      historical connection with the subject or with related matters, or
23406      of legal, commercial, philosophical, ethical or political position
23407      regarding them.
23409      The "Invariant Sections" are certain Secondary Sections whose
23410      titles are designated, as being those of Invariant Sections, in
23411      the notice that says that the Document is released under this
23412      License.  If a section does not fit the above definition of
23413      Secondary then it is not allowed to be designated as Invariant.
23414      The Document may contain zero Invariant Sections.  If the Document
23415      does not identify any Invariant Sections then there are none.
23417      The "Cover Texts" are certain short passages of text that are
23418      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
23419      that says that the Document is released under this License.  A
23420      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
23421      be at most 25 words.
23423      A "Transparent" copy of the Document means a machine-readable copy,
23424      represented in a format whose specification is available to the
23425      general public, that is suitable for revising the document
23426      straightforwardly with generic text editors or (for images
23427      composed of pixels) generic paint programs or (for drawings) some
23428      widely available drawing editor, and that is suitable for input to
23429      text formatters or for automatic translation to a variety of
23430      formats suitable for input to text formatters.  A copy made in an
23431      otherwise Transparent file format whose markup, or absence of
23432      markup, has been arranged to thwart or discourage subsequent
23433      modification by readers is not Transparent.  An image format is
23434      not Transparent if used for any substantial amount of text.  A
23435      copy that is not "Transparent" is called "Opaque".
23437      Examples of suitable formats for Transparent copies include plain
23438      ASCII without markup, Texinfo input format, LaTeX input format,
23439      SGML or XML using a publicly available DTD, and
23440      standard-conforming simple HTML, PostScript or PDF designed for
23441      human modification.  Examples of transparent image formats include
23442      PNG, XCF and JPG.  Opaque formats include proprietary formats that
23443      can be read and edited only by proprietary word processors, SGML or
23444      XML for which the DTD and/or processing tools are not generally
23445      available, and the machine-generated HTML, PostScript or PDF
23446      produced by some word processors for output purposes only.
23448      The "Title Page" means, for a printed book, the title page itself,
23449      plus such following pages as are needed to hold, legibly, the
23450      material this License requires to appear in the title page.  For
23451      works in formats which do not have any title page as such, "Title
23452      Page" means the text near the most prominent appearance of the
23453      work's title, preceding the beginning of the body of the text.
23455      A section "Entitled XYZ" means a named subunit of the Document
23456      whose title either is precisely XYZ or contains XYZ in parentheses
23457      following text that translates XYZ in another language.  (Here XYZ
23458      stands for a specific section name mentioned below, such as
23459      "Acknowledgements", "Dedications", "Endorsements", or "History".)
23460      To "Preserve the Title" of such a section when you modify the
23461      Document means that it remains a section "Entitled XYZ" according
23462      to this definition.
23464      The Document may include Warranty Disclaimers next to the notice
23465      which states that this License applies to the Document.  These
23466      Warranty Disclaimers are considered to be included by reference in
23467      this License, but only as regards disclaiming warranties: any other
23468      implication that these Warranty Disclaimers may have is void and
23469      has no effect on the meaning of this License.
23471   2. VERBATIM COPYING
23473      You may copy and distribute the Document in any medium, either
23474      commercially or noncommercially, provided that this License, the
23475      copyright notices, and the license notice saying this License
23476      applies to the Document are reproduced in all copies, and that you
23477      add no other conditions whatsoever to those of this License.  You
23478      may not use technical measures to obstruct or control the reading
23479      or further copying of the copies you make or distribute.  However,
23480      you may accept compensation in exchange for copies.  If you
23481      distribute a large enough number of copies you must also follow
23482      the conditions in section 3.
23484      You may also lend copies, under the same conditions stated above,
23485      and you may publicly display copies.
23487   3. COPYING IN QUANTITY
23489      If you publish printed copies (or copies in media that commonly
23490      have printed covers) of the Document, numbering more than 100, and
23491      the Document's license notice requires Cover Texts, you must
23492      enclose the copies in covers that carry, clearly and legibly, all
23493      these Cover Texts: Front-Cover Texts on the front cover, and
23494      Back-Cover Texts on the back cover.  Both covers must also clearly
23495      and legibly identify you as the publisher of these copies.  The
23496      front cover must present the full title with all words of the
23497      title equally prominent and visible.  You may add other material
23498      on the covers in addition.  Copying with changes limited to the
23499      covers, as long as they preserve the title of the Document and
23500      satisfy these conditions, can be treated as verbatim copying in
23501      other respects.
23503      If the required texts for either cover are too voluminous to fit
23504      legibly, you should put the first ones listed (as many as fit
23505      reasonably) on the actual cover, and continue the rest onto
23506      adjacent pages.
23508      If you publish or distribute Opaque copies of the Document
23509      numbering more than 100, you must either include a
23510      machine-readable Transparent copy along with each Opaque copy, or
23511      state in or with each Opaque copy a computer-network location from
23512      which the general network-using public has access to download
23513      using public-standard network protocols a complete Transparent
23514      copy of the Document, free of added material.  If you use the
23515      latter option, you must take reasonably prudent steps, when you
23516      begin distribution of Opaque copies in quantity, to ensure that
23517      this Transparent copy will remain thus accessible at the stated
23518      location until at least one year after the last time you
23519      distribute an Opaque copy (directly or through your agents or
23520      retailers) of that edition to the public.
23522      It is requested, but not required, that you contact the authors of
23523      the Document well before redistributing any large number of
23524      copies, to give them a chance to provide you with an updated
23525      version of the Document.
23527   4. MODIFICATIONS
23529      You may copy and distribute a Modified Version of the Document
23530      under the conditions of sections 2 and 3 above, provided that you
23531      release the Modified Version under precisely this License, with
23532      the Modified Version filling the role of the Document, thus
23533      licensing distribution and modification of the Modified Version to
23534      whoever possesses a copy of it.  In addition, you must do these
23535      things in the Modified Version:
23537        A. Use in the Title Page (and on the covers, if any) a title
23538           distinct from that of the Document, and from those of
23539           previous versions (which should, if there were any, be listed
23540           in the History section of the Document).  You may use the
23541           same title as a previous version if the original publisher of
23542           that version gives permission.
23544        B. List on the Title Page, as authors, one or more persons or
23545           entities responsible for authorship of the modifications in
23546           the Modified Version, together with at least five of the
23547           principal authors of the Document (all of its principal
23548           authors, if it has fewer than five), unless they release you
23549           from this requirement.
23551        C. State on the Title page the name of the publisher of the
23552           Modified Version, as the publisher.
23554        D. Preserve all the copyright notices of the Document.
23556        E. Add an appropriate copyright notice for your modifications
23557           adjacent to the other copyright notices.
23559        F. Include, immediately after the copyright notices, a license
23560           notice giving the public permission to use the Modified
23561           Version under the terms of this License, in the form shown in
23562           the Addendum below.
23564        G. Preserve in that license notice the full lists of Invariant
23565           Sections and required Cover Texts given in the Document's
23566           license notice.
23568        H. Include an unaltered copy of this License.
23570        I. Preserve the section Entitled "History", Preserve its Title,
23571           and add to it an item stating at least the title, year, new
23572           authors, and publisher of the Modified Version as given on
23573           the Title Page.  If there is no section Entitled "History" in
23574           the Document, create one stating the title, year, authors,
23575           and publisher of the Document as given on its Title Page,
23576           then add an item describing the Modified Version as stated in
23577           the previous sentence.
23579        J. Preserve the network location, if any, given in the Document
23580           for public access to a Transparent copy of the Document, and
23581           likewise the network locations given in the Document for
23582           previous versions it was based on.  These may be placed in
23583           the "History" section.  You may omit a network location for a
23584           work that was published at least four years before the
23585           Document itself, or if the original publisher of the version
23586           it refers to gives permission.
23588        K. For any section Entitled "Acknowledgements" or "Dedications",
23589           Preserve the Title of the section, and preserve in the
23590           section all the substance and tone of each of the contributor
23591           acknowledgements and/or dedications given therein.
23593        L. Preserve all the Invariant Sections of the Document,
23594           unaltered in their text and in their titles.  Section numbers
23595           or the equivalent are not considered part of the section
23596           titles.
23598        M. Delete any section Entitled "Endorsements".  Such a section
23599           may not be included in the Modified Version.
23601        N. Do not retitle any existing section to be Entitled
23602           "Endorsements" or to conflict in title with any Invariant
23603           Section.
23605        O. Preserve any Warranty Disclaimers.
23607      If the Modified Version includes new front-matter sections or
23608      appendices that qualify as Secondary Sections and contain no
23609      material copied from the Document, you may at your option
23610      designate some or all of these sections as invariant.  To do this,
23611      add their titles to the list of Invariant Sections in the Modified
23612      Version's license notice.  These titles must be distinct from any
23613      other section titles.
23615      You may add a section Entitled "Endorsements", provided it contains
23616      nothing but endorsements of your Modified Version by various
23617      parties--for example, statements of peer review or that the text
23618      has been approved by an organization as the authoritative
23619      definition of a standard.
23621      You may add a passage of up to five words as a Front-Cover Text,
23622      and a passage of up to 25 words as a Back-Cover Text, to the end
23623      of the list of Cover Texts in the Modified Version.  Only one
23624      passage of Front-Cover Text and one of Back-Cover Text may be
23625      added by (or through arrangements made by) any one entity.  If the
23626      Document already includes a cover text for the same cover,
23627      previously added by you or by arrangement made by the same entity
23628      you are acting on behalf of, you may not add another; but you may
23629      replace the old one, on explicit permission from the previous
23630      publisher that added the old one.
23632      The author(s) and publisher(s) of the Document do not by this
23633      License give permission to use their names for publicity for or to
23634      assert or imply endorsement of any Modified Version.
23636   5. COMBINING DOCUMENTS
23638      You may combine the Document with other documents released under
23639      this License, under the terms defined in section 4 above for
23640      modified versions, provided that you include in the combination
23641      all of the Invariant Sections of all of the original documents,
23642      unmodified, and list them all as Invariant Sections of your
23643      combined work in its license notice, and that you preserve all
23644      their Warranty Disclaimers.
23646      The combined work need only contain one copy of this License, and
23647      multiple identical Invariant Sections may be replaced with a single
23648      copy.  If there are multiple Invariant Sections with the same name
23649      but different contents, make the title of each such section unique
23650      by adding at the end of it, in parentheses, the name of the
23651      original author or publisher of that section if known, or else a
23652      unique number.  Make the same adjustment to the section titles in
23653      the list of Invariant Sections in the license notice of the
23654      combined work.
23656      In the combination, you must combine any sections Entitled
23657      "History" in the various original documents, forming one section
23658      Entitled "History"; likewise combine any sections Entitled
23659      "Acknowledgements", and any sections Entitled "Dedications".  You
23660      must delete all sections Entitled "Endorsements."
23662   6. COLLECTIONS OF DOCUMENTS
23664      You may make a collection consisting of the Document and other
23665      documents released under this License, and replace the individual
23666      copies of this License in the various documents with a single copy
23667      that is included in the collection, provided that you follow the
23668      rules of this License for verbatim copying of each of the
23669      documents in all other respects.
23671      You may extract a single document from such a collection, and
23672      distribute it individually under this License, provided you insert
23673      a copy of this License into the extracted document, and follow
23674      this License in all other respects regarding verbatim copying of
23675      that document.
23677   7. AGGREGATION WITH INDEPENDENT WORKS
23679      A compilation of the Document or its derivatives with other
23680      separate and independent documents or works, in or on a volume of
23681      a storage or distribution medium, is called an "aggregate" if the
23682      copyright resulting from the compilation is not used to limit the
23683      legal rights of the compilation's users beyond what the individual
23684      works permit.  When the Document is included an aggregate, this
23685      License does not apply to the other works in the aggregate which
23686      are not themselves derivative works of the Document.
23688      If the Cover Text requirement of section 3 is applicable to these
23689      copies of the Document, then if the Document is less than one half
23690      of the entire aggregate, the Document's Cover Texts may be placed
23691      on covers that bracket the Document within the aggregate, or the
23692      electronic equivalent of covers if the Document is in electronic
23693      form.  Otherwise they must appear on printed covers that bracket
23694      the whole aggregate.
23696   8. TRANSLATION
23698      Translation is considered a kind of modification, so you may
23699      distribute translations of the Document under the terms of section
23700      4.  Replacing Invariant Sections with translations requires special
23701      permission from their copyright holders, but you may include
23702      translations of some or all Invariant Sections in addition to the
23703      original versions of these Invariant Sections.  You may include a
23704      translation of this License, and all the license notices in the
23705      Document, and any Warrany Disclaimers, provided that you also
23706      include the original English version of this License and the
23707      original versions of those notices and disclaimers.  In case of a
23708      disagreement between the translation and the original version of
23709      this License or a notice or disclaimer, the original version will
23710      prevail.
23712      If a section in the Document is Entitled "Acknowledgements",
23713      "Dedications", or "History", the requirement (section 4) to
23714      Preserve its Title (section 1) will typically require changing the
23715      actual title.
23717   9. TERMINATION
23719      You may not copy, modify, sublicense, or distribute the Document
23720      except as expressly provided for under this License.  Any other
23721      attempt to copy, modify, sublicense or distribute the Document is
23722      void, and will automatically terminate your rights under this
23723      License.  However, parties who have received copies, or rights,
23724      from you under this License will not have their licenses
23725      terminated so long as such parties remain in full compliance.
23727  10. FUTURE REVISIONS OF THIS LICENSE
23729      The Free Software Foundation may publish new, revised versions of
23730      the GNU Free Documentation License from time to time.  Such new
23731      versions will be similar in spirit to the present version, but may
23732      differ in detail to address new problems or concerns.  See
23733      `http://www.gnu.org/copyleft/'.
23735      Each version of the License is given a distinguishing version
23736      number.  If the Document specifies that a particular numbered
23737      version of this License "or any later version" applies to it, you
23738      have the option of following the terms and conditions either of
23739      that specified version or of any later version that has been
23740      published (not as a draft) by the Free Software Foundation.  If
23741      the Document does not specify a version number of this License,
23742      you may choose any version ever published (not as a draft) by the
23743      Free Software Foundation.
23745 ADDENDUM: How to use this License for your documents
23746 ====================================================
23748  To use this License in a document you have written, include a copy of
23749 the License in the document and put the following copyright and license
23750 notices just after the title page:
23752        Copyright (C)  YEAR  YOUR NAME.
23753        Permission is granted to copy, distribute and/or modify this document
23754        under the terms of the GNU Free Documentation License, Version 1.2
23755        or any later version published by the Free Software Foundation;
23756        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
23757        A copy of the license is included in the section entitled ``GNU
23758        Free Documentation License''.
23760  If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
23761 replace the "with...Texts." line with this:
23763          with the Invariant Sections being LIST THEIR TITLES, with
23764          the Front-Cover Texts being LIST, and with the Back-Cover Texts
23765          being LIST.
23767  If you have Invariant Sections without Cover Texts, or some other
23768 combination of the three, merge those two alternatives to suit the
23769 situation.
23771  If your document contains nontrivial examples of program code, we
23772 recommend releasing these examples in parallel under your choice of
23773 free software license, such as the GNU General Public License, to
23774 permit their use in free software.
23776 \x1f
23777 File: gcc.info,  Node: Contributors,  Next: Option Index,  Prev: GNU Free Documentation License,  Up: Top
23779 Contributors to GCC
23780 *******************
23782  The GCC project would like to thank its many contributors.  Without
23783 them the project would not have been nearly as successful as it has
23784 been.  Any omissions in this list are accidental.  Feel free to contact
23785 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
23786 some of your contributions are not listed.  Please keep this list in
23787 alphabetical order.
23789    * Analog Devices helped implement the support for complex data types
23790      and iterators.
23792    * John David Anglin for threading-related fixes and improvements to
23793      libstdc++-v3, and the HP-UX port.
23795    * James van Artsdalen wrote the code that makes efficient use of the
23796      Intel 80387 register stack.
23798    * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
23799      Series port.
23801    * Alasdair Baird for various bug fixes.
23803    * Giovanni Bajo for analyzing lots of complicated C++ problem
23804      reports.
23806    * Peter Barada for his work to improve code generation for new
23807      ColdFire cores.
23809    * Gerald Baumgartner added the signature extension to the C++ front
23810      end.
23812    * Godmar Back for his Java improvements and encouragement.
23814    * Scott Bambrough for help porting the Java compiler.
23816    * Wolfgang Bangerth for processing tons of bug reports.
23818    * Jon Beniston for his Microsoft Windows port of Java.
23820    * Daniel Berlin for better DWARF2 support, faster/better
23821      optimizations, improved alias analysis, plus migrating GCC to
23822      Bugzilla.
23824    * Geoff Berry for his Java object serialization work and various
23825      patches.
23827    * Eric Blake for helping to make GCJ and libgcj conform to the
23828      specifications.
23830    * Segher Boessenkool for various fixes.
23832    * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
23833      other Java work.
23835    * Neil Booth for work on cpplib, lang hooks, debug hooks and other
23836      miscellaneous clean-ups.
23838    * Eric Botcazou for fixing middle- and backend bugs left and right.
23840    * Per Bothner for his direction via the steering committee and
23841      various improvements to the infrastructure for supporting new
23842      languages.  Chill front end implementation.  Initial
23843      implementations of cpplib, fix-header, config.guess, libio, and
23844      past C++ library (libg++) maintainer.  Dreaming up, designing and
23845      implementing much of GCJ.
23847    * Devon Bowen helped port GCC to the Tahoe.
23849    * Don Bowman for mips-vxworks contributions.
23851    * Dave Brolley for work on cpplib and Chill.
23853    * Robert Brown implemented the support for Encore 32000 systems.
23855    * Christian Bruel for improvements to local store elimination.
23857    * Herman A.J. ten Brugge for various fixes.
23859    * Joerg Brunsmann for Java compiler hacking and help with the GCJ
23860      FAQ.
23862    * Joe Buck for his direction via the steering committee.
23864    * Craig Burley for leadership of the Fortran effort.
23866    * Stephan Buys for contributing Doxygen notes for libstdc++.
23868    * Paolo Carlini for libstdc++ work: lots of efficiency improvements
23869      to the C++ strings, streambufs and formatted I/O, hard detective
23870      work on the frustrating localization issues, and keeping up with
23871      the problem reports.
23873    * John Carr for his alias work, SPARC hacking, infrastructure
23874      improvements, previous contributions to the steering committee,
23875      loop optimizations, etc.
23877    * Stephane Carrez for 68HC11 and 68HC12 ports.
23879    * Steve Chamberlain for support for the Renesas SH and H8 processors
23880      and the PicoJava processor, and for GCJ config fixes.
23882    * Glenn Chambers for help with the GCJ FAQ.
23884    * John-Marc Chandonia for various libgcj patches.
23886    * Scott Christley for his Objective-C contributions.
23888    * Eric Christopher for his Java porting help and clean-ups.
23890    * Branko Cibej for more warning contributions.
23892    * The GNU Classpath project for all of their merged runtime code.
23894    * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
23895      other random hacking.
23897    * Michael Cook for libstdc++ cleanup patches to reduce warnings.
23899    * R. Kelley Cook for making GCC buildable from a read-only directory
23900      as well as other miscellaneous build process and documentation
23901      clean-ups.
23903    * Ralf Corsepius for SH testing and minor bugfixing.
23905    * Stan Cox for care and feeding of the x86 port and lots of behind
23906      the scenes hacking.
23908    * Alex Crain provided changes for the 3b1.
23910    * Ian Dall for major improvements to the NS32k port.
23912    * Paul Dale for his work to add uClinux platform support to the m68k
23913      backend.
23915    * Dario Dariol contributed the four varieties of sample programs
23916      that print a copy of their source.
23918    * Russell Davidson for fstream and stringstream fixes in libstdc++.
23920    * Mo DeJong for GCJ and libgcj bug fixes.
23922    * DJ Delorie for the DJGPP port, build and libiberty maintenance, and
23923      various bug fixes.
23925    * Gabriel Dos Reis for contributions to G++, contributions and
23926      maintenance of GCC diagnostics infrastructure, libstdc++-v3,
23927      including valarray<>, complex<>, maintaining the numerics library
23928      (including that pesky <limits> :-) and keeping up-to-date anything
23929      to do with numbers.
23931    * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
23932      ISO C99 support, CFG dumping support, etc., plus support of the
23933      C++ runtime libraries including for all kinds of C interface
23934      issues, contributing and maintaining complex<>, sanity checking
23935      and disbursement, configuration architecture, libio maintenance,
23936      and early math work.
23938    * Zdenek Dvorak for a new loop unroller and various fixes.
23940    * Richard Earnshaw for his ongoing work with the ARM.
23942    * David Edelsohn for his direction via the steering committee,
23943      ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
23944      loop changes, doing the entire AIX port of libstdc++ with his bare
23945      hands, and for ensuring GCC properly keeps working on AIX.
23947    * Kevin Ediger for the floating point formatting of num_put::do_put
23948      in libstdc++.
23950    * Phil Edwards for libstdc++ work including configuration hackery,
23951      documentation maintainer, chief breaker of the web pages, the
23952      occasional iostream bug fix, and work on shared library symbol
23953      versioning.
23955    * Paul Eggert for random hacking all over GCC.
23957    * Mark Elbrecht for various DJGPP improvements, and for libstdc++
23958      configuration support for locales and fstream-related fixes.
23960    * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
23961      iostreams.
23963    * Christian Ehrhardt for dealing with bug reports.
23965    * Ben Elliston for his work to move the Objective-C runtime into its
23966      own subdirectory and for his work on autoconf.
23968    * Marc Espie for OpenBSD support.
23970    * Doug Evans for much of the global optimization framework, arc,
23971      m32r, and SPARC work.
23973    * Christopher Faylor for his work on the Cygwin port and for caring
23974      and feeding the gcc.gnu.org box and saving its users tons of spam.
23976    * Fred Fish for BeOS support and Ada fixes.
23978    * Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ.
23980    * Peter Gerwinski for various bug fixes and the Pascal front end.
23982    * Kaveh Ghazi for his direction via the steering committee, amazing
23983      work to make `-W -Wall' useful, and continuously testing GCC on a
23984      plethora of platforms.
23986    * John Gilmore for a donation to the FSF earmarked improving GNU
23987      Java.
23989    * Judy Goldberg for c++ contributions.
23991    * Torbjorn Granlund for various fixes and the c-torture testsuite,
23992      multiply- and divide-by-constant optimization, improved long long
23993      support, improved leaf function register allocation, and his
23994      direction via the steering committee.
23996    * Anthony Green for his `-Os' contributions and Java front end work.
23998    * Stu Grossman for gdb hacking, allowing GCJ developers to debug
23999      Java code.
24001    * Michael K. Gschwind contributed the port to the PDP-11.
24003    * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
24004      the support for Dwarf symbolic debugging information, and much of
24005      the support for System V Release 4.  He has also worked heavily on
24006      the Intel 386 and 860 support.
24008    * Bruno Haible for improvements in the runtime overhead for EH, new
24009      warnings and assorted bug fixes.
24011    * Andrew Haley for his amazing Java compiler and library efforts.
24013    * Chris Hanson assisted in making GCC work on HP-UX for the 9000
24014      series 300.
24016    * Michael Hayes for various thankless work he's done trying to get
24017      the c30/c40 ports functional.  Lots of loop and unroll
24018      improvements and fixes.
24020    * Dara Hazeghi for wading through myriads of target-specific bug
24021      reports.
24023    * Kate Hedstrom for staking the G77 folks with an initial testsuite.
24025    * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
24026      work, loop opts, and generally fixing lots of old problems we've
24027      ignored for years, flow rewrite and lots of further stuff,
24028      including reviewing tons of patches.
24030    * Aldy Hernandez for working on the PowerPC port, SIMD support, and
24031      various fixes.
24033    * Nobuyuki Hikichi of Software Research Associates, Tokyo,
24034      contributed the support for the Sony NEWS machine.
24036    * Kazu Hirata for caring and feeding the Renesas H8/300 port and
24037      various fixes.
24039    * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
24040      of testing and bug fixing, particularly of GCC configury code.
24042    * Steve Holmgren for MachTen patches.
24044    * Jan Hubicka for his x86 port improvements.
24046    * Falk Hueffner for working on C and optimization bug reports.
24048    * Bernardo Innocenti for his m68k work, including merging of
24049      ColdFire improvements and uClinux support.
24051    * Christian Iseli for various bug fixes.
24053    * Kamil Iskra for general m68k hacking.
24055    * Lee Iverson for random fixes and MIPS testing.
24057    * Andreas Jaeger for testing and benchmarking of GCC and various bug
24058      fixes.
24060    * Jakub Jelinek for his SPARC work and sibling call optimizations as
24061      well as lots of bug fixes and test cases, and for improving the
24062      Java build system.
24064    * Janis Johnson for ia64 testing and fixes, her quality improvement
24065      sidetracks, and web page maintenance.
24067    * Kean Johnston for SCO OpenServer support and various fixes.
24069    * Tim Josling for the sample language treelang based originally on
24070      Richard Kenner's ""toy" language".
24072    * Nicolai Josuttis for additional libstdc++ documentation.
24074    * Klaus Kaempf for his ongoing work to make alpha-vms a viable
24075      target.
24077    * David Kashtan of SRI adapted GCC to VMS.
24079    * Ryszard Kabatek for many, many libstdc++ bug fixes and
24080      optimizations of strings, especially member functions, and for
24081      auto_ptr fixes.
24083    * Geoffrey Keating for his ongoing work to make the PPC work for
24084      GNU/Linux and his automatic regression tester.
24086    * Brendan Kehoe for his ongoing work with G++ and for a lot of early
24087      work in just about every part of libstdc++.
24089    * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
24090      MIL-STD-1750A.
24092    * Richard Kenner of the New York University Ultracomputer Research
24093      Laboratory wrote the machine descriptions for the AMD 29000, the
24094      DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
24095      support for instruction attributes.  He also made changes to
24096      better support RISC processors including changes to common
24097      subexpression elimination, strength reduction, function calling
24098      sequence handling, and condition code support, in addition to
24099      generalizing the code for frame pointer elimination and delay slot
24100      scheduling.  Richard Kenner was also the head maintainer of GCC
24101      for several years.
24103    * Mumit Khan for various contributions to the Cygwin and Mingw32
24104      ports and maintaining binary releases for Microsoft Windows hosts,
24105      and for massive libstdc++ porting work to Cygwin/Mingw32.
24107    * Robin Kirkham for cpu32 support.
24109    * Mark Klein for PA improvements.
24111    * Thomas Koenig for various bug fixes.
24113    * Bruce Korb for the new and improved fixincludes code.
24115    * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
24116      effort.
24118    * Charles LaBrec contributed the support for the Integrated Solutions
24119      68020 system.
24121    * Jeff Law for his direction via the steering committee,
24122      coordinating the entire egcs project and GCC 2.95, rolling out
24123      snapshots and releases, handling merges from GCC2, reviewing tons
24124      of patches that might have fallen through the cracks else, and
24125      random but extensive hacking.
24127    * Marc Lehmann for his direction via the steering committee and
24128      helping with analysis and improvements of x86 performance.
24130    * Ted Lemon wrote parts of the RTL reader and printer.
24132    * Kriang Lerdsuwanakij for C++ improvements including template as
24133      template parameter support, and many C++ fixes.
24135    * Warren Levy for tremendous work on libgcj (Java Runtime Library)
24136      and random work on the Java front end.
24138    * Alain Lichnewsky ported GCC to the MIPS CPU.
24140    * Oskar Liljeblad for hacking on AWT and his many Java bug reports
24141      and patches.
24143    * Robert Lipe for OpenServer support, new testsuites, testing, etc.
24145    * Weiwen Liu for testing and various bug fixes.
24147    * Dave Love for his ongoing work with the Fortran front end and
24148      runtime libraries.
24150    * Martin von Lo"wis for internal consistency checking infrastructure,
24151      various C++ improvements including namespace support, and tons of
24152      assistance with libstdc++/compiler merges.
24154    * H.J. Lu for his previous contributions to the steering committee,
24155      many x86 bug reports, prototype patches, and keeping the GNU/Linux
24156      ports working.
24158    * Greg McGary for random fixes and (someday) bounded pointers.
24160    * Andrew MacLeod for his ongoing work in building a real EH system,
24161      various code generation improvements, work on the global
24162      optimizer, etc.
24164    * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
24165      hacking improvements to compile-time performance, overall
24166      knowledge and direction in the area of instruction scheduling, and
24167      design and implementation of the automaton based instruction
24168      scheduler.
24170    * Bob Manson for his behind the scenes work on dejagnu.
24172    * Philip Martin for lots of libstdc++ string and vector iterator
24173      fixes and improvements, and string clean up and testsuites.
24175    * All of the Mauve project contributors, for Java test code.
24177    * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
24179    * Adam Megacz for his work on the Microsoft Windows port of GCJ.
24181    * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
24182      powerpc, haifa, ECOFF debug support, and other assorted hacking.
24184    * Jason Merrill for his direction via the steering committee and
24185      leading the G++ effort.
24187    * David Miller for his direction via the steering committee, lots of
24188      SPARC work, improvements in jump.c and interfacing with the Linux
24189      kernel developers.
24191    * Gary Miller ported GCC to Charles River Data Systems machines.
24193    * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
24194      the entire libstdc++ testsuite namespace-compatible.
24196    * Mark Mitchell for his direction via the steering committee,
24197      mountains of C++ work, load/store hoisting out of loops, alias
24198      analysis improvements, ISO C `restrict' support, and serving as
24199      release manager for GCC 3.x.
24201    * Alan Modra for various GNU/Linux bits and testing.
24203    * Toon Moene for his direction via the steering committee, Fortran
24204      maintenance, and his ongoing work to make us make Fortran run fast.
24206    * Jason Molenda for major help in the care and feeding of all the
24207      services on the gcc.gnu.org (formerly egcs.cygnus.com)
24208      machine--mail, web services, ftp services, etc etc.  Doing all
24209      this work on scrap paper and the backs of envelopes would have
24210      been... difficult.
24212    * Catherine Moore for fixing various ugly problems we have sent her
24213      way, including the haifa bug which was killing the Alpha & PowerPC
24214      Linux kernels.
24216    * Mike Moreton for his various Java patches.
24218    * David Mosberger-Tang for various Alpha improvements, and for the
24219      initial IA-64 port.
24221    * Stephen Moshier contributed the floating point emulator that
24222      assists in cross-compilation and permits support for floating
24223      point numbers wider than 64 bits and for ISO C99 support.
24225    * Bill Moyer for his behind the scenes work on various issues.
24227    * Philippe De Muyter for his work on the m68k port.
24229    * Joseph S. Myers for his work on the PDP-11 port, format checking
24230      and ISO C99 support, and continuous emphasis on (and contributions
24231      to) documentation.
24233    * Nathan Myers for his work on libstdc++-v3: architecture and
24234      authorship through the first three snapshots, including
24235      implementation of locale infrastructure, string, shadow C headers,
24236      and the initial project documentation (DESIGN, CHECKLIST, and so
24237      forth).  Later, more work on MT-safe string and shadow headers.
24239    * Felix Natter for documentation on porting libstdc++.
24241    * Nathanael Nerode for cleaning up the configuration/build process.
24243    * NeXT, Inc. donated the front end that supports the Objective-C
24244      language.
24246    * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
24247      the search engine setup, various documentation fixes and other
24248      small fixes.
24250    * Geoff Noer for this work on getting cygwin native builds working.
24252    * Diego Novillo for his SPEC performance tracking web pages and
24253      assorted fixes in the middle end and various back ends.
24255    * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
24256      FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
24257      related infrastructure improvements.
24259    * Alexandre Oliva for various build infrastructure improvements,
24260      scripts and amazing testing work, including keeping libtool issues
24261      sane and happy.
24263    * Melissa O'Neill for various NeXT fixes.
24265    * Rainer Orth for random MIPS work, including improvements to GCC's
24266      o32 ABI support, improvements to dejagnu's MIPS support, Java
24267      configuration clean-ups and porting work, etc.
24269    * Hartmut Penner for work on the s390 port.
24271    * Paul Petersen wrote the machine description for the Alliant FX/8.
24273    * Alexandre Petit-Bianco for implementing much of the Java compiler
24274      and continued Java maintainership.
24276    * Matthias Pfaller for major improvements to the NS32k port.
24278    * Gerald Pfeifer for his direction via the steering committee,
24279      pointing out lots of problems we need to solve, maintenance of the
24280      web pages, and taking care of documentation maintenance in general.
24282    * Andrew Pinski for processing bug reports by the dozen.
24284    * Ovidiu Predescu for his work on the Objective-C front end and
24285      runtime libraries.
24287    * Jerry Quinn for major performance improvements in C++ formatted
24288      I/O.
24290    * Ken Raeburn for various improvements to checker, MIPS ports and
24291      various cleanups in the compiler.
24293    * Rolf W. Rasmussen for hacking on AWT.
24295    * David Reese of Sun Microsystems contributed to the Solaris on
24296      PowerPC port.
24298    * Volker Reichelt for keeping up with the problem reports.
24300    * Joern Rennecke for maintaining the sh port, loop, regmove & reload
24301      hacking.
24303    * Loren J. Rittle for improvements to libstdc++-v3 including the
24304      FreeBSD port, threading fixes, thread-related configury changes,
24305      critical threading documentation, and solutions to really tricky
24306      I/O problems, as well as keeping GCC properly working on FreeBSD
24307      and continuous testing.
24309    * Craig Rodrigues for processing tons of bug reports.
24311    * Gavin Romig-Koch for lots of behind the scenes MIPS work.
24313    * Ken Rose for fixes to GCC's delay slot filling code.
24315    * Paul Rubin wrote most of the preprocessor.
24317    * Pe'tur Runo'lfsson for major performance improvements in C++
24318      formatted I/O and large file support in C++ filebuf.
24320    * Chip Salzenberg for libstdc++ patches and improvements to locales,
24321      traits, Makefiles, libio, libtool hackery, and "long long" support.
24323    * Juha Sarlin for improvements to the H8 code generator.
24325    * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
24326      300.
24328    * Roger Sayle for improvements to constant folding and GCC's RTL
24329      optimizers as well as for fixing numerous bugs.
24331    * Bradley Schatz for his work on the GCJ FAQ.
24333    * Peter Schauer wrote the code to allow debugging to work on the
24334      Alpha.
24336    * William Schelter did most of the work on the Intel 80386 support.
24338    * Bernd Schmidt for various code generation improvements and major
24339      work in the reload pass as well a serving as release manager for
24340      GCC 2.95.3.
24342    * Peter Schmid for constant testing of libstdc++ - especially
24343      application testing, going above and beyond what was requested for
24344      the release criteria - and libstdc++ header file tweaks.
24346    * Jason Schroeder for jcf-dump patches.
24348    * Andreas Schwab for his work on the m68k port.
24350    * Joel Sherrill for his direction via the steering committee, RTEMS
24351      contributions and RTEMS testing.
24353    * Nathan Sidwell for many C++ fixes/improvements.
24355    * Jeffrey Siegal for helping RMS with the original design of GCC,
24356      some code which handles the parse tree and RTL data structures,
24357      constant folding and help with the original VAX & m68k ports.
24359    * Kenny Simpson for prompting libstdc++ fixes due to defect reports
24360      from the LWG (thereby keeping GCC in line with updates from the
24361      ISO).
24363    * Franz Sirl for his ongoing work with making the PPC port stable
24364      for GNU/Linux.
24366    * Andrey Slepuhin for assorted AIX hacking.
24368    * Christopher Smith did the port for Convex machines.
24370    * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
24372    * Randy Smith finished the Sun FPA support.
24374    * Scott Snyder for queue, iterator, istream, and string fixes and
24375      libstdc++ testsuite entries.
24377    * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
24379    * Richard Stallman, for writing the original GCC and launching the
24380      GNU project.
24382    * Jan Stein of the Chalmers Computer Society provided support for
24383      Genix, as well as part of the 32000 machine description.
24385    * Nigel Stephens for various mips16 related fixes/improvements.
24387    * Jonathan Stone wrote the machine description for the Pyramid
24388      computer.
24390    * Graham Stott for various infrastructure improvements.
24392    * John Stracke for his Java HTTP protocol fixes.
24394    * Mike Stump for his Elxsi port, G++ contributions over the years
24395      and more recently his vxworks contributions
24397    * Jeff Sturm for Java porting help, bug fixes, and encouragement.
24399    * Shigeya Suzuki for this fixes for the bsdi platforms.
24401    * Ian Lance Taylor for his mips16 work, general configury hacking,
24402      fixincludes, etc.
24404    * Holger Teutsch provided the support for the Clipper CPU.
24406    * Gary Thomas for his ongoing work to make the PPC work for
24407      GNU/Linux.
24409    * Philipp Thomas for random bug fixes throughout the compiler
24411    * Jason Thorpe for thread support in libstdc++ on NetBSD.
24413    * Kresten Krab Thorup wrote the run time support for the Objective-C
24414      language and the fantastic Java bytecode interpreter.
24416    * Michael Tiemann for random bug fixes, the first instruction
24417      scheduler, initial C++ support, function integration, NS32k, SPARC
24418      and M88k machine description work, delay slot scheduling.
24420    * Andreas Tobler for his work porting libgcj to Darwin.
24422    * Teemu Torma for thread safe exception handling support.
24424    * Leonard Tower wrote parts of the parser, RTL generator, and RTL
24425      definitions, and of the VAX machine description.
24427    * Tom Tromey for internationalization support and for his many Java
24428      contributions and libgcj maintainership.
24430    * Lassi Tuura for improvements to config.guess to determine HP
24431      processor types.
24433    * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
24435    * Brent Verner for work with the libstdc++ cshadow files and their
24436      associated configure steps.
24438    * Todd Vierling for contributions for NetBSD ports.
24440    * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
24441      guidance.
24443    * Dean Wakerley for converting the install documentation from HTML
24444      to texinfo in time for GCC 3.0.
24446    * Krister Walfridsson for random bug fixes.
24448    * Stephen M. Webb for time and effort on making libstdc++ shadow
24449      files work with the tricky Solaris 8+ headers, and for pushing the
24450      build-time header tree.
24452    * John Wehle for various improvements for the x86 code generator,
24453      related infrastructure improvements to help x86 code generation,
24454      value range propagation and other work, WE32k port.
24456    * Ulrich Weigand for work on the s390 port.
24458    * Zack Weinberg for major work on cpplib and various other bug fixes.
24460    * Matt Welsh for help with Linux Threads support in GCJ.
24462    * Urban Widmark for help fixing java.io.
24464    * Mark Wielaard for new Java library code and his work integrating
24465      with Classpath.
24467    * Dale Wiles helped port GCC to the Tahoe.
24469    * Bob Wilson from Tensilica, Inc. for the Xtensa port.
24471    * Jim Wilson for his direction via the steering committee, tackling
24472      hard problems in various places that nobody else wanted to work
24473      on, strength reduction and other loop optimizations.
24475    * Carlo Wood for various fixes.
24477    * Tom Wood for work on the m88k port.
24479    * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
24480      description for the Tron architecture (specifically, the Gmicro).
24482    * Kevin Zachmann helped ported GCC to the Tahoe.
24484    * Gilles Zunino for help porting Java to Irix.
24487  In addition to the above, all of which also contributed time and
24488 energy in testing GCC, we would like to thank the following for their
24489 contributions to testing:
24491    * Michael Abd-El-Malek
24493    * Thomas Arend
24495    * Bonzo Armstrong
24497    * Steven Ashe
24499    * Chris Baldwin
24501    * David Billinghurst
24503    * Jim Blandy
24505    * Stephane Bortzmeyer
24507    * Horst von Brand
24509    * Frank Braun
24511    * Rodney Brown
24513    * Sidney Cadot
24515    * Bradford Castalia
24517    * Ralph Doncaster
24519    * Richard Emberson
24521    * Levente Farkas
24523    * Graham Fawcett
24525    * Robert A. French
24527    * Jo"rgen Freyh
24529    * Mark K. Gardner
24531    * Charles-Antoine Gauthier
24533    * Yung Shing Gene
24535    * David Gilbert
24537    * Simon Gornall
24539    * Fred Gray
24541    * John Griffin
24543    * Patrik Hagglund
24545    * Phil Hargett
24547    * Amancio Hasty
24549    * Bryan W. Headley
24551    * Kevin B. Hendricks
24553    * Joep Jansen
24555    * Christian Joensson
24557    * David Kidd
24559    * Tobias Kuipers
24561    * Anand Krishnaswamy
24563    * llewelly
24565    * Damon Love
24567    * Brad Lucier
24569    * Matthias Klose
24571    * Martin Knoblauch
24573    * Jesse Macnish
24575    * Stefan Morrell
24577    * Anon A. Mous
24579    * Matthias Mueller
24581    * Pekka Nikander
24583    * Jon Olson
24585    * Magnus Persson
24587    * Chris Pollard
24589    * Richard Polton
24591    * David Rees
24593    * Paul Reilly
24595    * Tom Reilly
24597    * Torsten Rueger
24599    * Danny Sadinoff
24601    * Marc Schifer
24603    * David Schuler
24605    * Vin Shelton
24607    * Tim Souder
24609    * Adam Sulmicki
24611    * George Talbot
24613    * Gregory Warnes
24615    * David E. Young
24617    * And many others
24619  And finally we'd like to thank everyone who uses the compiler, submits
24620 bug reports and generally reminds us why we're doing this work in the
24621 first place.
24623 \x1f
24624 File: gcc.info,  Node: Option Index,  Next: Keyword Index,  Prev: Contributors,  Up: Top
24626 Option Index
24627 ************
24629  GCC's command line options are indexed here without any initial `-' or
24630 `--'.  Where an option has both positive and negative forms (such as
24631 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
24632 indexed under the most appropriate form; it may sometimes be useful to
24633 look up both forms.
24635 * Menu:
24637 * ###:                                   Overall Options.
24638 * -mf930:                                SPARC Options.
24639 * -mf934:                                SPARC Options.
24640 * A:                                     Preprocessor Options.
24641 * all_load:                              Darwin Options.
24642 * allowable_client:                      Darwin Options.
24643 * ansi <1>:                              C Dialect Options.
24644 * ansi <2>:                              Non-bugs.
24645 * ansi <3>:                              Preprocessor Options.
24646 * ansi <4>:                              Other Builtins.
24647 * ansi:                                  Standards.
24648 * arch_errors_fatal:                     Darwin Options.
24649 * arch_only:                             Darwin Options.
24650 * aux-info:                              C Dialect Options.
24651 * b:                                     Target Options.
24652 * B:                                     Directory Options.
24653 * bcopy-builtin:                         PDP-11 Options.
24654 * bind_at_load:                          Darwin Options.
24655 * bundle:                                Darwin Options.
24656 * bundle_loader:                         Darwin Options.
24657 * c:                                     Overall Options.
24658 * C:                                     Preprocessor Options.
24659 * c:                                     Link Options.
24660 * client_name:                           Darwin Options.
24661 * compatibility_version:                 Darwin Options.
24662 * crossjumping:                          Optimize Options.
24663 * current_version:                       Darwin Options.
24664 * d:                                     Debugging Options.
24665 * D:                                     Preprocessor Options.
24666 * da:                                    Debugging Options.
24667 * dA:                                    Debugging Options.
24668 * dB:                                    Debugging Options.
24669 * db:                                    Debugging Options.
24670 * dc:                                    Debugging Options.
24671 * dC:                                    Debugging Options.
24672 * dd:                                    Debugging Options.
24673 * dD <1>:                                Preprocessor Options.
24674 * dD:                                    Debugging Options.
24675 * dE:                                    Debugging Options.
24676 * dependency-file:                       Darwin Options.
24677 * df:                                    Debugging Options.
24678 * dF:                                    Debugging Options.
24679 * dg:                                    Debugging Options.
24680 * dG:                                    Debugging Options.
24681 * dh:                                    Debugging Options.
24682 * dH:                                    Debugging Options.
24683 * di:                                    Debugging Options.
24684 * dI:                                    Preprocessor Options.
24685 * dj:                                    Debugging Options.
24686 * dk:                                    Debugging Options.
24687 * dL:                                    Debugging Options.
24688 * dl:                                    Debugging Options.
24689 * dM <1>:                                Debugging Options.
24690 * dM:                                    Preprocessor Options.
24691 * dm:                                    Debugging Options.
24692 * dn:                                    Debugging Options.
24693 * dN <1>:                                Debugging Options.
24694 * dN:                                    Preprocessor Options.
24695 * do:                                    Debugging Options.
24696 * dp:                                    Debugging Options.
24697 * dP:                                    Debugging Options.
24698 * dr:                                    Debugging Options.
24699 * dR:                                    Debugging Options.
24700 * dS:                                    Debugging Options.
24701 * ds:                                    Debugging Options.
24702 * dT:                                    Debugging Options.
24703 * dt:                                    Debugging Options.
24704 * du:                                    Debugging Options.
24705 * dU:                                    Debugging Options.
24706 * dumpmachine:                           Debugging Options.
24707 * dumpspecs:                             Debugging Options.
24708 * dumpversion:                           Debugging Options.
24709 * dV:                                    Debugging Options.
24710 * dv:                                    Debugging Options.
24711 * dw:                                    Debugging Options.
24712 * dx:                                    Debugging Options.
24713 * dy:                                    Debugging Options.
24714 * dylib_file:                            Darwin Options.
24715 * dylinker_install_name:                 Darwin Options.
24716 * dynamic:                               Darwin Options.
24717 * dynamiclib:                            Darwin Options.
24718 * dZ:                                    Debugging Options.
24719 * dz:                                    Debugging Options.
24720 * E <1>:                                 Link Options.
24721 * E:                                     Overall Options.
24722 * EB <1>:                                ARC Options.
24723 * EB:                                    MIPS Options.
24724 * EL <1>:                                MIPS Options.
24725 * EL:                                    ARC Options.
24726 * exported_symbols_list:                 Darwin Options.
24727 * fabi-version:                          C++ Dialect Options.
24728 * falign-functions:                      Optimize Options.
24729 * falign-jumps:                          Optimize Options.
24730 * falign-labels:                         Optimize Options.
24731 * falign-loops:                          Optimize Options.
24732 * fargument-alias:                       Code Gen Options.
24733 * fargument-noalias:                     Code Gen Options.
24734 * fargument-noalias-global:              Code Gen Options.
24735 * fbounds-check:                         Code Gen Options.
24736 * fbranch-probabilities:                 Optimize Options.
24737 * fbranch-target-load-optimize:          Optimize Options.
24738 * fbranch-target-load-optimize2:         Optimize Options.
24739 * fcall-saved <1>:                       Code Gen Options.
24740 * fcall-saved:                           Interoperation.
24741 * fcall-used:                            Code Gen Options.
24742 * fcaller-saves:                         Optimize Options.
24743 * fcheck-new:                            C++ Dialect Options.
24744 * fcommon:                               Variable Attributes.
24745 * fcond-mismatch:                        C Dialect Options.
24746 * fconserve-space:                       C++ Dialect Options.
24747 * fconstant-string-class:                Objective-C Dialect Options.
24748 * fcse-follow-jumps:                     Optimize Options.
24749 * fcse-skip-blocks:                      Optimize Options.
24750 * fdata-sections:                        Optimize Options.
24751 * fdelayed-branch:                       Optimize Options.
24752 * fdelete-null-pointer-checks:           Optimize Options.
24753 * fdiagnostics-show-location:            Language Independent Options.
24754 * fdollars-in-identifiers <1>:           Interoperation.
24755 * fdollars-in-identifiers:               Preprocessor Options.
24756 * fdump-class-hierarchy:                 Debugging Options.
24757 * fdump-translation-unit:                Debugging Options.
24758 * fdump-tree:                            Debugging Options.
24759 * fdump-unnumbered:                      Debugging Options.
24760 * feliminate-dwarf2-dups:                Debugging Options.
24761 * feliminate-unused-debug-symbols:       Debugging Options.
24762 * feliminate-unused-debug-types:         Debugging Options.
24763 * fexceptions:                           Code Gen Options.
24764 * fexec-charset:                         Preprocessor Options.
24765 * fexpensive-optimizations:              Optimize Options.
24766 * ffast-math:                            Optimize Options.
24767 * ffinite-math-only:                     Optimize Options.
24768 * ffixed:                                Code Gen Options.
24769 * ffloat-store <1>:                      Disappointments.
24770 * ffloat-store:                          Optimize Options.
24771 * ffor-scope:                            C++ Dialect Options.
24772 * fforce-addr:                           Optimize Options.
24773 * fforce-mem:                            Optimize Options.
24774 * ffreestanding <1>:                     C Dialect Options.
24775 * ffreestanding <2>:                     Standards.
24776 * ffreestanding:                         Function Attributes.
24777 * ffunction-sections:                    Optimize Options.
24778 * fgcse:                                 Optimize Options.
24779 * fgcse-las:                             Optimize Options.
24780 * fgcse-lm:                              Optimize Options.
24781 * fgcse-sm:                              Optimize Options.
24782 * fgnu-runtime:                          Objective-C Dialect Options.
24783 * fhosted:                               C Dialect Options.
24784 * filelist:                              Darwin Options.
24785 * finhibit-size-directive:               Code Gen Options.
24786 * finline-functions:                     Optimize Options.
24787 * finline-limit:                         Optimize Options.
24788 * finput-charset:                        Preprocessor Options.
24789 * finstrument-functions <1>:             Code Gen Options.
24790 * finstrument-functions:                 Function Attributes.
24791 * fkeep-inline-functions <1>:            Inline.
24792 * fkeep-inline-functions:                Optimize Options.
24793 * fkeep-static-consts:                   Optimize Options.
24794 * flat_namespace:                        Darwin Options.
24795 * fleading-underscore:                   Code Gen Options.
24796 * floop-optimize:                        Optimize Options.
24797 * fmem-report:                           Debugging Options.
24798 * fmessage-length:                       Language Independent Options.
24799 * fmove-all-movables:                    Optimize Options.
24800 * fms-extensions <1>:                    C Dialect Options.
24801 * fms-extensions:                        C++ Dialect Options.
24802 * fnew-ra:                               Optimize Options.
24803 * fnext-runtime:                         Objective-C Dialect Options.
24804 * fno-access-control:                    C++ Dialect Options.
24805 * fno-asm:                               C Dialect Options.
24806 * fno-branch-count-reg:                  Optimize Options.
24807 * fno-builtin <1>:                       Other Builtins.
24808 * fno-builtin:                           C Dialect Options.
24809 * fno-common <1>:                        Code Gen Options.
24810 * fno-common:                            Variable Attributes.
24811 * fno-const-strings:                     C++ Dialect Options.
24812 * fno-cprop-registers:                   Optimize Options.
24813 * fno-default-inline <1>:                Optimize Options.
24814 * fno-default-inline <2>:                C++ Dialect Options.
24815 * fno-default-inline:                    Inline.
24816 * fno-defer-pop:                         Optimize Options.
24817 * fno-elide-constructors:                C++ Dialect Options.
24818 * fno-enforce-eh-specs:                  C++ Dialect Options.
24819 * fno-for-scope:                         C++ Dialect Options.
24820 * fno-function-cse:                      Optimize Options.
24821 * fno-gnu-keywords:                      C++ Dialect Options.
24822 * fno-guess-branch-probability:          Optimize Options.
24823 * fno-ident:                             Code Gen Options.
24824 * fno-implement-inlines <1>:             C++ Interface.
24825 * fno-implement-inlines:                 C++ Dialect Options.
24826 * fno-implicit-inline-templates:         C++ Dialect Options.
24827 * fno-implicit-templates <1>:            Template Instantiation.
24828 * fno-implicit-templates:                C++ Dialect Options.
24829 * fno-inline:                            Optimize Options.
24830 * fno-math-errno:                        Optimize Options.
24831 * fno-nil-receivers:                     Objective-C Dialect Options.
24832 * fno-nonansi-builtins:                  C++ Dialect Options.
24833 * fno-operator-names:                    C++ Dialect Options.
24834 * fno-optional-diags:                    C++ Dialect Options.
24835 * fno-peephole:                          Optimize Options.
24836 * fno-peephole2:                         Optimize Options.
24837 * fno-rtti:                              C++ Dialect Options.
24838 * fno-sched-interblock:                  Optimize Options.
24839 * fno-sched-spec:                        Optimize Options.
24840 * fno-show-column:                       Preprocessor Options.
24841 * fno-signed-bitfields:                  C Dialect Options.
24842 * fno-stack-limit:                       Code Gen Options.
24843 * fno-trapping-math:                     Optimize Options.
24844 * fno-unsigned-bitfields:                C Dialect Options.
24845 * fno-weak:                              C++ Dialect Options.
24846 * fno-working-directory:                 Preprocessor Options.
24847 * fno-zero-initialized-in-bss:           Optimize Options.
24848 * fnon-call-exceptions:                  Code Gen Options.
24849 * fobjc-exceptions:                      Objective-C Dialect Options.
24850 * fold-unroll-all-loops:                 Optimize Options.
24851 * fold-unroll-loops:                     Optimize Options.
24852 * fomit-frame-pointer:                   Optimize Options.
24853 * foptimize-register-move:               Optimize Options.
24854 * foptimize-sibling-calls:               Optimize Options.
24855 * force_cpusubtype_ALL:                  Darwin Options.
24856 * force_flat_namespace:                  Darwin Options.
24857 * fpack-struct:                          Code Gen Options.
24858 * fpcc-struct-return <1>:                Incompatibilities.
24859 * fpcc-struct-return:                    Code Gen Options.
24860 * fpch-deps:                             Preprocessor Options.
24861 * fpeel-loops:                           Optimize Options.
24862 * fpermissive:                           C++ Dialect Options.
24863 * fpic:                                  Code Gen Options.
24864 * fPIC:                                  Code Gen Options.
24865 * fpie:                                  Code Gen Options.
24866 * fPIE:                                  Code Gen Options.
24867 * fprefetch-loop-arrays:                 Optimize Options.
24868 * fpreprocessed:                         Preprocessor Options.
24869 * fprofile-arcs <1>:                     Debugging Options.
24870 * fprofile-arcs:                         Other Builtins.
24871 * fprofile-generate:                     Optimize Options.
24872 * fprofile-use:                          Optimize Options.
24873 * fprofile-values:                       Optimize Options.
24874 * frandom-string:                        Debugging Options.
24875 * freduce-all-givs:                      Optimize Options.
24876 * freg-struct-return:                    Code Gen Options.
24877 * fregmove:                              Optimize Options.
24878 * frename-registers:                     Optimize Options.
24879 * freorder-blocks:                       Optimize Options.
24880 * freorder-functions:                    Optimize Options.
24881 * freplace-objc-classes:                 Objective-C Dialect Options.
24882 * frepo <1>:                             C++ Dialect Options.
24883 * frepo:                                 Template Instantiation.
24884 * frerun-cse-after-loop:                 Optimize Options.
24885 * frerun-loop-opt:                       Optimize Options.
24886 * frounding-math:                        Optimize Options.
24887 * fsched-spec-load:                      Optimize Options.
24888 * fsched-spec-load-dangerous:            Optimize Options.
24889 * fsched-stalled-insns:                  Optimize Options.
24890 * fsched-stalled-insns-dep:              Optimize Options.
24891 * fsched-verbose:                        Debugging Options.
24892 * fsched2-use-superblocks:               Optimize Options.
24893 * fsched2-use-traces:                    Optimize Options.
24894 * fschedule-insns:                       Optimize Options.
24895 * fschedule-insns2:                      Optimize Options.
24896 * fshared-data:                          Code Gen Options.
24897 * fshort-double:                         Code Gen Options.
24898 * fshort-enums <1>:                      Type Attributes.
24899 * fshort-enums <2>:                      Non-bugs.
24900 * fshort-enums:                          Code Gen Options.
24901 * fshort-wchar:                          Code Gen Options.
24902 * fsignaling-nans:                       Optimize Options.
24903 * fsigned-bitfields <1>:                 Non-bugs.
24904 * fsigned-bitfields:                     C Dialect Options.
24905 * fsigned-char:                          C Dialect Options.
24906 * fsingle-precision-constant:            Optimize Options.
24907 * fstack-check:                          Code Gen Options.
24908 * fstack-limit-register:                 Code Gen Options.
24909 * fstack-limit-symbol:                   Code Gen Options.
24910 * fstats:                                C++ Dialect Options.
24911 * fstrength-reduce:                      Optimize Options.
24912 * fstrict-aliasing:                      Optimize Options.
24913 * fsyntax-only:                          Warning Options.
24914 * ftabstop:                              Preprocessor Options.
24915 * ftemplate-depth:                       C++ Dialect Options.
24916 * ftest-coverage:                        Debugging Options.
24917 * fthread-jumps:                         Optimize Options.
24918 * ftime-report:                          Debugging Options.
24919 * ftracer:                               Optimize Options.
24920 * ftrapv:                                Code Gen Options.
24921 * funit-at-a-time:                       Optimize Options.
24922 * funroll-all-loops:                     Optimize Options.
24923 * funroll-loops <1>:                     Non-bugs.
24924 * funroll-loops:                         Optimize Options.
24925 * funsafe-math-optimizations:            Optimize Options.
24926 * funsigned-bitfields <1>:               C Dialect Options.
24927 * funsigned-bitfields:                   Non-bugs.
24928 * funsigned-char:                        C Dialect Options.
24929 * funswitch-loops:                       Optimize Options.
24930 * funwind-tables:                        Code Gen Options.
24931 * fuse-cxa-atexit:                       C++ Dialect Options.
24932 * fverbose-asm:                          Code Gen Options.
24933 * fvpt:                                  Optimize Options.
24934 * fweb:                                  Optimize Options.
24935 * fwide-exec-charset:                    Preprocessor Options.
24936 * fworking-directory:                    Preprocessor Options.
24937 * fwrapv:                                Code Gen Options.
24938 * fwritable-strings <1>:                 C Dialect Options.
24939 * fwritable-strings:                     Incompatibilities.
24940 * fzero-link:                            Objective-C Dialect Options.
24941 * G:                                     MIPS Options.
24942 * g:                                     Debugging Options.
24943 * G <1>:                                 System V Options.
24944 * G <2>:                                 RS/6000 and PowerPC Options.
24945 * G:                                     M32R/D Options.
24946 * gcoff:                                 Debugging Options.
24947 * gdwarf-2:                              Debugging Options.
24948 * gen-decls:                             Objective-C Dialect Options.
24949 * ggdb:                                  Debugging Options.
24950 * gnu-ld:                                HPPA Options.
24951 * gstabs:                                Debugging Options.
24952 * gstabs+:                               Debugging Options.
24953 * gvms:                                  Debugging Options.
24954 * gxcoff:                                Debugging Options.
24955 * gxcoff+:                               Debugging Options.
24956 * H:                                     Preprocessor Options.
24957 * headerpad_max_install_names:           Darwin Options.
24958 * help <1>:                              Overall Options.
24959 * help:                                  Preprocessor Options.
24960 * hp-ld:                                 HPPA Options.
24961 * I <1>:                                 Directory Options.
24962 * I:                                     Preprocessor Options.
24963 * I- <1>:                                Directory Options.
24964 * I-:                                    Preprocessor Options.
24965 * idirafter:                             Preprocessor Options.
24966 * if-conversion:                         Optimize Options.
24967 * if-conversion2:                        Optimize Options.
24968 * imacros:                               Preprocessor Options.
24969 * image_base:                            Darwin Options.
24970 * include:                               Preprocessor Options.
24971 * init:                                  Darwin Options.
24972 * install_name:                          Darwin Options.
24973 * iprefix:                               Preprocessor Options.
24974 * isystem:                               Preprocessor Options.
24975 * iwithprefix:                           Preprocessor Options.
24976 * iwithprefixbefore:                     Preprocessor Options.
24977 * keep_private_externs:                  Darwin Options.
24978 * l:                                     Link Options.
24979 * L:                                     Directory Options.
24980 * lobjc:                                 Link Options.
24981 * M:                                     Preprocessor Options.
24982 * m1:                                    SH Options.
24983 * m10:                                   PDP-11 Options.
24984 * m128bit-long-double:                   i386 and x86-64 Options.
24985 * m16-bit:                               CRIS Options.
24986 * m2:                                    SH Options.
24987 * m210:                                  MCore Options.
24988 * m3:                                    SH Options.
24989 * m31:                                   S/390 and zSeries Options.
24990 * m32 <1>:                               i386 and x86-64 Options.
24991 * m32:                                   SPARC Options.
24992 * m32-bit:                               CRIS Options.
24993 * m32032:                                NS32K Options.
24994 * m32081:                                NS32K Options.
24995 * m32332:                                NS32K Options.
24996 * m32381:                                NS32K Options.
24997 * m32532:                                NS32K Options.
24998 * m32r:                                  M32R/D Options.
24999 * m32r2:                                 M32R/D Options.
25000 * m32rx:                                 M32R/D Options.
25001 * m340:                                  MCore Options.
25002 * m386:                                  i386 and x86-64 Options.
25003 * m3dnow:                                i386 and x86-64 Options.
25004 * m3e:                                   SH Options.
25005 * m4:                                    SH Options.
25006 * m4-nofpu:                              SH Options.
25007 * m4-single:                             SH Options.
25008 * m4-single-only:                        SH Options.
25009 * m40:                                   PDP-11 Options.
25010 * m45:                                   PDP-11 Options.
25011 * m486:                                  i386 and x86-64 Options.
25012 * m4byte-functions:                      MCore Options.
25013 * m5200:                                 M680x0 Options.
25014 * m64 <1>:                               i386 and x86-64 Options.
25015 * m64 <2>:                               SPARC Options.
25016 * m64:                                   S/390 and zSeries Options.
25017 * m68000:                                M680x0 Options.
25018 * m68020:                                M680x0 Options.
25019 * m68020-40:                             M680x0 Options.
25020 * m68020-60:                             M680x0 Options.
25021 * m68030:                                M680x0 Options.
25022 * m68040:                                M680x0 Options.
25023 * m68060:                                M680x0 Options.
25024 * m6811:                                 M68hc1x Options.
25025 * m6812:                                 M68hc1x Options.
25026 * m68881:                                M680x0 Options.
25027 * m68hc11:                               M68hc1x Options.
25028 * m68hc12:                               M68hc1x Options.
25029 * m68hcs12:                              M68hc1x Options.
25030 * m68S12:                                M68hc1x Options.
25031 * m8-bit:                                CRIS Options.
25032 * m96bit-long-double:                    i386 and x86-64 Options.
25033 * mabi-mmixware:                         MMIX Options.
25034 * mabi=32:                               MIPS Options.
25035 * mabi=64:                               MIPS Options.
25036 * mabi=altivec:                          RS/6000 and PowerPC Options.
25037 * mabi=eabi:                             MIPS Options.
25038 * mabi=gnu:                              MMIX Options.
25039 * mabi=n32:                              MIPS Options.
25040 * mabi=no-altivec:                       RS/6000 and PowerPC Options.
25041 * mabi=no-spe:                           RS/6000 and PowerPC Options.
25042 * mabi=o64:                              MIPS Options.
25043 * mabi=spe:                              RS/6000 and PowerPC Options.
25044 * mabicalls:                             MIPS Options.
25045 * mabort-on-noreturn:                    ARM Options.
25046 * mabshi:                                PDP-11 Options.
25047 * mac0:                                  PDP-11 Options.
25048 * macc-4:                                FRV Options.
25049 * macc-8:                                FRV Options.
25050 * maccumulate-outgoing-args:             i386 and x86-64 Options.
25051 * mads:                                  RS/6000 and PowerPC Options.
25052 * maix-struct-return:                    RS/6000 and PowerPC Options.
25053 * maix32:                                RS/6000 and PowerPC Options.
25054 * maix64:                                RS/6000 and PowerPC Options.
25055 * malign-300:                            H8/300 Options.
25056 * malign-double:                         i386 and x86-64 Options.
25057 * malign-int:                            M680x0 Options.
25058 * malign-loops:                          M32R/D Options.
25059 * malign-natural:                        RS/6000 and PowerPC Options.
25060 * malign-power:                          RS/6000 and PowerPC Options.
25061 * malignment-traps:                      ARM Options.
25062 * malloc-cc:                             FRV Options.
25063 * malpha-as:                             DEC Alpha Options.
25064 * maltivec:                              RS/6000 and PowerPC Options.
25065 * mam33:                                 MN10300 Options.
25066 * maout:                                 CRIS Options.
25067 * mapcs:                                 ARM Options.
25068 * mapcs-26:                              ARM Options.
25069 * mapcs-32:                              ARM Options.
25070 * mapcs-frame:                           ARM Options.
25071 * mapp-regs <1>:                         SPARC Options.
25072 * mapp-regs:                             V850 Options.
25073 * march <1>:                             HPPA Options.
25074 * march <2>:                             CRIS Options.
25075 * march <3>:                             ARM Options.
25076 * march <4>:                             MIPS Options.
25077 * march <5>:                             i386 and x86-64 Options.
25078 * march:                                 S/390 and zSeries Options.
25079 * masm-compat:                           Intel 960 Options.
25080 * masm-optimize:                         D30V Options.
25081 * masm=DIALECT:                          i386 and x86-64 Options.
25082 * mauto-incdec:                          M68hc1x Options.
25083 * mauto-pic:                             IA-64 Options.
25084 * mb:                                    SH Options.
25085 * mb-step:                               IA-64 Options.
25086 * mbackchain:                            S/390 and zSeries Options.
25087 * mbase-addresses:                       MMIX Options.
25088 * mbcopy:                                PDP-11 Options.
25089 * mbig <1>:                              TMS320C3x/C4x Options.
25090 * mbig:                                  RS/6000 and PowerPC Options.
25091 * mbig-endian <1>:                       ARM Options.
25092 * mbig-endian <2>:                       RS/6000 and PowerPC Options.
25093 * mbig-endian <3>:                       IA-64 Options.
25094 * mbig-endian:                           MCore Options.
25095 * mbig-memory:                           TMS320C3x/C4x Options.
25096 * mbig-switch <1>:                       HPPA Options.
25097 * mbig-switch:                           V850 Options.
25098 * mbigtable:                             SH Options.
25099 * mbit-align:                            RS/6000 and PowerPC Options.
25100 * mbitfield <1>:                         NS32K Options.
25101 * mbitfield:                             M680x0 Options.
25102 * mbk:                                   TMS320C3x/C4x Options.
25103 * mbranch-cheap:                         PDP-11 Options.
25104 * mbranch-cost:                          D30V Options.
25105 * mbranch-cost=NUMBER:                   M32R/D Options.
25106 * mbranch-expensive:                     PDP-11 Options.
25107 * mbranch-likely:                        MIPS Options.
25108 * mbranch-predict:                       MMIX Options.
25109 * mbuild-constants:                      DEC Alpha Options.
25110 * mbwx:                                  DEC Alpha Options.
25111 * mc68000:                               M680x0 Options.
25112 * mc68020:                               M680x0 Options.
25113 * mca:                                   Intel 960 Options.
25114 * mcall-gnu:                             RS/6000 and PowerPC Options.
25115 * mcall-linux:                           RS/6000 and PowerPC Options.
25116 * mcall-netbsd:                          RS/6000 and PowerPC Options.
25117 * mcall-prologues:                       AVR Options.
25118 * mcall-solaris:                         RS/6000 and PowerPC Options.
25119 * mcall-sysv:                            RS/6000 and PowerPC Options.
25120 * mcall-sysv-eabi:                       RS/6000 and PowerPC Options.
25121 * mcall-sysv-noeabi:                     RS/6000 and PowerPC Options.
25122 * mcallee-super-interworking:            ARM Options.
25123 * mcaller-super-interworking:            ARM Options.
25124 * mcallgraph-data:                       MCore Options.
25125 * mcc-init:                              CRIS Options.
25126 * mcf:                                   Intel 960 Options.
25127 * mcheck-zero-division:                  MIPS Options.
25128 * mcirrus-fix-invalid-insns:             ARM Options.
25129 * mcix:                                  DEC Alpha Options.
25130 * mcmodel=embmedany:                     SPARC Options.
25131 * mcmodel=kernel:                        i386 and x86-64 Options.
25132 * mcmodel=large:                         i386 and x86-64 Options.
25133 * mcmodel=medany:                        SPARC Options.
25134 * mcmodel=medium:                        i386 and x86-64 Options.
25135 * mcmodel=medlow:                        SPARC Options.
25136 * mcmodel=medmid:                        SPARC Options.
25137 * mcmodel=small:                         i386 and x86-64 Options.
25138 * mcode-align:                           Intel 960 Options.
25139 * mcomplex-addr:                         Intel 960 Options.
25140 * mcond-exec <1>:                        FRV Options.
25141 * mcond-exec:                            D30V Options.
25142 * mcond-move:                            FRV Options.
25143 * mconst-align:                          CRIS Options.
25144 * mconst16:                              Xtensa Options.
25145 * mconstant-gp:                          IA-64 Options.
25146 * mcpu <1>:                              DEC Alpha Options.
25147 * mcpu <2>:                              i386 and x86-64 Options.
25148 * mcpu <3>:                              RS/6000 and PowerPC Options.
25149 * mcpu <4>:                              FRV Options.
25150 * mcpu <5>:                              SPARC Options.
25151 * mcpu <6>:                              TMS320C3x/C4x Options.
25152 * mcpu <7>:                              CRIS Options.
25153 * mcpu <8>:                              ARC Options.
25154 * mcpu:                                  ARM Options.
25155 * mcpu32:                                M680x0 Options.
25156 * mcypress:                              SPARC Options.
25157 * MD:                                    Preprocessor Options.
25158 * mdalign:                               SH Options.
25159 * mdata:                                 ARC Options.
25160 * mdata-align:                           CRIS Options.
25161 * mdb:                                   TMS320C3x/C4x Options.
25162 * mdebug <1>:                            M32R/D Options.
25163 * mdebug:                                S/390 and zSeries Options.
25164 * mdec-asm:                              PDP-11 Options.
25165 * mdisable-callt:                        V850 Options.
25166 * mdisable-fpregs:                       HPPA Options.
25167 * mdisable-indexing:                     HPPA Options.
25168 * mdiv:                                  MCore Options.
25169 * mdouble:                               FRV Options.
25170 * mdouble-float:                         MIPS Options.
25171 * mdp-isr-reload:                        TMS320C3x/C4x Options.
25172 * mdwarf2-asm:                           IA-64 Options.
25173 * mdword:                                FRV Options.
25174 * mdynamic-no-pic:                       RS/6000 and PowerPC Options.
25175 * meabi:                                 RS/6000 and PowerPC Options.
25176 * mearly-stop-bits:                      IA-64 Options.
25177 * melf <1>:                              CRIS Options.
25178 * melf:                                  MMIX Options.
25179 * melinux:                               CRIS Options.
25180 * melinux-stacksize:                     CRIS Options.
25181 * memb:                                  RS/6000 and PowerPC Options.
25182 * membedded-data:                        MIPS Options.
25183 * membedded-pic:                         MIPS Options.
25184 * mep:                                   V850 Options.
25185 * mepsilon:                              MMIX Options.
25186 * mesa:                                  S/390 and zSeries Options.
25187 * metrax100:                             CRIS Options.
25188 * metrax4:                               CRIS Options.
25189 * mexplicit-relocs <1>:                  MIPS Options.
25190 * mexplicit-relocs:                      DEC Alpha Options.
25191 * mextmem:                               D30V Options.
25192 * mextmemory:                            D30V Options.
25193 * MF:                                    Preprocessor Options.
25194 * mfast-fix:                             TMS320C3x/C4x Options.
25195 * mfast-indirect-calls:                  HPPA Options.
25196 * mfaster-structs:                       SPARC Options.
25197 * mfix:                                  DEC Alpha Options.
25198 * mfix-sb1:                              MIPS Options.
25199 * mfixed-cc:                             FRV Options.
25200 * mfixed-range:                          IA-64 Options.
25201 * mflat:                                 SPARC Options.
25202 * mfloat-gprs:                           RS/6000 and PowerPC Options.
25203 * mfloat-ieee:                           DEC Alpha Options.
25204 * mfloat-vax:                            DEC Alpha Options.
25205 * mfloat32:                              PDP-11 Options.
25206 * mfloat64:                              PDP-11 Options.
25207 * mflush-func:                           MIPS Options.
25208 * mflush-func=NAME:                      M32R/D Options.
25209 * mflush-trap=NUMBER:                    M32R/D Options.
25210 * mfmovd:                                SH Options.
25211 * mfp:                                   ARM Options.
25212 * mfp-reg:                               DEC Alpha Options.
25213 * mfp-rounding-mode:                     DEC Alpha Options.
25214 * mfp-trap-mode:                         DEC Alpha Options.
25215 * mfp32:                                 MIPS Options.
25216 * mfp64:                                 MIPS Options.
25217 * mfpe:                                  ARM Options.
25218 * mfpr-32:                               FRV Options.
25219 * mfpr-64:                               FRV Options.
25220 * mfpu <1>:                              SPARC Options.
25221 * mfpu:                                  PDP-11 Options.
25222 * mfull-toc:                             RS/6000 and PowerPC Options.
25223 * mfused-madd <1>:                       S/390 and zSeries Options.
25224 * mfused-madd <2>:                       Xtensa Options.
25225 * mfused-madd <3>:                       RS/6000 and PowerPC Options.
25226 * mfused-madd:                           MIPS Options.
25227 * mg:                                    VAX Options.
25228 * MG:                                    Preprocessor Options.
25229 * mgas <1>:                              DEC Alpha Options.
25230 * mgas:                                  HPPA Options.
25231 * mgnu:                                  VAX Options.
25232 * mgnu-as:                               IA-64 Options.
25233 * mgnu-ld:                               IA-64 Options.
25234 * mgotplt:                               CRIS Options.
25235 * mgp32:                                 MIPS Options.
25236 * mgp64:                                 MIPS Options.
25237 * mgpr-32:                               FRV Options.
25238 * mgpr-64:                               FRV Options.
25239 * mh:                                    H8/300 Options.
25240 * mhard-float <1>:                       FRV Options.
25241 * mhard-float <2>:                       ARM Options.
25242 * mhard-float <3>:                       S/390 and zSeries Options.
25243 * mhard-float <4>:                       SPARC Options.
25244 * mhard-float <5>:                       MIPS Options.
25245 * mhard-float:                           RS/6000 and PowerPC Options.
25246 * mhard-quad-float:                      SPARC Options.
25247 * mhardlit:                              MCore Options.
25248 * mhimem:                                NS32K Options.
25249 * mhitachi:                              SH Options.
25250 * mic-compat:                            Intel 960 Options.
25251 * mic2.0-compat:                         Intel 960 Options.
25252 * mic3.0-compat:                         Intel 960 Options.
25253 * mieee <1>:                             SH Options.
25254 * mieee:                                 DEC Alpha Options.
25255 * mieee-compare:                         NS32K Options.
25256 * mieee-conformant:                      DEC Alpha Options.
25257 * mieee-fp:                              i386 and x86-64 Options.
25258 * mieee-with-inexact:                    DEC Alpha Options.
25259 * mimpure-text:                          SPARC Options.
25260 * minit-stack:                           AVR Options.
25261 * minline-all-stringops:                 i386 and x86-64 Options.
25262 * minline-float-divide-max-throughput:   IA-64 Options.
25263 * minline-float-divide-min-latency:      IA-64 Options.
25264 * minline-int-divide-max-throughput:     IA-64 Options.
25265 * minline-int-divide-min-latency:        IA-64 Options.
25266 * minmax:                                M68hc1x Options.
25267 * minsert-sched-nops:                    RS/6000 and PowerPC Options.
25268 * mint16:                                PDP-11 Options.
25269 * mint32 <1>:                            H8/300 Options.
25270 * mint32:                                PDP-11 Options.
25271 * mint64:                                MIPS Options.
25272 * mintel-asm:                            Intel 960 Options.
25273 * mips1:                                 MIPS Options.
25274 * mips16:                                MIPS Options.
25275 * mips2:                                 MIPS Options.
25276 * mips3:                                 MIPS Options.
25277 * mips32:                                MIPS Options.
25278 * mips32r2:                              MIPS Options.
25279 * mips4:                                 MIPS Options.
25280 * mips64:                                MIPS Options.
25281 * misel:                                 RS/6000 and PowerPC Options.
25282 * misize:                                SH Options.
25283 * missue-rate=NUMBER:                    M32R/D Options.
25284 * mjump-in-delay:                        HPPA Options.
25285 * mka:                                   Intel 960 Options.
25286 * mkb:                                   Intel 960 Options.
25287 * mknuthdiv:                             MMIX Options.
25288 * ml:                                    SH Options.
25289 * mlarge-data:                           DEC Alpha Options.
25290 * mlarge-text:                           DEC Alpha Options.
25291 * mleaf-procedures:                      Intel 960 Options.
25292 * mlibfuncs:                             MMIX Options.
25293 * mlibrary-pic:                          FRV Options.
25294 * mlinker-opt:                           HPPA Options.
25295 * mlinux:                                CRIS Options.
25296 * mlittle:                               RS/6000 and PowerPC Options.
25297 * mlittle-endian <1>:                    MCore Options.
25298 * mlittle-endian <2>:                    RS/6000 and PowerPC Options.
25299 * mlittle-endian <3>:                    IA-64 Options.
25300 * mlittle-endian <4>:                    ARM Options.
25301 * mlittle-endian:                        SPARC Options.
25302 * mlong-calls <1>:                       ARM Options.
25303 * mlong-calls <2>:                       M68hc1x Options.
25304 * mlong-calls <3>:                       MIPS Options.
25305 * mlong-calls:                           V850 Options.
25306 * mlong-double-64:                       Intel 960 Options.
25307 * mlong-load-store:                      HPPA Options.
25308 * mlong32:                               MIPS Options.
25309 * mlong64:                               MIPS Options.
25310 * mlongcall:                             RS/6000 and PowerPC Options.
25311 * mlongcalls:                            Xtensa Options.
25312 * mloop-unsigned:                        TMS320C3x/C4x Options.
25313 * MM:                                    Preprocessor Options.
25314 * mmad:                                  MIPS Options.
25315 * mmangle-cpu:                           ARC Options.
25316 * mmax:                                  DEC Alpha Options.
25317 * mmax-stack-frame:                      CRIS Options.
25318 * mmc:                                   Intel 960 Options.
25319 * mmcu:                                  AVR Options.
25320 * MMD:                                   Preprocessor Options.
25321 * mmedia:                                FRV Options.
25322 * mmemcpy:                               MIPS Options.
25323 * mmemory-latency:                       DEC Alpha Options.
25324 * mmemparm:                              TMS320C3x/C4x Options.
25325 * mminimal-toc:                          RS/6000 and PowerPC Options.
25326 * mmmx:                                  i386 and x86-64 Options.
25327 * mmodel=large:                          M32R/D Options.
25328 * mmodel=medium:                         M32R/D Options.
25329 * mmodel=small:                          M32R/D Options.
25330 * mmpyi:                                 TMS320C3x/C4x Options.
25331 * mmul-bug-workaround:                   CRIS Options.
25332 * mmuladd:                               FRV Options.
25333 * mmult-bug:                             MN10300 Options.
25334 * mmulti-add:                            NS32K Options.
25335 * mmulti-cond-exec:                      FRV Options.
25336 * mmultiple:                             RS/6000 and PowerPC Options.
25337 * mmvcle:                                S/390 and zSeries Options.
25338 * mmvme:                                 RS/6000 and PowerPC Options.
25339 * mn:                                    H8/300 Options.
25340 * mnested-cond-exec:                     FRV Options.
25341 * mnew-mnemonics:                        RS/6000 and PowerPC Options.
25342 * mno-3dnow:                             i386 and x86-64 Options.
25343 * mno-4byte-functions:                   MCore Options.
25344 * mno-abicalls:                          MIPS Options.
25345 * mno-abshi:                             PDP-11 Options.
25346 * mno-ac0:                               PDP-11 Options.
25347 * mno-align-double:                      i386 and x86-64 Options.
25348 * mno-align-int:                         M680x0 Options.
25349 * mno-align-loops:                       M32R/D Options.
25350 * mno-align-stringops:                   i386 and x86-64 Options.
25351 * mno-alignment-traps:                   ARM Options.
25352 * mno-altivec:                           RS/6000 and PowerPC Options.
25353 * mno-am33:                              MN10300 Options.
25354 * mno-app-regs <1>:                      SPARC Options.
25355 * mno-app-regs:                          V850 Options.
25356 * mno-asm-optimize:                      D30V Options.
25357 * mno-backchain:                         S/390 and zSeries Options.
25358 * mno-base-addresses:                    MMIX Options.
25359 * mno-bit-align:                         RS/6000 and PowerPC Options.
25360 * mno-bk:                                TMS320C3x/C4x Options.
25361 * mno-branch-likely:                     MIPS Options.
25362 * mno-branch-predict:                    MMIX Options.
25363 * mno-bwx:                               DEC Alpha Options.
25364 * mno-callgraph-data:                    MCore Options.
25365 * mno-check-zero-division:               MIPS Options.
25366 * mno-cirrus-fix-invalid-insns:          ARM Options.
25367 * mno-cix:                               DEC Alpha Options.
25368 * mno-code-align:                        Intel 960 Options.
25369 * mno-complex-addr:                      Intel 960 Options.
25370 * mno-cond-exec:                         FRV Options.
25371 * mno-cond-move:                         FRV Options.
25372 * mno-const-align:                       CRIS Options.
25373 * mno-const16:                           Xtensa Options.
25374 * mno-crt0:                              MN10300 Options.
25375 * mno-data-align:                        CRIS Options.
25376 * mno-db:                                TMS320C3x/C4x Options.
25377 * mno-debug:                             S/390 and zSeries Options.
25378 * mno-div:                               MCore Options.
25379 * mno-double:                            FRV Options.
25380 * mno-dwarf2-asm:                        IA-64 Options.
25381 * mno-dword:                             FRV Options.
25382 * mno-eabi:                              RS/6000 and PowerPC Options.
25383 * mno-early-stop-bits:                   IA-64 Options.
25384 * mno-eflags:                            FRV Options.
25385 * mno-embedded-data:                     MIPS Options.
25386 * mno-embedded-pic:                      MIPS Options.
25387 * mno-ep:                                V850 Options.
25388 * mno-epsilon:                           MMIX Options.
25389 * mno-explicit-relocs <1>:               DEC Alpha Options.
25390 * mno-explicit-relocs:                   MIPS Options.
25391 * mno-fancy-math-387:                    i386 and x86-64 Options.
25392 * mno-fast-fix:                          TMS320C3x/C4x Options.
25393 * mno-faster-structs:                    SPARC Options.
25394 * mno-fix:                               DEC Alpha Options.
25395 * mno-flat:                              SPARC Options.
25396 * mno-float32:                           PDP-11 Options.
25397 * mno-float64:                           PDP-11 Options.
25398 * mno-flush-func:                        M32R/D Options.
25399 * mno-flush-trap:                        M32R/D Options.
25400 * mno-fp-in-toc:                         RS/6000 and PowerPC Options.
25401 * mno-fp-regs:                           DEC Alpha Options.
25402 * mno-fp-ret-in-387:                     i386 and x86-64 Options.
25403 * mno-fpu:                               SPARC Options.
25404 * mno-fused-madd <1>:                    RS/6000 and PowerPC Options.
25405 * mno-fused-madd <2>:                    Xtensa Options.
25406 * mno-fused-madd <3>:                    MIPS Options.
25407 * mno-fused-madd:                        S/390 and zSeries Options.
25408 * mno-gnu-as:                            IA-64 Options.
25409 * mno-gnu-ld:                            IA-64 Options.
25410 * mno-gotplt:                            CRIS Options.
25411 * mno-hardlit:                           MCore Options.
25412 * mno-ieee-compare:                      NS32K Options.
25413 * mno-ieee-fp:                           i386 and x86-64 Options.
25414 * mno-int16:                             PDP-11 Options.
25415 * mno-int32:                             PDP-11 Options.
25416 * mno-interrupts:                        AVR Options.
25417 * mno-knuthdiv:                          MMIX Options.
25418 * mno-leaf-procedures:                   Intel 960 Options.
25419 * mno-libfuncs:                          MMIX Options.
25420 * mno-long-calls <1>:                    V850 Options.
25421 * mno-long-calls <2>:                    M68hc1x Options.
25422 * mno-long-calls <3>:                    ARM Options.
25423 * mno-long-calls <4>:                    MIPS Options.
25424 * mno-long-calls:                        HPPA Options.
25425 * mno-longcall:                          RS/6000 and PowerPC Options.
25426 * mno-longcalls:                         Xtensa Options.
25427 * mno-loop-unsigned:                     TMS320C3x/C4x Options.
25428 * mno-mad:                               MIPS Options.
25429 * mno-max:                               DEC Alpha Options.
25430 * mno-media:                             FRV Options.
25431 * mno-memcpy:                            MIPS Options.
25432 * mno-mips16:                            MIPS Options.
25433 * mno-mmx:                               i386 and x86-64 Options.
25434 * mno-mpyi:                              TMS320C3x/C4x Options.
25435 * mno-mul-bug-workaround:                CRIS Options.
25436 * mno-muladd:                            FRV Options.
25437 * mno-mult-bug:                          MN10300 Options.
25438 * mno-multi-cond-exec:                   FRV Options.
25439 * mno-multiple:                          RS/6000 and PowerPC Options.
25440 * mno-mvcle:                             S/390 and zSeries Options.
25441 * mno-nested-cond-exec:                  FRV Options.
25442 * mno-pack:                              FRV Options.
25443 * mno-parallel-insns:                    TMS320C3x/C4x Options.
25444 * mno-parallel-mpy:                      TMS320C3x/C4x Options.
25445 * mno-pic:                               IA-64 Options.
25446 * mno-power:                             RS/6000 and PowerPC Options.
25447 * mno-power2:                            RS/6000 and PowerPC Options.
25448 * mno-powerpc:                           RS/6000 and PowerPC Options.
25449 * mno-powerpc-gfxopt:                    RS/6000 and PowerPC Options.
25450 * mno-powerpc-gpopt:                     RS/6000 and PowerPC Options.
25451 * mno-powerpc64:                         RS/6000 and PowerPC Options.
25452 * mno-prolog-function:                   V850 Options.
25453 * mno-prologue-epilogue:                 CRIS Options.
25454 * mno-prototype:                         RS/6000 and PowerPC Options.
25455 * mno-push-args:                         i386 and x86-64 Options.
25456 * mno-register-names:                    IA-64 Options.
25457 * mno-regnames:                          RS/6000 and PowerPC Options.
25458 * mno-relax-immediate:                   MCore Options.
25459 * mno-relocatable:                       RS/6000 and PowerPC Options.
25460 * mno-relocatable-lib:                   RS/6000 and PowerPC Options.
25461 * mno-rnames:                            MIPS Options.
25462 * mno-rptb:                              TMS320C3x/C4x Options.
25463 * mno-rpts:                              TMS320C3x/C4x Options.
25464 * mno-scc:                               FRV Options.
25465 * mno-sched-prolog:                      ARM Options.
25466 * mno-sdata <1>:                         IA-64 Options.
25467 * mno-sdata:                             RS/6000 and PowerPC Options.
25468 * mno-side-effects:                      CRIS Options.
25469 * mno-single-exit:                       MMIX Options.
25470 * mno-slow-bytes:                        MCore Options.
25471 * mno-small-exec:                        S/390 and zSeries Options.
25472 * mno-soft-float:                        DEC Alpha Options.
25473 * mno-space-regs:                        HPPA Options.
25474 * mno-split:                             PDP-11 Options.
25475 * mno-split-addresses:                   MIPS Options.
25476 * mno-sse:                               i386 and x86-64 Options.
25477 * mno-stack-align:                       CRIS Options.
25478 * mno-stack-bias:                        SPARC Options.
25479 * mno-strict-align <1>:                  M680x0 Options.
25480 * mno-strict-align <2>:                  Intel 960 Options.
25481 * mno-strict-align:                      RS/6000 and PowerPC Options.
25482 * mno-string:                            RS/6000 and PowerPC Options.
25483 * mno-sum-in-toc:                        RS/6000 and PowerPC Options.
25484 * mno-svr3-shlib:                        i386 and x86-64 Options.
25485 * mno-tablejump:                         AVR Options.
25486 * mno-tail-call:                         Intel 960 Options.
25487 * mno-target-align:                      Xtensa Options.
25488 * mno-text-section-literals:             Xtensa Options.
25489 * mno-toc:                               RS/6000 and PowerPC Options.
25490 * mno-toplevel-symbols:                  MMIX Options.
25491 * mno-unaligned-doubles:                 SPARC Options.
25492 * mno-uninit-const-in-rodata:            MIPS Options.
25493 * mno-update:                            RS/6000 and PowerPC Options.
25494 * mno-v8plus:                            SPARC Options.
25495 * mno-vis:                               SPARC Options.
25496 * mno-vliw-branch:                       FRV Options.
25497 * mno-volatile-asm-stop:                 IA-64 Options.
25498 * mno-wide-bitfields:                    MCore Options.
25499 * mno-xgot:                              MIPS Options.
25500 * mno-xl-call:                           RS/6000 and PowerPC Options.
25501 * mno-zero-extend:                       MMIX Options.
25502 * mnobitfield <1>:                       NS32K Options.
25503 * mnobitfield:                           M680x0 Options.
25504 * mnohimem:                              NS32K Options.
25505 * mnomacsave:                            SH Options.
25506 * mnominmax:                             M68hc1x Options.
25507 * mnomulti-add:                          NS32K Options.
25508 * mnop-fun-dllimport:                    ARM Options.
25509 * mnoregparam:                           NS32K Options.
25510 * mnosb:                                 NS32K Options.
25511 * mnumerics:                             Intel 960 Options.
25512 * mold-align:                            Intel 960 Options.
25513 * mold-mnemonics:                        RS/6000 and PowerPC Options.
25514 * momit-leaf-frame-pointer:              i386 and x86-64 Options.
25515 * monchip:                               D30V Options.
25516 * MP:                                    Preprocessor Options.
25517 * mpa-risc-1-0:                          HPPA Options.
25518 * mpa-risc-1-1:                          HPPA Options.
25519 * mpa-risc-2-0:                          HPPA Options.
25520 * mpack:                                 FRV Options.
25521 * mpadstruct:                            SH Options.
25522 * mparallel-insns:                       TMS320C3x/C4x Options.
25523 * mparallel-mpy:                         TMS320C3x/C4x Options.
25524 * mparanoid:                             TMS320C3x/C4x Options.
25525 * mpcrel:                                M680x0 Options.
25526 * mpdebug:                               CRIS Options.
25527 * mpe:                                   RS/6000 and PowerPC Options.
25528 * mpentium:                              i386 and x86-64 Options.
25529 * mpentiumpro:                           i386 and x86-64 Options.
25530 * mpic-register:                         ARM Options.
25531 * mpoke-function-name:                   ARM Options.
25532 * mportable-runtime:                     HPPA Options.
25533 * mpower:                                RS/6000 and PowerPC Options.
25534 * mpower2:                               RS/6000 and PowerPC Options.
25535 * mpowerpc:                              RS/6000 and PowerPC Options.
25536 * mpowerpc-gfxopt:                       RS/6000 and PowerPC Options.
25537 * mpowerpc-gpopt:                        RS/6000 and PowerPC Options.
25538 * mpowerpc64:                            RS/6000 and PowerPC Options.
25539 * mprefergot:                            SH Options.
25540 * mpreferred-stack-boundary:             i386 and x86-64 Options.
25541 * mprioritize-restricted-insns:          RS/6000 and PowerPC Options.
25542 * mprolog-function:                      V850 Options.
25543 * mprologue-epilogue:                    CRIS Options.
25544 * mprototype:                            RS/6000 and PowerPC Options.
25545 * mpush-args:                            i386 and x86-64 Options.
25546 * MQ:                                    Preprocessor Options.
25547 * mregister-names:                       IA-64 Options.
25548 * mregnames:                             RS/6000 and PowerPC Options.
25549 * mregparam:                             NS32K Options.
25550 * mregparm <1>:                          TMS320C3x/C4x Options.
25551 * mregparm:                              i386 and x86-64 Options.
25552 * mrelax <1>:                            MN10300 Options.
25553 * mrelax <2>:                            H8/300 Options.
25554 * mrelax:                                SH Options.
25555 * mrelax-immediate:                      MCore Options.
25556 * mrelocatable:                          RS/6000 and PowerPC Options.
25557 * mrelocatable-lib:                      RS/6000 and PowerPC Options.
25558 * mrnames:                               MIPS Options.
25559 * mrodata:                               ARC Options.
25560 * mrptb:                                 TMS320C3x/C4x Options.
25561 * mrpts:                                 TMS320C3x/C4x Options.
25562 * mrtd <1>:                              M680x0 Options.
25563 * mrtd <2>:                              Function Attributes.
25564 * mrtd <3>:                              i386 and x86-64 Options.
25565 * mrtd:                                  NS32K Options.
25566 * ms:                                    H8/300 Options.
25567 * ms2600:                                H8/300 Options.
25568 * msa:                                   Intel 960 Options.
25569 * msb <1>:                               NS32K Options.
25570 * msb:                                   Intel 960 Options.
25571 * mscc:                                  FRV Options.
25572 * msched-costly-dep:                     RS/6000 and PowerPC Options.
25573 * mschedule:                             HPPA Options.
25574 * msda:                                  V850 Options.
25575 * msdata <1>:                            IA-64 Options.
25576 * msdata:                                RS/6000 and PowerPC Options.
25577 * msdata-data:                           RS/6000 and PowerPC Options.
25578 * msdata=default:                        RS/6000 and PowerPC Options.
25579 * msdata=eabi:                           RS/6000 and PowerPC Options.
25580 * msdata=none <1>:                       RS/6000 and PowerPC Options.
25581 * msdata=none:                           M32R/D Options.
25582 * msdata=sdata:                          M32R/D Options.
25583 * msdata=sysv:                           RS/6000 and PowerPC Options.
25584 * msdata=use:                            M32R/D Options.
25585 * mshort <1>:                            M68hc1x Options.
25586 * mshort:                                M680x0 Options.
25587 * msim <1>:                              RS/6000 and PowerPC Options.
25588 * msim:                                  Xstormy16 Options.
25589 * msingle-exit:                          MMIX Options.
25590 * msingle-float:                         MIPS Options.
25591 * msingle-pic-base:                      ARM Options.
25592 * msio:                                  HPPA Options.
25593 * msize:                                 AVR Options.
25594 * mslow-bytes:                           MCore Options.
25595 * msmall:                                TMS320C3x/C4x Options.
25596 * msmall-data:                           DEC Alpha Options.
25597 * msmall-exec:                           S/390 and zSeries Options.
25598 * msmall-memory:                         TMS320C3x/C4x Options.
25599 * msmall-text:                           DEC Alpha Options.
25600 * msoft-float <1>:                       M680x0 Options.
25601 * msoft-float <2>:                       i386 and x86-64 Options.
25602 * msoft-float <3>:                       RS/6000 and PowerPC Options.
25603 * msoft-float <4>:                       DEC Alpha Options.
25604 * msoft-float <5>:                       NS32K Options.
25605 * msoft-float <6>:                       SPARC Options.
25606 * msoft-float <7>:                       S/390 and zSeries Options.
25607 * msoft-float <8>:                       HPPA Options.
25608 * msoft-float <9>:                       PDP-11 Options.
25609 * msoft-float <10>:                      FRV Options.
25610 * msoft-float <11>:                      ARM Options.
25611 * msoft-float <12>:                      MIPS Options.
25612 * msoft-float:                           Intel 960 Options.
25613 * msoft-quad-float:                      SPARC Options.
25614 * msoft-reg-count:                       M68hc1x Options.
25615 * mspace <1>:                            V850 Options.
25616 * mspace:                                SH Options.
25617 * msparclite:                            SPARC Options.
25618 * mspe:                                  RS/6000 and PowerPC Options.
25619 * msplit:                                PDP-11 Options.
25620 * msplit-addresses:                      MIPS Options.
25621 * msse:                                  i386 and x86-64 Options.
25622 * mstack-align:                          CRIS Options.
25623 * mstack-arg-probe:                      i386 and x86-64 Options.
25624 * mstack-bias:                           SPARC Options.
25625 * mstrict-align <1>:                     RS/6000 and PowerPC Options.
25626 * mstrict-align <2>:                     M680x0 Options.
25627 * mstrict-align:                         Intel 960 Options.
25628 * mstring:                               RS/6000 and PowerPC Options.
25629 * mstructure-size-boundary:              ARM Options.
25630 * msupersparc:                           SPARC Options.
25631 * msvr3-shlib:                           i386 and x86-64 Options.
25632 * msvr4-struct-return:                   RS/6000 and PowerPC Options.
25633 * MT:                                    Preprocessor Options.
25634 * mtail-call:                            Intel 960 Options.
25635 * mtarget-align:                         Xtensa Options.
25636 * mtda:                                  V850 Options.
25637 * mtext:                                 ARC Options.
25638 * mtext-section-literals:                Xtensa Options.
25639 * mthreads:                              i386 and x86-64 Options.
25640 * mthumb:                                ARM Options.
25641 * mthumb-interwork:                      ARM Options.
25642 * mti:                                   TMS320C3x/C4x Options.
25643 * mtiny-stack:                           AVR Options.
25644 * mtls-direct-seg-refs:                  i386 and x86-64 Options.
25645 * mtoc:                                  RS/6000 and PowerPC Options.
25646 * mtomcat-stats:                         FRV Options.
25647 * mtoplevel-symbols:                     MMIX Options.
25648 * mtpcs-frame:                           ARM Options.
25649 * mtpcs-leaf-frame:                      ARM Options.
25650 * mtrap-precision:                       DEC Alpha Options.
25651 * mtune <1>:                             S/390 and zSeries Options.
25652 * mtune <2>:                             MIPS Options.
25653 * mtune <3>:                             SPARC Options.
25654 * mtune <4>:                             i386 and x86-64 Options.
25655 * mtune <5>:                             ARM Options.
25656 * mtune <6>:                             DEC Alpha Options.
25657 * mtune <7>:                             RS/6000 and PowerPC Options.
25658 * mtune:                                 CRIS Options.
25659 * multi_module:                          Darwin Options.
25660 * multiply_defined:                      Darwin Options.
25661 * multiply_defined_unused:               Darwin Options.
25662 * munaligned-doubles:                    SPARC Options.
25663 * muninit-const-in-rodata:               MIPS Options.
25664 * munix:                                 VAX Options.
25665 * munix-asm:                             PDP-11 Options.
25666 * mupdate:                               RS/6000 and PowerPC Options.
25667 * musermode:                             SH Options.
25668 * mv8:                                   SPARC Options.
25669 * mv850:                                 V850 Options.
25670 * mv850e:                                V850 Options.
25671 * mv850e1:                               V850 Options.
25672 * mv8plus:                               SPARC Options.
25673 * mvis:                                  SPARC Options.
25674 * mvliw-branch:                          FRV Options.
25675 * mvms-return-codes:                     DEC Alpha/VMS Options.
25676 * mvolatile-asm-stop:                    IA-64 Options.
25677 * mvxworks:                              RS/6000 and PowerPC Options.
25678 * mwide-bitfields:                       MCore Options.
25679 * mwindiss:                              RS/6000 and PowerPC Options.
25680 * mwords-little-endian:                  ARM Options.
25681 * mxgot:                                 MIPS Options.
25682 * mxl-call:                              RS/6000 and PowerPC Options.
25683 * myellowknife:                          RS/6000 and PowerPC Options.
25684 * mzarch:                                S/390 and zSeries Options.
25685 * mzda:                                  V850 Options.
25686 * mzero-extend:                          MMIX Options.
25687 * no-integrated-cpp:                     C Dialect Options.
25688 * no-red-zone:                           i386 and x86-64 Options.
25689 * noall_load:                            Darwin Options.
25690 * nocpp:                                 MIPS Options.
25691 * nodefaultlibs:                         Link Options.
25692 * nofixprebinding:                       Darwin Options.
25693 * nolibdld:                              HPPA Options.
25694 * nomultidefs:                           Darwin Options.
25695 * noprebind:                             Darwin Options.
25696 * noseglinkedit:                         Darwin Options.
25697 * nostartfiles:                          Link Options.
25698 * nostdinc:                              Preprocessor Options.
25699 * nostdinc++ <1>:                        C++ Dialect Options.
25700 * nostdinc++:                            Preprocessor Options.
25701 * nostdlib:                              Link Options.
25702 * O:                                     Optimize Options.
25703 * o <1>:                                 Preprocessor Options.
25704 * o:                                     Overall Options.
25705 * O0:                                    Optimize Options.
25706 * O1:                                    Optimize Options.
25707 * O2:                                    Optimize Options.
25708 * O3:                                    Optimize Options.
25709 * Os:                                    Optimize Options.
25710 * P:                                     Preprocessor Options.
25711 * p:                                     Debugging Options.
25712 * pagezero_size:                         Darwin Options.
25713 * param:                                 Optimize Options.
25714 * pass-exit-codes:                       Overall Options.
25715 * pedantic <1>:                          Preprocessor Options.
25716 * pedantic <2>:                          Warnings and Errors.
25717 * pedantic <3>:                          Standards.
25718 * pedantic <4>:                          Warning Options.
25719 * pedantic <5>:                          C Extensions.
25720 * pedantic:                              Alternate Keywords.
25721 * pedantic-errors <1>:                   Actual Bugs.
25722 * pedantic-errors <2>:                   Non-bugs.
25723 * pedantic-errors <3>:                   Warning Options.
25724 * pedantic-errors <4>:                   Warnings and Errors.
25725 * pedantic-errors <5>:                   Standards.
25726 * pedantic-errors:                       Preprocessor Options.
25727 * pg:                                    Debugging Options.
25728 * pie:                                   Link Options.
25729 * pipe:                                  Overall Options.
25730 * prebind:                               Darwin Options.
25731 * prebind_all_twolevel_modules:          Darwin Options.
25732 * preprocessor:                          Preprocessor Options.
25733 * print-file-name:                       Debugging Options.
25734 * print-libgcc-file-name:                Debugging Options.
25735 * print-multi-directory:                 Debugging Options.
25736 * print-multi-lib:                       Debugging Options.
25737 * print-objc-runtime-info:               Objective-C Dialect Options.
25738 * print-prog-name:                       Debugging Options.
25739 * print-search-dirs:                     Debugging Options.
25740 * private_bundle:                        Darwin Options.
25741 * pthread:                               RS/6000 and PowerPC Options.
25742 * pthreads:                              SPARC Options.
25743 * Q:                                     Debugging Options.
25744 * Qn:                                    System V Options.
25745 * Qy:                                    System V Options.
25746 * read_only_relocs:                      Darwin Options.
25747 * remap:                                 Preprocessor Options.
25748 * s:                                     Link Options.
25749 * S <1>:                                 Overall Options.
25750 * S:                                     Link Options.
25751 * save-temps:                            Debugging Options.
25752 * sectalign:                             Darwin Options.
25753 * sectcreate:                            Darwin Options.
25754 * sectobjectsymbols:                     Darwin Options.
25755 * sectorder:                             Darwin Options.
25756 * seg1addr:                              Darwin Options.
25757 * seg_addr_table:                        Darwin Options.
25758 * seg_addr_table_filename:               Darwin Options.
25759 * seglinkedit:                           Darwin Options.
25760 * segprot:                               Darwin Options.
25761 * segs_read_only_addr:                   Darwin Options.
25762 * segs_read_write_addr:                  Darwin Options.
25763 * shared:                                Link Options.
25764 * shared-libgcc:                         Link Options.
25765 * sim:                                   CRIS Options.
25766 * sim2:                                  CRIS Options.
25767 * single_module:                         Darwin Options.
25768 * specs:                                 Directory Options.
25769 * static <1>:                            Darwin Options.
25770 * static <2>:                            HPPA Options.
25771 * static:                                Link Options.
25772 * static-libgcc:                         Link Options.
25773 * std <1>:                               Standards.
25774 * std <2>:                               Other Builtins.
25775 * std <3>:                               C Dialect Options.
25776 * std:                                   Non-bugs.
25777 * std=:                                  Preprocessor Options.
25778 * sub_library:                           Darwin Options.
25779 * sub_umbrella:                          Darwin Options.
25780 * symbolic:                              Link Options.
25781 * target-help <1>:                       Overall Options.
25782 * target-help:                           Preprocessor Options.
25783 * threads <1>:                           SPARC Options.
25784 * threads:                               HPPA Options.
25785 * time:                                  Debugging Options.
25786 * traditional <1>:                       C Dialect Options.
25787 * traditional:                           Incompatibilities.
25788 * traditional-cpp <1>:                   C Dialect Options.
25789 * traditional-cpp:                       Preprocessor Options.
25790 * trigraphs <1>:                         Preprocessor Options.
25791 * trigraphs:                             C Dialect Options.
25792 * twolevel_namespace:                    Darwin Options.
25793 * u:                                     Link Options.
25794 * U:                                     Preprocessor Options.
25795 * umbrella:                              Darwin Options.
25796 * undef:                                 Preprocessor Options.
25797 * undefined:                             Darwin Options.
25798 * unexported_symbols_list:               Darwin Options.
25799 * v <1>:                                 Preprocessor Options.
25800 * v:                                     Overall Options.
25801 * V:                                     Target Options.
25802 * version <1>:                           Preprocessor Options.
25803 * version:                               Overall Options.
25804 * w:                                     Preprocessor Options.
25805 * W <1>:                                 Warning Options.
25806 * W:                                     Incompatibilities.
25807 * w:                                     Warning Options.
25808 * Wa:                                    Assembler Options.
25809 * Wabi:                                  C++ Dialect Options.
25810 * Waggregate-return:                     Warning Options.
25811 * Wall <1>:                              Preprocessor Options.
25812 * Wall <2>:                              Warning Options.
25813 * Wall:                                  Standard Libraries.
25814 * Wbad-function-cast:                    Warning Options.
25815 * Wcast-align:                           Warning Options.
25816 * Wcast-qual:                            Warning Options.
25817 * Wchar-subscripts:                      Warning Options.
25818 * Wcomment <1>:                          Preprocessor Options.
25819 * Wcomment:                              Warning Options.
25820 * Wcomments:                             Preprocessor Options.
25821 * Wconversion <1>:                       Warning Options.
25822 * Wconversion:                           Protoize Caveats.
25823 * Wctor-dtor-privacy:                    C++ Dialect Options.
25824 * Wdeclaration-after-statement:          Warning Options.
25825 * Wdisabled-optimization:                Warning Options.
25826 * Wdiv-by-zero:                          Warning Options.
25827 * weak_reference_mismatches:             Darwin Options.
25828 * Weffc++:                               C++ Dialect Options.
25829 * Wendif-labels <1>:                     Preprocessor Options.
25830 * Wendif-labels:                         Warning Options.
25831 * Werror <1>:                            Preprocessor Options.
25832 * Werror:                                Warning Options.
25833 * Werror-implicit-function-declaration:  Warning Options.
25834 * Wextra:                                Warning Options.
25835 * Wfloat-equal:                          Warning Options.
25836 * Wformat <1>:                           Function Attributes.
25837 * Wformat:                               Warning Options.
25838 * Wformat-nonliteral <1>:                Warning Options.
25839 * Wformat-nonliteral:                    Function Attributes.
25840 * Wformat-security:                      Warning Options.
25841 * Wformat-y2k:                           Warning Options.
25842 * Wformat=2:                             Warning Options.
25843 * whatsloaded:                           Darwin Options.
25844 * whyload:                               Darwin Options.
25845 * Wimplicit:                             Warning Options.
25846 * Wimplicit-function-declaration:        Warning Options.
25847 * Wimplicit-int:                         Warning Options.
25848 * Wimport:                               Preprocessor Options.
25849 * Winit-self:                            Warning Options.
25850 * Winline <1>:                           Inline.
25851 * Winline:                               Warning Options.
25852 * Winvalid-pch:                          Warning Options.
25853 * Wl:                                    Link Options.
25854 * Wlarger-than:                          Warning Options.
25855 * Wlong-long:                            Warning Options.
25856 * Wmain:                                 Warning Options.
25857 * Wmissing-braces:                       Warning Options.
25858 * Wmissing-declarations:                 Warning Options.
25859 * Wmissing-format-attribute:             Warning Options.
25860 * Wmissing-noreturn:                     Warning Options.
25861 * Wmissing-prototypes:                   Warning Options.
25862 * Wmultichar:                            Warning Options.
25863 * Wnested-externs:                       Warning Options.
25864 * Wno-deprecated:                        C++ Dialect Options.
25865 * Wno-deprecated-declarations:           Warning Options.
25866 * Wno-div-by-zero:                       Warning Options.
25867 * Wno-format-extra-args:                 Warning Options.
25868 * Wno-format-zero-length:                Warning Options.
25869 * Wno-import:                            Warning Options.
25870 * Wno-invalid-offsetof:                  Warning Options.
25871 * Wno-long-long:                         Warning Options.
25872 * Wno-multichar:                         Warning Options.
25873 * Wno-non-template-friend:               C++ Dialect Options.
25874 * Wno-pmf-conversions <1>:               C++ Dialect Options.
25875 * Wno-pmf-conversions:                   Bound member functions.
25876 * Wno-protocol:                          Objective-C Dialect Options.
25877 * Wnon-virtual-dtor:                     C++ Dialect Options.
25878 * Wnonnull:                              Warning Options.
25879 * Wold-style-cast:                       C++ Dialect Options.
25880 * Wold-style-definition:                 Warning Options.
25881 * Woverloaded-virtual:                   C++ Dialect Options.
25882 * Wp:                                    Preprocessor Options.
25883 * Wpacked:                               Warning Options.
25884 * Wpadded:                               Warning Options.
25885 * Wparentheses:                          Warning Options.
25886 * Wpointer-arith <1>:                    Warning Options.
25887 * Wpointer-arith:                        Pointer Arith.
25888 * Wredundant-decls:                      Warning Options.
25889 * Wreorder:                              C++ Dialect Options.
25890 * Wreturn-type:                          Warning Options.
25891 * Wselector:                             Objective-C Dialect Options.
25892 * Wsequence-point:                       Warning Options.
25893 * Wshadow:                               Warning Options.
25894 * Wsign-compare:                         Warning Options.
25895 * Wsign-promo:                           C++ Dialect Options.
25896 * Wstrict-aliasing:                      Warning Options.
25897 * Wstrict-prototypes:                    Warning Options.
25898 * Wswitch:                               Warning Options.
25899 * Wswitch-enum:                          Warning Options.
25900 * Wswitch-switch:                        Warning Options.
25901 * Wsynth:                                C++ Dialect Options.
25902 * Wsystem-headers <1>:                   Warning Options.
25903 * Wsystem-headers:                       Preprocessor Options.
25904 * Wtraditional <1>:                      Preprocessor Options.
25905 * Wtraditional:                          Warning Options.
25906 * Wtrigraphs <1>:                        Preprocessor Options.
25907 * Wtrigraphs:                            Warning Options.
25908 * Wundeclared-selector:                  Objective-C Dialect Options.
25909 * Wundef <1>:                            Preprocessor Options.
25910 * Wundef:                                Warning Options.
25911 * Wuninitialized:                        Warning Options.
25912 * Wunknown-pragmas:                      Warning Options.
25913 * Wunreachable-code:                     Warning Options.
25914 * Wunused:                               Warning Options.
25915 * Wunused-function:                      Warning Options.
25916 * Wunused-label:                         Warning Options.
25917 * Wunused-macros:                        Preprocessor Options.
25918 * Wunused-parameter:                     Warning Options.
25919 * Wunused-value:                         Warning Options.
25920 * Wunused-variable:                      Warning Options.
25921 * Wwrite-strings:                        Warning Options.
25922 * x <1>:                                 Preprocessor Options.
25923 * x:                                     Overall Options.
25924 * Xassembler:                            Assembler Options.
25925 * Xlinker:                               Link Options.
25926 * Ym:                                    System V Options.
25927 * YP:                                    System V Options.
25929 \x1f
25930 File: gcc.info,  Node: Keyword Index,  Prev: Option Index,  Up: Top
25932 Keyword Index
25933 *************
25935 * Menu:
25937 * ! in constraint:                       Multi-Alternative.
25938 * # in constraint:                       Modifiers.
25939 * #pragma:                               Pragmas.
25940 * #pragma implementation:                C++ Interface.
25941 * #pragma implementation, implied:       C++ Interface.
25942 * #pragma interface:                     C++ Interface.
25943 * #pragma, reason for not using:         Function Attributes.
25944 * $:                                     Dollar Signs.
25945 * % in constraint:                       Modifiers.
25946 * %include:                              Spec Files.
25947 * %include_noerr:                        Spec Files.
25948 * %rename:                               Spec Files.
25949 * & in constraint:                       Modifiers.
25950 * ':                                     Incompatibilities.
25951 * * in constraint:                       Modifiers.
25952 * + in constraint:                       Modifiers.
25953 * -lgcc, use with -nodefaultlibs:        Link Options.
25954 * -lgcc, use with -nostdlib:             Link Options.
25955 * -nodefaultlibs and unresolved references: Link Options.
25956 * -nostdlib and unresolved references:   Link Options.
25957 * .sdata/.sdata2 references (PowerPC):   RS/6000 and PowerPC Options.
25958 * //:                                    C++ Comments.
25959 * 0 in constraint:                       Simple Constraints.
25960 * < in constraint:                       Simple Constraints.
25961 * <?:                                    Min and Max.
25962 * = in constraint:                       Modifiers.
25963 * > in constraint:                       Simple Constraints.
25964 * >?:                                    Min and Max.
25965 * ? in constraint:                       Multi-Alternative.
25966 * ?: extensions <1>:                     Lvalues.
25967 * ?: extensions:                         Conditionals.
25968 * ?: side effect:                        Conditionals.
25969 * _ in variables in macros:              Typeof.
25970 * __builtin_apply:                       Constructing Calls.
25971 * __builtin_apply_args:                  Constructing Calls.
25972 * __builtin_choose_expr:                 Other Builtins.
25973 * __builtin_clz:                         Other Builtins.
25974 * __builtin_clzl:                        Other Builtins.
25975 * __builtin_clzll:                       Other Builtins.
25976 * __builtin_constant_p:                  Other Builtins.
25977 * __builtin_ctz:                         Other Builtins.
25978 * __builtin_ctzl:                        Other Builtins.
25979 * __builtin_ctzll:                       Other Builtins.
25980 * __builtin_expect:                      Other Builtins.
25981 * __builtin_ffs:                         Other Builtins.
25982 * __builtin_ffsl:                        Other Builtins.
25983 * __builtin_ffsll:                       Other Builtins.
25984 * __builtin_frame_address:               Return Address.
25985 * __builtin_huge_val:                    Other Builtins.
25986 * __builtin_huge_valf:                   Other Builtins.
25987 * __builtin_huge_vall:                   Other Builtins.
25988 * __builtin_inf:                         Other Builtins.
25989 * __builtin_inff:                        Other Builtins.
25990 * __builtin_infl:                        Other Builtins.
25991 * __builtin_isgreater:                   Other Builtins.
25992 * __builtin_isgreaterequal:              Other Builtins.
25993 * __builtin_isless:                      Other Builtins.
25994 * __builtin_islessequal:                 Other Builtins.
25995 * __builtin_islessgreater:               Other Builtins.
25996 * __builtin_isunordered:                 Other Builtins.
25997 * __builtin_nan:                         Other Builtins.
25998 * __builtin_nanf:                        Other Builtins.
25999 * __builtin_nanl:                        Other Builtins.
26000 * __builtin_nans:                        Other Builtins.
26001 * __builtin_nansf:                       Other Builtins.
26002 * __builtin_nansl:                       Other Builtins.
26003 * __builtin_parity:                      Other Builtins.
26004 * __builtin_parityl:                     Other Builtins.
26005 * __builtin_parityll:                    Other Builtins.
26006 * __builtin_popcount:                    Other Builtins.
26007 * __builtin_popcountl:                   Other Builtins.
26008 * __builtin_popcountll:                  Other Builtins.
26009 * __builtin_prefetch:                    Other Builtins.
26010 * __builtin_return:                      Constructing Calls.
26011 * __builtin_return_address:              Return Address.
26012 * __builtin_types_compatible_p:          Other Builtins.
26013 * __complex__ keyword:                   Complex.
26014 * __declspec(dllexport):                 Function Attributes.
26015 * __declspec(dllimport):                 Function Attributes.
26016 * __extension__:                         Alternate Keywords.
26017 * __func__ identifier:                   Function Names.
26018 * __FUNCTION__ identifier:               Function Names.
26019 * __imag__ keyword:                      Complex.
26020 * __PRETTY_FUNCTION__ identifier:        Function Names.
26021 * __real__ keyword:                      Complex.
26022 * __STDC_HOSTED__:                       Standards.
26023 * __thread:                              Thread-Local.
26024 * _Complex keyword:                      Complex.
26025 * _Exit:                                 Other Builtins.
26026 * _exit:                                 Other Builtins.
26027 * ABI:                                   Compatibility.
26028 * abort:                                 Other Builtins.
26029 * abs:                                   Other Builtins.
26030 * accessing volatiles:                   Volatiles.
26031 * acos:                                  Other Builtins.
26032 * acosf:                                 Other Builtins.
26033 * acosh:                                 Other Builtins.
26034 * acoshf:                                Other Builtins.
26035 * acoshl:                                Other Builtins.
26036 * acosl:                                 Other Builtins.
26037 * Ada:                                   G++ and GCC.
26038 * address constraints:                   Simple Constraints.
26039 * address of a label:                    Labels as Values.
26040 * address_operand:                       Simple Constraints.
26041 * alias attribute:                       Function Attributes.
26042 * aliasing of parameters:                Code Gen Options.
26043 * aligned attribute <1>:                 Type Attributes.
26044 * aligned attribute:                     Variable Attributes.
26045 * alignment:                             Alignment.
26046 * alloca:                                Other Builtins.
26047 * alloca vs variable-length arrays:      Variable Length.
26048 * alternate keywords:                    Alternate Keywords.
26049 * always_inline function attribute:      Function Attributes.
26050 * AMD x86-64 Options:                    i386 and x86-64 Options.
26051 * AMD1:                                  Standards.
26052 * ANSI C:                                Standards.
26053 * ANSI C standard:                       Standards.
26054 * ANSI C89:                              Standards.
26055 * ANSI support:                          C Dialect Options.
26056 * ANSI X3.159-1989:                      Standards.
26057 * apostrophes:                           Incompatibilities.
26058 * application binary interface:          Compatibility.
26059 * ARC Options:                           ARC Options.
26060 * ARM [Annotated C++ Reference Manual]:  Backwards Compatibility.
26061 * ARM options:                           ARM Options.
26062 * arrays of length zero:                 Zero Length.
26063 * arrays of variable length:             Variable Length.
26064 * arrays, non-lvalue:                    Subscripting.
26065 * asin:                                  Other Builtins.
26066 * asinf:                                 Other Builtins.
26067 * asinh:                                 Other Builtins.
26068 * asinhf:                                Other Builtins.
26069 * asinhl:                                Other Builtins.
26070 * asinl:                                 Other Builtins.
26071 * asm constraints:                       Constraints.
26072 * asm expressions:                       Extended Asm.
26073 * assembler instructions:                Extended Asm.
26074 * assembler names for identifiers:       Asm Labels.
26075 * assembly code, invalid:                Bug Criteria.
26076 * atan:                                  Other Builtins.
26077 * atan2:                                 Other Builtins.
26078 * atan2f:                                Other Builtins.
26079 * atan2l:                                Other Builtins.
26080 * atanf:                                 Other Builtins.
26081 * atanh:                                 Other Builtins.
26082 * atanhf:                                Other Builtins.
26083 * atanhl:                                Other Builtins.
26084 * atanl:                                 Other Builtins.
26085 * attribute of types:                    Type Attributes.
26086 * attribute of variables:                Variable Attributes.
26087 * attribute syntax:                      Attribute Syntax.
26088 * autoincrement/decrement addressing:    Simple Constraints.
26089 * automatic inline for C++ member fns:   Inline.
26090 * AVR Options:                           AVR Options.
26091 * Backwards Compatibility:               Backwards Compatibility.
26092 * base class members:                    Name lookup.
26093 * bcmp:                                  Other Builtins.
26094 * binary compatibility:                  Compatibility.
26095 * bound pointer to member function:      Bound member functions.
26096 * bug criteria:                          Bug Criteria.
26097 * bugs:                                  Bugs.
26098 * bugs, known:                           Trouble.
26099 * built-in functions <1>:                C Dialect Options.
26100 * built-in functions:                    Other Builtins.
26101 * bzero:                                 Other Builtins.
26102 * C compilation options:                 Invoking GCC.
26103 * C intermediate output, nonexistent:    G++ and GCC.
26104 * C language extensions:                 C Extensions.
26105 * C language, traditional:               C Dialect Options.
26106 * C standard:                            Standards.
26107 * C standards:                           Standards.
26108 * c++:                                   Invoking G++.
26109 * C++:                                   G++ and GCC.
26110 * C++ comments:                          C++ Comments.
26111 * C++ compilation options:               Invoking GCC.
26112 * C++ interface and implementation headers: C++ Interface.
26113 * C++ language extensions:               C++ Extensions.
26114 * C++ member fns, automatically inline:  Inline.
26115 * C++ misunderstandings:                 C++ Misunderstandings.
26116 * C++ options, command line:             C++ Dialect Options.
26117 * C++ pragmas, effect on inlining:       C++ Interface.
26118 * C++ source file suffixes:              Invoking G++.
26119 * C++ static data, declaring and defining: Static Definitions.
26120 * C89:                                   Standards.
26121 * C90:                                   Standards.
26122 * C94:                                   Standards.
26123 * C95:                                   Standards.
26124 * C99:                                   Standards.
26125 * C9X:                                   Standards.
26126 * C_INCLUDE_PATH:                        Environment Variables.
26127 * cabs:                                  Other Builtins.
26128 * cabsf:                                 Other Builtins.
26129 * cabsl:                                 Other Builtins.
26130 * cacos:                                 Other Builtins.
26131 * cacosf:                                Other Builtins.
26132 * cacosh:                                Other Builtins.
26133 * cacoshf:                               Other Builtins.
26134 * cacoshl:                               Other Builtins.
26135 * cacosl:                                Other Builtins.
26136 * calling functions through the function vector on the H8/300 processors: Function Attributes.
26137 * calloc:                                Other Builtins.
26138 * carg:                                  Other Builtins.
26139 * cargf:                                 Other Builtins.
26140 * cargl:                                 Other Builtins.
26141 * case labels in initializers:           Designated Inits.
26142 * case ranges:                           Case Ranges.
26143 * casin:                                 Other Builtins.
26144 * casinf:                                Other Builtins.
26145 * casinh:                                Other Builtins.
26146 * casinhf:                               Other Builtins.
26147 * casinhl:                               Other Builtins.
26148 * casinl:                                Other Builtins.
26149 * cast to a union:                       Cast to Union.
26150 * casts as lvalues:                      Lvalues.
26151 * catan:                                 Other Builtins.
26152 * catanf:                                Other Builtins.
26153 * catanh:                                Other Builtins.
26154 * catanhf:                               Other Builtins.
26155 * catanhl:                               Other Builtins.
26156 * catanl:                                Other Builtins.
26157 * cbrt:                                  Other Builtins.
26158 * cbrtf:                                 Other Builtins.
26159 * cbrtl:                                 Other Builtins.
26160 * ccos:                                  Other Builtins.
26161 * ccosf:                                 Other Builtins.
26162 * ccosh:                                 Other Builtins.
26163 * ccoshf:                                Other Builtins.
26164 * ccoshl:                                Other Builtins.
26165 * ccosl:                                 Other Builtins.
26166 * ceil:                                  Other Builtins.
26167 * ceilf:                                 Other Builtins.
26168 * ceill:                                 Other Builtins.
26169 * cexp:                                  Other Builtins.
26170 * cexpf:                                 Other Builtins.
26171 * cexpl:                                 Other Builtins.
26172 * cimag:                                 Other Builtins.
26173 * cimagf:                                Other Builtins.
26174 * cimagl:                                Other Builtins.
26175 * cleanup attribute:                     Variable Attributes.
26176 * COBOL:                                 G++ and GCC.
26177 * code generation conventions:           Code Gen Options.
26178 * code, mixed with declarations:         Mixed Declarations.
26179 * command options:                       Invoking GCC.
26180 * comments, C++ style:                   C++ Comments.
26181 * common attribute:                      Variable Attributes.
26182 * comparison of signed and unsigned values, warning: Warning Options.
26183 * compiler bugs, reporting:              Bug Reporting.
26184 * compiler compared to C++ preprocessor: G++ and GCC.
26185 * compiler options, C++:                 C++ Dialect Options.
26186 * compiler options, Objective-C:         Objective-C Dialect Options.
26187 * compiler version, specifying:          Target Options.
26188 * COMPILER_PATH:                         Environment Variables.
26189 * complex conjugation:                   Complex.
26190 * complex numbers:                       Complex.
26191 * compound expressions as lvalues:       Lvalues.
26192 * compound literals:                     Compound Literals.
26193 * computed gotos:                        Labels as Values.
26194 * conditional expressions as lvalues:    Lvalues.
26195 * conditional expressions, extensions:   Conditionals.
26196 * conflicting types:                     Disappointments.
26197 * conj:                                  Other Builtins.
26198 * conjf:                                 Other Builtins.
26199 * conjl:                                 Other Builtins.
26200 * const applied to function:             Function Attributes.
26201 * const function attribute:              Function Attributes.
26202 * constants in constraints:              Simple Constraints.
26203 * constraint modifier characters:        Modifiers.
26204 * constraint, matching:                  Simple Constraints.
26205 * constraints, asm:                      Constraints.
26206 * constraints, machine specific:         Machine Constraints.
26207 * constructing calls:                    Constructing Calls.
26208 * constructor expressions:               Compound Literals.
26209 * constructor function attribute:        Function Attributes.
26210 * contributors:                          Contributors.
26211 * copysign:                              Other Builtins.
26212 * copysignf:                             Other Builtins.
26213 * copysignl:                             Other Builtins.
26214 * core dump:                             Bug Criteria.
26215 * cos:                                   Other Builtins.
26216 * cosf:                                  Other Builtins.
26217 * cosh:                                  Other Builtins.
26218 * coshf:                                 Other Builtins.
26219 * coshl:                                 Other Builtins.
26220 * cosl:                                  Other Builtins.
26221 * CPATH:                                 Environment Variables.
26222 * CPLUS_INCLUDE_PATH:                    Environment Variables.
26223 * cpow:                                  Other Builtins.
26224 * cpowf:                                 Other Builtins.
26225 * cpowl:                                 Other Builtins.
26226 * cproj:                                 Other Builtins.
26227 * cprojf:                                Other Builtins.
26228 * cprojl:                                Other Builtins.
26229 * creal:                                 Other Builtins.
26230 * crealf:                                Other Builtins.
26231 * creall:                                Other Builtins.
26232 * CRIS Options:                          CRIS Options.
26233 * cross compiling:                       Target Options.
26234 * csin:                                  Other Builtins.
26235 * csinf:                                 Other Builtins.
26236 * csinh:                                 Other Builtins.
26237 * csinhf:                                Other Builtins.
26238 * csinhl:                                Other Builtins.
26239 * csinl:                                 Other Builtins.
26240 * csqrt:                                 Other Builtins.
26241 * csqrtf:                                Other Builtins.
26242 * csqrtl:                                Other Builtins.
26243 * ctan:                                  Other Builtins.
26244 * ctanf:                                 Other Builtins.
26245 * ctanh:                                 Other Builtins.
26246 * ctanhf:                                Other Builtins.
26247 * ctanhl:                                Other Builtins.
26248 * ctanl:                                 Other Builtins.
26249 * D30V Options:                          D30V Options.
26250 * Darwin options:                        Darwin Options.
26251 * DBX:                                   Interoperation.
26252 * dcgettext:                             Other Builtins.
26253 * deallocating variable length arrays:   Variable Length.
26254 * debugging information options:         Debugging Options.
26255 * declaration scope:                     Incompatibilities.
26256 * declarations inside expressions:       Statement Exprs.
26257 * declarations, mixed with code:         Mixed Declarations.
26258 * declaring attributes of functions:     Function Attributes.
26259 * declaring static data in C++:          Static Definitions.
26260 * defining static data in C++:           Static Definitions.
26261 * dependencies for make as output:       Environment Variables.
26262 * dependencies, make:                    Preprocessor Options.
26263 * DEPENDENCIES_OUTPUT:                   Environment Variables.
26264 * dependent name lookup:                 Name lookup.
26265 * deprecated attribute:                  Variable Attributes.
26266 * deprecated attribute.:                 Function Attributes.
26267 * designated initializers:               Designated Inits.
26268 * designator lists:                      Designated Inits.
26269 * designators:                           Designated Inits.
26270 * destructor function attribute:         Function Attributes.
26271 * dgettext:                              Other Builtins.
26272 * diagnostic messages:                   Language Independent Options.
26273 * dialect options:                       C Dialect Options.
26274 * digits in constraint:                  Simple Constraints.
26275 * directory options:                     Directory Options.
26276 * dollar signs in identifier names:      Dollar Signs.
26277 * double-word arithmetic:                Long Long.
26278 * downward funargs:                      Nested Functions.
26279 * drem:                                  Other Builtins.
26280 * dremf:                                 Other Builtins.
26281 * dreml:                                 Other Builtins.
26282 * E in constraint:                       Simple Constraints.
26283 * earlyclobber operand:                  Modifiers.
26284 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
26285 * empty structures:                      Empty Structures.
26286 * environment variables:                 Environment Variables.
26287 * erf:                                   Other Builtins.
26288 * erfc:                                  Other Builtins.
26289 * erfcf:                                 Other Builtins.
26290 * erfcl:                                 Other Builtins.
26291 * erff:                                  Other Builtins.
26292 * erfl:                                  Other Builtins.
26293 * error messages:                        Warnings and Errors.
26294 * escaped newlines:                      Escaped Newlines.
26295 * exclamation point:                     Multi-Alternative.
26296 * exit:                                  Other Builtins.
26297 * exp:                                   Other Builtins.
26298 * exp10:                                 Other Builtins.
26299 * exp10f:                                Other Builtins.
26300 * exp10l:                                Other Builtins.
26301 * exp2:                                  Other Builtins.
26302 * exp2f:                                 Other Builtins.
26303 * exp2l:                                 Other Builtins.
26304 * expf:                                  Other Builtins.
26305 * expl:                                  Other Builtins.
26306 * explicit register variables:           Explicit Reg Vars.
26307 * expm1:                                 Other Builtins.
26308 * expm1f:                                Other Builtins.
26309 * expm1l:                                Other Builtins.
26310 * expressions containing statements:     Statement Exprs.
26311 * expressions, compound, as lvalues:     Lvalues.
26312 * expressions, conditional, as lvalues:  Lvalues.
26313 * expressions, constructor:              Compound Literals.
26314 * extended asm:                          Extended Asm.
26315 * extensible constraints:                Simple Constraints.
26316 * extensions, ?: <1>:                    Conditionals.
26317 * extensions, ?::                        Lvalues.
26318 * extensions, C language:                C Extensions.
26319 * extensions, C++ language:              C++ Extensions.
26320 * external declaration scope:            Incompatibilities.
26321 * F in constraint:                       Simple Constraints.
26322 * fabs:                                  Other Builtins.
26323 * fabsf:                                 Other Builtins.
26324 * fabsl:                                 Other Builtins.
26325 * fatal signal:                          Bug Criteria.
26326 * fdim:                                  Other Builtins.
26327 * fdimf:                                 Other Builtins.
26328 * fdiml:                                 Other Builtins.
26329 * FDL, GNU Free Documentation License:   GNU Free Documentation License.
26330 * ffs:                                   Other Builtins.
26331 * file name suffix:                      Overall Options.
26332 * file names:                            Link Options.
26333 * flexible array members:                Zero Length.
26334 * float as function value type:          Incompatibilities.
26335 * floating point precision <1>:          Disappointments.
26336 * floating point precision:              Optimize Options.
26337 * floor:                                 Other Builtins.
26338 * floorf:                                Other Builtins.
26339 * floorl:                                Other Builtins.
26340 * fma:                                   Other Builtins.
26341 * fmaf:                                  Other Builtins.
26342 * fmal:                                  Other Builtins.
26343 * fmax:                                  Other Builtins.
26344 * fmaxf:                                 Other Builtins.
26345 * fmaxl:                                 Other Builtins.
26346 * fmin:                                  Other Builtins.
26347 * fminf:                                 Other Builtins.
26348 * fminl:                                 Other Builtins.
26349 * fmod:                                  Other Builtins.
26350 * fmodf:                                 Other Builtins.
26351 * fmodl:                                 Other Builtins.
26352 * format function attribute:             Function Attributes.
26353 * format_arg function attribute:         Function Attributes.
26354 * Fortran:                               G++ and GCC.
26355 * forwarding calls:                      Constructing Calls.
26356 * fprintf:                               Other Builtins.
26357 * fprintf_unlocked:                      Other Builtins.
26358 * fputs:                                 Other Builtins.
26359 * fputs_unlocked:                        Other Builtins.
26360 * freestanding environment:              Standards.
26361 * freestanding implementation:           Standards.
26362 * frexp:                                 Other Builtins.
26363 * frexpf:                                Other Builtins.
26364 * frexpl:                                Other Builtins.
26365 * FRV Options:                           FRV Options.
26366 * fscanf:                                Other Builtins.
26367 * fscanf, and constant strings:          Incompatibilities.
26368 * function addressability on the M32R/D: Function Attributes.
26369 * function attributes:                   Function Attributes.
26370 * function pointers, arithmetic:         Pointer Arith.
26371 * function prototype declarations:       Function Prototypes.
26372 * function without a prologue/epilogue code: Function Attributes.
26373 * function, size of pointer to:          Pointer Arith.
26374 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
26375 * functions in arbitrary sections:       Function Attributes.
26376 * functions that are passed arguments in registers on the 386: Function Attributes.
26377 * functions that behave like malloc:     Function Attributes.
26378 * functions that do not pop the argument stack on the 386: Function Attributes.
26379 * functions that do pop the argument stack on the 386: Function Attributes.
26380 * functions that have no side effects:   Function Attributes.
26381 * functions that never return:           Function Attributes.
26382 * functions that pop the argument stack on the 386: Function Attributes.
26383 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
26384 * functions which handle memory bank switching: Function Attributes.
26385 * functions with non-null pointer arguments: Function Attributes.
26386 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
26387 * G in constraint:                       Simple Constraints.
26388 * g in constraint:                       Simple Constraints.
26389 * G++:                                   G++ and GCC.
26390 * g++:                                   Invoking G++.
26391 * gamma:                                 Other Builtins.
26392 * gammaf:                                Other Builtins.
26393 * gammal:                                Other Builtins.
26394 * GCC:                                   G++ and GCC.
26395 * GCC command options:                   Invoking GCC.
26396 * GCC_EXEC_PREFIX:                       Environment Variables.
26397 * gcc_struct:                            Type Attributes.
26398 * gcc_struct attribute:                  Variable Attributes.
26399 * generalized lvalues:                   Lvalues.
26400 * gettext:                               Other Builtins.
26401 * global offset table:                   Code Gen Options.
26402 * global register after longjmp:         Global Reg Vars.
26403 * global register variables:             Global Reg Vars.
26404 * GNAT:                                  G++ and GCC.
26405 * GNU C Compiler:                        G++ and GCC.
26406 * GNU Compiler Collection:               G++ and GCC.
26407 * goto with computed label:              Labels as Values.
26408 * gp-relative references (MIPS):         MIPS Options.
26409 * gprof:                                 Debugging Options.
26410 * grouping options:                      Invoking GCC.
26411 * H in constraint:                       Simple Constraints.
26412 * hardware models and configurations, specifying: Submodel Options.
26413 * hex floats:                            Hex Floats.
26414 * hosted environment <1>:                C Dialect Options.
26415 * hosted environment <2>:                Standards.
26416 * hosted environment:                    C Dialect Options.
26417 * hosted implementation:                 Standards.
26418 * HPPA Options:                          HPPA Options.
26419 * hypot:                                 Other Builtins.
26420 * hypotf:                                Other Builtins.
26421 * hypotl:                                Other Builtins.
26422 * I in constraint:                       Simple Constraints.
26423 * i in constraint:                       Simple Constraints.
26424 * i386 Options:                          i386 and x86-64 Options.
26425 * IA-64 Options:                         IA-64 Options.
26426 * IBM RS/6000 and PowerPC Options:       RS/6000 and PowerPC Options.
26427 * identifier names, dollar signs in:     Dollar Signs.
26428 * identifiers, names in assembler code:  Asm Labels.
26429 * ilogb:                                 Other Builtins.
26430 * ilogbf:                                Other Builtins.
26431 * ilogbl:                                Other Builtins.
26432 * imaxabs:                               Other Builtins.
26433 * implementation-defined behavior, C language: C Implementation.
26434 * implied #pragma implementation:        C++ Interface.
26435 * incompatibilities of GCC:              Incompatibilities.
26436 * increment operators:                   Bug Criteria.
26437 * index:                                 Other Builtins.
26438 * indirect calls on ARM:                 Function Attributes.
26439 * init_priority attribute:               C++ Attributes.
26440 * initializations in expressions:        Compound Literals.
26441 * initializers with labeled elements:    Designated Inits.
26442 * initializers, non-constant:            Initializers.
26443 * inline automatic for C++ member fns:   Inline.
26444 * inline functions:                      Inline.
26445 * inline functions, omission of:         Inline.
26446 * inlining and C++ pragmas:              C++ Interface.
26447 * installation trouble:                  Trouble.
26448 * integrating function code:             Inline.
26449 * Intel 386 Options:                     i386 and x86-64 Options.
26450 * interface and implementation headers, C++: C++ Interface.
26451 * intermediate C version, nonexistent:   G++ and GCC.
26452 * interrupt handler functions:           Function Attributes.
26453 * interrupt handler functions on the m68k, H8/300 and SH processors: Function Attributes.
26454 * introduction:                          Top.
26455 * invalid assembly code:                 Bug Criteria.
26456 * invalid input:                         Bug Criteria.
26457 * invoking g++:                          Invoking G++.
26458 * ISO 9899:                              Standards.
26459 * ISO C:                                 Standards.
26460 * ISO C standard:                        Standards.
26461 * ISO C90:                               Standards.
26462 * ISO C94:                               Standards.
26463 * ISO C95:                               Standards.
26464 * ISO C99:                               Standards.
26465 * ISO C9X:                               Standards.
26466 * ISO support:                           C Dialect Options.
26467 * ISO/IEC 9899:                          Standards.
26468 * j0:                                    Other Builtins.
26469 * j0f:                                   Other Builtins.
26470 * j0l:                                   Other Builtins.
26471 * j1:                                    Other Builtins.
26472 * j1f:                                   Other Builtins.
26473 * j1l:                                   Other Builtins.
26474 * Java:                                  G++ and GCC.
26475 * java_interface attribute:              C++ Attributes.
26476 * jn:                                    Other Builtins.
26477 * jnf:                                   Other Builtins.
26478 * jnl:                                   Other Builtins.
26479 * keywords, alternate:                   Alternate Keywords.
26480 * known causes of trouble:               Trouble.
26481 * labeled elements in initializers:      Designated Inits.
26482 * labels as values:                      Labels as Values.
26483 * labs:                                  Other Builtins.
26484 * LANG:                                  Environment Variables.
26485 * language dialect options:              C Dialect Options.
26486 * LC_ALL:                                Environment Variables.
26487 * LC_CTYPE:                              Environment Variables.
26488 * LC_MESSAGES:                           Environment Variables.
26489 * ldexp:                                 Other Builtins.
26490 * ldexpf:                                Other Builtins.
26491 * ldexpl:                                Other Builtins.
26492 * length-zero arrays:                    Zero Length.
26493 * lgamma:                                Other Builtins.
26494 * lgammaf:                               Other Builtins.
26495 * lgammal:                               Other Builtins.
26496 * Libraries:                             Link Options.
26497 * LIBRARY_PATH:                          Environment Variables.
26498 * link options:                          Link Options.
26499 * LL integer suffix:                     Long Long.
26500 * llabs:                                 Other Builtins.
26501 * llrint:                                Other Builtins.
26502 * llrintf:                               Other Builtins.
26503 * llrintl:                               Other Builtins.
26504 * llround:                               Other Builtins.
26505 * llroundf:                              Other Builtins.
26506 * llroundl:                              Other Builtins.
26507 * load address instruction:              Simple Constraints.
26508 * local labels:                          Local Labels.
26509 * local variables in macros:             Typeof.
26510 * local variables, specifying registers: Local Reg Vars.
26511 * locale:                                Environment Variables.
26512 * locale definition:                     Environment Variables.
26513 * log:                                   Other Builtins.
26514 * log10:                                 Other Builtins.
26515 * log10f:                                Other Builtins.
26516 * log10l:                                Other Builtins.
26517 * log1p:                                 Other Builtins.
26518 * log1pf:                                Other Builtins.
26519 * log1pl:                                Other Builtins.
26520 * log2:                                  Other Builtins.
26521 * log2f:                                 Other Builtins.
26522 * log2l:                                 Other Builtins.
26523 * logb:                                  Other Builtins.
26524 * logbf:                                 Other Builtins.
26525 * logbl:                                 Other Builtins.
26526 * logf:                                  Other Builtins.
26527 * logl:                                  Other Builtins.
26528 * long long data types:                  Long Long.
26529 * longjmp:                               Global Reg Vars.
26530 * longjmp incompatibilities:             Incompatibilities.
26531 * longjmp warnings:                      Warning Options.
26532 * lrint:                                 Other Builtins.
26533 * lrintf:                                Other Builtins.
26534 * lrintl:                                Other Builtins.
26535 * lround:                                Other Builtins.
26536 * lroundf:                               Other Builtins.
26537 * lroundl:                               Other Builtins.
26538 * lvalues, generalized:                  Lvalues.
26539 * m in constraint:                       Simple Constraints.
26540 * M32R/D options:                        M32R/D Options.
26541 * M680x0 options:                        M680x0 Options.
26542 * M68hc1x options:                       M68hc1x Options.
26543 * machine dependent options:             Submodel Options.
26544 * machine specific constraints:          Machine Constraints.
26545 * macro with variable arguments:         Variadic Macros.
26546 * macros containing asm:                 Extended Asm.
26547 * macros, inline alternative:            Inline.
26548 * macros, local labels:                  Local Labels.
26549 * macros, local variables in:            Typeof.
26550 * macros, statements in expressions:     Statement Exprs.
26551 * macros, types of arguments:            Typeof.
26552 * make:                                  Preprocessor Options.
26553 * malloc:                                Other Builtins.
26554 * malloc attribute:                      Function Attributes.
26555 * matching constraint:                   Simple Constraints.
26556 * maximum operator:                      Min and Max.
26557 * MCore options:                         MCore Options.
26558 * member fns, automatically inline:      Inline.
26559 * memcmp:                                Other Builtins.
26560 * memcpy:                                Other Builtins.
26561 * memory references in constraints:      Simple Constraints.
26562 * mempcpy:                               Other Builtins.
26563 * memset:                                Other Builtins.
26564 * Mercury:                               G++ and GCC.
26565 * message formatting:                    Language Independent Options.
26566 * messages, warning:                     Warning Options.
26567 * messages, warning and error:           Warnings and Errors.
26568 * middle-operands, omitted:              Conditionals.
26569 * minimum operator:                      Min and Max.
26570 * MIPS options:                          MIPS Options.
26571 * misunderstandings in C++:              C++ Misunderstandings.
26572 * mixed declarations and code:           Mixed Declarations.
26573 * mktemp, and constant strings:          Incompatibilities.
26574 * MMIX Options:                          MMIX Options.
26575 * MN10300 options:                       MN10300 Options.
26576 * mode attribute:                        Variable Attributes.
26577 * modf:                                  Other Builtins.
26578 * modff:                                 Other Builtins.
26579 * modfl:                                 Other Builtins.
26580 * modifiers in constraints:              Modifiers.
26581 * ms_struct:                             Type Attributes.
26582 * ms_struct attribute:                   Variable Attributes.
26583 * multiple alternative constraints:      Multi-Alternative.
26584 * multiprecision arithmetic:             Long Long.
26585 * n in constraint:                       Simple Constraints.
26586 * names used in assembler code:          Asm Labels.
26587 * naming convention, implementation headers: C++ Interface.
26588 * nearbyint:                             Other Builtins.
26589 * nearbyintf:                            Other Builtins.
26590 * nearbyintl:                            Other Builtins.
26591 * nested functions:                      Nested Functions.
26592 * newlines (escaped):                    Escaped Newlines.
26593 * nextafter:                             Other Builtins.
26594 * nextafterf:                            Other Builtins.
26595 * nextafterl:                            Other Builtins.
26596 * nexttoward:                            Other Builtins.
26597 * nexttowardf:                           Other Builtins.
26598 * nexttowardl:                           Other Builtins.
26599 * no_instrument_function function attribute: Function Attributes.
26600 * nocommon attribute:                    Variable Attributes.
26601 * noinline function attribute:           Function Attributes.
26602 * non-constant initializers:             Initializers.
26603 * non-static inline function:            Inline.
26604 * nonnull function attribute:            Function Attributes.
26605 * noreturn function attribute:           Function Attributes.
26606 * nothrow function attribute:            Function Attributes.
26607 * NS32K options:                         NS32K Options.
26608 * o in constraint:                       Simple Constraints.
26609 * OBJC_INCLUDE_PATH:                     Environment Variables.
26610 * Objective-C:                           G++ and GCC.
26611 * Objective-C options, command line:     Objective-C Dialect Options.
26612 * offsettable address:                   Simple Constraints.
26613 * old-style function definitions:        Function Prototypes.
26614 * omitted middle-operands:               Conditionals.
26615 * open coding:                           Inline.
26616 * operand constraints, asm:              Constraints.
26617 * optimize options:                      Optimize Options.
26618 * options to control diagnostics formatting: Language Independent Options.
26619 * options to control warnings:           Warning Options.
26620 * options, C++:                          C++ Dialect Options.
26621 * options, code generation:              Code Gen Options.
26622 * options, debugging:                    Debugging Options.
26623 * options, dialect:                      C Dialect Options.
26624 * options, directory search:             Directory Options.
26625 * options, GCC command:                  Invoking GCC.
26626 * options, grouping:                     Invoking GCC.
26627 * options, linking:                      Link Options.
26628 * options, Objective-C:                  Objective-C Dialect Options.
26629 * options, optimization:                 Optimize Options.
26630 * options, order:                        Invoking GCC.
26631 * options, preprocessor:                 Preprocessor Options.
26632 * order of evaluation, side effects:     Non-bugs.
26633 * order of options:                      Invoking GCC.
26634 * other register constraints:            Simple Constraints.
26635 * output file option:                    Overall Options.
26636 * overloaded virtual fn, warning:        C++ Dialect Options.
26637 * p in constraint:                       Simple Constraints.
26638 * packed attribute:                      Variable Attributes.
26639 * parameter forward declaration:         Variable Length.
26640 * parameters, aliased:                   Code Gen Options.
26641 * Pascal:                                G++ and GCC.
26642 * PDP-11 Options:                        PDP-11 Options.
26643 * PIC:                                   Code Gen Options.
26644 * pmf:                                   Bound member functions.
26645 * pointer arguments:                     Function Attributes.
26646 * pointer to member function:            Bound member functions.
26647 * portions of temporary objects, pointers to: Temporaries.
26648 * pow:                                   Other Builtins.
26649 * pow10:                                 Other Builtins.
26650 * pow10f:                                Other Builtins.
26651 * pow10l:                                Other Builtins.
26652 * powf:                                  Other Builtins.
26653 * powl:                                  Other Builtins.
26654 * pragma, extern_prefix:                 Tru64 Pragmas.
26655 * pragma, long_calls:                    ARM Pragmas.
26656 * pragma, long_calls_off:                ARM Pragmas.
26657 * pragma, longcall:                      RS/6000 and PowerPC Pragmas.
26658 * pragma, mark:                          Darwin Pragmas.
26659 * pragma, no_long_calls:                 ARM Pragmas.
26660 * pragma, options align:                 Darwin Pragmas.
26661 * pragma, reason for not using:          Function Attributes.
26662 * pragma, redefine_extname:              Solaris Pragmas.
26663 * pragma, segment:                       Darwin Pragmas.
26664 * pragma, unused:                        Darwin Pragmas.
26665 * pragmas:                               Pragmas.
26666 * pragmas in C++, effect on inlining:    C++ Interface.
26667 * pragmas, interface and implementation: C++ Interface.
26668 * pragmas, warning of unknown:           Warning Options.
26669 * precompiled headers:                   Precompiled Headers.
26670 * preprocessing numbers:                 Incompatibilities.
26671 * preprocessing tokens:                  Incompatibilities.
26672 * preprocessor options:                  Preprocessor Options.
26673 * printf:                                Other Builtins.
26674 * printf_unlocked:                       Other Builtins.
26675 * prof:                                  Debugging Options.
26676 * promotion of formal parameters:        Function Prototypes.
26677 * pure function attribute:               Function Attributes.
26678 * push address instruction:              Simple Constraints.
26679 * putchar:                               Other Builtins.
26680 * puts:                                  Other Builtins.
26681 * qsort, and global register variables:  Global Reg Vars.
26682 * question mark:                         Multi-Alternative.
26683 * r in constraint:                       Simple Constraints.
26684 * ranges in case statements:             Case Ranges.
26685 * read-only strings:                     Incompatibilities.
26686 * register variable after longjmp:       Global Reg Vars.
26687 * registers:                             Extended Asm.
26688 * registers for local variables:         Local Reg Vars.
26689 * registers in constraints:              Simple Constraints.
26690 * registers, global allocation:          Explicit Reg Vars.
26691 * registers, global variables in:        Global Reg Vars.
26692 * regparm attribute:                     Function Attributes.
26693 * relocation truncated to fit (MIPS):    MIPS Options.
26694 * remainder:                             Other Builtins.
26695 * remainderf:                            Other Builtins.
26696 * remainderl:                            Other Builtins.
26697 * remquo:                                Other Builtins.
26698 * remquof:                               Other Builtins.
26699 * remquol:                               Other Builtins.
26700 * reordering, warning:                   C++ Dialect Options.
26701 * reporting bugs:                        Bugs.
26702 * rest argument (in macro):              Variadic Macros.
26703 * restricted pointers:                   Restricted Pointers.
26704 * restricted references:                 Restricted Pointers.
26705 * restricted this pointer:               Restricted Pointers.
26706 * rindex:                                Other Builtins.
26707 * rint:                                  Other Builtins.
26708 * rintf:                                 Other Builtins.
26709 * rintl:                                 Other Builtins.
26710 * round:                                 Other Builtins.
26711 * roundf:                                Other Builtins.
26712 * roundl:                                Other Builtins.
26713 * RS/6000 and PowerPC Options:           RS/6000 and PowerPC Options.
26714 * RTTI:                                  Vague Linkage.
26715 * run-time options:                      Code Gen Options.
26716 * s in constraint:                       Simple Constraints.
26717 * S/390 and zSeries Options:             S/390 and zSeries Options.
26718 * save all registers on the H8/300, H8/300H, and H8S: Function Attributes.
26719 * scalb:                                 Other Builtins.
26720 * scalbf:                                Other Builtins.
26721 * scalbl:                                Other Builtins.
26722 * scalbln:                               Other Builtins.
26723 * scalblnf:                              Other Builtins.
26724 * scalbn:                                Other Builtins.
26725 * scalbnf:                               Other Builtins.
26726 * scanf, and constant strings:           Incompatibilities.
26727 * scanfnl:                               Other Builtins.
26728 * scope of a variable length array:      Variable Length.
26729 * scope of declaration:                  Disappointments.
26730 * scope of external declarations:        Incompatibilities.
26731 * search path:                           Directory Options.
26732 * section function attribute:            Function Attributes.
26733 * section variable attribute:            Variable Attributes.
26734 * setjmp:                                Global Reg Vars.
26735 * setjmp incompatibilities:              Incompatibilities.
26736 * shared strings:                        Incompatibilities.
26737 * shared variable attribute:             Variable Attributes.
26738 * side effect in ?::                     Conditionals.
26739 * side effects, macro argument:          Statement Exprs.
26740 * side effects, order of evaluation:     Non-bugs.
26741 * signal handler functions on the AVR processors: Function Attributes.
26742 * signed and unsigned values, comparison warning: Warning Options.
26743 * significand:                           Other Builtins.
26744 * significandf:                          Other Builtins.
26745 * significandl:                          Other Builtins.
26746 * simple constraints:                    Simple Constraints.
26747 * sin:                                   Other Builtins.
26748 * sincos:                                Other Builtins.
26749 * sincosf:                               Other Builtins.
26750 * sincosl:                               Other Builtins.
26751 * sinf:                                  Other Builtins.
26752 * sinh:                                  Other Builtins.
26753 * sinhf:                                 Other Builtins.
26754 * sinhl:                                 Other Builtins.
26755 * sinl:                                  Other Builtins.
26756 * sizeof:                                Typeof.
26757 * smaller data references:               M32R/D Options.
26758 * smaller data references (MIPS):        MIPS Options.
26759 * smaller data references (PowerPC):     RS/6000 and PowerPC Options.
26760 * snprintf:                              Other Builtins.
26761 * SPARC options:                         SPARC Options.
26762 * Spec Files:                            Spec Files.
26763 * specified registers:                   Explicit Reg Vars.
26764 * specifying compiler version and target machine: Target Options.
26765 * specifying hardware config:            Submodel Options.
26766 * specifying machine version:            Target Options.
26767 * specifying registers for local variables: Local Reg Vars.
26768 * speed of compilation:                  Precompiled Headers.
26769 * sprintf:                               Other Builtins.
26770 * sqrt:                                  Other Builtins.
26771 * sqrtf:                                 Other Builtins.
26772 * sqrtl:                                 Other Builtins.
26773 * sscanf:                                Other Builtins.
26774 * sscanf, and constant strings:          Incompatibilities.
26775 * statements inside expressions:         Statement Exprs.
26776 * static data in C++, declaring and defining: Static Definitions.
26777 * stpcpy:                                Other Builtins.
26778 * strcat:                                Other Builtins.
26779 * strchr:                                Other Builtins.
26780 * strcmp:                                Other Builtins.
26781 * strcpy:                                Other Builtins.
26782 * strcspn:                               Other Builtins.
26783 * strdup:                                Other Builtins.
26784 * strfmon:                               Other Builtins.
26785 * strftime:                              Other Builtins.
26786 * string constants:                      Incompatibilities.
26787 * strlen:                                Other Builtins.
26788 * strncat:                               Other Builtins.
26789 * strncmp:                               Other Builtins.
26790 * strncpy:                               Other Builtins.
26791 * strpbrk:                               Other Builtins.
26792 * strrchr:                               Other Builtins.
26793 * strspn:                                Other Builtins.
26794 * strstr:                                Other Builtins.
26795 * struct:                                Unnamed Fields.
26796 * structures:                            Incompatibilities.
26797 * structures, constructor expression:    Compound Literals.
26798 * submodel options:                      Submodel Options.
26799 * subscripting:                          Subscripting.
26800 * subscripting and function values:      Subscripting.
26801 * suffixes for C++ source:               Invoking G++.
26802 * SUNPRO_DEPENDENCIES:                   Environment Variables.
26803 * suppressing warnings:                  Warning Options.
26804 * surprises in C++:                      C++ Misunderstandings.
26805 * syntax checking:                       Warning Options.
26806 * synthesized methods, warning:          C++ Dialect Options.
26807 * system headers, warnings from:         Warning Options.
26808 * tan:                                   Other Builtins.
26809 * tanf:                                  Other Builtins.
26810 * tanh:                                  Other Builtins.
26811 * tanhf:                                 Other Builtins.
26812 * tanhl:                                 Other Builtins.
26813 * tanl:                                  Other Builtins.
26814 * target machine, specifying:            Target Options.
26815 * target options:                        Target Options.
26816 * TC1:                                   Standards.
26817 * TC2:                                   Standards.
26818 * Technical Corrigenda:                  Standards.
26819 * Technical Corrigendum 1:               Standards.
26820 * Technical Corrigendum 2:               Standards.
26821 * template instantiation:                Template Instantiation.
26822 * temporaries, lifetime of:              Temporaries.
26823 * tgamma:                                Other Builtins.
26824 * tgammaf:                               Other Builtins.
26825 * tgammal:                               Other Builtins.
26826 * Thread-Local Storage:                  Thread-Local.
26827 * thunks:                                Nested Functions.
26828 * tiny data section on the H8/300H and H8S: Function Attributes.
26829 * TLS:                                   Thread-Local.
26830 * tls_model attribute:                   Variable Attributes.
26831 * TMPDIR:                                Environment Variables.
26832 * TMS320C3x/C4x Options:                 TMS320C3x/C4x Options.
26833 * traditional C language:                C Dialect Options.
26834 * treelang <1>:                          G++ and GCC.
26835 * treelang:                              Standards.
26836 * trunc:                                 Other Builtins.
26837 * truncf:                                Other Builtins.
26838 * truncl:                                Other Builtins.
26839 * two-stage name lookup:                 Name lookup.
26840 * type alignment:                        Alignment.
26841 * type attributes:                       Type Attributes.
26842 * type_info:                             Vague Linkage.
26843 * typedef names as function parameters:  Incompatibilities.
26844 * typeof:                                Typeof.
26845 * ULL integer suffix:                    Long Long.
26846 * Ultrix calling convention:             Interoperation.
26847 * undefined behavior:                    Bug Criteria.
26848 * undefined function value:              Bug Criteria.
26849 * underscores in variables in macros:    Typeof.
26850 * union:                                 Unnamed Fields.
26851 * union, casting to a:                   Cast to Union.
26852 * unions:                                Incompatibilities.
26853 * unknown pragmas, warning:              Warning Options.
26854 * unresolved references and -nodefaultlibs: Link Options.
26855 * unresolved references and -nostdlib:   Link Options.
26856 * unused attribute.:                     Function Attributes.
26857 * used attribute.:                       Function Attributes.
26858 * V in constraint:                       Simple Constraints.
26859 * V850 Options:                          V850 Options.
26860 * vague linkage:                         Vague Linkage.
26861 * value after longjmp:                   Global Reg Vars.
26862 * variable addressability on the IA-64:  Function Attributes.
26863 * variable addressability on the M32R/D: Variable Attributes.
26864 * variable alignment:                    Alignment.
26865 * variable attributes:                   Variable Attributes.
26866 * variable number of arguments:          Variadic Macros.
26867 * variable-length array scope:           Variable Length.
26868 * variable-length arrays:                Variable Length.
26869 * variables in specified registers:      Explicit Reg Vars.
26870 * variables, local, in macros:           Typeof.
26871 * variadic macros:                       Variadic Macros.
26872 * VAX calling convention:                Interoperation.
26873 * VAX options:                           VAX Options.
26874 * vfprintf:                              Other Builtins.
26875 * vfscanf:                               Other Builtins.
26876 * visibility attribute:                  Function Attributes.
26877 * VLAs:                                  Variable Length.
26878 * void pointers, arithmetic:             Pointer Arith.
26879 * void, size of pointer to:              Pointer Arith.
26880 * volatile access:                       Volatiles.
26881 * volatile applied to function:          Function Attributes.
26882 * volatile read:                         Volatiles.
26883 * volatile write:                        Volatiles.
26884 * vprintf:                               Other Builtins.
26885 * vscanf:                                Other Builtins.
26886 * vsnprintf:                             Other Builtins.
26887 * vsprintf:                              Other Builtins.
26888 * vsscanf:                               Other Builtins.
26889 * vtable:                                Vague Linkage.
26890 * warn_unused_result attribute:          Function Attributes.
26891 * warning for comparison of signed and unsigned values: Warning Options.
26892 * warning for overloaded virtual fn:     C++ Dialect Options.
26893 * warning for reordering of member initializers: C++ Dialect Options.
26894 * warning for synthesized methods:       C++ Dialect Options.
26895 * warning for unknown pragmas:           Warning Options.
26896 * warning messages:                      Warning Options.
26897 * warnings from system headers:          Warning Options.
26898 * warnings vs errors:                    Warnings and Errors.
26899 * weak attribute:                        Function Attributes.
26900 * whitespace:                            Incompatibilities.
26901 * X in constraint:                       Simple Constraints.
26902 * X3.159-1989:                           Standards.
26903 * x86-64 Options:                        i386 and x86-64 Options.
26904 * Xstormy16 Options:                     Xstormy16 Options.
26905 * Xtensa Options:                        Xtensa Options.
26906 * y0:                                    Other Builtins.
26907 * y0f:                                   Other Builtins.
26908 * y0l:                                   Other Builtins.
26909 * y1:                                    Other Builtins.
26910 * y1f:                                   Other Builtins.
26911 * y1l:                                   Other Builtins.
26912 * yn:                                    Other Builtins.
26913 * ynf:                                   Other Builtins.
26914 * ynl:                                   Other Builtins.
26915 * zero-length arrays:                    Zero Length.
26916 * zero-size structures:                  Empty Structures.
26919 \x1f
26920 Tag Table:
26921 Node: Top\x7f1134
26922 Node: G++ and GCC\x7f3684
26923 Node: Standards\x7f5717
26924 Node: Invoking GCC\x7f12876
26925 Node: Option Summary\x7f16583
26926 Node: Overall Options\x7f40897
26927 Node: Invoking G++\x7f48019
26928 Node: C Dialect Options\x7f49634
26929 Node: C++ Dialect Options\x7f60313
26930 Node: Objective-C Dialect Options\x7f76650
26931 Node: Language Independent Options\x7f85715
26932 Node: Warning Options\x7f87500
26933 Node: Debugging Options\x7f125933
26934 Node: Optimize Options\x7f146915
26935 Node: Preprocessor Options\x7f199972
26936 Ref: Wtrigraphs\x7f203988
26937 Ref: dashMF\x7f208745
26938 Ref: fdollars-in-identifiers\x7f216575
26939 Node: Assembler Options\x7f224435
26940 Node: Link Options\x7f225130
26941 Ref: Link Options-Footnote-1\x7f233497
26942 Node: Directory Options\x7f233831
26943 Node: Spec Files\x7f238817
26944 Node: Target Options\x7f258171
26945 Node: Submodel Options\x7f259468
26946 Node: M680x0 Options\x7f261167
26947 Node: M68hc1x Options\x7f268262
26948 Node: VAX Options\x7f269812
26949 Node: SPARC Options\x7f270346
26950 Node: ARM Options\x7f282132
26951 Node: MN10300 Options\x7f294578
26952 Node: M32R/D Options\x7f295623
26953 Node: RS/6000 and PowerPC Options\x7f299210
26954 Node: Darwin Options\x7f323305
26955 Node: MIPS Options\x7f325389
26956 Node: i386 and x86-64 Options\x7f336607
26957 Node: HPPA Options\x7f354774
26958 Node: Intel 960 Options\x7f362655
26959 Node: DEC Alpha Options\x7f365595
26960 Node: DEC Alpha/VMS Options\x7f377062
26961 Node: H8/300 Options\x7f377437
26962 Node: SH Options\x7f378487
26963 Node: System V Options\x7f380842
26964 Node: TMS320C3x/C4x Options\x7f381658
26965 Node: V850 Options\x7f387167
26966 Node: ARC Options\x7f390296
26967 Node: NS32K Options\x7f391495
26968 Node: AVR Options\x7f396017
26969 Node: MCore Options\x7f397816
26970 Node: IA-64 Options\x7f398819
26971 Node: D30V Options\x7f401781
26972 Node: S/390 and zSeries Options\x7f403022
26973 Node: CRIS Options\x7f406347
26974 Node: MMIX Options\x7f410563
26975 Node: PDP-11 Options\x7f413029
26976 Node: Xstormy16 Options\x7f414852
26977 Node: FRV Options\x7f415126
26978 Node: Xtensa Options\x7f419070
26979 Node: Code Gen Options\x7f422891
26980 Node: Environment Variables\x7f438518
26981 Node: Precompiled Headers\x7f446158
26982 Node: Running Protoize\x7f451381
26983 Node: C Implementation\x7f457709
26984 Node: Translation implementation\x7f458641
26985 Node: Environment implementation\x7f459076
26986 Node: Identifiers implementation\x7f459367
26987 Node: Characters implementation\x7f459980
26988 Node: Integers implementation\x7f461837
26989 Node: Floating point implementation\x7f462792
26990 Node: Arrays and pointers implementation\x7f464641
26991 Ref: Arrays and pointers implementation-Footnote-1\x7f465942
26992 Node: Hints implementation\x7f466066
26993 Node: Structures unions enumerations and bit-fields implementation\x7f467505
26994 Node: Qualifiers implementation\x7f468314
26995 Node: Preprocessing directives implementation\x7f468625
26996 Node: Library functions implementation\x7f470424
26997 Node: Architecture implementation\x7f470747
26998 Node: Locale-specific behavior implementation\x7f471312
26999 Node: C Extensions\x7f471608
27000 Node: Statement Exprs\x7f475707
27001 Node: Local Labels\x7f479187
27002 Node: Labels as Values\x7f482158
27003 Ref: Labels as Values-Footnote-1\x7f484205
27004 Node: Nested Functions\x7f484388
27005 Node: Constructing Calls\x7f488262
27006 Node: Typeof\x7f490588
27007 Node: Lvalues\x7f493742
27008 Node: Conditionals\x7f496235
27009 Node: Long Long\x7f497120
27010 Node: Complex\x7f498613
27011 Node: Hex Floats\x7f501172
27012 Node: Zero Length\x7f502198
27013 Node: Empty Structures\x7f505481
27014 Node: Variable Length\x7f505888
27015 Node: Variadic Macros\x7f508646
27016 Node: Escaped Newlines\x7f511019
27017 Node: Subscripting\x7f511849
27018 Node: Pointer Arith\x7f512573
27019 Node: Initializers\x7f513132
27020 Node: Compound Literals\x7f513619
27021 Node: Designated Inits\x7f515772
27022 Node: Case Ranges\x7f519423
27023 Node: Cast to Union\x7f520097
27024 Node: Mixed Declarations\x7f521184
27025 Node: Function Attributes\x7f521681
27026 Node: Attribute Syntax\x7f552792
27027 Node: Function Prototypes\x7f563391
27028 Node: C++ Comments\x7f565178
27029 Node: Dollar Signs\x7f565688
27030 Node: Character Escapes\x7f566144
27031 Node: Alignment\x7f566429
27032 Node: Variable Attributes\x7f567737
27033 Node: Type Attributes\x7f580724
27034 Node: Inline\x7f593475
27035 Node: Extended Asm\x7f598171
27036 Node: Constraints\x7f617173
27037 Node: Simple Constraints\x7f618014
27038 Node: Multi-Alternative\x7f624519
27039 Node: Modifiers\x7f626223
27040 Node: Machine Constraints\x7f628751
27041 Node: Asm Labels\x7f650937
27042 Node: Explicit Reg Vars\x7f652609
27043 Node: Global Reg Vars\x7f654061
27044 Node: Local Reg Vars\x7f658598
27045 Node: Alternate Keywords\x7f660386
27046 Node: Incomplete Enums\x7f661805
27047 Node: Function Names\x7f662553
27048 Node: Return Address\x7f664749
27049 Node: Vector Extensions\x7f667533
27050 Node: Other Builtins\x7f671136
27051 Node: Target Builtins\x7f691171
27052 Node: Alpha Built-in Functions\x7f691726
27053 Node: ARM Built-in Functions\x7f694705
27054 Node: X86 Built-in Functions\x7f701399
27055 Node: PowerPC AltiVec Built-in Functions\x7f711785
27056 Node: Pragmas\x7f814071
27057 Node: ARM Pragmas\x7f814567
27058 Node: RS/6000 and PowerPC Pragmas\x7f815172
27059 Node: Darwin Pragmas\x7f815900
27060 Node: Solaris Pragmas\x7f816954
27061 Node: Tru64 Pragmas\x7f817515
27062 Node: Unnamed Fields\x7f818254
27063 Node: Thread-Local\x7f819338
27064 Node: C99 Thread-Local Edits\x7f821413
27065 Node: C++98 Thread-Local Edits\x7f823412
27066 Node: C++ Extensions\x7f826844
27067 Node: Min and Max\x7f828533
27068 Node: Volatiles\x7f829909
27069 Node: Restricted Pointers\x7f833267
27070 Node: Vague Linkage\x7f834854
27071 Node: C++ Interface\x7f838502
27072 Ref: C++ Interface-Footnote-1\x7f842787
27073 Node: Template Instantiation\x7f842924
27074 Node: Bound member functions\x7f849939
27075 Node: C++ Attributes\x7f851480
27076 Node: Strong Using\x7f853112
27077 Node: Offsetof\x7f854357
27078 Node: Java Exceptions\x7f854964
27079 Node: Deprecated Features\x7f856349
27080 Node: Backwards Compatibility\x7f858343
27081 Node: Objective-C\x7f859689
27082 Node: Executing code before main\x7f860267
27083 Node: What you can and what you cannot do in +load\x7f862891
27084 Node: Type encoding\x7f865047
27085 Node: Garbage Collection\x7f868283
27086 Node: Constant string objects\x7f870935
27087 Node: compatibility_alias\x7f873436
27088 Node: Compatibility\x7f874307
27089 Node: Gcov\x7f880871
27090 Node: Gcov Intro\x7f881338
27091 Node: Invoking Gcov\x7f884047
27092 Node: Gcov and Optimization\x7f895383
27093 Node: Gcov Data Files\x7f898029
27094 Node: Trouble\x7f899136
27095 Node: Actual Bugs\x7f900726
27096 Node: Cross-Compiler Problems\x7f901634
27097 Node: Interoperation\x7f903142
27098 Node: External Bugs\x7f913268
27099 Node: Incompatibilities\x7f914702
27100 Node: Fixed Headers\x7f923030
27101 Node: Standard Libraries\x7f925335
27102 Node: Disappointments\x7f926698
27103 Node: C++ Misunderstandings\x7f931190
27104 Node: Static Definitions\x7f932000
27105 Node: Name lookup\x7f933040
27106 Ref: Name lookup-Footnote-1\x7f937824
27107 Node: Temporaries\x7f938011
27108 Node: Copy Assignment\x7f939979
27109 Node: Protoize Caveats\x7f941793
27110 Node: Non-bugs\x7f945746
27111 Node: Warnings and Errors\x7f955928
27112 Node: Bugs\x7f957681
27113 Node: Bug Criteria\x7f958240
27114 Node: Bug Reporting\x7f960441
27115 Node: Service\x7f960824
27116 Node: Contributing\x7f961638
27117 Node: Funding\x7f962373
27118 Node: GNU Project\x7f964863
27119 Node: Copying\x7f965510
27120 Node: GNU Free Documentation License\x7f984688
27121 Node: Contributors\x7f1007089
27122 Node: Option Index\x7f1034616
27123 Node: Keyword Index\x7f1111538
27124 \x1f
27125 End Tag Table