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:
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
26 * gcc: (gcc). The GNU Compiler Collection.
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:
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.
52 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR)
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.
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.
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,
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
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
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.
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
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
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
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
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
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
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.
273 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top
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
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.
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
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
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.
347 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC
352 Here is a summary of all the options, grouped by type. Explanations
353 are in the following sections.
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
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
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
392 _Objective-C Language Options_
393 *Note Options Controlling Objective-C Dialect: Objective-C Dialect
395 -fconstant-string-class=CLASS-NAME
396 -fgnu-runtime -fnext-runtime
399 -freplace-objc-classes
402 -Wno-protocol -Wselector -Wundeclared-selector
404 _Language Independent Options_
405 *Note Options to Control Diagnostic Messages Formatting: Language
408 -fdiagnostics-show-location=[once|every-line]
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
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
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
499 -O -O0 -O1 -O2 -O3 -Os
501 _Preprocessor Options_
502 *Note Options Controlling the Preprocessor: Preprocessor Options.
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
517 *Note Passing Options to the Assembler: Assembler Options.
518 -Wa,OPTION -Xassembler OPTION
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
529 *Note Options for Directory Search: Directory Options.
530 -BPREFIX -IDIR -I- -LDIR -specs=FILE
533 *Note Target Options::.
534 -V VERSION -b MACHINE
536 _Machine Dependent Options_
537 *Note Hardware Models and Configurations: Submodel 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
547 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12
548 -mauto-incdec -minmax -mlong-calls -mshort
549 -msoft-reg-count=COUNT
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
572 -mapcs-frame -mno-apcs-frame
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
585 -mlong-calls -mno-long-calls
586 -msingle-pic-base -mno-single-pic-base
589 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
592 -mtpcs-frame -mtpcs-leaf-frame
593 -mcaller-super-interworking -mcallee-super-interworking
596 -mmult-bug -mno-mult-bug
604 -malign-loops -mno-align-loops
607 -mmodel=CODE-SIZE-MODEL-TYPE
609 -mno-flush-func -mflush-func=NAME
610 -mno-flush-trap -mflush-trap=NUMBER
613 _RS/6000 and PowerPC Options_
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
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
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
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
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
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
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
699 -m32 -m64 -mstack-arg-probe
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
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
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_
741 -mrelax -mh -ms -mn -mint32 -malign-300
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
755 -Qy -Qn -YP,PATHS -Ym,DIR
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
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
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
785 -mmcu=MCU -msize -minit-stack=N -mno-interrupts
786 -mcall-prologues -mno-tablejump -mtiny-stack
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
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
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
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
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
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
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
848 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64
849 -mhard-float -msoft-float
850 -malloc-cc -mfixed-cc -mdword -mno-dword
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
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
877 -ftrapv -fwrapv -fbounds-check
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
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.
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
915 For any given input file, the file name suffix determines what kind of
919 C source code which must be preprocessed.
922 C source code which should not be preprocessed.
925 C++ source code which should not be preprocessed.
928 Objective-C source code. Note that you must link with the library
929 `libobjc.a' to make an Objective-C program work.
932 Objective-C source code which should not be preprocessed.
935 C or C++ header file to be turned into a precompiled header.
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.
950 C++ header file to be turned into a precompiled header.
955 Fortran source code which should not be preprocessed.
960 Fortran source code which must be preprocessed (with the
961 traditional preprocessor).
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.
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
978 Ada source code file containing a library unit body (a subprogram
979 or package body). Such files are also called "bodies".
985 Assembler code which must be preprocessed.
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:
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
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
1004 f77 f77-cpp-input ratfor
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).
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
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,
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.
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.
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
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
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.
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.
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.
1095 Print (on the standard output) a description of target specific
1096 command line options for each tool.
1099 Display the version number and copyrights of the invoked GCC.
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.
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:
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'
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
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
1185 ISO C90 (same as `-ansi').
1188 ISO C90 as modified in amendment 1.
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
1200 Default, ISO C90 plus GNU extensions (including some C99
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.
1210 The 1998 ISO C++ standard plus amendments.
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.
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
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
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))
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'.
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.
1305 Accept some non-standard constructs used in Microsoft header files.
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
1319 The semantics of this option will change if "cc1", "cc1plus", and
1320 "cc1obj" are merged.
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.
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++.
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
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.
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"
1376 This option is deprecated.
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
1395 Here is a list of options that are _only_ for compiling C++ programs:
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.
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)'.
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
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
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.
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
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
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.
1513 Downgrade some diagnostics about nonconformant code from errors to
1514 warnings. Thus, using `-fpermissive' will allow some
1515 nonconforming code to compile.
1518 Enable automatic template instantiation at link time. This option
1519 also implies `-fno-implicit-templates'. *Note Template
1520 Instantiation::, for more information.
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.
1531 Emit statistics about front-end processing at the end of the
1532 compilation. This information is generally only useful to the G++
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
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
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++.
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.
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
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
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
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) {}
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:
1665 A(): j (0), i (1) { }
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
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
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:
1738 struct B: public A {
1742 the `A' class version of `f' is hidden in `B', and code like:
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
1760 `-Wsynth (C++ only)'
1761 Warn when G++'s synthesis behavior does not match that of cfront.
1766 A& operator = (int);
1775 In this example, G++ will synthesize a default `A& operator =
1776 (const A&);', while cfront will use the user-defined `operator ='.
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
1798 Here is a list of options that are _only_ for compiling Objective-C
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.
1811 Generate object code compatible with the standard GNU Objective-C
1812 runtime. This is the default for most types of systems.
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
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.
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.
1838 @catch (AnObjCClass *exc) {
1845 @catch (AnotherClass *exc) {
1848 @catch (id allOthers) {
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) {
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.
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.
1933 Dump interface declarations for all classes seen in the source
1934 file to a file named `SOURCENAME.decl'.
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
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
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
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.
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
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
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::.
2031 Check the code for syntax errors, but don't do anything beyond
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
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
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.)
2077 Like `-pedantic', except that errors are produced rather than
2081 Inhibit all warning messages.
2084 Inhibit warning messages about the use of `#import'.
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
2092 Warn whenever a comment-start sequence `/*' appears in a `/*'
2093 comment, or whenever a Backslash-Newline appears in a `//' comment.
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
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'.
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
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'.
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'.)
2164 Enable `-Wformat' plus format checks not included in `-Wformat'.
2165 Currently equivalent to `-Wformat -Wformat-nonliteral
2166 -Wformat-security -Wformat-y2k'.
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
2181 For example, GCC will warn about `i' being uninitialized in the
2182 following snippet only when `-Winit-self' has been specified:
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
2198 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
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.
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 } };
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
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
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
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'.
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
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.
2316 Warn whenever a `switch' statement does not have a `default' case.
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.
2325 Warn if any trigraphs are encountered that might change the
2326 meaning of the program (trigraphs within comments are not warned
2330 Warn whenever a static function is declared but not defined or a
2331 non\-inline static function is unused.
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
2343 To suppress this warning use the `unused' attribute (*note
2344 Variable Attributes::).
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::).
2354 Warn whenever a statement computes a result that is explicitly not
2357 To suppress this warning cast the expression to `void'.
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'.
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
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'
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
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
2414 if (change_y) save_y = y, y = new_y;
2416 if (change_y) y = save_y;
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
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.
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'.
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
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:
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
2503 * If `-Wall' or `-Wunused' is also specified, warn about unused
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
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
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:
2524 * An empty body occurs in an `if' or `else' statement.
2526 * A pointer is compared against integer zero with `<', `<=',
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
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.
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.
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'
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
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
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
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
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
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
2667 Warn if an undefined identifier is evaluated in an `#if' directive.
2670 Warn whenever an `#else' or an `#endif' are followed by text.
2673 Warn whenever a local variable shadows another local variable,
2674 parameter or global variable or whenever a built-in function is
2678 Warn whenever an object of larger than LEN bytes is defined.
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
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 *'.
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 *'.
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.
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.
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
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'.
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
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
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
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').
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
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
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
2800 } __attribute__((packed));
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
2814 Warn if anything is declared more than once in the same scope,
2815 even in cases where multiple declaration is valid and changes
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.
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
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.
2871 Warn if a precompiled header (*note Precompiled Headers::) is
2872 found in the search path but can't be used.
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'
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
2890 Make all warnings into errors.
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:
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
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
2923 Nevertheless it proves possible to debug optimized output. This
2924 makes it reasonable to use the optimizer for programs that might
2927 The following options are useful when GCC is generated with the
2928 capability for more than one debugging format.
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.
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.
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.
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.
2960 Produce debugging information in XCOFF format (if that is
2961 supported). This is the format used by the DBX debugger on IBM
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
2973 Produce debugging information in DWARF version 2 format (if that is
2974 supported). This is the format used by DBX on IRIX 6.
2977 Produce debugging information in VMS debug format (if that is
2978 supported). This is the format used by DEBUG on VMS systems.
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
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'.
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
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
3021 Makes the compiler print out each function name as it is compiled,
3022 and print some statistics about each pass when it finishes.
3025 Makes the compiler print some statistics about the time consumed
3026 by each pass when it finishes.
3029 Makes the compiler print some statistics about permanent memory
3030 allocation when it finishes.
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
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.
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
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:
3102 Annotate the assembler output with miscellaneous debugging
3106 Dump after computing branch probabilities, to `FILE.12.bp'.
3109 Dump after block reordering, to `FILE.31.bbro'.
3112 Dump after instruction combination, to the file
3116 Dump after the first if conversion, to the file `FILE.14.ce1'.
3117 Also dump after the second if conversion, to the file
3121 Dump after branch target load optimization, to to
3122 `FILE.32.btl'. Also dump after delayed branch scheduling, to
3126 Dump all macro definitions, at the end of preprocessing, in
3127 addition to normal output.
3130 Dump after the third if conversion, to `FILE.30.ce3'.
3133 Dump after control and data flow analysis, to `FILE.11.cfg'.
3134 Also dump after life analysis, to `FILE.19.life'.
3137 Dump after purging `ADDRESSOF' codes, to `FILE.07.addressof'.
3140 Dump after global register allocation, to `FILE.25.greg'.
3143 Dump after GCSE, to `FILE.08.gcse'. Also dump after jump
3144 bypassing and control flow optimizations, to `FILE.10.bypass'.
3147 Dump after finalization of EH handling code, to `FILE.03.eh'.
3150 Dump after sibling call optimizations, to `FILE.02.sibling'.
3153 Dump after the first jump optimization, to `FILE.04.jump'.
3156 Dump after conversion from registers to stack, to
3160 Dump after local register allocation, to `FILE.24.lreg'.
3163 Dump after loop optimization passes, to `FILE.09.loop' and
3167 Dump after performing the machine dependent reorganization
3168 pass, to `FILE.35.mach'.
3171 Dump after register renumbering, to `FILE.29.rnreg'.
3174 Dump after the register move pass, to `FILE.22.regmove'.
3177 Dump after post-reload optimizations, to `FILE.26.postreload'.
3180 Dump after RTL generation, to `FILE.01.rtl'.
3183 Dump after the second scheduling pass, to `FILE.33.sched2'.
3186 Dump after CSE (including the jump optimization that
3187 sometimes follows CSE), to `FILE.06.cse'.
3190 Dump after the first scheduling pass, to `FILE.23.sched'.
3193 Dump after the second CSE pass (including the jump
3194 optimization that sometimes follows CSE), to `FILE.18.cse2'.
3197 Dump after running tracer, to `FILE.15.tracer'.
3200 Dump after null pointer elimination pass to `FILE.05.null'.
3203 Dump callgraph and unit-at-a-time optimization `FILE.00.unit'.
3206 Dump after the value profile transformations, to
3210 Dump after the second flow pass, to `FILE.27.flow2'.
3213 Dump after the peephole pass, to `FILE.28.peephole2'.
3216 Dump after constructing the web, to `FILE.17.web'.
3219 Produce all the dumps listed above.
3222 Produce a core dump whenever an error occurs.
3225 Print statistics on memory usage, at the end of the run, to
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.
3234 Dump the RTL in the assembler output as a comment before each
3235 instruction. Also turns on `-dp' annotation.
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'.
3243 Just generate RTL for a function instead of compiling it.
3244 Usually used with `r'.
3247 Dump debugging information during parsing, to standard error.
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
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
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.
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.
3294 Turn on all options.
3296 The following tree dumps are possible:
3298 Dump before any tree based optimization, to `FILE.original'.
3301 Dump after all tree based optimization, to `FILE.optimized'.
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.
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.
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.
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
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
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'.
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
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
3396 Print the compiler's target machine (for example,
3397 `i686-pc-linux-gnu')--and don't do anything else.
3400 Print the compiler version (for example, `3.0')--and don't do
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.
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
3445 Not all optimizations are controlled directly by a flag. Only
3446 optimizations that have a flag are listed.
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:
3465 -fguess-branch-probability
3468 `-O' also turns on `-fomit-frame-pointer' on machines where doing
3469 so does not interfere with debugging.
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:
3481 -foptimize-sibling-calls
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
3489 -fschedule-insns -fschedule-insns2
3490 -fsched-interblock -fsched-spec
3493 -freorder-blocks -freorder-functions
3496 -falign-functions -falign-jumps
3497 -falign-loops -falign-labels
3500 Please note the warning under `-fgcse' about invoking `-O2' on
3501 programs that use computed gotos.
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.
3509 Do not optimize. This is the default.
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.
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'.
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'.
3559 Force memory address constants to be copied into registers before
3560 doing arithmetic on them. This may produce better code just as
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
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'.
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
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'.
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'
3622 `max-inline-insns-auto'
3626 is set to 130 or N/4, whichever is smaller.
3628 `max-inline-insns-rtl'
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.
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.
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
3687 The default is `-fbranch-count-reg', enabled when
3688 `-fstrength-reduce' is enabled.
3691 Do not put function addresses in registers; make each instruction
3692 that calls a constant function contain the function's address
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'.
3714 Perform the optimizations of loop strength reduction and
3715 elimination of iteration variables.
3717 Enabled at levels `-O2', `-O3', `-Os'.
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
3735 Enabled at levels `-O2', `-O3', `-Os'.
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
3749 Enabled at levels `-O2', `-O3', `-Os'.
3752 Run the loop optimizer twice.
3754 Enabled at levels `-O2', `-O3', `-Os'.
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'.
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.
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.
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.
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'.
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'.
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'.
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
3838 Enabled at levels `-O2', `-O3', `-Os'.
3840 `-foptimize-register-move'
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
3850 Enabled at levels `-O2', `-O3', `-Os'.
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'.
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'.
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
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.
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.
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
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
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.
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
3940 This option is always enabled by default on certain machines,
3941 usually those which have no call-preserved registers to use
3944 Enabled at levels `-O2', `-O3', `-Os'.
3946 `-fmove-all-movables'
3947 Forces all invariant computations in loops to be moved outside the
3951 Forces all general-induction variables in loops to be
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
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
3995 The default is `-fguess-branch-probability' at levels `-O', `-O2',
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'.
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:
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:
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'.
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'.
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'.
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
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'.
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
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".
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
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'.
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.
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
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
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
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
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
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,
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
4246 The default is `-ftrapping-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'.
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
4275 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
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
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.
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.
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.
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'.
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.
4338 Parse the whole compilation unit before starting to produce code.
4339 This allows some extra optimizations to take place but consumes
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
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
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).
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'.
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).
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
4397 Disabled at level `-Os'.
4399 `-ffunction-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
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 /
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
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
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.
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
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
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
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.
4538 The maximum number of unrollings of a single loop.
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.
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
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
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
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
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.
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.
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
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.
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
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
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
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.
4723 Cancel any previous definition of NAME, either built in or
4724 provided with a `-D' option.
4727 Do not predefine any system-specific or GCC-specific macros. The
4728 standard predefined macros remain defined.
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 .
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.
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.
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.)
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'.
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
4776 Warn the first time `#import' is used.
4779 Warn whenever an identifier which is not a macro is encountered in
4780 an `#if' directive, outside of `defined'. Such identifiers are
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
4799 #if defined the_macro_causing_the_warning
4803 Warn whenever an `#else' or an `#endif' are followed by text.
4804 This usually happens in code of the form
4812 The second and third `FOO' should be in comments, but often are not
4813 in older programs. This warning is on by default.
4816 Make all warnings into hard errors. Source code which triggers
4817 warnings will be rejected.
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
4826 Suppress all warnings, including those which GNU CPP issues by
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.
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.
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'.
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.
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
4879 When used with the driver options `-MD' or `-MMD', `-MF' overrides
4880 the default dependency output file.
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.
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
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
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
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.
4943 Like `-MD' except mention only user header files, not system
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.
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'
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
4978 STANDARD may be one of:
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'.
4987 The 1990 C standard, as amended in 1994.
4993 The revised ISO C standard, published in December 1999.
4994 Before publication, this was known as C9X.
4997 The 1990 C standard plus GNU extensions. This is the default.
5001 The 1999 C standard plus GNU extensions.
5004 The 1998 ISO C++ standard plus amendments.
5007 The same as `-std=c++98' plus GNU extensions. This is the
5008 default for C++ code.
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'
5018 In addition, `-I-' inhibits the use of the directory of the current
5019 file directory as the first search directory for `#include "FILE"'.
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.
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.)
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
5039 If multiple `-include' options are given, the files are included
5040 in the order they appear on the command line.
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'.
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.
5057 Specify PREFIX as the prefix for subsequent `-iwithprefix'
5058 options. If the prefix represents a directory, you should include
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.
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.
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'.
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.
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
5145 `-A -PREDICATE=ANSWER'
5146 Cancel an assertion with the predicate PREDICATE and answer ANSWER.
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.
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
5163 touch foo.h; cpp -dM foo.h
5165 will show all the predefined macros.
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.
5174 Like `D', but emit only the macro names, not their expansions.
5177 Output `#include' directives in addition to the result of
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.
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
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
5209 The `-CC' option is generally used to support lint comments.
5212 Try to imitate the behavior of old-fashioned C preprocessors, as
5213 opposed to ISO C preprocessors.
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: [ ] { } # \ ^ | ~
5229 Enable special code to work around file systems which only permit
5230 very short file names, such as MS-DOS.
5234 Print text describing all the command line options instead of
5235 preprocessing anything.
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.
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
5251 Print out GNU CPP's version number. With one dash, proceed to
5252 preprocess as normal. With two dashes, exit immediately.
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.
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
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.
5275 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC
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
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.
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
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.
5327 You need this special case of the `-l' option in order to link an
5328 Objective-C program.
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.
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.
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
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..)
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.
5374 Remove all symbol table and relocation information from the
5378 On systems that support dynamic linking, this prevents linking
5379 with the shared libraries. On other systems, this option has no
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)
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
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
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.
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
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.
5444 Pass OPTION as an option to the linker. If OPTION contains
5445 commas, it is split into multiple options at the commas.
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.
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:
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
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.
5511 Add directory DIR to the list of directories to be searched for
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
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
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.
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,
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
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:
5588 Issues a COMMAND to the spec file processor. The commands that can
5592 Search for FILE and insert its text at the current point in
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.
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.
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.
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:
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:
5641 Says that .ZZ files are, in fact, C++ source files.
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
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
5671 startfile Object files to include at the start of the link
5673 Here is a small example of a spec file:
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.
5697 Substitute one `%' into the program name or argument.
5700 Substitute the name of the input file being processed.
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.
5708 This is the same as `%b', but include the file suffix (text after
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
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.
5732 Like `%g', but generates a new temporary file name even if
5733 `%uSUFFIX' was already seen.
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.
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
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'.
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 %.
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.
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.
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'.
5789 Substitutes the standard macro predefinitions for the current
5790 target machine. Use this when running `cpp'.
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.
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.
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.
5808 Print STR as an error message. STR is terminated by a newline.
5809 Use this when inconsistent options are detected.
5812 Substitute the contents of spec string NAME at this point.
5815 Like `%(...)' but put `__' around `-D' arguments.
5818 Accumulate an option for `%X'.
5821 Output the accumulated linker options specified by `-Wl' or a `%x'
5825 Output the accumulated assembler options specified by `-Wa'.
5828 Output the accumulated preprocessor options specified by `-Wp'.
5831 Process the `asm' spec. This is used to compute the switches to
5832 be passed to the assembler.
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
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.
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
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.
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.
5860 Process the `libgcc' spec. This is a spec string for deciding
5861 which GCC support library should be included on the command line
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'.
5870 Process the `endfile' spec. This is a spec string that specifies
5871 the last object files that will be passed to the linker.
5874 Process the `cpp' spec. This is used to construct the arguments
5875 to be passed to the C preprocessor.
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
5881 %{funsigned-char:-D__CHAR_UNSIGNED__}
5884 Process the `cc1' spec. This is used to construct the options to
5885 be passed to the actual C compiler (`cc1').
5888 Process the `cc1plus' spec. This is used to construct the options
5889 to be passed to the actual C++ compiler (`cc1plus').
5892 Substitute the variable part of a matched option. See below.
5893 Note that each comma in the substituted string is replaced by a
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.
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
5909 The following built-in spec functions are provided:
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:
5917 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
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:
5930 crt0%O%s %:if-exists(crti%O%s) \
5931 %:if-exists-else(crtbeginT%O%s crtbegin%O%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'.
5942 Like %{`S'} but mark last argument supplied within as a file to be
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
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*}'.
5960 Substitutes `X', if the `-S' switch was given to GCC.
5963 Substitutes `X', if the `-S' switch was _not_ given to GCC.
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 `*'.
5974 Substitutes `X', if processing a file with suffix `S'.
5977 Substitutes `X', if _not_ processing a file with suffix `S'.
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:
5995 -d fred.c -foo -baz -boggle
5996 -d jim.d -bar -baz -boggle
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
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
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
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.
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.
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.
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.
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
6080 Some configurations of the compiler also support additional special
6081 options, usually for compatibility with other compilers on the same
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.
6097 * RS/6000 and PowerPC Options::
6100 * i386 and x86-64 Options::
6102 * Intel 960 Options::
6103 * DEC Alpha Options::
6104 * DEC Alpha/VMS Options::
6107 * System V Options::
6108 * TMS320C3x/C4x Options::
6116 * S/390 and zSeries Options::
6120 * Xstormy16 Options::
6125 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Up: Submodel Options
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.
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.
6145 Generate output for a 68020. This is the default when the
6146 compiler is configured for 68020-based systems.
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.
6154 Generate output for a 68030. This is the default when the
6155 compiler is configured for 68030-based systems.
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.
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
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.
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.
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
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
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.
6214 Consider type `int' to be 16 bits wide, like `short int'.
6217 Do not use the bit-field instructions. The `-m68000', `-mcpu32'
6218 and `-m5200' options imply `-mnobitfield'.
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.
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
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.
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
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.
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.
6270 Do not (do) assume that unaligned memory references will be
6271 handled by the system.
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.
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
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.
6301 File: gcc.info, Node: M68hc1x Options, Next: VAX Options, Prev: M680x0 Options, Up: Submodel Options
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.
6313 Generate output for a 68HC11. This is the default when the
6314 compiler is configured for 68HC11-based systems.
6318 Generate output for a 68HC12. This is the default when the
6319 compiler is configured for 68HC12-based systems.
6323 Generate output for a 68HCS12.
6326 Enable the use of 68HC12 pre and post auto-increment and
6327 auto-decrement addressing modes.
6331 Enable the use of 68HC12 min and max instructions.
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.
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.
6349 File: gcc.info, Node: VAX Options, Next: SPARC Options, Prev: M68hc1x Options, Up: Submodel Options
6354 These `-m' options are defined for the VAX:
6357 Do not output certain jump instructions (`aobleq' and so on) that
6358 the Unix assembler for the VAX cannot handle across long ranges.
6361 Do output those jump instructions, on the assumption that you will
6362 assemble with the GNU assembler.
6365 Output code for g-format floating point numbers instead of
6369 File: gcc.info, Node: SPARC Options, Next: ARM Options, Prev: VAX Options, Up: Submodel Options
6374 These `-m' options are supported on the SPARC:
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.
6388 Generate output containing floating point instructions. This is
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
6409 Generate output containing quad-word (long double) floating point
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.
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
6439 These options are deprecated and will be deleted in a future GCC
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'
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.
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
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.
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'.
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'.
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
6509 v8: supersparc, hypersparc
6510 sparclite: f930, f934, sparclite86x
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
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.
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'.
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.
6572 With `-mvis', GCC generates code that takes advantage of the
6573 UltraSPARC Visual Instruction Set extensions. The default is
6576 These `-m' options are supported in addition to the above on SPARC-V9
6577 processors in 64-bit environments:
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
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.
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.
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.
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
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:
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.
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.
6637 File: gcc.info, Node: ARM Options, Next: MN10300 Options, Prev: SPARC Options, Up: Submodel Options
6642 These `-m' options are defined for Advanced RISC Machines (ARM)
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
6654 This is a synonym for `-mapcs-frame'.
6657 Generate code for a processor running with a 26-bit program
6658 counter, and conforming to the function calling standards for the
6661 This option is deprecated. Future releases of the GCC will only
6662 support generating code that runs in apcs-32 mode.
6665 Generate code for a processor running with a 32-bit program
6666 counter, and conforming to the function calling standards for the
6669 This flag is deprecated. Future releases of GCC will make this
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.
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'.
6689 Generate output containing floating point instructions. This is
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
6707 Generate code for a processor running in little-endian mode. This
6708 is the default for all standard configurations.
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.
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
6749 The default setting is `-malignment-traps', since this produces
6750 code that will also run on processors implementing ARM architecture
6753 This option is deprecated and will be removed in the next release
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',
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.
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'.
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
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.
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
6836 `-mnop-fun-dllimport'
6837 Disable support for the `dllimport' attribute.
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
6865 .ascii "arm_poke_function_name", 0
6868 .word 0xff000000 + (t1 - t0)
6869 arm_poke_function_name
6871 stmfd sp!, {fp, ip, lr, pc}
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)'.
6881 Generate code for the 16-bit Thumb instruction set. The default
6882 is to use the 32-bit ARM instruction set.
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
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.
6909 File: gcc.info, Node: MN10300 Options, Next: M32R/D Options, Prev: ARM Options, Up: Submodel Options
6914 These `-m' options are defined for Matsushita MN10300 architectures:
6917 Generate code to avoid bugs in the multiply instructions for the
6918 MN10300 processors. This is the default.
6921 Do not generate code to avoid bugs in the multiply instructions
6922 for the MN10300 processors.
6925 Generate code which uses features specific to the AM33 processor.
6928 Do not generate code which uses features specific to the AM33
6929 processor. This is the default.
6932 Do not link in the C run-time initialization object file.
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.
6943 File: gcc.info, Node: M32R/D Options, Next: RS/6000 and PowerPC Options, Prev: MN10300 Options, Up: Submodel Options
6948 These `-m' options are defined for Renesas M32R/D architectures:
6951 Generate code for the M32R/2.
6954 Generate code for the M32R/X.
6957 Generate code for the M32R. This is the default.
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
6965 The addressability of a particular object can be set with the
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'
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).
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.
6991 Put small global and static data in the small data area, but do not
6992 generate special code to reference them.
6995 Put small global and static data in the small data area, and
6996 generate special instructions to reference them.
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
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
7011 Makes the M32R specific code in the compiler display some
7012 statistics that might help in debugging programs.
7015 Align all loops to a 32-byte boundary.
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
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.
7033 Specifies that the cache cannot be flushed by using a trap.
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.
7041 Indicates that there is no OS function for flushing the cache.
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:
7057 `-mno-powerpc-gpopt'
7059 `-mno-powerpc-gfxopt'
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
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.
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.
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
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'.
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
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
7189 Disable Booke SPE ABI extensions for the current ABI.
7193 This switch enables or disables the generation of ISEL
7198 This switch enables or disables the generation of SPE simd
7201 `-mfloat-gprs=YES/NO'
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
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
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'.
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.
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.
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.
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.
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
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.
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.
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.
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
7337 On System V.4 and embedded PowerPC systems do not (do) assume that
7338 unaligned memory references will be handled by the system.
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'.
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.
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.
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'.
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
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
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
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.
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'.
7417 Specify both `-mcall-sysv' and `-meabi' options.
7419 `-mcall-sysv-noeabi'
7420 Specify both `-mcall-sysv' and `-mno-eabi' options.
7423 On System V.4 and embedded PowerPC systems compile code for the
7424 Solaris operating system.
7427 On System V.4 and embedded PowerPC systems compile code for the
7428 Linux-based GNU system.
7431 On System V.4 and embedded PowerPC systems compile code for the
7432 Hurd-based GNU system.
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
7446 Extend the current ABI with AltiVec ABI extensions. This does not
7447 change the default ABI, instead it adds the AltiVec ABI extensions
7451 Disable AltiVec ABI extensions for the current ABI.
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.
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.
7471 On embedded PowerPC systems, assume that the startup module is
7472 called `crt0.o' and the standard C libraries are `libmvme.a' and
7476 On embedded PowerPC systems, assume that the startup module is
7477 called `crt0.o' and the standard C libraries are `libads.a' and
7481 On embedded PowerPC systems, assume that the startup module is
7482 called `crt0.o' and the standard C libraries are `libyk.a' and
7486 On System V.4 and embedded PowerPC systems, specify that you are
7487 compiling for a VxWorks system.
7490 Specify that you are compiling for the WindISS simulation
7494 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
7495 header to indicate that `eabi' extended relocations are used.
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.
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
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'
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'.
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.
7546 On embedded PowerPC systems, put all initialized global and static
7547 data in the `.data' section, and all uninitialized data in the
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.
7559 On System V.4 and embedded PowerPC systems do (do not) emit
7560 register names in the assembly language output using symbolic
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
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.
7586 Adds support for multithreading with the "pthreads" library. This
7587 option sets flags for both the preprocessor and linker.
7590 File: gcc.info, Node: Darwin Options, Next: MIPS Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options
7595 These options are defined for all architectures running the Darwin
7596 operating system. They are useful for compatibility with other Mac OS
7600 Loads all members of static archive libraries. See man ld(1) for
7603 `-arch_errors_fatal'
7604 Cause the errors having to do with files that have the wrong
7605 architecture to be fatal.
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
7613 Produce a Mach-o bundle format file. See man ld(1) for more
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'
7623 `-compatibility_version'
7627 `-dylinker_install_name'
7630 `-exported_symbols_list'
7633 `-force_cpusubtype_ALL'
7634 `-force_flat_namespace'
7635 `-headerpad_max_install_names'
7639 `-keep_private_externs'
7642 `-multiply_defined_unused'
7650 `-prebind_all_twolevel_modules'
7654 `-sectobjectsymbols'
7658 `-sectobjectsymbols'
7661 `-seg_addr_table_filename'
7664 `-segs_read_only_addr'
7665 `-segs_read_write_addr'
7670 `-twolevel_namespace'
7673 `-unexported_symbols_list'
7674 `-weak_reference_mismatches'
7676 These options are available for Darwin linker. Darwin linker man
7677 page describes them in detail.
7680 File: gcc.info, Node: MIPS Options, Next: i386 and x86-64 Options, Prev: Darwin Options, Up: Submodel Options
7686 Generate big-endian code.
7689 Generate little-endian code. This is the default for `mips*el-*-*'
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
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.
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
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
7733 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
7734 which work in the same way as the `-march' ones described above.
7737 Equivalent to `-march=mips1'.
7740 Equivalent to `-march=mips2'.
7743 Equivalent to `-march=mips3'.
7746 Equivalent to `-march=mips4'.
7749 Equivalent to `-march=mips32'.
7752 Equivalent to `-march=mips32r2'.
7755 Equivalent to `-march=mips64'.
7759 Use (do not use) the MIPS16 ISA.
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.
7774 Generate (do not generate) SVR4-style position-independent code.
7775 `-mabicalls' is the default for SVR4-based systems.
7779 Lift (do not lift) the usual restrictions on the size of the global
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
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.
7810 Assume that general-purpose registers are 32 bits wide.
7813 Assume that general-purpose registers are 64 bits wide.
7816 Assume that floating-point registers are 32 bits wide.
7819 Assume that floating-point registers are 64 bits wide.
7822 Use floating-point coprocessor instructions.
7825 Do not use floating-point coprocessor instructions. Implement
7826 floating-point calculations using library calls instead.
7829 Assume that the floating-point coprocessor only supports
7830 single-precision operations.
7833 Assume that the floating-point coprocessor supports
7834 double-precision operations. This is the default.
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
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
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.
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
7861 All modules should be compiled with the same `-G NUM' value.
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
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.
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.
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'.
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.
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
7934 Enable (disable) use of the `mad', `madu' and `mul' instructions,
7935 as provided by the R4650 ISA.
7939 Enable (disable) use of the floating point multiply-accumulate
7940 instructions, when they are available. The default is
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
7949 Tell the MIPS assembler to not run its preprocessor over user
7950 assembler files (with a `.s' suffix) when assembling them.
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
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'.
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.
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
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:
7993 Original Intel's i386 CPU.
7996 Intel's i486 CPU. (No scheduling is implemented for this
8000 Intel Pentium CPU with no MMX support.
8003 Intel PentiumMMX CPU based on Pentium core with MMX
8004 instruction set support.
8007 Intel PentiumPro CPU.
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.
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
8026 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
8027 and SSE3 instruction set support.
8030 Improved version of Intel Pentium4 CPU with 64-bit
8031 extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
8034 AMD K6 CPU with MMX instruction set support.
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.)
8054 IDT Winchip C6 CPU, dealt in same way as i486 with additional
8055 MMX instruction set support.
8058 IDT Winchip2 CPU, dealt in same way as i486 with additional
8059 MMX and 3dNOW! instruction set support.
8062 Via C3 CPU with MMX and 3dNOW! instruction set support. (No
8063 scheduling is implemented for this chip.)
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.
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'.
8080 A deprecated synonym for `-mtune'.
8086 These options are synonyms for `-mtune=i386', `-mtune=i486',
8087 `-mtune=pentium', and `-mtune=pentiumpro' respectively. These
8088 synonyms are deprecated.
8091 Generate floating point arithmetics for selected unit UNIT. The
8092 choices for UNIT are:
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.
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
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
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.
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.
8138 Output asm instructions using selected DIALECT. Supported choices
8139 are `intel' or `att' (the default one).
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.
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
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.
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
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
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
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.
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.
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.)
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'.
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'.
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
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'.
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
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
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.
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.
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.
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.
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
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.
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.
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.
8418 File: gcc.info, Node: HPPA Options, Next: Intel 960 Options, Prev: i386 and x86-64 Options, Up: Submodel Options
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.
8440 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
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.
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.
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
8460 `-mdisable-indexing'
8461 Prevent the compiler from using indexing address modes. This
8462 avoids some rather obscure problems when compiling MIG generated
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
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
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'.
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.
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
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
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.
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`'.
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`'.
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
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.
8574 Suppress the generation of link options to search libdld.sl when
8575 the `-static' option is specified on HP-UX 10 and later.
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.
8591 Add support for multithreading with the "dce thread" library under
8592 HP-UX. This option sets flags for both the preprocessor and
8596 File: gcc.info, Node: Intel 960 Options, Next: DEC Alpha Options, Prev: HPPA Options, Up: Submodel Options
8601 These `-m' options are defined for the Intel 960 implementations:
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'.
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.
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.
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'.
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.
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.
8649 Enable compatibility with iC960 v2.0 or v3.0.
8653 Enable compatibility with the iC960 assembler.
8657 Do not permit (do permit) unaligned accesses.
8660 Enable structure-alignment compatibility with Intel's gcc release
8661 version 1.3 (based on gcc 1.37). This option implies
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.
8673 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Intel 960 Options, Up: Submodel Options
8678 These `-m' options are defined for the DEC Alpha implementations:
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.
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
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:
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).
8745 In addition to the traps enabled by `n', underflow traps are
8749 Like `su', but the instructions are marked to be safe for
8750 software completion (see Alpha architecture manual for
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:
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.
8766 Round towards minus infinity.
8769 Chopped rounding mode. Floating point numbers are rounded
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:
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.
8795 Function precision. The trap handler can determine the
8796 function that caused a floating point exception.
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'.
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.
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
8820 Use this option to require GCC to construct _all_ integer constants
8821 using code, even if it takes more instructions (the maximum is
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
8831 Select whether to generate code to be assembled by the
8832 vendor-supplied assembler (`-malpha-as') or by the GNU assembler
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
8851 Generate code that uses (does not use) VAX F and G floating point
8852 arithmetic instead of IEEE single and double precision.
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.
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'.
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'.
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
8908 Schedules as an EV4 and has no instruction set extensions.
8912 Schedules as an EV5 and has no instruction set extensions.
8916 Schedules as an EV5 and supports the BWX extension.
8921 Schedules as an EV5 and supports the BWX and MAX extensions.
8925 Schedules as an EV6 and supports the BWX, FIX, and MAX
8930 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
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
8946 A decimal number representing clock cycles.
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.
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.
8970 File: gcc.info, Node: H8/300 Options, Next: SH Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options
8975 These `-m' options are defined for the H8/300 implementations:
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.
8983 Generate code for the H8/300H.
8986 Generate code for the H8S.
8989 Generate code for the H8S and H8/300H in the normal mode. This
8990 switch must be used either with -mh or -ms.
8993 Generate code for the H8S/2600. This switch must be used with
8997 Make `int' data 32 bits by default.
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
9007 File: gcc.info, Node: SH Options, Next: System V Options, Prev: H8/300 Options, Up: Submodel Options
9012 These `-m' options are defined for the SH implementations:
9015 Generate code for the SH1.
9018 Generate code for the SH2.
9021 Generate code for the SH2e.
9024 Generate code for the SH3.
9027 Generate code for the SH3e.
9030 Generate code for the SH4 without a floating-point unit.
9033 Generate code for the SH4 with a floating-point unit that only
9034 supports single-precision arithmetic.
9037 Generate code for the SH4 assuming the floating-point unit is in
9038 single-precision mode by default.
9041 Generate code for the SH4.
9044 Compile code for the processor in big endian mode.
9047 Compile code for the processor in little endian mode.
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
9056 Shorten some address references at link time, when possible; uses
9057 the linker option `-relax'.
9060 Use 32-bit offsets in `switch' tables. The default is to use
9064 Enable the use of the instruction `fmovd'.
9067 Comply with the calling conventions defined by Renesas.
9070 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
9074 Increase IEEE-compliance of floating-point code.
9077 Dump instruction size and location in the assembly code.
9080 This option is deprecated. It pads structures to multiple of 4
9081 bytes, which is incompatible with the SH ABI.
9084 Optimize for space instead of speed. Implied by `-Os'.
9087 When generating position-independent code, emit function calls
9088 using the Global Offset Table instead of the Procedure Linkage
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*'.
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:
9107 Create a shared object. It is recommended that `-symbolic' or
9108 `-shared' be used instead.
9111 Identify the versions of each tool used by the compiler, in a
9112 `.ident' assembler directive in the output.
9115 Refrain from adding `.ident' directives to the output file (this is
9119 Search the directories DIRS, and no others, for libraries
9120 specified with `-l'.
9123 Look in the directory DIR to find the M4 preprocessor. The
9124 assembler uses this option.
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:
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.
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.
9153 Allow (disallow) allocation of general integer operands into the
9154 block count register BK.
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.
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.
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.
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.
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'.
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.
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.
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.
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.
9240 `-mno-parallel-insns'
9241 Allow the generation of parallel instructions. This is enabled by
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.
9252 File: gcc.info, Node: V850 Options, Next: ARC Options, Prev: TMS320C3x/C4x Options, Up: Submodel Options
9257 These `-m' options are defined for V850 implementations:
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.
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'
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.
9281 Try to make the code as small as possible. At present, this just
9282 turns on the `-mep' and `-mprolog-function' options.
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
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.
9296 Put static or global variables whose size is N bytes or less into
9297 the first 32 kilobytes of memory.
9300 Specify that the target processor is the V850.
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.
9308 This option will cause r2 and r5 to be used in the code generated
9309 by the compiler. This setting is the default.
9312 This option will cause r2 and r5 to be treated as fixed registers.
9315 Specify that the target processor is the V850E1. The preprocessor
9316 constants `__v850e1__' and `__v850e__' will be defined if this
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.
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
9337 File: gcc.info, Node: ARC Options, Next: NS32K Options, Prev: V850 Options, Up: Submodel Options
9342 These options are defined for ARC implementations:
9345 Compile code for little endian mode. This is the default.
9348 Compile code for big endian mode.
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.
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::.
9372 File: gcc.info, Node: NS32K Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options
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.
9384 Generate output for a 32032. This is the default when the
9385 compiler is configured for 32032 and 32016 based systems.
9389 Generate output for a 32332. This is the default when the
9390 compiler is configured for 32332-based systems.
9394 Generate output for a 32532. This is the default when the
9395 compiler is configured for 32532-based systems.
9398 Generate output containing 32081 instructions for floating point.
9399 This is the default for all systems.
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.
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
9417 Do not try and generate multiply-add floating point instructions
9418 `polyF' and `dotF'. This is the default on all platforms.
9421 Generate output containing library calls for floating point.
9422 *Warning:* the requisite libraries may not be available.
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.
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.
9437 Do use the bit-field instructions. This is the default for all
9438 platforms except the pc532.
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.
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.
9468 Do not pass any arguments in registers. This is the default for
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.
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.
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.
9489 Assume code will be loaded in the first 512MB of virtual address
9490 space. This is the default for all platforms.
9493 File: gcc.info, Node: AVR Options, Next: MCore Options, Prev: NS32K Options, Up: Submodel Options
9498 These options are defined for AVR implementations:
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,
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).
9524 Output instruction sizes to the asm file.
9527 Specify the initial stack address, which may be a symbol or
9528 numeric value, `__stack' is the default.
9531 Generated code is not compatible with hardware interrupts. Code
9532 size will be smaller.
9535 Functions prologues/epilogues expanded as call to appropriate
9536 subroutines. Code size will be smaller.
9539 Do not generate tablejump insns which sometimes increase code size.
9542 Change only the low 8 bits of the stack pointer.
9545 File: gcc.info, Node: MCore Options, Next: IA-64 Options, Prev: AVR Options, Up: Submodel Options
9550 These are the `-m' options defined for the Motorola M*Core processors.
9554 Inline constants into the code stream if it can be done in two
9555 instructions or less.
9559 Use the divide instruction. (Enabled by default).
9562 `-mno-relax-immediate'
9563 Allow arbitrary sized immediates in bit operations.
9566 `-mno-wide-bitfields'
9567 Always treat bit-fields as int-sized.
9570 `-mno-4byte-functions'
9571 Force all functions to be aligned to a four byte boundary.
9574 `-mno-callgraph-data'
9575 Emit callgraph information.
9579 Prefer word access when reading byte quantities.
9583 Generate code for a little endian target.
9587 Generate code for the 210 processor.
9590 File: gcc.info, Node: IA-64 Options, Next: D30V Options, Prev: MCore Options, Up: Submodel Options
9595 These are the `-m' options defined for the Intel IA-64 architecture.
9598 Generate code for a big endian target. This is the default for
9602 Generate code for a little endian target. This is the default for
9607 Generate (or don't) code for the GNU assembler. This is the
9612 Generate (or don't) code for the GNU linker. This is the default.
9615 Generate code that does not use a global pointer register. The
9616 result is not position independent code, and violates the IA-64
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.
9625 Generate code that works around Itanium B step errata.
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.
9634 Disable (or enable) optimizations that use the small data section.
9635 This may be useful for working around optimizer bugs.
9638 Generate code that uses a single constant global pointer value.
9639 This is useful when compiling kernel code.
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.
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
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.
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.
9681 File: gcc.info, Node: D30V Options, Next: S/390 and zSeries Options, Prev: IA-64 Options, Up: Submodel Options
9686 These `-m' options are defined for D30V implementations:
9689 Link the `.text', `.data', `.bss', `.strings', `.rodata',
9690 `.rodata1', `.data1' sections into external memory, which starts
9691 at location `0x80000000'.
9694 Same as the `-mextmem' switch.
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'.
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.
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.
9714 Specify the maximum number of conditionally executed instructions
9715 that replace a branch. The default is 4.
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
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
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.
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.
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'.
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'.
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.
9776 Print (or do not print) additional debug information when
9777 compiling. The default is to not print debug information.
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'.
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'.
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.
9799 File: gcc.info, Node: CRIS Options, Next: MMIX Options, Prev: S/390 and zSeries Options, Up: Submodel Options
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.
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.
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.
9844 Do not use condition-code results from previous instruction;
9845 always emit compare and test instructions before use of condition
9849 Do not emit instructions with side-effects in addressing modes
9850 other than post-increment.
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.
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
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
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'.
9890 Legacy no-op option only recognized with the cris-axis-aout target.
9893 Legacy no-op option only recognized with the cris-axis-elf and
9894 cris-axis-linux-gnu targets.
9897 Only recognized with the cris-axis-aout target, where it selects a
9898 GNU/linux-like multilib, include files and instruction set for
9902 Legacy no-op option only recognized with the cris-axis-linux-gnu
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.
9912 Like `-sim', but pass linker options to locate initialized data at
9913 0x40000000 and zero-initialized data at 0x80000000.
9916 File: gcc.info, Node: MMIX Options, Next: PDP-11 Options, Prev: CRIS Options, Up: Submodel Options
9921 These options are defined for the MMIX:
9925 Specify that intrinsic library functions are being compiled,
9926 passing all values in registers, no matter the size.
9930 Generate floating-point comparison instructions that compare with
9931 respect to the `rE' epsilon register.
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
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.
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.
9959 Generate an executable in the ELF format, rather than the default
9960 `mmo' format used by the `mmix' simulator.
9963 `-mno-branch-predict'
9964 Use (do not use) the probable-branch instructions, when static
9965 branch prediction indicates a probable branch.
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'.
9981 Force (do not force) generated code to have a single exit point in
9985 File: gcc.info, Node: PDP-11 Options, Next: Xstormy16 Options, Prev: MMIX Options, Up: Submodel Options
9990 These options are defined for the PDP-11:
9993 Use hardware FPP floating point. This is the default. (FIS
9994 floating point on the PDP-11/40 is not supported.)
9997 Do not use hardware floating point.
10000 Return floating-point results in ac0 (fr0 in Unix assembler
10004 Return floating-point results in memory. This is the default.
10007 Generate code for a PDP-11/40.
10010 Generate code for a PDP-11/45. This is the default.
10013 Generate code for a PDP-11/10.
10016 Use inline `movstrhi' patterns for copying memory. This is the
10020 Do not use inline `movstrhi' patterns for copying memory.
10024 Use 16-bit `int'. This is the default.
10032 Use 64-bit `float'. This is the default.
10036 Use 32-bit `float'.
10039 Use `abshi2' pattern. This is the default.
10042 Do not use `abshi2' pattern.
10044 `-mbranch-expensive'
10045 Pretend that branches are expensive. This is for experimenting
10046 with code generation only.
10049 Do not pretend that branches are expensive. This is the default.
10052 Generate code for a system with split I&D.
10055 Generate code for a system without split I&D. This is the default.
10058 Use Unix assembler syntax. This is the default when configured for
10062 Use DEC assembler syntax. This is the default when configured for
10063 any PDP-11 target other than `pdp11-*-bsd'.
10066 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: PDP-11 Options, Up: Submodel Options
10071 These options are defined for Xstormy16:
10074 Choose startup files and linker script suitable for the simulator.
10077 File: gcc.info, Node: FRV Options, Prev: Xtensa Options, Up: Submodel Options
10083 Only use the first 32 general purpose registers.
10086 Use all 64 general purpose registers.
10089 Use only the first 32 floating point registers.
10092 Use all 64 floating point registers
10095 Use hardware instructions for floating point operations.
10098 Use library routines for floating point operations.
10101 Dynamically allocate condition code registers.
10104 Do not try to dynamically allocate condition code registers, only
10105 use `icc0' and `fcc0'.
10108 Change ABI to use double word insns.
10111 Do not use double word instructions.
10114 Use floating point double instructions.
10117 Do not use floating point double instructions.
10120 Use media instructions.
10123 Do not use media instructions.
10126 Use multiply and add/subtract instructions.
10129 Do not use multiply and add/subtract instructions.
10132 Enable PIC support for building libraries
10135 Use only the first four media accumulator registers.
10138 Use all eight media accumulator registers.
10141 Pack VLIW instructions.
10144 Do not pack VLIW instructions.
10147 Do not mark ABI switches in e_flags.
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.
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.
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.
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.
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.
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.
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.
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
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.
10223 Cause gas to print out tomcat statistics.
10226 Select the processor type for which to generate code. Possible
10227 values are `simple', `tomcat', `fr500', `fr400', `fr300', `frv'.
10230 File: gcc.info, Node: Xtensa Options, Next: FRV Options, Prev: Xstormy16 Options, Up: Submodel Options
10235 These options are supported for Xtensa targets:
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.
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.
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.
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.
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.
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
10326 This option generates traps for signed overflow on addition,
10327 subtraction, multiplication operations.
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
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
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
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
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.
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
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
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
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
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.
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.
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.
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.
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.
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.
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
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
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
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
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,
10569 void __cyg_profile_func_exit (void *this_fn,
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
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
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
10599 `-fstack-limit-register=REG'
10600 `-fstack-limit-symbol=SYM'
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.
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
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'.
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.
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
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.
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
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
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'
10719 Other prefixes specified with `-B' take precedence over this
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.
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'.
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).
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:
10759 Recognize JIS characters.
10762 Recognize SJIS characters.
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
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
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::.
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
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
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::.
10927 File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC
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
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
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
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.
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'.
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
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 " "'.
11031 Keep the `.X' files. Normally, they are deleted after conversion
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
11041 Make no real changes. This mode just prints information about the
11042 conversions that would have been done without `-n'.
11045 Make no `.save' files. The original files are simply deleted.
11046 Use this option with caution.
11049 Use the program PROGRAM as the compiler. Normally, the name `gcc'
11053 Work quietly. Most warnings are suppressed.
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
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.
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.
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::
11104 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation
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).'
11118 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation
11123 The behavior of these points are dependent on the implementation of
11124 the C library, and are not defined by GCC itself.
11127 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation
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
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.
11144 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation
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
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
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
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
11190 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation
11195 * `Any extended integer types that exist in the implementation
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
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).'
11216 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation
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
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
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,
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).'
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
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.
11299 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation
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
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.
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
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).'
11356 File: gcc.info, Node: Qualifiers implementation, Next: Preprocessing directives implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation
11361 * `What constitutes an access to an object that has
11362 volatile-qualified type (6.7.3).'
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
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 `"??:??:??"'.
11412 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation
11417 The behavior of these points are dependent on the implementation of
11418 the C library, and are not defined by GCC itself.
11421 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation
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,
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).'
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.
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++.
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
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.
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
11533 ({ int y = foo (); int 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
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
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
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; }
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
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:
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) \
11645 typeof (target) _SEARCH_target = (target); \
11646 typeof (*(array)) *_SEARCH_array = (array); \
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; } \
11657 This could also be written using a statement-expression:
11659 #define SEARCH(array, target) \
11662 typeof (target) _SEARCH_target = (target); \
11663 typeof (*(array)) *_SEARCH_array = (array); \
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; } \
11675 Local label declarations also make the labels they declare visible to
11676 nested functions, if there are any. *Note Nested Functions::, for
11680 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions
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:
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,
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:
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,
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.
11744 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions
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)
11756 double square (double z) { return z * z; }
11758 return square (a) + square (b);
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)
11768 int access (int *array, int index)
11769 { return array[index + offset]; }
11772 for (i = 0; i < size; i++)
11773 /* ... */ access (array, i) /* ... */
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
11784 hack (int *array, int size)
11786 void store (int index, int value)
11787 { array[index] = value; }
11789 intermediate (store, size);
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
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
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)
11820 int access (int *array, int index)
11824 return array[index + offset];
11828 for (i = 0; i < size; i++)
11829 /* ... */ access (array, i) /* ... */
11833 /* Control comes here from `access'
11834 if it detects an error. */
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)
11847 auto int access (int *, int);
11849 int access (int *array, int index)
11853 return array[index + offset];
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
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
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'.
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:
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:
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
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:
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.
11965 * This declares `y' as an array of such values.
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:
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
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.
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
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
12026 Similarly, the address of the compound expression can be taken. These
12027 two expressions are equivalent:
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:
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:
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
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
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'.
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
12087 has the value of `x' if that is nonzero; otherwise, the value of `y'.
12089 This example is perfectly equivalent to
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.
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'
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.
12131 File: gcc.info, Node: Complex, Next: Hex Floats, Prev: Long Long, Up: C Extensions
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
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.
12181 File: gcc.info, Node: Hex Floats, Next: Zero Length, Prev: Complex, Up: C Extensions
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'.
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:
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
12258 } f1 = { 1, { 2, 3, 4 } };
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; };
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.
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:
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'.
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:
12315 concat_fopen (char *s1, char *s2, char *mode)
12317 char str[strlen (s1) + strlen (s2) + 1];
12320 return fopen (str, mode);
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
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:
12342 tester (int len, char data[len][len])
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
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.
12355 tester (int len; char data[len][len], int len)
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.
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
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
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
12414 To help solve this problem, CPP behaves specially for variable
12415 arguments used with the token paste operator, `##'. If instead you
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.
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.
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];};
12463 return f().a[index];
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
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)
12495 float beat_freqs[2] = { f-g, f+g };
12500 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions
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
12519 structure = ((struct foo) {x + y, 'a', 0});
12521 This is equivalent to writing the following:
12524 struct foo temp = {x + y, 'a', 0};
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
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};
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
12572 To specify an array index, write `[INDEX] =' before the element value.
12575 int a[6] = { [4] = 29, [2] = 15 };
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,
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
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 };
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
12623 union foo { int i; double d; };
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
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 };
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
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'
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.
12665 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions
12670 You can specify a range of consecutive values in a single `case' label,
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:
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
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; };
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:
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);
12725 hack ((union foo) x);
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:
12742 Each identifier is visible from where it is declared until the end of
12743 the enclosing block.
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
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));
12786 /* ... */ /* Print error message. */ /* ... */
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 ();
12813 volatile voidfn fatal;
12816 This function attribute prevents a function from being considered
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.
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
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
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 ();
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
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
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
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
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:
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:
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.
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.
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
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.
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));
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
13057 int fn () __attribute__ ((warn_unused_result));
13060 if (fn () < 0) return -1;
13065 results in warning on line 5.
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.
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.
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
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:
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.
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.
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.
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.
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
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.)
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.
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.
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
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
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.
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.
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'
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
13222 void f () __attribute__ ((interrupt ("IRQ")));
13224 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
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.
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
13240 void f () __attribute__ ((interrupt_handler,
13241 sp_switch ("alt_stack")));
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.
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.
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.
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.
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
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.
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
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'
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
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.
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
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
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
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
13421 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions
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
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
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
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
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 *, ...),
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
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
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.
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
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.
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. */
13642 /* Prototype function declaration. */
13643 int isroot P((uid_t));
13645 /* Old-style function definition. */
13647 isroot (x) /* ??? lossage here ??? */
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
13669 int isroot (uid_t);
13677 GNU C++ does not support old-style function definitions, so this
13678 extension is irrelevant.
13681 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions
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
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.
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>.
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.
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
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
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
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
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.
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::.)
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.
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':
13884 int x[2] __attribute__ ((packed));
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;
13903 /* Initialize stack pointer */
13904 init_sp (stack + sizeof (stack));
13906 /* Initialize initialized data */
13907 memcpy (&init_data, &data, &edata - &data);
13909 /* Turn on the serial ports */
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'
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.
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;
13944 /* Read and write foo. All running
13945 copies see the same value. */
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
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
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
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
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
14004 The `weak' attribute is described in *Note Function Attributes::.
14007 The `dllimport' attribute is described in *Note Function
14011 The `dllexport' attribute is described in *Note Function
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'
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.
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
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
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.
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
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
14172 struct my_unpacked_struct
14178 struct my_packed_struct __attribute__ ((__packed__))
14182 struct my_unpacked_struct s;
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:
14223 } wait_status_ptr_t __attribute__ ((__transparent_union__));
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)
14238 return waitpid (-1, p.__ip, 0);
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.
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));
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
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
14286 typedef short __attribute__((__may_alias__)) short_a;
14291 int a = 0x12345678;
14292 short_a *b = (short_a *) &a;
14296 if (a == 0x12345678)
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'
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),
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:
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
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
14420 GCC does not inline any functions when not optimizing unless you
14421 specify the `always_inline' attribute for the function, like this:
14424 inline void foo (const char) __attribute__((always_inline));
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
14437 You must specify an assembler instruction template much like what
14438 appears in a machine description, plus an operand constraint string for
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
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
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
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
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
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"
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
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:
14595 asm ("magic stuff accessing an 'int' pointed to by '%1'"
14596 "=&d" (r) : "a" (y), "m" (*y));
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"
14615 : "g" (from), "g" (to)
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:"
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,
14644 ({ double __value, __arg = (x); \
14645 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \
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) \
14676 asm volatile ("get_and_set_priority %0, %1" \
14677 : "=g" (__old) : "g" (new)); \
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::.
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
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
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
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)");
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.
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.
14845 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints
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:
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
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
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'
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
14903 An immediate integer operand (one with constant value) is allowed.
14904 This includes symbolic constants whose values will be known only at
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
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.
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:
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
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.
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.
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
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
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.
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
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'
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.
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
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
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
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'_
15147 Floating-point register
15150 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
15154 Floating-point constant that would satisfy the constraint `F'
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
15163 Integer in the range -4095 to 4095
15166 Integer that satisfies constraint `I' when inverted (ones
15170 Integer that satisfies constraint `I' when negated (twos
15174 Integer in the range 0 to 32
15177 A memory reference where the exact address is in a single
15178 register (``m'' is preferable for `asm' statements)
15181 An item in the constant pool
15184 A symbol in the text segment of the current file
15186 _AVR family--`avr.h'_
15189 Registers from r0 to r15
15192 Registers from r16 to r23
15195 Registers from r16 to r31
15198 Registers from r24 to r31. These registers can be used in
15202 Pointer register (r26-r31)
15205 Base pointer register (r28-r31)
15208 Stack pointer register (SPH:SPL)
15211 Temporary register r0
15214 Register pair X (r27:r26)
15217 Register pair Y (r29:r28)
15220 Register pair Z (r31:r30)
15223 Constant greater than -1, less than 64
15226 Constant greater than -64, less than 1
15235 Constant that fits in 8 bits
15238 Constant integer -1
15241 Constant integer 8, 16, or 24
15247 A floating point constant 0.0
15249 _PowerPC and IBM RS6000--`rs6000.h'_
15252 Address base register
15255 Floating point register
15261 `MQ', `CTR', or `LINK' register
15273 `CR' register (condition register) number 0
15276 `CR' register (condition register)
15279 `FPMEM' stack memory for FPR-GPR transfers
15282 Signed 16-bit constant
15285 Unsigned 16-bit constant shifted left 16 bits (use `L'
15286 instead for `SImode' constants)
15289 Unsigned 16-bit constant
15292 Signed 16-bit constant shifted left 16 bits
15295 Constant larger than 31
15304 Constant whose negation is a signed 16-bit constant
15307 Floating point constant that can be loaded into a register
15308 with one instruction per word
15311 Memory operand that is an offset from a register (`m' is
15312 preferable for `asm' statements)
15318 Constant suitable as a 64-bit mask operand
15321 Constant suitable as a 32-bit mask operand
15324 System V Release 4 small data area reference
15326 _Intel 386--`i386.h'_
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)
15334 `a', `b', `c', or `d' register. (for 8-bit instructions, that
15335 do use upper halves)
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)
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
15350 Floating point register
15353 First (top of stack) floating point register
15356 Second floating point register
15368 Specifies constant that can be easily constructed in SSE
15369 register without loading it from memory.
15387 Constant in range 0 to 31 (for 32-bit shifts)
15390 Constant in range 0 to 63 (for 64-bit shifts)
15399 0, 1, 2, or 3 (shifts for `lea' instruction)
15402 Constant in range 0 to 255 (for `out' instruction)
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)
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)
15415 Standard 80387 floating point constant
15417 _Intel 960--`i960.h'_
15420 Floating point register (`fp0' to `fp3')
15423 Local register (`r0' to `r15')
15426 Global register (`g0' to `g15')
15429 Any local or global register
15432 Integers from 0 to 31
15438 Integers from -31 to 0
15446 _Intel IA-64--`ia64.h'_
15449 General register `r0' to `r3' for `addl' instruction
15455 Predicate register (`c' as in "conditional")
15458 Application register residing in M-unit
15461 Application register residing in I-unit
15464 Floating-point register
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.
15472 Floating-point constant 0.0 or 1.0
15475 14-bit signed integer constant
15478 22-bit signed integer constant
15481 8-bit signed integer constant for logical instructions
15484 8-bit adjusted signed integer constant for compare pseudo-ops
15487 6-bit unsigned integer constant for shift counts
15490 9-bit signed integer constant for load and store
15497 0 or -1 for `dep' instruction
15500 Non-volatile memory for floating-point loads and stores
15503 Integer constant in the range 1 to 4 for `shladd' instruction
15506 Memory operand except postincrement and postdecrement
15511 Register in the class `ACC_REGS' (`acc0' to `acc7').
15514 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
15517 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
15521 Register in the class `GPR_REGS' (`gr0' to `gr63').
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.
15529 Register in the class `FPR_REGS' (`fr0' to `fr63').
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.
15537 Register in the class `LR_REG' (the `lr' register).
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
15546 Register in the class `ICC_REGS' (`icc0' to `icc3').
15549 Register in the class `FCC_REGS' (`fcc0' to `fcc3').
15552 Register in the class `ICR_REGS' (`cc4' to `cc7').
15555 Register in the class `FCR_REGS' (`cc0' to `cc3').
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
15564 Register in the class `SPR_REGS' (`lcr' and `lr').
15567 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
15570 Register in the class `ACCG_REGS' (`accg0' to `accg7').
15573 Register in the class `CR_REGS' (`cc0' to `cc7').
15576 Floating point constant zero
15579 6-bit signed integer constant
15582 10-bit signed integer constant
15585 16-bit signed integer constant
15588 16-bit unsigned integer constant
15591 12-bit signed integer constant that is negative--i.e. in the
15592 range of -2048 to -1
15598 12-bit signed integer constant that is greater than
15599 zero--i.e. in the range of 1 to 2047.
15604 `DP' or `IP' registers (general address)
15628 `DP' or `SP' registers (offsettable address)
15631 Non-pointer registers (not `SP', `DP', `IP')
15634 Non-SP registers (everything except `SP')
15637 Indirect through `IP' - Avoid this except for `QImode', since
15638 we can't access extra bytes
15641 Indirect through `SP' or `DP' with short displacement (0..127)
15644 Data-section immediate value
15647 Integers from -255 to -1
15650 Integers from 0 to 7--valid bit number in a register
15653 Integers from 0 to 127--valid displacement for addressing mode
15656 Integers from 1 to 127
15668 Integers from 0 to 255
15673 General-purpose integer register
15676 Floating-point register (if available)
15685 `Hi' or `Lo' register
15688 General-purpose integer register
15691 Floating-point status register
15694 Signed 16-bit constant (for arithmetic instructions)
15700 Zero-extended 16-bit constant (for logic instructions)
15703 Constant with low 16 bits zero (can be loaded with `lui')
15706 32-bit constant which requires two instructions to load (a
15707 constant which is not `I', `K', or `L')
15710 Negative 16-bit constant
15716 Positive 16-bit constant
15719 Floating point zero
15722 Memory reference that can be loaded with more than one
15723 instruction (`m' is preferable for `asm' statements)
15726 Memory reference that can be loaded with one instruction (`m'
15727 is preferable for `asm' statements)
15730 Memory reference in external OSF/rose PIC format (`m' is
15731 preferable for `asm' statements)
15733 _Motorola 680x0--`m68k.h'_
15742 68881 floating-point register, if available
15745 Integer in the range 1 to 8
15748 16-bit signed number
15751 Signed number whose magnitude is greater than 0x80
15754 Integer in the range -8 to -1
15757 Signed number whose magnitude is greater than 0x100
15760 Floating point constant that is not a 68881 constant
15762 _Motorola 68HC11 & 68HC12 families--`m68hc11.h'_
15777 Temporary soft register _.tmp
15780 A soft register _.d1 to _.d31
15783 Stack pointer register
15792 Pseudo register 'z' (replaced by 'x' or 'y' at the end)
15795 An address register: x, y or z
15798 An address register: x or y
15801 Register pair (x:d) to form a 32-bit value
15804 Constants in the range -65536 to 65535
15807 Constants whose 16-bit low part is zero
15810 Constant integer 1 or -1
15813 Constant integer 16
15816 Constants in the range -8 to 2
15821 Floating-point register on the SPARC-V8 architecture and
15822 lower floating-point register on the SPARC-V9 architecture.
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.
15830 Floating-point condition code register.
15833 Lower floating-point register. It is only valid on the
15834 SPARC-V9 architecture when the Visual Instruction Set is
15838 Floating-point register. It is only valid on the SPARC-V9
15839 architecture when the Visual Instruction Set is available.
15842 64-bit global or out register for the SPARC-V8+ architecture.
15845 Signed 13-bit constant
15851 32-bit constant with the low 12 bits clear (a constant that
15852 can be loaded with the `sethi' instruction)
15855 A constant in the range supported by `movcc' instructions
15858 A constant in the range supported by `movrcc' instructions
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'
15869 Floating-point zero
15872 Signed 13-bit constant, sign-extended to 32 or 64 bits
15875 Floating-point constant whose integral representation can be
15876 moved into an integer register using a single sethi
15880 Floating-point constant whose integral representation can be
15881 moved into an integer register using a single mov instruction
15884 Floating-point constant whose integral representation can be
15885 moved into an integer register using a high/lo_sum
15886 instruction sequence
15889 Memory address aligned to an 8-byte boundary
15895 Memory address for `e' constraint registers.
15897 _TMS320C3x/C4x--`c4x.h'_
15900 Auxiliary (address) register (ar0-ar7)
15903 Stack pointer register (sp)
15906 Standard (32-bit) precision integer register
15909 Extended (40-bit) precision register (r0-r11)
15912 Block count register (bk)
15915 Extended (40-bit) precision low register (r0-r7)
15918 Extended (40-bit) precision register (r0-r1)
15921 Extended (40-bit) precision register (r2-r3)
15924 Repeat count register (rc)
15927 Index register (ir0-ir1)
15930 Status (condition code) register (st)
15933 Data page register (dp)
15936 Floating-point zero
15939 Immediate 16-bit floating-point constant
15942 Signed 16-bit constant
15945 Signed 8-bit constant
15948 Signed 5-bit constant
15951 Unsigned 16-bit constant
15954 Unsigned 8-bit constant
15957 Ones complement of unsigned 16-bit constant
15960 High 16-bit constant (32-bit constant with 16 LSBs zero)
15963 Indirect memory reference with signed 8-bit or index register
15967 Indirect memory reference with unsigned 5-bit displacement
15970 Indirect memory reference with 1 bit or index register
15974 Direct memory reference
15979 _S/390 and zSeries--`s390.h'_
15982 Address register (general purpose register except r0)
15985 Data register (arbitrary general purpose register)
15988 Floating-point register
15991 Unsigned 8-bit constant (0-255)
15994 Unsigned 12-bit constant (0-4095)
15997 Signed 16-bit constant (-32768-32767)
16000 Value appropriate as displacement.
16002 for short displacement
16004 `(-524288..524287)'
16005 for long displacement
16008 Constant integer with a value of 0x7fffffff.
16011 Multiple letter constraint followed by 4 parameter letters.
16013 number of the part counting from most to least
16020 mode of the containing operand
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.
16028 Memory reference without index register and with short
16032 Memory reference with index register and short displacement.
16035 Memory reference without index register but with long
16039 Memory reference with index register and long displacement.
16042 Pointer with short displacement.
16045 Pointer with long displacement.
16048 Shift count operand.
16050 _Xstormy16--`stormy16.h'_
16065 Registers r0 through r7.
16068 Registers r0 and r1.
16071 The carry register.
16074 Registers r8 and r9.
16077 A constant between 0 and 3 inclusive.
16080 A constant that has exactly one bit set.
16083 A constant that has exactly one bit clear.
16086 A constant between 0 and 255 inclusive.
16089 A constant between -255 and 0 inclusive.
16092 A constant between -3 and 0 inclusive.
16095 A constant between 1 and 4 inclusive.
16098 A constant between -4 and -1 inclusive.
16101 A memory reference that is a stack push.
16104 A memory reference that is a stack pop.
16107 A memory reference that refers to a constant address of known
16111 The register indicated by Rx (not implemented yet).
16114 A constant that is not between 2 and 15 inclusive.
16119 _Xtensa--`xtensa.h'_
16122 General-purpose 32-bit register
16125 One-bit boolean register
16128 MAC16 40-bit accumulator register
16131 Signed 12-bit integer constant, for use in MOVI instructions
16134 Signed 8-bit integer constant, for use in ADDI instructions
16137 Integer constant valid for BccI instructions
16140 Unsigned constant valid for BccUI instructions
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
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");
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.
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
16216 * Global Reg Vars::
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
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
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.
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
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
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
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.
16351 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions
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
16376 #define __asm__ asm
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
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++.
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";
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
16428 # define __func__ __FUNCTION__
16430 # define __func__ "<unknown>"
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:
16439 extern int printf (char *, ...);
16446 printf ("__FUNCTION__ = %s\n", __FUNCTION__);
16447 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
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.
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
16480 - Built-in Function: void * __builtin_return_address (unsigned int
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
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
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
16527 This function should only be used with a nonzero argument for
16528 debugging purposes.
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:
16554 An integer that is as wide as the smallest addressable unit,
16558 An integer, twice as wide as a QI mode integer, usually 16 bits.
16561 An integer, four times as wide as a QI mode integer, usually 32
16565 An integer, eight times as wide as a QI mode integer, usually 64
16569 A floating point value, as wide as a SI mode integer, usually 32
16573 A floating point value, as wide as a DI mode integer, usually 64
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
16592 typedef int v4si __attribute__ ((mode(V4SI)));
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)
16621 v4si tmp = __builtin_addv4si (a, b);
16622 return __builtin_mulv4si (tmp, c);
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
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
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:
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); \
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
16778 This built-in function can return an lvalue if the chosen argument
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
16788 __builtin_choose_expr ( \
16789 __builtin_types_compatible_p (typeof (x), double), \
16791 __builtin_choose_expr ( \
16792 __builtin_types_compatible_p (typeof (x), float), \
16794 /* The void expression results in a compile-time error \
16795 when assigning the result to something. */ \
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
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
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,
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
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.
16863 if (__builtin_expect (x, 0))
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))
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++)
16899 a[i] = a[i] + b[i];
16900 __builtin_prefetch (&a[i+j], 1, 1);
16901 __builtin_prefetch (&b[i+j], 0, 1);
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
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
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
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
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
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
16994 - Built-in Function: int __builtin_clzl (unsigned long)
16995 Similar to `__builtin_clz', except the argument type is `unsigned
16998 - Built-in Function: int __builtin_ctzl (unsigned long)
16999 Similar to `__builtin_ctz', except the argument type is `unsigned
17002 - Built-in Function: int __builtin_popcountl (unsigned long)
17003 Similar to `__builtin_popcount', except the argument type is
17006 - Built-in Function: int __builtin_parityl (unsigned long)
17007 Similar to `__builtin_parity', except the argument type is
17010 - Built-in Function: int __builtin_ffsll (unsigned long long)
17011 Similar to `__builtin_ffs', except the argument type is `unsigned
17014 - Built-in Function: int __builtin_clzll (unsigned long long)
17015 Similar to `__builtin_clz', except the argument type is `unsigned
17018 - Built-in Function: int __builtin_ctzll (unsigned long long)
17019 Similar to `__builtin_ctz', except the argument type is `unsigned
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'.
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.
17042 * Alpha Built-in Functions::
17043 * ARM Built-in Functions::
17044 * X86 Built-in Functions::
17045 * PowerPC AltiVec Built-in Functions::
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 *)
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)));
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 ()
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)
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
17528 vector unsigned short
17529 vector signed short
17533 vector unsigned int
17538 GCC's implementation of the high-level language interface available
17539 from C and C++ code differs from Motorola's documentation in several
17542 * A vector constant is a list of constant expressions within curly
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
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
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
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);
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);
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);
17615 vector float vec_vaddfp (vector float, vector float);
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);
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);
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,
17645 vector unsigned char vec_vaddubm (vector unsigned char,
17646 vector unsigned char);
17648 vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
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);
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);
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);
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);
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);
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);
17700 vector unsigned char vec_vaddubs (vector bool char,
17701 vector unsigned char);
17702 vector unsigned char vec_vaddubs (vector unsigned char,
17704 vector unsigned char vec_vaddubs (vector unsigned char,
17705 vector unsigned char);
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);
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);
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);
17774 vector signed int vec_vavgsw (vector signed int, vector signed int);
17776 vector unsigned int vec_vavguw (vector unsigned int,
17777 vector unsigned int);
17779 vector signed short vec_vavgsh (vector signed short,
17780 vector signed short);
17782 vector unsigned short vec_vavguh (vector unsigned short,
17783 vector unsigned short);
17785 vector signed char vec_vavgsb (vector signed char, vector signed char);
17787 vector unsigned char vec_vavgub (vector unsigned char,
17788 vector unsigned char);
17790 vector float vec_ceil (vector float);
17792 vector signed int vec_cmpb (vector float, vector float);
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);
17803 vector bool int vec_vcmpeqfp (vector float, vector float);
17805 vector bool int vec_vcmpequw (vector signed int, vector signed int);
17806 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
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);
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);
17817 vector bool int vec_cmpge (vector float, vector float);
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);
17828 vector bool int vec_vcmpgtfp (vector float, vector float);
17830 vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
17832 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
17834 vector bool short vec_vcmpgtsh (vector signed short,
17835 vector signed short);
17837 vector bool short vec_vcmpgtuh (vector unsigned short,
17838 vector unsigned short);
17840 vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
17842 vector bool char vec_vcmpgtub (vector unsigned char,
17843 vector unsigned char);
17845 vector bool int vec_cmple (vector float, vector float);
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);
17856 vector float vec_ctf (vector unsigned int, const int);
17857 vector float vec_ctf (vector signed int, const int);
17859 vector float vec_vcfsx (vector signed int, const int);
17861 vector float vec_vcfux (vector unsigned int, const int);
17863 vector signed int vec_cts (vector float, const int);
17865 vector unsigned int vec_ctu (vector float, const int);
17867 void vec_dss (const int);
17869 void vec_dssall (void);
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);
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);
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);
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);
17955 vector float vec_expte (vector float);
17957 vector float vec_floor (vector float);
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 *);
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 *);
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 *);
17996 vector signed short vec_lvehx (int, short *);
17997 vector unsigned short vec_lvehx (int, unsigned short *);
17999 vector signed char vec_lvebx (int, char *);
18000 vector unsigned char vec_lvebx (int, unsigned char *);
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 *);
18023 vector float vec_loge (vector float);
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 *);
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 *);
18045 vector float vec_madd (vector float, vector float, vector float);
18047 vector signed short vec_madds (vector signed short,
18048 vector signed short,
18049 vector signed short);
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);
18075 vector float vec_vmaxfp (vector float, vector float);
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);
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);
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);
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);
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);
18102 vector unsigned char vec_vmaxub (vector bool char,
18103 vector unsigned char);
18104 vector unsigned char vec_vmaxub (vector unsigned char,
18106 vector unsigned char vec_vmaxub (vector unsigned char,
18107 vector unsigned char);
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);
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);
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);
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);
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);
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);
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);
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);
18177 vector unsigned short vec_mfvscr (void);
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);
18203 vector float vec_vminfp (vector float, vector float);
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);
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);
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);
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);
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);
18230 vector unsigned char vec_vminub (vector bool char,
18231 vector unsigned char);
18232 vector unsigned char vec_vminub (vector unsigned char,
18234 vector unsigned char vec_vminub (vector unsigned char,
18235 vector unsigned char);
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);
18250 vector signed short vec_mradds (vector signed short,
18251 vector signed short,
18252 vector signed short);
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);
18267 vector signed int vec_vmsumshm (vector signed short,
18268 vector signed short,
18269 vector signed int);
18271 vector unsigned int vec_vmsumuhm (vector unsigned short,
18272 vector unsigned short,
18273 vector unsigned int);
18275 vector signed int vec_vmsummbm (vector signed char,
18276 vector unsigned char,
18277 vector signed int);
18279 vector unsigned int vec_vmsumubm (vector unsigned char,
18280 vector unsigned char,
18281 vector unsigned int);
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);
18290 vector signed int vec_vmsumshs (vector signed short,
18291 vector signed short,
18292 vector signed int);
18294 vector unsigned int vec_vmsumuhs (vector unsigned short,
18295 vector unsigned short,
18296 vector unsigned int);
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);
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);
18317 vector signed int vec_vmulesh (vector signed short,
18318 vector signed short);
18320 vector unsigned int vec_vmuleuh (vector unsigned short,
18321 vector unsigned short);
18323 vector signed short vec_vmulesb (vector signed char,
18324 vector signed char);
18326 vector unsigned short vec_vmuleub (vector unsigned char,
18327 vector unsigned char);
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);
18336 vector signed int vec_vmulosh (vector signed short,
18337 vector signed short);
18339 vector unsigned int vec_vmulouh (vector unsigned short,
18340 vector unsigned short);
18342 vector signed short vec_vmulosb (vector signed char,
18343 vector signed char);
18345 vector unsigned short vec_vmuloub (vector unsigned char,
18346 vector unsigned char);
18348 vector float vec_nmsub (vector float, vector float, vector float);
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);
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);
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);
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);
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);
18410 vector pixel vec_packpx (vector unsigned int, vector unsigned int);
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);
18419 vector signed short vec_vpkswss (vector signed int, vector signed int);
18421 vector unsigned short vec_vpkuwus (vector unsigned int,
18422 vector unsigned int);
18424 vector signed char vec_vpkshss (vector signed short,
18425 vector signed short);
18427 vector unsigned char vec_vpkuhus (vector unsigned short,
18428 vector unsigned short);
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);
18438 vector unsigned short vec_vpkswus (vector signed int,
18439 vector signed int);
18441 vector unsigned char vec_vpkshus (vector signed short,
18442 vector signed short);
18444 vector float vec_perm (vector float,
18446 vector unsigned char);
18447 vector signed int vec_perm (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,
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,
18464 vector unsigned char);
18465 vector pixel vec_perm (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,
18476 vector unsigned char);
18478 vector float vec_re (vector float);
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);
18490 vector signed int vec_vrlw (vector signed int, vector unsigned int);
18491 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
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);
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);
18502 vector float vec_round (vector float);
18504 vector float vec_rsqrte (vector float);
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,
18511 vector signed int vec_sel (vector signed int,
18513 vector unsigned int);
18514 vector unsigned int vec_sel (vector unsigned int,
18515 vector unsigned 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,
18523 vector bool int vec_sel (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,
18540 vector bool short);
18541 vector bool short vec_sel (vector bool short,
18543 vector unsigned short);
18544 vector signed char vec_sel (vector signed char,
18545 vector signed 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,
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,
18559 vector bool char vec_sel (vector bool char,
18561 vector unsigned char);
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);
18573 vector signed int vec_vslw (vector signed int, vector unsigned int);
18574 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
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);
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);
18585 vector float vec_sld (vector float, vector float, const int);
18586 vector signed int vec_sld (vector signed int,
18589 vector unsigned int vec_sld (vector unsigned int,
18590 vector unsigned int,
18592 vector bool int vec_sld (vector bool int,
18595 vector signed short vec_sld (vector signed short,
18596 vector signed short,
18598 vector unsigned short vec_sld (vector unsigned short,
18599 vector unsigned short,
18601 vector bool short vec_sld (vector bool short,
18604 vector pixel vec_sld (vector pixel,
18607 vector signed char vec_sld (vector signed char,
18608 vector signed char,
18610 vector unsigned char vec_sld (vector unsigned char,
18611 vector unsigned char,
18613 vector bool char vec_sld (vector bool char,
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);
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);
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);
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);
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);
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);
18712 vector signed char vec_splat_s8 (const int);
18714 vector signed short vec_splat_s16 (const int);
18716 vector signed int vec_splat_s32 (const int);
18718 vector unsigned char vec_splat_u8 (const int);
18720 vector unsigned short vec_splat_u16 (const int);
18722 vector unsigned int vec_splat_u32 (const int);
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);
18734 vector signed int vec_vsrw (vector signed int, vector unsigned int);
18735 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
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);
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);
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);
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);
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);
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);
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);
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);
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 *);
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 *);
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 *);
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 *);
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 *);
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 *);
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);
18940 vector float vec_vsubfp (vector float, vector float);
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);
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);
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,
18970 vector unsigned char vec_vsububm (vector unsigned char,
18971 vector unsigned char);
18973 vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
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);
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);
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);
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);
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);
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);
19025 vector unsigned char vec_vsububs (vector bool char,
19026 vector unsigned char);
19027 vector unsigned char vec_vsububs (vector unsigned char,
19029 vector unsigned char vec_vsububs (vector unsigned char,
19030 vector unsigned char);
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);
19037 vector signed int vec_vsum4shs (vector signed short, vector signed int);
19039 vector signed int vec_vsum4sbs (vector signed char, vector signed int);
19041 vector unsigned int vec_vsum4ubs (vector unsigned char,
19042 vector unsigned int);
19044 vector signed int vec_sum2s (vector signed int, vector signed int);
19046 vector signed int vec_sums (vector signed int, vector signed int);
19048 vector float vec_trunc (vector float);
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);
19056 vector bool int vec_vupkhsh (vector bool short);
19057 vector signed int vec_vupkhsh (vector signed short);
19059 vector unsigned int vec_vupkhpx (vector pixel);
19061 vector bool short vec_vupkhsb (vector bool char);
19062 vector signed short vec_vupkhsb (vector signed char);
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);
19070 vector unsigned int vec_vupklpx (vector pixel);
19072 vector bool int vec_vupklsh (vector bool short);
19073 vector signed int vec_vupklsh (vector signed short);
19075 vector bool short vec_vupklsb (vector bool char);
19076 vector signed short vec_vupklsb (vector signed char);
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);
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);
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);
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);
19171 int vec_all_in (vector float, vector float);
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);
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);
19213 int vec_all_nan (vector float);
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);
19239 int vec_all_nge (vector float, vector float);
19241 int vec_all_ngt (vector float, vector float);
19243 int vec_all_nle (vector float, vector float);
19245 int vec_all_nlt (vector float, vector float);
19247 int vec_all_numeric (vector float);
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);
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);
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);
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);
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);
19353 int vec_any_nan (vector float);
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);
19379 int vec_any_nge (vector float, vector float);
19381 int vec_any_ngt (vector float, vector float);
19383 int vec_any_nle (vector float, vector float);
19385 int vec_any_nlt (vector float, vector float);
19387 int vec_any_numeric (vector float);
19389 int vec_any_out (vector float, vector float);
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.
19405 * RS/6000 and PowerPC Pragmas::
19407 * Solaris Pragmas::
19411 File: gcc.info, Node: ARM Pragmas, Next: RS/6000 and PowerPC Pragmas, Up: Pragmas
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.
19421 Set all subsequent functions to have the `long_call' attribute.
19424 Set all subsequent functions to have the `short_call' attribute.
19427 Do not affect the `long_call' or `short_call' attributes of
19428 subsequent functions.
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.
19444 Apply the `longcall' attribute to all subsequent function
19448 Do not apply the `longcall' attribute to subsequent function
19452 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas
19457 The following pragmas are available for all architectures running the
19458 Darwin operating system. These are useful for compatibility with other
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
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.
19481 File: gcc.info, Node: Solaris Pragmas, Next: Tru64 Pragmas, Prev: Darwin Pragmas, Up: Pragmas
19486 For compatibility with the SunPRO compiler, the following pragma is
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.
19497 File: gcc.info, Node: Tru64 Pragmas, Prev: Solaris Pragmas, Up: Pragmas
19502 For compatibility with the Compaq C compiler, the following pragma is
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
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:
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:
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.
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:
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
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++
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.
19604 * C99 Thread-Local Edits::
19605 * C++98 Thread-Local Edits::
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
19643 * `6.7.1 Storage-class specifiers'
19645 Add `__thread' to the list of storage class specifiers in
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.
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
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
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
19722 Add "thread storage duration" to the list in paragraph 1.
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
19742 * [basic.stc.static]
19746 All objects which have neither thread storage duration,
19747 dynamic storage duration nor are local [...].
19751 Add `__thread' to the list in 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'
19761 Add after paragraph 5
19763 The `__thread' specifier can be applied only to the names of
19764 objects and to anonymous unions.
19768 Add after paragraph 6
19770 Non-`static' members shall not be `__thread'.
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.).
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++.
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),
19815 is the "minimum", returning the smaller of the numeric values A
19819 is the "maximum", returning the larger of the numeric values A and
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
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.
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;
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
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;
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
19897 volatile S *ptr1 = SOMEVALUE;
19898 volatile T *ptr2 = SOMEVALUE;
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
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
19930 void fn (int *__restrict__ rptr, int &__restrict__ rref)
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__
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
19959 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions
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
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
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
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.
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
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
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.
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
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
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'.
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
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.
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
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
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
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
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.
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
20281 extern int (A::*fp)();
20282 typedef int (*fptr)(A *);
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.
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.
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::.
20332 File: gcc.info, Node: Strong Using, Next: Offsetof, Prev: C++ Attributes, Up: C++ Extensions
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
20352 This is useful for composing a namespace transparently from
20353 implementation namespaces. For example:
20357 template <class T> struct A { };
20359 using namespace debug __attribute ((__strong__));
20360 template <> struct A<int> { }; // ok to specialize
20362 template <class T> void f (A<T>);
20367 f (std::A<float>()); // lookup finds std::f
20372 File: gcc.info, Node: Offsetof, Next: Java Exceptions, Prev: Strong Using, Up: C++ Extensions
20377 G++ uses a syntactic extension to implement the `offsetof' macro.
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>'.
20391 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Offsetof, Up: C++ Extensions
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
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.
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
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
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++.
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::.
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
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.
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>.
20515 * Executing code before main::
20517 * Garbage Collection::
20518 * Constant string objects::
20519 * compatibility_alias::
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;
20547 @implementation FileStream
20551 Stdin = [[FileStream new] initWithFd:0];
20552 Stdout = [[FileStream new] initWithFd:1];
20553 Stderr = [[FileStream new] initWithFd:2];
20556 /* Other methods here */
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
20575 Stdin = [[FileStream new] initWithFd:0];
20576 Stdout = [[FileStream new] initWithFd:1];
20577 Stderr = [[FileStream new] initWithFd:2];
20580 /* Other methods here */
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
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'.
20594 * What you can and what you cannot do in +load::
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
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.
20649 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C
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:
20661 `unsigned char' `C'
20663 `unsigned short' `S'
20667 `unsigned long' `L'
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
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
20706 unions `(' followed by the name of the structure (or `?' if the
20707 union is unnamed), the `=' sign, the type of the members
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
20716 struct { `{?=i[3f]b128i3b131i2c}'
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:
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
20744 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C
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
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
20784 const void* weakPointer;
20787 - initWithPointer:(const void*)p;
20788 - (const void*)weakPointer;
20792 @implementation WeakPointer
20796 class_ivar_set_gcinvisible (self, "weakPointer", YES);
20799 - initWithPointer:(const void*)p
20805 - (const void*)weakPointer
20807 return weakPointer;
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.
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
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.
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.
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.
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.
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.
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
20951 Conformance to the same ABI and the same behavior of
20952 implementation-defined features are both relevant for
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:
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'.
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.
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.
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
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.
21120 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov
21125 gcov [OPTIONS] SOURCEFILE
21127 `gcov' accepts the following options:
21131 Display help about using `gcov' (on the standard output), and exit
21132 without doing any further processing.
21136 Display the `gcov' version number (on the standard output), and
21137 exit without doing any further processing.
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.
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.
21155 Write branch frequencies as the number of branches taken, rather
21156 than the percentage of branches taken.
21160 Do not create the `gcov' output file.
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.
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
21183 `--function-summaries'
21184 Output summaries for each function in addition to the file level
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.
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
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:
21254 -: 0:Graph:tmp.gcno
21258 -: 1:#include <stdio.h>
21260 -: 3:int main (void)
21261 function main called 1 returned 1 blocks executed 75%
21263 1: 5: int i, total;
21267 11: 9: for (i = 0; i < 10; i++)
21268 10: 10: total += i;
21270 1: 12: if (total != 45)
21271 #####: 13: printf ("Failure\n");
21273 1: 15: printf ("Success\n");
21277 When you use the `-a' option, you will get individual block counts,
21278 and the output looks like this:
21281 -: 0:Graph:tmp.gcno
21285 -: 1:#include <stdio.h>
21287 -: 3:int main (void)
21288 function main called 1 returned 1 blocks executed 75%
21291 1: 5: int i, total;
21295 11: 9: for (i = 0; i < 10; i++)
21297 10: 10: total += i;
21300 1: 12: if (total != 45)
21302 #####: 13: printf ("Failure\n");
21305 1: 15: printf ("Success\n");
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:
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:
21336 -: 0:Graph:tmp.gcno
21340 -: 1:#include <stdio.h>
21342 -: 3:int main (void)
21343 function main called 1 returned 1 blocks executed 75%
21345 1: 5: int i, total;
21349 11: 9: for (i = 0; i < 10; i++)
21350 branch 0 taken 91% (fallthrough)
21352 10: 10: total += i;
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
21360 1: 15: printf ("Success\n");
21361 call 0 called 1 returned 100%
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
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.
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:
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
21426 100: 12:if (a != b)
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
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.
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
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
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.
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.
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
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
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.
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
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
21575 File: gcc.info, Node: Interoperation, Next: External Bugs, Prev: Cross-Compiler Problems, Up: Trouble
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
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
21638 access_double (double *unaligned_ptr)
21640 union d2i { double d; int i[2]; };
21642 union d2i *p = (union d2i *) unaligned_ptr;
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
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
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
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'.
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:
21801 #define NeedFunctionPrototypes 0
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
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
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
21881 /* `longjmp (j)' may occur in `fun3'. */
21882 return a + fun3 ();
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
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
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
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:
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:
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
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:
21949 You can't expect this to work.
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.
22018 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble
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
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
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
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.
22068 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble
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
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.
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
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
22119 int foo (struct mumble *);
22121 struct mumble { ... };
22123 int foo (struct mumble *x)
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
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
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
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.
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.
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
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:
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:
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.
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
22254 template <typename T>
22263 static const int N;
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
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 {
22292 template <typename T> struct Derived : public Base<T> {
22293 int get_i() { return i; }
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
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
22315 template <typename T> struct Base {
22319 template <typename T> struct Derived : Base<T> {
22320 int g() { return f(); };
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.
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':
22376 void charfunc (const char *);
22381 const char *p = strfunc().c_str();
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
22404 const string& tmp = strfunc ();
22405 charfunc (tmp.c_str ());
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:
22420 Base(char *n) : name(strdup(n)){}
22421 Base& operator= (const Base& other){
22423 name = strdup (other.name);
22427 struct A:virtual Base{
22432 struct B:virtual Base{
22437 struct Derived:public A, public B{
22438 Derived():Base("Derived"){}
22441 void func(Derived &d1, Derived &d2)
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'
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.
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
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,
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.)
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
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
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
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
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
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
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
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);
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
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
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.
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
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.
22795 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top
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.
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.
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
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
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
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
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.
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
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
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'.
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/'.
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
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.
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'
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
22995 Everyone is permitted to copy and distribute verbatim copies
22996 of this license document, but changing it is not allowed.
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
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
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
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
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.
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
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
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.
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.
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
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
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
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.
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.
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
23355 Everyone is permitted to copy and distribute verbatim copies
23356 of this license document, but changing it is not allowed.
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
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
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
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.
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
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
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
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
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
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.
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
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
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
23767 If you have Invariant Sections without Cover Texts, or some other
23768 combination of the three, merge those two alternatives to suit the
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.
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
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
23801 * Alasdair Baird for various bug fixes.
23803 * Giovanni Bajo for analyzing lots of complicated C++ problem
23806 * Peter Barada for his work to improve code generation for new
23809 * Gerald Baumgartner added the signature extension to the C++ front
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
23824 * Geoff Berry for his Java object serialization work and various
23827 * Eric Blake for helping to make GCJ and libgcj conform to the
23830 * Segher Boessenkool for various fixes.
23832 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
24118 * Charles LaBrec contributed the support for the Integrated Solutions
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
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
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
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
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
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
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
24212 * Catherine Moore for fixing various ugly problems we have sent her
24213 way, including the haifa bug which was killing the Alpha & PowerPC
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
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
24246 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
24247 the search engine setup, various documentation fixes and other
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
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
24287 * Jerry Quinn for major performance improvements in C++ formatted
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
24298 * Volker Reichelt for keeping up with the problem reports.
24300 * Joern Rennecke for maintaining the sh port, loop, regmove & reload
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
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
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
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
24363 * Franz Sirl for his ongoing work with making the PPC port stable
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
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
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,
24404 * Holger Teutsch provided the support for the Clipper CPU.
24406 * Gary Thomas for his ongoing work to make the PPC work for
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
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
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
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
24501 * David Billinghurst
24505 * Stephane Bortzmeyer
24515 * Bradford Castalia
24531 * Charles-Antoine Gauthier
24551 * Kevin B. Hendricks
24555 * Christian Joensson
24561 * Anand Krishnaswamy
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
24624 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top
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.
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.
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.
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.
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.
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.
24979 * L: Directory Options.
24980 * lobjc: Link Options.
24981 * M: Preprocessor Options.
24983 * m10: PDP-11 Options.
24984 * m128bit-long-double: i386 and x86-64 Options.
24985 * m16-bit: CRIS Options.
24987 * m210: MCore 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.
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.
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.
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.
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.
25749 * S <1>: Overall 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.
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.
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.
25930 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top
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.
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.
25962 * = in constraint: Modifiers.
25963 * > in constraint: Simple Constraints.
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.
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.
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.
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.
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.
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.
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.
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