1 This is doc/gcc.info, produced by makeinfo version 4.8 from
2 /scratch/mitchell/gcc-releases/gcc-4.1.1/gcc-4.1.1/gcc/doc/gcc.texi.
4 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1999, 2000, 2001, 2002, 2003, 2004, 2005 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.
25 INFO-DIR-SECTION Programming
27 * gcc: (gcc). The GNU Compiler Collection.
29 This file documents the use of the GNU compilers.
31 Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
32 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
34 Permission is granted to copy, distribute and/or modify this document
35 under the terms of the GNU Free Documentation License, Version 1.2 or
36 any later version published by the Free Software Foundation; with the
37 Invariant Sections being "GNU General Public License" and "Funding Free
38 Software", the Front-Cover texts being (a) (see below), and with the
39 Back-Cover Texts being (b) (see below). A copy of the license is
40 included in the section entitled "GNU Free Documentation License".
42 (a) The FSF's Front-Cover Text is:
46 (b) The FSF's Back-Cover Text is:
48 You have freedom to copy and modify this GNU Manual, like GNU
49 software. Copies published by the Free Software Foundation raise
50 funds for GNU development.
54 File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR)
59 This manual documents how to use the GNU compilers, as well as their
60 features and incompatibilities, and how to report bugs. It corresponds
61 to GCC version 4.1.1. The internals of the GNU compilers, including
62 how to port them to new targets and some information about how to write
63 front ends for new languages, are documented in a separate manual.
64 *Note Introduction: (gccint)Top.
68 * G++ and GCC:: You can compile C or C++ programs.
69 * Standards:: Language standards supported by GCC.
70 * Invoking GCC:: Command options supported by `gcc'.
71 * C Implementation:: How GCC implements the ISO C specification.
72 * C Extensions:: GNU extensions to the C language family.
73 * C++ Extensions:: GNU extensions to the C++ language.
74 * Objective-C:: GNU Objective-C runtime features.
75 * Compatibility:: Binary Compatibility
76 * Gcov:: `gcov'---a test coverage program.
77 * Trouble:: If you have trouble using GCC.
78 * Bugs:: How, why and where to report bugs.
79 * Service:: How to find suppliers of support for GCC.
80 * Contributing:: How to contribute to testing and developing GCC.
82 * Funding:: How to help assure funding for free software.
83 * GNU Project:: The GNU Project and GNU/Linux.
85 * Copying:: GNU General Public License says
86 how you can copy and share GCC.
87 * GNU Free Documentation License:: How you can copy and share this manual.
88 * Contributors:: People who have contributed to GCC.
90 * Option Index:: Index to command line options.
91 * Keyword Index:: Index of concepts and symbol names.
94 File: gcc.info, Node: G++ and GCC, Next: Standards, Prev: Top, Up: Top
96 1 Programming Languages Supported by GCC
97 ****************************************
99 GCC stands for "GNU Compiler Collection". GCC is an integrated
100 distribution of compilers for several major programming languages.
101 These languages currently include C, C++, Objective-C, Objective-C++,
102 Java, Fortran, and Ada.
104 The abbreviation "GCC" has multiple meanings in common use. The
105 current official meaning is "GNU Compiler Collection", which refers
106 generically to the complete suite of tools. The name historically stood
107 for "GNU C Compiler", and this usage is still common when the emphasis
108 is on compiling C programs. Finally, the name is also used when
109 speaking of the "language-independent" component of GCC: code shared
110 among the compilers for all supported languages.
112 The language-independent component of GCC includes the majority of the
113 optimizers, as well as the "back ends" that generate machine code for
116 The part of a compiler that is specific to a particular language is
117 called the "front end". In addition to the front ends that are
118 integrated components of GCC, there are several other front ends that
119 are maintained separately. These support languages such as Pascal,
120 Mercury, and COBOL. To use these, they must be built together with GCC
123 Most of the compilers for languages other than C have their own names.
124 The C++ compiler is G++, the Ada compiler is GNAT, and so on. When we
125 talk about compiling one of those languages, we might refer to that
126 compiler by its own name, or as GCC. Either is correct.
128 Historically, compilers for many languages, including C++ and Fortran,
129 have been implemented as "preprocessors" which emit another high level
130 language such as C. None of the compilers included in GCC are
131 implemented this way; they all generate machine code directly. This
132 sort of preprocessor should not be confused with the "C preprocessor",
133 which is an integral feature of the C, C++, Objective-C and
134 Objective-C++ languages.
137 File: gcc.info, Node: Standards, Next: Invoking GCC, Prev: G++ and GCC, Up: Top
139 2 Language Standards Supported by GCC
140 *************************************
142 For each language compiled by GCC for which there is a standard, GCC
143 attempts to follow one or more versions of that standard, possibly with
144 some exceptions, and possibly with some extensions.
146 GCC supports three versions of the C standard, although support for
147 the most recent version is not yet complete.
149 The original ANSI C standard (X3.159-1989) was ratified in 1989 and
150 published in 1990. This standard was ratified as an ISO standard
151 (ISO/IEC 9899:1990) later in 1990. There were no technical differences
152 between these publications, although the sections of the ANSI standard
153 were renumbered and became clauses in the ISO standard. This standard,
154 in both its forms, is commonly known as "C89", or occasionally as
155 "C90", from the dates of ratification. The ANSI standard, but not the
156 ISO standard, also came with a Rationale document. To select this
157 standard in GCC, use one of the options `-ansi', `-std=c89' or
158 `-std=iso9899:1990'; to obtain all the diagnostics required by the
159 standard, you should also specify `-pedantic' (or `-pedantic-errors' if
160 you want them to be errors rather than warnings). *Note Options
161 Controlling C Dialect: C Dialect Options.
163 Errors in the 1990 ISO C standard were corrected in two Technical
164 Corrigenda published in 1994 and 1996. GCC does not support the
167 An amendment to the 1990 standard was published in 1995. This
168 amendment added digraphs and `__STDC_VERSION__' to the language, but
169 otherwise concerned the library. This amendment is commonly known as
170 "AMD1"; the amended standard is sometimes known as "C94" or "C95". To
171 select this standard in GCC, use the option `-std=iso9899:199409'
172 (with, as for other standard versions, `-pedantic' to receive all
173 required diagnostics).
175 A new edition of the ISO C standard was published in 1999 as ISO/IEC
176 9899:1999, and is commonly known as "C99". GCC has incomplete support
177 for this standard version; see
178 `http://gcc.gnu.org/gcc-4.1/c99status.html' for details. To select this
179 standard, use `-std=c99' or `-std=iso9899:1999'. (While in
180 development, drafts of this standard version were referred to as "C9X".)
182 Errors in the 1999 ISO C standard were corrected in two Technical
183 Corrigenda published in 2001 and 2004. GCC does not support the
186 By default, GCC provides some extensions to the C language that on
187 rare occasions conflict with the C standard. *Note Extensions to the C
188 Language Family: C Extensions. Use of the `-std' options listed above
189 will disable these extensions where they conflict with the C standard
190 version selected. You may also select an extended version of the C
191 language explicitly with `-std=gnu89' (for C89 with GNU extensions) or
192 `-std=gnu99' (for C99 with GNU extensions). The default, if no C
193 language dialect options are given, is `-std=gnu89'; this will change to
194 `-std=gnu99' in some future release when the C99 support is complete.
195 Some features that are part of the C99 standard are accepted as
196 extensions in C89 mode.
198 The ISO C standard defines (in clause 4) two classes of conforming
199 implementation. A "conforming hosted implementation" supports the
200 whole standard including all the library facilities; a "conforming
201 freestanding implementation" is only required to provide certain
202 library facilities: those in `<float.h>', `<limits.h>', `<stdarg.h>',
203 and `<stddef.h>'; since AMD1, also those in `<iso646.h>'; and in C99,
204 also those in `<stdbool.h>' and `<stdint.h>'. In addition, complex
205 types, added in C99, are not required for freestanding implementations.
206 The standard also defines two environments for programs, a
207 "freestanding environment", required of all implementations and which
208 may not have library facilities beyond those required of freestanding
209 implementations, where the handling of program startup and termination
210 are implementation-defined, and a "hosted environment", which is not
211 required, in which all the library facilities are provided and startup
212 is through a function `int main (void)' or `int main (int, char *[])'.
213 An OS kernel would be a freestanding environment; a program using the
214 facilities of an operating system would normally be in a hosted
217 GCC aims towards being usable as a conforming freestanding
218 implementation, or as the compiler for a conforming hosted
219 implementation. By default, it will act as the compiler for a hosted
220 implementation, defining `__STDC_HOSTED__' as `1' and presuming that
221 when the names of ISO C functions are used, they have the semantics
222 defined in the standard. To make it act as a conforming freestanding
223 implementation for a freestanding environment, use the option
224 `-ffreestanding'; it will then define `__STDC_HOSTED__' to `0' and not
225 make assumptions about the meanings of function names from the standard
226 library, with exceptions noted below. To build an OS kernel, you may
227 well still need to make your own arrangements for linking and startup.
228 *Note Options Controlling C Dialect: C Dialect Options.
230 GCC does not provide the library facilities required only of hosted
231 implementations, nor yet all the facilities required by C99 of
232 freestanding implementations; to use the facilities of a hosted
233 environment, you will need to find them elsewhere (for example, in the
234 GNU C library). *Note Standard Libraries: Standard Libraries.
236 Most of the compiler support routines used by GCC are present in
237 `libgcc', but there are a few exceptions. GCC requires the
238 freestanding environment provide `memcpy', `memmove', `memset' and
239 `memcmp'. Finally, if `__builtin_trap' is used, and the target does
240 not implement the `trap' pattern, then GCC will emit a call to `abort'.
242 For references to Technical Corrigenda, Rationale documents and
243 information concerning the history of C that is available online, see
244 `http://gcc.gnu.org/readings.html'
246 There is no formal written standard for Objective-C or Objective-C++.
247 The most authoritative manual is "Object-Oriented Programming and the
248 Objective-C Language", available at a number of web sites:
251 `http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/'
252 is a recent (and periodically updated) version;
254 * `http://www.toodarkpark.org/computers/objc/' is an older example;
256 * `http://www.gnustep.org' and `http://gcc.gnu.org/readings.html'
257 have additional useful information.
259 There is no standard for treelang, which is a sample language front end
260 for GCC. Its only purpose is as a sample for people wishing to write a
261 new language for GCC. The language is documented in
262 `gcc/treelang/treelang.texi' which can be turned into info or HTML
265 *Note GNAT Reference Manual: (gnat_rm)Top, for information on standard
266 conformance and compatibility of the Ada compiler.
268 *Note Standards: (gfortran)Standards, for details of standards
269 supported by `gfortran'.
271 *Note Compatibility with the Java Platform: (gcj)Compatibility, for
272 details of compatibility between `gcj' and the Java Platform.
275 File: gcc.info, Node: Invoking GCC, Next: C Implementation, Prev: Standards, Up: Top
277 3 GCC Command Options
278 *********************
280 When you invoke GCC, it normally does preprocessing, compilation,
281 assembly and linking. The "overall options" allow you to stop this
282 process at an intermediate stage. For example, the `-c' option says
283 not to run the linker. Then the output consists of object files output
286 Other options are passed on to one stage of processing. Some options
287 control the preprocessor and others the compiler itself. Yet other
288 options control the assembler and linker; most of these are not
289 documented here, since you rarely need to use any of them.
291 Most of the command line options that you can use with GCC are useful
292 for C programs; when an option is only useful with another language
293 (usually C++), the explanation says so explicitly. If the description
294 for a particular option does not mention a source language, you can use
295 that option with all supported languages.
297 *Note Compiling C++ Programs: Invoking G++, for a summary of special
298 options for compiling C++ programs.
300 The `gcc' program accepts options and file names as operands. Many
301 options have multi-letter names; therefore multiple single-letter
302 options may _not_ be grouped: `-dr' is very different from `-d -r'.
304 You can mix options and other arguments. For the most part, the order
305 you use doesn't matter. Order does matter when you use several options
306 of the same kind; for example, if you specify `-L' more than once, the
307 directories are searched in the order specified.
309 Many options have long names starting with `-f' or with `-W'--for
310 example, `-fstrength-reduce', `-Wformat' and so on. Most of these have
311 both positive and negative forms; the negative form of `-ffoo' would be
312 `-fno-foo'. This manual documents only one of these two forms,
313 whichever one is not the default.
315 *Note Option Index::, for an index to GCC's options.
319 * Option Summary:: Brief list of all options, without explanations.
320 * Overall Options:: Controlling the kind of output:
321 an executable, object files, assembler files,
322 or preprocessed source.
323 * Invoking G++:: Compiling C++ programs.
324 * C Dialect Options:: Controlling the variant of C language compiled.
325 * C++ Dialect Options:: Variations on C++.
326 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
328 * Language Independent Options:: Controlling how diagnostics should be
330 * Warning Options:: How picky should the compiler be?
331 * Debugging Options:: Symbol tables, measurements, and debugging dumps.
332 * Optimize Options:: How much optimization?
333 * Preprocessor Options:: Controlling header files and macro definitions.
334 Also, getting dependency information for Make.
335 * Assembler Options:: Passing options to the assembler.
336 * Link Options:: Specifying libraries and so on.
337 * Directory Options:: Where to find header files and libraries.
338 Where to find the compiler executable files.
339 * Spec Files:: How to pass switches to sub-processes.
340 * Target Options:: Running a cross-compiler, or an old version of GCC.
341 * Submodel Options:: Specifying minor hardware or convention variations,
342 such as 68010 vs 68020.
343 * Code Gen Options:: Specifying conventions for function calls, data layout
345 * Environment Variables:: Env vars that affect GCC.
346 * Precompiled Headers:: Compiling a header once, and using it many times.
347 * Running Protoize:: Automatically adding or removing function prototypes.
350 File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC
355 Here is a summary of all the options, grouped by type. Explanations are
356 in the following sections.
359 *Note Options Controlling the Kind of Output: Overall Options.
360 -c -S -E -o FILE -combine -pipe -pass-exit-codes
361 -x LANGUAGE -v -### --help --target-help --version
364 *Note Options Controlling C Dialect: C Dialect Options.
365 -ansi -std=STANDARD -aux-info FILENAME
366 -fno-asm -fno-builtin -fno-builtin-FUNCTION
367 -fhosted -ffreestanding -fms-extensions
368 -trigraphs -no-integrated-cpp -traditional -traditional-cpp
369 -fallow-single-precision -fcond-mismatch
370 -fsigned-bitfields -fsigned-char
371 -funsigned-bitfields -funsigned-char
373 _C++ Language Options_
374 *Note Options Controlling C++ Dialect: C++ Dialect Options.
375 -fabi-version=N -fno-access-control -fcheck-new
376 -fconserve-space -ffriend-injection -fno-const-strings
377 -fno-elide-constructors
378 -fno-enforce-eh-specs
379 -ffor-scope -fno-for-scope -fno-gnu-keywords
380 -fno-implicit-templates
381 -fno-implicit-inline-templates
382 -fno-implement-inlines -fms-extensions
383 -fno-nonansi-builtins -fno-operator-names
384 -fno-optional-diags -fpermissive
385 -frepo -fno-rtti -fstats -ftemplate-depth-N
386 -fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++
387 -fno-default-inline -fvisibility-inlines-hidden
388 -Wabi -Wctor-dtor-privacy
389 -Wnon-virtual-dtor -Wreorder
390 -Weffc++ -Wno-deprecated -Wstrict-null-sentinel
391 -Wno-non-template-friend -Wold-style-cast
392 -Woverloaded-virtual -Wno-pmf-conversions
395 _Objective-C and Objective-C++ Language Options_
396 *Note Options Controlling Objective-C and Objective-C++ Dialects:
397 Objective-C and Objective-C++ Dialect Options.
398 -fconstant-string-class=CLASS-NAME
399 -fgnu-runtime -fnext-runtime
401 -fobjc-call-cxx-cdtors
402 -fobjc-direct-dispatch
405 -freplace-objc-classes
409 -Wno-protocol -Wselector
410 -Wstrict-selector-match
411 -Wundeclared-selector
413 _Language Independent Options_
414 *Note Options to Control Diagnostic Messages Formatting: Language
417 -fdiagnostics-show-location=[once|every-line]
418 -fdiagnostics-show-options
421 *Note Options to Request or Suppress Warnings: Warning Options.
422 -fsyntax-only -pedantic -pedantic-errors
423 -w -Wextra -Wall -Waggregate-return -Wno-attributes
424 -Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment
425 -Wconversion -Wno-deprecated-declarations
426 -Wdisabled-optimization -Wno-div-by-zero -Wno-endif-labels
427 -Werror -Werror-implicit-function-declaration
428 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2
429 -Wno-format-extra-args -Wformat-nonliteral
430 -Wformat-security -Wformat-y2k
431 -Wimplicit -Wimplicit-function-declaration -Wimplicit-int
432 -Wimport -Wno-import -Winit-self -Winline
433 -Wno-int-to-pointer-cast
434 -Wno-invalid-offsetof -Winvalid-pch
435 -Wlarger-than-LEN -Wunsafe-loop-optimizations -Wlong-long
436 -Wmain -Wmissing-braces -Wmissing-field-initializers
437 -Wmissing-format-attribute -Wmissing-include-dirs
439 -Wno-multichar -Wnonnull -Wpacked -Wpadded
440 -Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast
442 -Wreturn-type -Wsequence-point -Wshadow
443 -Wsign-compare -Wstack-protector
444 -Wstrict-aliasing -Wstrict-aliasing=2
445 -Wswitch -Wswitch-default -Wswitch-enum
446 -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized
447 -Wunknown-pragmas -Wno-pragmas -Wunreachable-code
448 -Wunused -Wunused-function -Wunused-label -Wunused-parameter
449 -Wunused-value -Wunused-variable -Wvariadic-macros
450 -Wvolatile-register-var -Wwrite-strings
452 _C-only Warning Options_
453 -Wbad-function-cast -Wmissing-declarations
454 -Wmissing-prototypes -Wnested-externs -Wold-style-definition
455 -Wstrict-prototypes -Wtraditional
456 -Wdeclaration-after-statement -Wpointer-sign
459 *Note Options for Debugging Your Program or GCC: Debugging Options.
460 -dLETTERS -dumpspecs -dumpmachine -dumpversion
461 -fdump-unnumbered -fdump-translation-unit[-N]
462 -fdump-class-hierarchy[-N]
463 -fdump-ipa-all -fdump-ipa-cgraph
465 -fdump-tree-original[-N]
466 -fdump-tree-optimized[-N]
467 -fdump-tree-inlined[-N]
468 -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
470 -fdump-tree-ssa[-N] -fdump-tree-pre[-N]
471 -fdump-tree-ccp[-N] -fdump-tree-dce[-N]
472 -fdump-tree-gimple[-raw] -fdump-tree-mudflap[-N]
475 -fdump-tree-phiopt[-N]
476 -fdump-tree-forwprop[-N]
477 -fdump-tree-copyrename[-N]
478 -fdump-tree-nrv -fdump-tree-vect
484 -ftree-vectorizer-verbose=N
485 -fdump-tree-storeccp[-N]
486 -feliminate-dwarf2-dups -feliminate-unused-debug-types
487 -feliminate-unused-debug-symbols -fmem-report -fprofile-arcs
488 -frandom-seed=STRING -fsched-verbose=N
489 -ftest-coverage -ftime-report -fvar-tracking
490 -g -gLEVEL -gcoff -gdwarf-2
491 -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+
492 -p -pg -print-file-name=LIBRARY -print-libgcc-file-name
493 -print-multi-directory -print-multi-lib
494 -print-prog-name=PROGRAM -print-search-dirs -Q
497 _Optimization Options_
498 *Note Options that Control Optimization: Optimize Options.
499 -falign-functions=N -falign-jumps=N
500 -falign-labels=N -falign-loops=N
501 -fbounds-check -fmudflap -fmudflapth -fmudflapir
502 -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize
503 -fbranch-target-load-optimize2 -fbtr-bb-exclusive
504 -fcaller-saves -fcprop-registers -fcse-follow-jumps
505 -fcse-skip-blocks -fcx-limited-range -fdata-sections
506 -fdelayed-branch -fdelete-null-pointer-checks -fearly-inlining
507 -fexpensive-optimizations -ffast-math -ffloat-store
508 -fforce-addr -ffunction-sections
509 -fgcse -fgcse-lm -fgcse-sm -fgcse-las -fgcse-after-reload
510 -floop-optimize -fcrossjumping -fif-conversion -fif-conversion2
511 -finline-functions -finline-functions-called-once
512 -finline-limit=N -fkeep-inline-functions
513 -fkeep-static-consts -fmerge-constants -fmerge-all-constants
514 -fmodulo-sched -fno-branch-count-reg
515 -fno-default-inline -fno-defer-pop -floop-optimize2 -fmove-loop-invariants
516 -fno-function-cse -fno-guess-branch-probability
517 -fno-inline -fno-math-errno -fno-peephole -fno-peephole2
518 -funsafe-math-optimizations -funsafe-loop-optimizations -ffinite-math-only
519 -fno-trapping-math -fno-zero-initialized-in-bss
520 -fomit-frame-pointer -foptimize-register-move
521 -foptimize-sibling-calls -fprefetch-loop-arrays
522 -fprofile-generate -fprofile-use
523 -fregmove -frename-registers
524 -freorder-blocks -freorder-blocks-and-partition -freorder-functions
525 -frerun-cse-after-loop -frerun-loop-opt
526 -frounding-math -fschedule-insns -fschedule-insns2
527 -fno-sched-interblock -fno-sched-spec -fsched-spec-load
528 -fsched-spec-load-dangerous
529 -fsched-stalled-insns=N -fsched-stalled-insns-dep=N
530 -fsched2-use-superblocks
531 -fsched2-use-traces -freschedule-modulo-scheduled-loops
532 -fsignaling-nans -fsingle-precision-constant
533 -fstack-protector -fstack-protector-all
534 -fstrength-reduce -fstrict-aliasing -ftracer -fthread-jumps
535 -funroll-all-loops -funroll-loops -fpeel-loops
536 -fsplit-ivs-in-unroller -funswitch-loops
537 -fvariable-expansion-in-unroller
538 -ftree-pre -ftree-ccp -ftree-dce -ftree-loop-optimize
539 -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts
540 -ftree-dominator-opts -ftree-dse -ftree-copyrename -ftree-sink
541 -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize
542 -ftree-vect-loop-version -ftree-salias -fweb
543 -ftree-copy-prop -ftree-store-ccp -ftree-store-copy-prop -fwhole-program
545 -O -O0 -O1 -O2 -O3 -Os
547 _Preprocessor Options_
548 *Note Options Controlling the Preprocessor: Preprocessor Options.
554 -include FILE -imacros FILE
555 -iprefix FILE -iwithprefix DIR
556 -iwithprefixbefore DIR -isystem DIR
558 -M -MM -MF -MG -MP -MQ -MT -nostdinc
559 -P -fworking-directory -remap
560 -trigraphs -undef -UMACRO -Wp,OPTION
561 -Xpreprocessor OPTION
564 *Note Passing Options to the Assembler: Assembler Options.
565 -Wa,OPTION -Xassembler OPTION
568 *Note Options for Linking: Link Options.
569 OBJECT-FILE-NAME -lLIBRARY
570 -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic
571 -s -static -static-libgcc -shared -shared-libgcc -symbolic
572 -Wl,OPTION -Xlinker OPTION
576 *Note Options for Directory Search: Directory Options.
577 -BPREFIX -IDIR -iquoteDIR -LDIR
578 -specs=FILE -I- --sysroot=DIR
581 *Note Target Options::.
582 -V VERSION -b MACHINE
584 _Machine Dependent Options_
585 *Note Hardware Models and Configurations: Submodel Options.
589 -mmangle-cpu -mcpu=CPU -mtext=TEXT-SECTION
590 -mdata=DATA-SECTION -mrodata=READONLY-DATA-SECTION
593 -mapcs-frame -mno-apcs-frame
595 -mapcs-stack-check -mno-apcs-stack-check
596 -mapcs-float -mno-apcs-float
597 -mapcs-reentrant -mno-apcs-reentrant
598 -msched-prolog -mno-sched-prolog
599 -mlittle-endian -mbig-endian -mwords-little-endian
600 -mfloat-abi=NAME -msoft-float -mhard-float -mfpe
601 -mthumb-interwork -mno-thumb-interwork
602 -mcpu=NAME -march=NAME -mfpu=NAME
603 -mstructure-size-boundary=N
605 -mlong-calls -mno-long-calls
606 -msingle-pic-base -mno-single-pic-base
609 -mcirrus-fix-invalid-insns -mno-cirrus-fix-invalid-insns
612 -mtpcs-frame -mtpcs-leaf-frame
613 -mcaller-super-interworking -mcallee-super-interworking
617 -mmcu=MCU -msize -minit-stack=N -mno-interrupts
618 -mcall-prologues -mno-tablejump -mtiny-stack -mint8
621 -momit-leaf-frame-pointer -mno-omit-leaf-frame-pointer
622 -mspecld-anomaly -mno-specld-anomaly -mcsync-anomaly -mno-csync-anomaly
623 -mlow-64k -mno-low64k -mid-shared-library
624 -mno-id-shared-library -mshared-library-id=N
625 -mlong-calls -mno-long-calls
628 -mcpu=CPU -march=CPU -mtune=CPU
629 -mmax-stack-frame=N -melinux-stacksize=N
630 -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects
631 -mstack-align -mdata-align -mconst-align
632 -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt
633 -melf -maout -melinux -mlinux -sim -sim2
634 -mmul-bug-workaround -mno-mul-bug-workaround
640 -all_load -allowable_client -arch -arch_errors_fatal
641 -arch_only -bind_at_load -bundle -bundle_loader
642 -client_name -compatibility_version -current_version
644 -dependency-file -dylib_file -dylinker_install_name
645 -dynamic -dynamiclib -exported_symbols_list
646 -filelist -flat_namespace -force_cpusubtype_ALL
647 -force_flat_namespace -headerpad_max_install_names
648 -image_base -init -install_name -keep_private_externs
649 -multi_module -multiply_defined -multiply_defined_unused
650 -noall_load -no_dead_strip_inits_and_terms
651 -nofixprebinding -nomultidefs -noprebind -noseglinkedit
652 -pagezero_size -prebind -prebind_all_twolevel_modules
653 -private_bundle -read_only_relocs -sectalign
654 -sectobjectsymbols -whyload -seg1addr
655 -sectcreate -sectobjectsymbols -sectorder
656 -segaddr -segs_read_only_addr -segs_read_write_addr
657 -seg_addr_table -seg_addr_table_filename -seglinkedit
658 -segprot -segs_read_only_addr -segs_read_write_addr
659 -single_module -static -sub_library -sub_umbrella
660 -twolevel_namespace -umbrella -undefined
661 -unexported_symbols_list -weak_reference_mismatches
662 -whatsloaded -F -gused -gfull -mmacosx-version-min=VERSION
666 -mno-fp-regs -msoft-float -malpha-as -mgas
667 -mieee -mieee-with-inexact -mieee-conformant
668 -mfp-trap-mode=MODE -mfp-rounding-mode=MODE
669 -mtrap-precision=MODE -mbuild-constants
670 -mcpu=CPU-TYPE -mtune=CPU-TYPE
671 -mbwx -mmax -mfix -mcix
672 -mfloat-vax -mfloat-ieee
673 -mexplicit-relocs -msmall-data -mlarge-data
674 -msmall-text -mlarge-text
675 -mmemory-latency=TIME
677 _DEC Alpha/VMS Options_
681 -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64
682 -mhard-float -msoft-float
683 -malloc-cc -mfixed-cc -mdword -mno-dword
685 -mmedia -mno-media -mmuladd -mno-muladd
686 -mfdpic -minline-plt -mgprel-ro -multilib-library-pic
687 -mlinked-fp -mlong-calls -malign-labels
688 -mlibrary-pic -macc-4 -macc-8
689 -mpack -mno-pack -mno-eflags -mcond-move -mno-cond-move
690 -moptimize-membar -mno-optimize-membar
691 -mscc -mno-scc -mcond-exec -mno-cond-exec
692 -mvliw-branch -mno-vliw-branch
693 -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
694 -mno-nested-cond-exec -mtomcat-stats
699 -mrelax -mh -ms -mn -mint32 -malign-300
702 -march=ARCHITECTURE-TYPE
703 -mbig-switch -mdisable-fpregs -mdisable-indexing
704 -mfast-indirect-calls -mgas -mgnu-ld -mhp-ld
705 -mfixed-range=REGISTER-RANGE
706 -mjump-in-delay -mlinker-opt -mlong-calls
707 -mlong-load-store -mno-big-switch -mno-disable-fpregs
708 -mno-disable-indexing -mno-fast-indirect-calls -mno-gas
709 -mno-jump-in-delay -mno-long-load-store
710 -mno-portable-runtime -mno-soft-float
711 -mno-space-regs -msoft-float -mpa-risc-1-0
712 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
713 -mschedule=CPU-TYPE -mspace-regs -msio -mwsio
714 -munix=UNIX-STD -nolibdld -static -threads
716 _i386 and x86-64 Options_
717 -mtune=CPU-TYPE -march=CPU-TYPE
719 -masm=DIALECT -mno-fancy-math-387
720 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib
721 -mno-wide-multiply -mrtd -malign-double
722 -mpreferred-stack-boundary=NUM
723 -mmmx -msse -msse2 -msse3 -m3dnow
724 -mthreads -mno-align-stringops -minline-all-stringops
725 -mpush-args -maccumulate-outgoing-args -m128bit-long-double
726 -m96bit-long-double -mregparm=NUM -msseregparm
727 -momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs
729 -m32 -m64 -mlarge-data-threshold=NUM
732 -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
733 -mvolatile-asm-stop -mregister-names -mno-sdata
734 -mconstant-gp -mauto-pic -minline-float-divide-min-latency
735 -minline-float-divide-max-throughput
736 -minline-int-divide-min-latency
737 -minline-int-divide-max-throughput
738 -minline-sqrt-min-latency -minline-sqrt-max-throughput
739 -mno-dwarf2-asm -mearly-stop-bits
740 -mfixed-range=REGISTER-RANGE -mtls-size=TLS-SIZE
741 -mtune=CPU-TYPE -mt -pthread -milp32 -mlp64
746 -malign-loops -mno-align-loops
749 -mmodel=CODE-SIZE-MODEL-TYPE
751 -mno-flush-func -mflush-func=NAME
752 -mno-flush-trap -mflush-trap=NUMBER
756 -mcpu=CPU -msim -memregs=NUMBER
759 -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040
760 -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020
761 -mnobitfield -mrtd -mshort -msoft-float -mpcrel
762 -malign-int -mstrict-align -msep-data -mno-sep-data
763 -mshared-library-id=n -mid-shared-library -mno-id-shared-library
766 -m6811 -m6812 -m68hc11 -m68hc12 -m68hcs12
767 -mauto-incdec -minmax -mlong-calls -mshort
768 -msoft-reg-count=COUNT
771 -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates
772 -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields
773 -m4byte-functions -mno-4byte-functions -mcallgraph-data
774 -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim
775 -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment
778 -EL -EB -march=ARCH -mtune=ARCH
779 -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64
780 -mips16 -mno-mips16 -mabi=ABI -mabicalls -mno-abicalls
781 -mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfp64
782 -mhard-float -msoft-float -msingle-float -mdouble-float
783 -mdsp -mpaired-single -mips3d
784 -mlong64 -mlong32 -msym32 -mno-sym32
785 -GNUM -membedded-data -mno-embedded-data
786 -muninit-const-in-rodata -mno-uninit-const-in-rodata
787 -msplit-addresses -mno-split-addresses
788 -mexplicit-relocs -mno-explicit-relocs
789 -mcheck-zero-division -mno-check-zero-division
790 -mdivide-traps -mdivide-breaks
791 -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls
792 -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp
793 -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400
794 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130
795 -mfix-sb1 -mno-fix-sb1
796 -mflush-func=FUNC -mno-flush-func
797 -mbranch-likely -mno-branch-likely
798 -mfp-exceptions -mno-fp-exceptions
799 -mvr4130-align -mno-vr4130-align
802 -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
803 -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols
804 -melf -mbranch-predict -mno-branch-predict -mbase-addresses
805 -mno-base-addresses -msingle-exit -mno-single-exit
808 -mmult-bug -mno-mult-bug
811 -mreturn-pointer-on-d0
815 -mno-crt0 -mbacc -msim
819 -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10
820 -mbcopy -mbcopy-builtin -mint32 -mno-int16
821 -mint16 -mno-int32 -mfloat32 -mno-float64
822 -mfloat64 -mno-float32 -mabshi -mno-abshi
823 -mbranch-expensive -mbranch-cheap
824 -msplit -mno-split -munix-asm -mdec-asm
826 _PowerPC Options_ See RS/6000 and PowerPC Options.
828 _RS/6000 and PowerPC Options_
831 -mpower -mno-power -mpower2 -mno-power2
832 -mpowerpc -mpowerpc64 -mno-powerpc
833 -maltivec -mno-altivec
834 -mpowerpc-gpopt -mno-powerpc-gpopt
835 -mpowerpc-gfxopt -mno-powerpc-gfxopt
836 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mfprnd -mno-fprnd
837 -mnew-mnemonics -mold-mnemonics
838 -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc
839 -m64 -m32 -mxl-compat -mno-xl-compat -mpe
840 -malign-power -malign-natural
841 -msoft-float -mhard-float -mmultiple -mno-multiple
842 -mstring -mno-string -mupdate -mno-update
843 -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align
844 -mstrict-align -mno-strict-align -mrelocatable
845 -mno-relocatable -mrelocatable-lib -mno-relocatable-lib
846 -mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian
847 -mdynamic-no-pic -maltivec -mswdiv
848 -mprioritize-restricted-insns=PRIORITY
849 -msched-costly-dep=DEPENDENCE_TYPE
850 -minsert-sched-nops=SCHEME
851 -mcall-sysv -mcall-netbsd
852 -maix-struct-return -msvr4-struct-return
853 -mabi=ABI-TYPE -msecure-plt -mbss-plt
859 -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double
860 -mprototype -mno-prototype
861 -msim -mmvme -mads -myellowknife -memb -msdata
862 -msdata=OPT -mvxworks -mwindiss -G NUM -pthread
864 _S/390 and zSeries Options_
865 -mtune=CPU-TYPE -march=CPU-TYPE
866 -mhard-float -msoft-float -mlong-double-64 -mlong-double-128
867 -mbackchain -mno-backchain -mpacked-stack -mno-packed-stack
868 -msmall-exec -mno-small-exec -mmvcle -mno-mvcle
869 -m64 -m31 -mdebug -mno-debug -mesa -mzarch
870 -mtpf-trace -mno-tpf-trace -mfused-madd -mno-fused-madd
871 -mwarn-framesize -mwarn-dynamicstack -mstack-size -mstack-guard
874 -m1 -m2 -m2e -m3 -m3e
875 -m4-nofpu -m4-single-only -m4-single -m4
876 -m4a-nofpu -m4a-single-only -m4a-single -m4a -m4al
877 -m5-64media -m5-64media-nofpu
878 -m5-32media -m5-32media-nofpu
879 -m5-compact -m5-compact-nofpu
880 -mb -ml -mdalign -mrelax
881 -mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave
882 -mieee -misize -mpadstruct -mspace
883 -mprefergot -musermode -multcost=NUMBER -mdiv=STRATEGY
884 -mdivsi3_libfunc=NAME
885 -madjust-unroll -mindexed-addressing -mgettrcost=NUMBER -mpt-fixed
892 -m32 -m64 -mapp-regs -mno-app-regs
893 -mfaster-structs -mno-faster-structs
894 -mfpu -mno-fpu -mhard-float -msoft-float
895 -mhard-quad-float -msoft-quad-float
896 -mimpure-text -mno-impure-text -mlittle-endian
897 -mstack-bias -mno-stack-bias
898 -munaligned-doubles -mno-unaligned-doubles
899 -mv8plus -mno-v8plus -mvis -mno-vis
900 -threads -pthreads -pthread
903 -Qy -Qn -YP,PATHS -Ym,DIR
905 _TMS320C3x/C4x Options_
906 -mcpu=CPU -mbig -msmall -mregparm -mmemparm
907 -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload
908 -mrpts=COUNT -mrptb -mdb -mloop-unsigned
909 -mparallel-insns -mparallel-mpy -mpreserve-float
912 -mlong-calls -mno-long-calls -mep -mno-ep
913 -mprolog-function -mno-prolog-function -mspace
914 -mtda=N -msda=N -mzda=N
915 -mapp-regs -mno-app-regs
916 -mdisable-callt -mno-disable-callt
924 _x86-64 Options_ See i386 and x86-64 Options.
930 -mconst16 -mno-const16
931 -mfused-madd -mno-fused-madd
932 -mtext-section-literals -mno-text-section-literals
933 -mtarget-align -mno-target-align
934 -mlongcalls -mno-longcalls
936 _zSeries Options_ See S/390 and zSeries Options.
938 _Code Generation Options_
939 *Note Options for Code Generation Conventions: Code Gen Options.
940 -fcall-saved-REG -fcall-used-REG
941 -ffixed-REG -fexceptions
942 -fnon-call-exceptions -funwind-tables
943 -fasynchronous-unwind-tables
944 -finhibit-size-directive -finstrument-functions
945 -fno-common -fno-ident
946 -fpcc-struct-return -fpic -fPIC -fpie -fPIE
948 -freg-struct-return -fshared-data -fshort-enums
949 -fshort-double -fshort-wchar
950 -fverbose-asm -fpack-struct[=N] -fstack-check
951 -fstack-limit-register=REG -fstack-limit-symbol=SYM
952 -fargument-alias -fargument-noalias
953 -fargument-noalias-global -fleading-underscore
955 -ftrapv -fwrapv -fbounds-check
961 * Overall Options:: Controlling the kind of output:
962 an executable, object files, assembler files,
963 or preprocessed source.
964 * C Dialect Options:: Controlling the variant of C language compiled.
965 * C++ Dialect Options:: Variations on C++.
966 * Objective-C and Objective-C++ Dialect Options:: Variations on Objective-C
968 * Language Independent Options:: Controlling how diagnostics should be
970 * Warning Options:: How picky should the compiler be?
971 * Debugging Options:: Symbol tables, measurements, and debugging dumps.
972 * Optimize Options:: How much optimization?
973 * Preprocessor Options:: Controlling header files and macro definitions.
974 Also, getting dependency information for Make.
975 * Assembler Options:: Passing options to the assembler.
976 * Link Options:: Specifying libraries and so on.
977 * Directory Options:: Where to find header files and libraries.
978 Where to find the compiler executable files.
979 * Spec Files:: How to pass switches to sub-processes.
980 * Target Options:: Running a cross-compiler, or an old version of GCC.
983 File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC
985 3.2 Options Controlling the Kind of Output
986 ==========================================
988 Compilation can involve up to four stages: preprocessing, compilation
989 proper, assembly and linking, always in that order. GCC is capable of
990 preprocessing and compiling several files either into several assembler
991 input files, or into one assembler input file; then each assembler
992 input file produces an object file, and linking combines all the object
993 files (those newly compiled, and those specified as input) into an
996 For any given input file, the file name suffix determines what kind of
1000 C source code which must be preprocessed.
1003 C source code which should not be preprocessed.
1006 C++ source code which should not be preprocessed.
1009 Objective-C source code. Note that you must link with the
1010 `libobjc' library to make an Objective-C program work.
1013 Objective-C source code which should not be preprocessed.
1017 Objective-C++ source code. Note that you must link with the
1018 `libobjc' library to make an Objective-C++ program work. Note
1019 that `.M' refers to a literal capital M.
1022 Objective-C++ source code which should not be preprocessed.
1025 C, C++, Objective-C or Objective-C++ header file to be turned into
1026 a precompiled header.
1035 C++ source code which must be preprocessed. Note that in `.cxx',
1036 the last two letters must both be literally `x'. Likewise, `.C'
1037 refers to a literal capital C.
1041 Objective-C++ source code which must be preprocessed.
1044 Objective-C++ source code which should not be preprocessed.
1048 C++ header file to be turned into a precompiled header.
1053 Fixed form Fortran source code which should not be preprocessed.
1058 Fixed form Fortran source code which must be preprocessed (with
1059 the traditional preprocessor).
1063 Free form Fortran source code which should not be preprocessed.
1067 Free form Fortran source code which must be preprocessed (with the
1068 traditional preprocessor).
1071 Ada source code file which contains a library unit declaration (a
1072 declaration of a package, subprogram, or generic, or a generic
1073 instantiation), or a library unit renaming declaration (a package,
1074 generic, or subprogram renaming declaration). Such files are also
1078 Ada source code file containing a library unit body (a subprogram
1079 or package body). Such files are also called "bodies".
1085 Assembler code which must be preprocessed.
1088 An object file to be fed straight into linking. Any file name
1089 with no recognized suffix is treated this way.
1091 You can specify the input language explicitly with the `-x' option:
1094 Specify explicitly the LANGUAGE for the following input files
1095 (rather than letting the compiler choose a default based on the
1096 file name suffix). This option applies to all following input
1097 files until the next `-x' option. Possible values for LANGUAGE
1099 c c-header c-cpp-output
1100 c++ c++-header c++-cpp-output
1101 objective-c objective-c-header objective-c-cpp-output
1102 objective-c++ objective-c++-header objective-c++-cpp-output
1103 assembler assembler-with-cpp
1111 Turn off any specification of a language, so that subsequent files
1112 are handled according to their file name suffixes (as they are if
1113 `-x' has not been used at all).
1116 Normally the `gcc' program will exit with the code of 1 if any
1117 phase of the compiler returns a non-success return code. If you
1118 specify `-pass-exit-codes', the `gcc' program will instead return
1119 with numerically highest error produced by any phase that returned
1120 an error indication.
1122 If you only want some of the stages of compilation, you can use `-x'
1123 (or filename suffixes) to tell `gcc' where to start, and one of the
1124 options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that
1125 some combinations (for example, `-x cpp-output -E') instruct `gcc' to
1129 Compile or assemble the source files, but do not link. The linking
1130 stage simply is not done. The ultimate output is in the form of an
1131 object file for each source file.
1133 By default, the object file name for a source file is made by
1134 replacing the suffix `.c', `.i', `.s', etc., with `.o'.
1136 Unrecognized input files, not requiring compilation or assembly,
1140 Stop after the stage of compilation proper; do not assemble. The
1141 output is in the form of an assembler code file for each
1142 non-assembler input file specified.
1144 By default, the assembler file name for a source file is made by
1145 replacing the suffix `.c', `.i', etc., with `.s'.
1147 Input files that don't require compilation are ignored.
1150 Stop after the preprocessing stage; do not run the compiler
1151 proper. The output is in the form of preprocessed source code,
1152 which is sent to the standard output.
1154 Input files which don't require preprocessing are ignored.
1157 Place output in file FILE. This applies regardless to whatever
1158 sort of output is being produced, whether it be an executable file,
1159 an object file, an assembler file or preprocessed C code.
1161 If `-o' is not specified, the default is to put an executable file
1162 in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
1163 assembler file in `SOURCE.s', a precompiled header file in
1164 `SOURCE.SUFFIX.gch', and all preprocessed C source on standard
1168 Print (on standard error output) the commands executed to run the
1169 stages of compilation. Also print the version number of the
1170 compiler driver program and of the preprocessor and the compiler
1174 Like `-v' except the commands are not executed and all command
1175 arguments are quoted. This is useful for shell scripts to capture
1176 the driver-generated command lines.
1179 Use pipes rather than temporary files for communication between the
1180 various stages of compilation. This fails to work on some systems
1181 where the assembler is unable to read from a pipe; but the GNU
1182 assembler has no trouble.
1185 If you are compiling multiple source files, this option tells the
1186 driver to pass all the source files to the compiler at once (for
1187 those languages for which the compiler can handle this). This
1188 will allow intermodule analysis (IMA) to be performed by the
1189 compiler. Currently the only language for which this is supported
1190 is C. If you pass source files for multiple languages to the
1191 driver, using this option, the driver will invoke the compiler(s)
1192 that support IMA once each, passing each compiler all the source
1193 files appropriate for it. For those languages that do not support
1194 IMA this option will be ignored, and the compiler will be invoked
1195 once for each source file in that language. If you use this
1196 option in conjunction with `-save-temps', the compiler will
1197 generate multiple pre-processed files (one for each source file),
1198 but only one (combined) `.o' or `.s' file.
1201 Print (on the standard output) a description of the command line
1202 options understood by `gcc'. If the `-v' option is also specified
1203 then `--help' will also be passed on to the various processes
1204 invoked by `gcc', so that they can display the command line options
1205 they accept. If the `-Wextra' option is also specified then
1206 command line options which have no documentation associated with
1207 them will also be displayed.
1210 Print (on the standard output) a description of target specific
1211 command line options for each tool.
1214 Display the version number and copyrights of the invoked GCC.
1217 File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC
1219 3.3 Compiling C++ Programs
1220 ==========================
1222 C++ source files conventionally use one of the suffixes `.C', `.cc',
1223 `.cpp', `.CPP', `.c++', `.cp', or `.cxx'; C++ header files often use
1224 `.hh' or `.H'; and preprocessed C++ files use the suffix `.ii'. GCC
1225 recognizes files with these names and compiles them as C++ programs
1226 even if you call the compiler the same way as for compiling C programs
1227 (usually with the name `gcc').
1229 However, C++ programs often require class libraries as well as a
1230 compiler that understands the C++ language--and under some
1231 circumstances, you might want to compile programs or header files from
1232 standard input, or otherwise without a suffix that flags them as C++
1233 programs. You might also like to precompile a C header file with a
1234 `.h' extension to be used in C++ compilations. `g++' is a program that
1235 calls GCC with the default language set to C++, and automatically
1236 specifies linking against the C++ library. On many systems, `g++' is
1237 also installed with the name `c++'.
1239 When you compile C++ programs, you may specify many of the same
1240 command-line options that you use for compiling programs in any
1241 language; or command-line options meaningful for C and related
1242 languages; or options that are meaningful only for C++ programs. *Note
1243 Options Controlling C Dialect: C Dialect Options, for explanations of
1244 options for languages related to C. *Note Options Controlling C++
1245 Dialect: C++ Dialect Options, for explanations of options that are
1246 meaningful only for C++ programs.
1249 File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC
1251 3.4 Options Controlling C Dialect
1252 =================================
1254 The following options control the dialect of C (or languages derived
1255 from C, such as C++, Objective-C and Objective-C++) that the compiler
1259 In C mode, support all ISO C90 programs. In C++ mode, remove GNU
1260 extensions that conflict with ISO C++.
1262 This turns off certain features of GCC that are incompatible with
1263 ISO C90 (when compiling C code), or of standard C++ (when
1264 compiling C++ code), such as the `asm' and `typeof' keywords, and
1265 predefined macros such as `unix' and `vax' that identify the type
1266 of system you are using. It also enables the undesirable and
1267 rarely used ISO trigraph feature. For the C compiler, it disables
1268 recognition of C++ style `//' comments as well as the `inline'
1271 The alternate keywords `__asm__', `__extension__', `__inline__'
1272 and `__typeof__' continue to work despite `-ansi'. You would not
1273 want to use them in an ISO C program, of course, but it is useful
1274 to put them in header files that might be included in compilations
1275 done with `-ansi'. Alternate predefined macros such as `__unix__'
1276 and `__vax__' are also available, with or without `-ansi'.
1278 The `-ansi' option does not cause non-ISO programs to be rejected
1279 gratuitously. For that, `-pedantic' is required in addition to
1280 `-ansi'. *Note Warning Options::.
1282 The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
1283 is used. Some header files may notice this macro and refrain from
1284 declaring certain functions or defining certain macros that the
1285 ISO standard doesn't call for; this is to avoid interfering with
1286 any programs that might use these names for other things.
1288 Functions which would normally be built in but do not have
1289 semantics defined by ISO C (such as `alloca' and `ffs') are not
1290 built-in functions with `-ansi' is used. *Note Other built-in
1291 functions provided by GCC: Other Builtins, for details of the
1295 Determine the language standard. This option is currently only
1296 supported when compiling C or C++. A value for this option must be
1297 provided; possible values are
1301 ISO C90 (same as `-ansi').
1304 ISO C90 as modified in amendment 1.
1310 ISO C99. Note that this standard is not yet fully supported;
1311 see `http://gcc.gnu.org/gcc-4.1/c99status.html' for more
1312 information. The names `c9x' and `iso9899:199x' are
1316 Default, ISO C90 plus GNU extensions (including some C99
1321 ISO C99 plus GNU extensions. When ISO C99 is fully
1322 implemented in GCC, this will become the default. The name
1323 `gnu9x' is deprecated.
1326 The 1998 ISO C++ standard plus amendments.
1329 The same as `-std=c++98' plus GNU extensions. This is the
1330 default for C++ code.
1332 Even when this option is not specified, you can still use some of
1333 the features of newer standards in so far as they do not conflict
1334 with previous C standards. For example, you may use
1335 `__restrict__' even when `-std=c99' is not specified.
1337 The `-std' options specifying some version of ISO C have the same
1338 effects as `-ansi', except that features that were not in ISO C90
1339 but are in the specified version (for example, `//' comments and
1340 the `inline' keyword in ISO C99) are not disabled.
1342 *Note Language Standards Supported by GCC: Standards, for details
1343 of these standard versions.
1345 `-aux-info FILENAME'
1346 Output to the given filename prototyped declarations for all
1347 functions declared and/or defined in a translation unit, including
1348 those in header files. This option is silently ignored in any
1349 language other than C.
1351 Besides declarations, the file indicates, in comments, the origin
1352 of each declaration (source file and line), whether the
1353 declaration was implicit, prototyped or unprototyped (`I', `N' for
1354 new or `O' for old, respectively, in the first character after the
1355 line number and the colon), and whether it came from a declaration
1356 or a definition (`C' or `F', respectively, in the following
1357 character). In the case of function definitions, a K&R-style list
1358 of arguments followed by their declarations is also provided,
1359 inside comments, after the declaration.
1362 Do not recognize `asm', `inline' or `typeof' as a keyword, so that
1363 code can use these words as identifiers. You can use the keywords
1364 `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies
1367 In C++, this switch only affects the `typeof' keyword, since `asm'
1368 and `inline' are standard keywords. You may want to use the
1369 `-fno-gnu-keywords' flag instead, which has the same effect. In
1370 C99 mode (`-std=c99' or `-std=gnu99'), this switch only affects
1371 the `asm' and `typeof' keywords, since `inline' is a standard
1375 `-fno-builtin-FUNCTION'
1376 Don't recognize built-in functions that do not begin with
1377 `__builtin_' as prefix. *Note Other built-in functions provided
1378 by GCC: Other Builtins, for details of the functions affected,
1379 including those which are not built-in functions when `-ansi' or
1380 `-std' options for strict ISO C conformance are used because they
1381 do not have an ISO standard meaning.
1383 GCC normally generates special code to handle certain built-in
1384 functions more efficiently; for instance, calls to `alloca' may
1385 become single instructions that adjust the stack directly, and
1386 calls to `memcpy' may become inline copy loops. The resulting
1387 code is often both smaller and faster, but since the function
1388 calls no longer appear as such, you cannot set a breakpoint on
1389 those calls, nor can you change the behavior of the functions by
1390 linking with a different library. In addition, when a function is
1391 recognized as a built-in function, GCC may use information about
1392 that function to warn about problems with calls to that function,
1393 or to generate more efficient code, even if the resulting code
1394 still contains calls to that function. For example, warnings are
1395 given with `-Wformat' for bad calls to `printf', when `printf' is
1396 built in, and `strlen' is known not to modify global memory.
1398 With the `-fno-builtin-FUNCTION' option only the built-in function
1399 FUNCTION is disabled. FUNCTION must not begin with `__builtin_'.
1400 If a function is named this is not built-in in this version of
1401 GCC, this option is ignored. There is no corresponding
1402 `-fbuiltin-FUNCTION' option; if you wish to enable built-in
1403 functions selectively when using `-fno-builtin' or
1404 `-ffreestanding', you may define macros such as:
1406 #define abs(n) __builtin_abs ((n))
1407 #define strcpy(d, s) __builtin_strcpy ((d), (s))
1410 Assert that compilation takes place in a hosted environment. This
1411 implies `-fbuiltin'. A hosted environment is one in which the
1412 entire standard library is available, and in which `main' has a
1413 return type of `int'. Examples are nearly everything except a
1414 kernel. This is equivalent to `-fno-freestanding'.
1417 Assert that compilation takes place in a freestanding environment.
1418 This implies `-fno-builtin'. A freestanding environment is one
1419 in which the standard library may not exist, and program startup
1420 may not necessarily be at `main'. The most obvious example is an
1421 OS kernel. This is equivalent to `-fno-hosted'.
1423 *Note Language Standards Supported by GCC: Standards, for details
1424 of freestanding and hosted environments.
1427 Accept some non-standard constructs used in Microsoft header files.
1429 Some cases of unnamed fields in structures and unions are only
1430 accepted with this option. *Note Unnamed struct/union fields
1431 within structs/unions: Unnamed Fields, for details.
1434 Support ISO C trigraphs. The `-ansi' option (and `-std' options
1435 for strict ISO C conformance) implies `-trigraphs'.
1437 `-no-integrated-cpp'
1438 Performs a compilation in two passes: preprocessing and compiling.
1439 This option allows a user supplied "cc1", "cc1plus", or "cc1obj"
1440 via the `-B' option. The user supplied compilation step can then
1441 add in an additional preprocessing step after normal preprocessing
1442 but before compiling. The default is to use the integrated cpp
1445 The semantics of this option will change if "cc1", "cc1plus", and
1446 "cc1obj" are merged.
1450 Formerly, these options caused GCC to attempt to emulate a
1451 pre-standard C compiler. They are now only supported with the
1452 `-E' switch. The preprocessor continues to support a pre-standard
1453 mode. See the GNU CPP manual for details.
1456 Allow conditional expressions with mismatched types in the second
1457 and third arguments. The value of such an expression is void.
1458 This option is not supported for C++.
1461 Let the type `char' be unsigned, like `unsigned char'.
1463 Each kind of machine has a default for what `char' should be. It
1464 is either like `unsigned char' by default or like `signed char' by
1467 Ideally, a portable program should always use `signed char' or
1468 `unsigned char' when it depends on the signedness of an object.
1469 But many programs have been written to use plain `char' and expect
1470 it to be signed, or expect it to be unsigned, depending on the
1471 machines they were written for. This option, and its inverse, let
1472 you make such a program work with the opposite default.
1474 The type `char' is always a distinct type from each of `signed
1475 char' or `unsigned char', even though its behavior is always just
1476 like one of those two.
1479 Let the type `char' be signed, like `signed char'.
1481 Note that this is equivalent to `-fno-unsigned-char', which is the
1482 negative form of `-funsigned-char'. Likewise, the option
1483 `-fno-signed-char' is equivalent to `-funsigned-char'.
1485 `-fsigned-bitfields'
1486 `-funsigned-bitfields'
1487 `-fno-signed-bitfields'
1488 `-fno-unsigned-bitfields'
1489 These options control whether a bit-field is signed or unsigned,
1490 when the declaration does not use either `signed' or `unsigned'.
1491 By default, such a bit-field is signed, because this is
1492 consistent: the basic integer types such as `int' are signed types.
1495 File: gcc.info, Node: C++ Dialect Options, Next: Objective-C and Objective-C++ Dialect Options, Prev: C Dialect Options, Up: Invoking GCC
1497 3.5 Options Controlling C++ Dialect
1498 ===================================
1500 This section describes the command-line options that are only meaningful
1501 for C++ programs; but you can also use most of the GNU compiler options
1502 regardless of what language your program is in. For example, you might
1503 compile a file `firstClass.C' like this:
1505 g++ -g -frepo -O -c firstClass.C
1507 In this example, only `-frepo' is an option meant only for C++
1508 programs; you can use the other options with any language supported by
1511 Here is a list of options that are _only_ for compiling C++ programs:
1514 Use version N of the C++ ABI. Version 2 is the version of the C++
1515 ABI that first appeared in G++ 3.4. Version 1 is the version of
1516 the C++ ABI that first appeared in G++ 3.2. Version 0 will always
1517 be the version that conforms most closely to the C++ ABI
1518 specification. Therefore, the ABI obtained using version 0 will
1519 change as ABI bugs are fixed.
1521 The default is version 2.
1523 `-fno-access-control'
1524 Turn off all access checking. This switch is mainly useful for
1525 working around bugs in the access control code.
1528 Check that the pointer returned by `operator new' is non-null
1529 before attempting to modify the storage allocated. This check is
1530 normally unnecessary because the C++ standard specifies that
1531 `operator new' will only return `0' if it is declared `throw()',
1532 in which case the compiler will always check the return value even
1533 without this option. In all other cases, when `operator new' has
1534 a non-empty exception specification, memory exhaustion is
1535 signalled by throwing `std::bad_alloc'. See also `new (nothrow)'.
1538 Put uninitialized or runtime-initialized global variables into the
1539 common segment, as C does. This saves space in the executable at
1540 the cost of not diagnosing duplicate definitions. If you compile
1541 with this flag and your program mysteriously crashes after
1542 `main()' has completed, you may have an object that is being
1543 destroyed twice because two definitions were merged.
1545 This option is no longer useful on most targets, now that support
1546 has been added for putting variables into BSS without making them
1549 `-ffriend-injection'
1550 Inject friend functions into the enclosing namespace, so that they
1551 are visible outside the scope of the class in which they are
1552 declared. Friend functions were documented to work this way in
1553 the old Annotated C++ Reference Manual, and versions of G++ before
1554 4.1 always worked that way. However, in ISO C++ a friend function
1555 which is not declared in an enclosing scope can only be found
1556 using argument dependent lookup. This option causes friends to be
1557 injected as they were in earlier releases.
1559 This option is for compatibility, and may be removed in a future
1562 `-fno-const-strings'
1563 Give string constants type `char *' instead of type `const char
1564 *'. By default, G++ uses type `const char *' as required by the
1565 standard. Even if you use `-fno-const-strings', you cannot
1566 actually modify the value of a string constant.
1568 This option might be removed in a future release of G++. For
1569 maximum portability, you should structure your code so that it
1570 works with string constants that have type `const char *'.
1572 `-fno-elide-constructors'
1573 The C++ standard allows an implementation to omit creating a
1574 temporary which is only used to initialize another object of the
1575 same type. Specifying this option disables that optimization, and
1576 forces G++ to call the copy constructor in all cases.
1578 `-fno-enforce-eh-specs'
1579 Don't generate code to check for violation of exception
1580 specifications at runtime. This option violates the C++ standard,
1581 but may be useful for reducing code size in production builds,
1582 much like defining `NDEBUG'. This does not give user code
1583 permission to throw exceptions in violation of the exception
1584 specifications; the compiler will still optimize based on the
1585 specifications, so throwing an unexpected exception will result in
1590 If `-ffor-scope' is specified, the scope of variables declared in
1591 a for-init-statement is limited to the `for' loop itself, as
1592 specified by the C++ standard. If `-fno-for-scope' is specified,
1593 the scope of variables declared in a for-init-statement extends to
1594 the end of the enclosing scope, as was the case in old versions of
1595 G++, and other (traditional) implementations of C++.
1597 The default if neither flag is given to follow the standard, but
1598 to allow and give a warning for old-style code that would
1599 otherwise be invalid, or have different behavior.
1602 Do not recognize `typeof' as a keyword, so that code can use this
1603 word as an identifier. You can use the keyword `__typeof__'
1604 instead. `-ansi' implies `-fno-gnu-keywords'.
1606 `-fno-implicit-templates'
1607 Never emit code for non-inline templates which are instantiated
1608 implicitly (i.e. by use); only emit code for explicit
1609 instantiations. *Note Template Instantiation::, for more
1612 `-fno-implicit-inline-templates'
1613 Don't emit code for implicit instantiations of inline templates,
1614 either. The default is to handle inlines differently so that
1615 compiles with and without optimization will need the same set of
1616 explicit instantiations.
1618 `-fno-implement-inlines'
1619 To save space, do not emit out-of-line copies of inline functions
1620 controlled by `#pragma implementation'. This will cause linker
1621 errors if these functions are not inlined everywhere they are
1625 Disable pedantic warnings about constructs used in MFC, such as
1626 implicit int and getting a pointer to member function via
1627 non-standard syntax.
1629 `-fno-nonansi-builtins'
1630 Disable built-in declarations of functions that are not mandated by
1631 ANSI/ISO C. These include `ffs', `alloca', `_exit', `index',
1632 `bzero', `conjf', and other related functions.
1634 `-fno-operator-names'
1635 Do not treat the operator name keywords `and', `bitand', `bitor',
1636 `compl', `not', `or' and `xor' as synonyms as keywords.
1638 `-fno-optional-diags'
1639 Disable diagnostics that the standard says a compiler does not
1640 need to issue. Currently, the only such diagnostic issued by G++
1641 is the one for a name having multiple meanings within a class.
1644 Downgrade some diagnostics about nonconformant code from errors to
1645 warnings. Thus, using `-fpermissive' will allow some
1646 nonconforming code to compile.
1649 Enable automatic template instantiation at link time. This option
1650 also implies `-fno-implicit-templates'. *Note Template
1651 Instantiation::, for more information.
1654 Disable generation of information about every class with virtual
1655 functions for use by the C++ runtime type identification features
1656 (`dynamic_cast' and `typeid'). If you don't use those parts of
1657 the language, you can save some space by using this flag. Note
1658 that exception handling uses the same information, but it will
1659 generate it as needed.
1662 Emit statistics about front-end processing at the end of the
1663 compilation. This information is generally only useful to the G++
1666 `-ftemplate-depth-N'
1667 Set the maximum instantiation depth for template classes to N. A
1668 limit on the template instantiation depth is needed to detect
1669 endless recursions during template class instantiation. ANSI/ISO
1670 C++ conforming programs must not rely on a maximum depth greater
1673 `-fno-threadsafe-statics'
1674 Do not emit the extra code to use the routines specified in the C++
1675 ABI for thread-safe initialization of local statics. You can use
1676 this option to reduce code size slightly in code that doesn't need
1680 Register destructors for objects with static storage duration with
1681 the `__cxa_atexit' function rather than the `atexit' function.
1682 This option is required for fully standards-compliant handling of
1683 static destructors, but will only work if your C library supports
1686 `-fvisibility-inlines-hidden'
1687 Causes all inlined methods to be marked with `__attribute__
1688 ((visibility ("hidden")))' so that they do not appear in the
1689 export table of a DSO and do not require a PLT indirection when
1690 used within the DSO. Enabling this option can have a dramatic
1691 effect on load and link times of a DSO as it massively reduces the
1692 size of the dynamic export table when the library makes heavy use
1693 of templates. While it can cause bloating through duplication of
1694 code within each DSO where it is used, often the wastage is less
1695 than the considerable space occupied by a long symbol name in the
1696 export table which is typical when using templates and namespaces.
1697 For even more savings, combine with the `-fvisibility=hidden'
1701 Do not use weak symbol support, even if it is provided by the
1702 linker. By default, G++ will use weak symbols if they are
1703 available. This option exists only for testing, and should not be
1704 used by end-users; it will result in inferior code and has no
1705 benefits. This option may be removed in a future release of G++.
1708 Do not search for header files in the standard directories
1709 specific to C++, but do still search the other standard
1710 directories. (This option is used when building the C++ library.)
1712 In addition, these optimization, warning, and code generation options
1713 have meanings only for C++ programs:
1715 `-fno-default-inline'
1716 Do not assume `inline' for functions defined inside a class scope.
1717 *Note Options That Control Optimization: Optimize Options. Note
1718 that these functions will have linkage like inline functions; they
1719 just won't be inlined by default.
1722 Warn when G++ generates code that is probably not compatible with
1723 the vendor-neutral C++ ABI. Although an effort has been made to
1724 warn about all such cases, there are probably some cases that are
1725 not warned about, even though G++ is generating incompatible code.
1726 There may also be cases where warnings are emitted even though
1727 the code that is generated will be compatible.
1729 You should rewrite your code to avoid these warnings if you are
1730 concerned about the fact that code generated by G++ may not be
1731 binary compatible with code generated by other compilers.
1733 The known incompatibilities at this point include:
1735 * Incorrect handling of tail-padding for bit-fields. G++ may
1736 attempt to pack data into the same byte as a base class. For
1739 struct A { virtual void f(); int f1 : 1; };
1740 struct B : public A { int f2 : 1; };
1742 In this case, G++ will place `B::f2' into the same byte
1743 as`A::f1'; other compilers will not. You can avoid this
1744 problem by explicitly padding `A' so that its size is a
1745 multiple of the byte size on your platform; that will cause
1746 G++ and other compilers to layout `B' identically.
1748 * Incorrect handling of tail-padding for virtual bases. G++
1749 does not use tail padding when laying out virtual bases. For
1752 struct A { virtual void f(); char c1; };
1753 struct B { B(); char c2; };
1754 struct C : public A, public virtual B {};
1756 In this case, G++ will not place `B' into the tail-padding for
1757 `A'; other compilers will. You can avoid this problem by
1758 explicitly padding `A' so that its size is a multiple of its
1759 alignment (ignoring virtual base classes); that will cause
1760 G++ and other compilers to layout `C' identically.
1762 * Incorrect handling of bit-fields with declared widths greater
1763 than that of their underlying types, when the bit-fields
1764 appear in a union. For example:
1766 union U { int i : 4096; };
1768 Assuming that an `int' does not have 4096 bits, G++ will make
1769 the union too small by the number of bits in an `int'.
1771 * Empty classes can be placed at incorrect offsets. For
1781 struct C : public B, public A {};
1783 G++ will place the `A' base class of `C' at a nonzero offset;
1784 it should be placed at offset zero. G++ mistakenly believes
1785 that the `A' data member of `B' is already at offset zero.
1787 * Names of template functions whose types involve `typename' or
1788 template template parameters can be mangled incorrectly.
1790 template <typename Q>
1791 void f(typename Q::X) {}
1793 template <template <typename> class Q>
1794 void f(typename Q<int>::X) {}
1796 Instantiations of these templates may be mangled incorrectly.
1799 `-Wctor-dtor-privacy (C++ only)'
1800 Warn when a class seems unusable because all the constructors or
1801 destructors in that class are private, and it has neither friends
1802 nor public static member functions.
1804 `-Wnon-virtual-dtor (C++ only)'
1805 Warn when a class appears to be polymorphic, thereby requiring a
1806 virtual destructor, yet it declares a non-virtual one. This
1807 warning is enabled by `-Wall'.
1809 `-Wreorder (C++ only)'
1810 Warn when the order of member initializers given in the code does
1811 not match the order in which they must be executed. For instance:
1816 A(): j (0), i (1) { }
1819 The compiler will rearrange the member initializers for `i' and
1820 `j' to match the declaration order of the members, emitting a
1821 warning to that effect. This warning is enabled by `-Wall'.
1823 The following `-W...' options are not affected by `-Wall'.
1825 `-Weffc++ (C++ only)'
1826 Warn about violations of the following style guidelines from Scott
1827 Meyers' `Effective C++' book:
1829 * Item 11: Define a copy constructor and an assignment
1830 operator for classes with dynamically allocated memory.
1832 * Item 12: Prefer initialization to assignment in constructors.
1834 * Item 14: Make destructors virtual in base classes.
1836 * Item 15: Have `operator=' return a reference to `*this'.
1838 * Item 23: Don't try to return a reference when you must
1842 Also warn about violations of the following style guidelines from
1843 Scott Meyers' `More Effective C++' book:
1845 * Item 6: Distinguish between prefix and postfix forms of
1846 increment and decrement operators.
1848 * Item 7: Never overload `&&', `||', or `,'.
1851 When selecting this option, be aware that the standard library
1852 headers do not obey all of these guidelines; use `grep -v' to
1853 filter out those warnings.
1855 `-Wno-deprecated (C++ only)'
1856 Do not warn about usage of deprecated features. *Note Deprecated
1859 `-Wstrict-null-sentinel (C++ only)'
1860 Warn also about the use of an uncasted `NULL' as sentinel. When
1861 compiling only with GCC this is a valid sentinel, as `NULL' is
1862 defined to `__null'. Although it is a null pointer constant not a
1863 null pointer, it is guaranteed to of the same size as a pointer.
1864 But this use is not portable across different compilers.
1866 `-Wno-non-template-friend (C++ only)'
1867 Disable warnings when non-templatized friend functions are declared
1868 within a template. Since the advent of explicit template
1869 specification support in G++, if the name of the friend is an
1870 unqualified-id (i.e., `friend foo(int)'), the C++ language
1871 specification demands that the friend declare or define an
1872 ordinary, nontemplate function. (Section 14.5.3). Before G++
1873 implemented explicit specification, unqualified-ids could be
1874 interpreted as a particular specialization of a templatized
1875 function. Because this non-conforming behavior is no longer the
1876 default behavior for G++, `-Wnon-template-friend' allows the
1877 compiler to check existing code for potential trouble spots and is
1878 on by default. This new compiler behavior can be turned off with
1879 `-Wno-non-template-friend' which keeps the conformant compiler code
1880 but disables the helpful warning.
1882 `-Wold-style-cast (C++ only)'
1883 Warn if an old-style (C-style) cast to a non-void type is used
1884 within a C++ program. The new-style casts (`dynamic_cast',
1885 `static_cast', `reinterpret_cast', and `const_cast') are less
1886 vulnerable to unintended effects and much easier to search for.
1888 `-Woverloaded-virtual (C++ only)'
1889 Warn when a function declaration hides virtual functions from a
1890 base class. For example, in:
1896 struct B: public A {
1900 the `A' class version of `f' is hidden in `B', and code like:
1905 will fail to compile.
1907 `-Wno-pmf-conversions (C++ only)'
1908 Disable the diagnostic for converting a bound pointer to member
1909 function to a plain pointer.
1911 `-Wsign-promo (C++ only)'
1912 Warn when overload resolution chooses a promotion from unsigned or
1913 enumerated type to a signed type, over a conversion to an unsigned
1914 type of the same size. Previous versions of G++ would try to
1915 preserve unsignedness, but the standard mandates the current
1920 A& operator = (int);
1929 In this example, G++ will synthesize a default `A& operator =
1930 (const A&);', while cfront will use the user-defined `operator ='.
1933 File: gcc.info, Node: Objective-C and Objective-C++ Dialect Options, Next: Language Independent Options, Prev: C++ Dialect Options, Up: Invoking GCC
1935 3.6 Options Controlling Objective-C and Objective-C++ Dialects
1936 ==============================================================
1938 (NOTE: This manual does not describe the Objective-C and Objective-C++
1939 languages themselves. See *Note Language Standards Supported by GCC:
1940 Standards, for references.)
1942 This section describes the command-line options that are only
1943 meaningful for Objective-C and Objective-C++ programs, but you can also
1944 use most of the language-independent GNU compiler options. For
1945 example, you might compile a file `some_class.m' like this:
1947 gcc -g -fgnu-runtime -O -c some_class.m
1949 In this example, `-fgnu-runtime' is an option meant only for
1950 Objective-C and Objective-C++ programs; you can use the other options
1951 with any language supported by GCC.
1953 Note that since Objective-C is an extension of the C language,
1954 Objective-C compilations may also use options specific to the C
1955 front-end (e.g., `-Wtraditional'). Similarly, Objective-C++
1956 compilations may use C++-specific options (e.g., `-Wabi').
1958 Here is a list of options that are _only_ for compiling Objective-C
1959 and Objective-C++ programs:
1961 `-fconstant-string-class=CLASS-NAME'
1962 Use CLASS-NAME as the name of the class to instantiate for each
1963 literal string specified with the syntax `@"..."'. The default
1964 class name is `NXConstantString' if the GNU runtime is being used,
1965 and `NSConstantString' if the NeXT runtime is being used (see
1966 below). The `-fconstant-cfstrings' option, if also present, will
1967 override the `-fconstant-string-class' setting and cause `@"..."'
1968 literals to be laid out as constant CoreFoundation strings.
1971 Generate object code compatible with the standard GNU Objective-C
1972 runtime. This is the default for most types of systems.
1975 Generate output compatible with the NeXT runtime. This is the
1976 default for NeXT-based systems, including Darwin and Mac OS X.
1977 The macro `__NEXT_RUNTIME__' is predefined if (and only if) this
1980 `-fno-nil-receivers'
1981 Assume that all Objective-C message dispatches (e.g., `[receiver
1982 message:arg]') in this translation unit ensure that the receiver
1983 is not `nil'. This allows for more efficient entry points in the
1984 runtime to be used. Currently, this option is only available in
1985 conjunction with the NeXT runtime on Mac OS X 10.3 and later.
1987 `-fobjc-call-cxx-cdtors'
1988 For each Objective-C class, check if any of its instance variables
1989 is a C++ object with a non-trivial default constructor. If so,
1990 synthesize a special `- (id) .cxx_construct' instance method that
1991 will run non-trivial default constructors on any such instance
1992 variables, in order, and then return `self'. Similarly, check if
1993 any instance variable is a C++ object with a non-trivial
1994 destructor, and if so, synthesize a special `- (void)
1995 .cxx_destruct' method that will run all such default destructors,
1998 The `- (id) .cxx_construct' and/or `- (void) .cxx_destruct' methods
1999 thusly generated will only operate on instance variables declared
2000 in the current Objective-C class, and not those inherited from
2001 superclasses. It is the responsibility of the Objective-C runtime
2002 to invoke all such methods in an object's inheritance hierarchy.
2003 The `- (id) .cxx_construct' methods will be invoked by the runtime
2004 immediately after a new object instance is allocated; the `-
2005 (void) .cxx_destruct' methods will be invoked immediately before
2006 the runtime deallocates an object instance.
2008 As of this writing, only the NeXT runtime on Mac OS X 10.4 and
2009 later has support for invoking the `- (id) .cxx_construct' and `-
2010 (void) .cxx_destruct' methods.
2012 `-fobjc-direct-dispatch'
2013 Allow fast jumps to the message dispatcher. On Darwin this is
2014 accomplished via the comm page.
2017 Enable syntactic support for structured exception handling in
2018 Objective-C, similar to what is offered by C++ and Java.
2019 Currently, this option is only available in conjunction with the
2020 NeXT runtime on Mac OS X 10.3 and later.
2027 @catch (AnObjCClass *exc) {
2034 @catch (AnotherClass *exc) {
2037 @catch (id allOthers) {
2046 The `@throw' statement may appear anywhere in an Objective-C or
2047 Objective-C++ program; when used inside of a `@catch' block, the
2048 `@throw' may appear without an argument (as shown above), in which
2049 case the object caught by the `@catch' will be rethrown.
2051 Note that only (pointers to) Objective-C objects may be thrown and
2052 caught using this scheme. When an object is thrown, it will be
2053 caught by the nearest `@catch' clause capable of handling objects
2054 of that type, analogously to how `catch' blocks work in C++ and
2055 Java. A `@catch(id ...)' clause (as shown above) may also be
2056 provided to catch any and all Objective-C exceptions not caught by
2057 previous `@catch' clauses (if any).
2059 The `@finally' clause, if present, will be executed upon exit from
2060 the immediately preceding `@try ... @catch' section. This will
2061 happen regardless of whether any exceptions are thrown, caught or
2062 rethrown inside the `@try ... @catch' section, analogously to the
2063 behavior of the `finally' clause in Java.
2065 There are several caveats to using the new exception mechanism:
2067 * Although currently designed to be binary compatible with
2068 `NS_HANDLER'-style idioms provided by the `NSException'
2069 class, the new exceptions can only be used on Mac OS X 10.3
2070 (Panther) and later systems, due to additional functionality
2071 needed in the (NeXT) Objective-C runtime.
2073 * As mentioned above, the new exceptions do not support handling
2074 types other than Objective-C objects. Furthermore, when
2075 used from Objective-C++, the Objective-C exception model does
2076 not interoperate with C++ exceptions at this time. This
2077 means you cannot `@throw' an exception from Objective-C and
2078 `catch' it in C++, or vice versa (i.e., `throw ... @catch').
2080 The `-fobjc-exceptions' switch also enables the use of
2081 synchronization blocks for thread-safe execution:
2083 @synchronized (ObjCClass *guard) {
2087 Upon entering the `@synchronized' block, a thread of execution
2088 shall first check whether a lock has been placed on the
2089 corresponding `guard' object by another thread. If it has, the
2090 current thread shall wait until the other thread relinquishes its
2091 lock. Once `guard' becomes available, the current thread will
2092 place its own lock on it, execute the code contained in the
2093 `@synchronized' block, and finally relinquish the lock (thereby
2094 making `guard' available to other threads).
2096 Unlike Java, Objective-C does not allow for entire methods to be
2097 marked `@synchronized'. Note that throwing exceptions out of
2098 `@synchronized' blocks is allowed, and will cause the guarding
2099 object to be unlocked properly.
2102 Enable garbage collection (GC) in Objective-C and Objective-C++
2105 `-freplace-objc-classes'
2106 Emit a special marker instructing `ld(1)' not to statically link in
2107 the resulting object file, and allow `dyld(1)' to load it in at
2108 run time instead. This is used in conjunction with the
2109 Fix-and-Continue debugging mode, where the object file in question
2110 may be recompiled and dynamically reloaded in the course of
2111 program execution, without the need to restart the program itself.
2112 Currently, Fix-and-Continue functionality is only available in
2113 conjunction with the NeXT runtime on Mac OS X 10.3 and later.
2116 When compiling for the NeXT runtime, the compiler ordinarily
2117 replaces calls to `objc_getClass("...")' (when the name of the
2118 class is known at compile time) with static class references that
2119 get initialized at load time, which improves run-time performance.
2120 Specifying the `-fzero-link' flag suppresses this behavior and
2121 causes calls to `objc_getClass("...")' to be retained. This is
2122 useful in Zero-Link debugging mode, since it allows for individual
2123 class implementations to be modified during program execution.
2126 Dump interface declarations for all classes seen in the source
2127 file to a file named `SOURCENAME.decl'.
2129 `-Wassign-intercept'
2130 Warn whenever an Objective-C assignment is being intercepted by the
2134 If a class is declared to implement a protocol, a warning is
2135 issued for every method in the protocol that is not implemented by
2136 the class. The default behavior is to issue a warning for every
2137 method not explicitly implemented in the class, even if a method
2138 implementation is inherited from the superclass. If you use the
2139 `-Wno-protocol' option, then methods inherited from the superclass
2140 are considered to be implemented, and no warning is issued for
2144 Warn if multiple methods of different types for the same selector
2145 are found during compilation. The check is performed on the list
2146 of methods in the final stage of compilation. Additionally, a
2147 check is performed for each selector appearing in a
2148 `@selector(...)' expression, and a corresponding method for that
2149 selector has been found during compilation. Because these checks
2150 scan the method table only at the end of compilation, these
2151 warnings are not produced if the final stage of compilation is not
2152 reached, for example because an error is found during compilation,
2153 or because the `-fsyntax-only' option is being used.
2155 `-Wstrict-selector-match'
2156 Warn if multiple methods with differing argument and/or return
2157 types are found for a given selector when attempting to send a
2158 message using this selector to a receiver of type `id' or `Class'.
2159 When this flag is off (which is the default behavior), the
2160 compiler will omit such warnings if any differences found are
2161 confined to types which share the same size and alignment.
2163 `-Wundeclared-selector'
2164 Warn if a `@selector(...)' expression referring to an undeclared
2165 selector is found. A selector is considered undeclared if no
2166 method with that name has been declared before the
2167 `@selector(...)' expression, either explicitly in an `@interface'
2168 or `@protocol' declaration, or implicitly in an `@implementation'
2169 section. This option always performs its checks as soon as a
2170 `@selector(...)' expression is found, while `-Wselector' only
2171 performs its checks in the final stage of compilation. This also
2172 enforces the coding style convention that methods and selectors
2173 must be declared before being used.
2175 `-print-objc-runtime-info'
2176 Generate C header describing the largest structure that is passed
2181 File: gcc.info, Node: Language Independent Options, Next: Warning Options, Prev: Objective-C and Objective-C++ Dialect Options, Up: Invoking GCC
2183 3.7 Options to Control Diagnostic Messages Formatting
2184 =====================================================
2186 Traditionally, diagnostic messages have been formatted irrespective of
2187 the output device's aspect (e.g. its width, ...). The options described
2188 below can be used to control the diagnostic messages formatting
2189 algorithm, e.g. how many characters per line, how often source location
2190 information should be reported. Right now, only the C++ front end can
2191 honor these options. However it is expected, in the near future, that
2192 the remaining front ends would be able to digest them correctly.
2194 `-fmessage-length=N'
2195 Try to format error messages so that they fit on lines of about N
2196 characters. The default is 72 characters for `g++' and 0 for the
2197 rest of the front ends supported by GCC. If N is zero, then no
2198 line-wrapping will be done; each error message will appear on a
2201 `-fdiagnostics-show-location=once'
2202 Only meaningful in line-wrapping mode. Instructs the diagnostic
2203 messages reporter to emit _once_ source location information; that
2204 is, in case the message is too long to fit on a single physical
2205 line and has to be wrapped, the source location won't be emitted
2206 (as prefix) again, over and over, in subsequent continuation
2207 lines. This is the default behavior.
2209 `-fdiagnostics-show-location=every-line'
2210 Only meaningful in line-wrapping mode. Instructs the diagnostic
2211 messages reporter to emit the same source location information (as
2212 prefix) for physical lines that result from the process of breaking
2213 a message which is too long to fit on a single line.
2215 `-fdiagnostics-show-options'
2216 This option instructs the diagnostic machinery to add text to each
2217 diagnostic emitted, which indicates which command line option
2218 directly controls that diagnostic, when such an option is known to
2219 the diagnostic machinery.
2223 File: gcc.info, Node: Warning Options, Next: Debugging Options, Prev: Language Independent Options, Up: Invoking GCC
2225 3.8 Options to Request or Suppress Warnings
2226 ===========================================
2228 Warnings are diagnostic messages that report constructions which are
2229 not inherently erroneous but which are risky or suggest there may have
2232 You can request many specific warnings with options beginning `-W',
2233 for example `-Wimplicit' to request warnings on implicit declarations.
2234 Each of these specific warning options also has a negative form
2235 beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
2236 This manual lists only one of the two forms, whichever is not the
2239 The following options control the amount and kinds of warnings produced
2240 by GCC; for further, language-specific options also refer to *Note C++
2241 Dialect Options:: and *Note Objective-C and Objective-C++ Dialect
2245 Check the code for syntax errors, but don't do anything beyond
2249 Issue all the warnings demanded by strict ISO C and ISO C++;
2250 reject all programs that use forbidden extensions, and some other
2251 programs that do not follow ISO C and ISO C++. For ISO C, follows
2252 the version of the ISO C standard specified by any `-std' option
2255 Valid ISO C and ISO C++ programs should compile properly with or
2256 without this option (though a rare few will require `-ansi' or a
2257 `-std' option specifying the required version of ISO C). However,
2258 without this option, certain GNU extensions and traditional C and
2259 C++ features are supported as well. With this option, they are
2262 `-pedantic' does not cause warning messages for use of the
2263 alternate keywords whose names begin and end with `__'. Pedantic
2264 warnings are also disabled in the expression that follows
2265 `__extension__'. However, only system header files should use
2266 these escape routes; application programs should avoid them.
2267 *Note Alternate Keywords::.
2269 Some users try to use `-pedantic' to check programs for strict ISO
2270 C conformance. They soon find that it does not do quite what they
2271 want: it finds some non-ISO practices, but not all--only those for
2272 which ISO C _requires_ a diagnostic, and some others for which
2273 diagnostics have been added.
2275 A feature to report any failure to conform to ISO C might be
2276 useful in some instances, but would require considerable
2277 additional work and would be quite different from `-pedantic'. We
2278 don't have plans to support such a feature in the near future.
2280 Where the standard specified with `-std' represents a GNU extended
2281 dialect of C, such as `gnu89' or `gnu99', there is a corresponding
2282 "base standard", the version of ISO C on which the GNU extended
2283 dialect is based. Warnings from `-pedantic' are given where they
2284 are required by the base standard. (It would not make sense for
2285 such warnings to be given only for features not in the specified
2286 GNU C dialect, since by definition the GNU dialects of C include
2287 all features the compiler supports with the given option, and
2288 there would be nothing to warn about.)
2291 Like `-pedantic', except that errors are produced rather than
2295 Inhibit all warning messages.
2298 Inhibit warning messages about the use of `#import'.
2301 Warn if an array subscript has type `char'. This is a common cause
2302 of error, as programmers often forget that this type is signed on
2303 some machines. This warning is enabled by `-Wall'.
2306 Warn whenever a comment-start sequence `/*' appears in a `/*'
2307 comment, or whenever a Backslash-Newline appears in a `//' comment.
2308 This warning is enabled by `-Wall'.
2311 This option causes the compiler to abort compilation on the first
2312 error occurred rather than trying to keep going and printing
2313 further error messages.
2316 Check calls to `printf' and `scanf', etc., to make sure that the
2317 arguments supplied have types appropriate to the format string
2318 specified, and that the conversions specified in the format string
2319 make sense. This includes standard functions, and others
2320 specified by format attributes (*note Function Attributes::), in
2321 the `printf', `scanf', `strftime' and `strfmon' (an X/Open
2322 extension, not in the C standard) families (or other
2323 target-specific families). Which functions are checked without
2324 format attributes having been specified depends on the standard
2325 version selected, and such checks of functions without the
2326 attribute specified are disabled by `-ffreestanding' or
2329 The formats are checked against the format features supported by
2330 GNU libc version 2.2. These include all ISO C90 and C99 features,
2331 as well as features from the Single Unix Specification and some
2332 BSD and GNU extensions. Other library implementations may not
2333 support all these features; GCC does not support warning about
2334 features that go beyond a particular library's limitations.
2335 However, if `-pedantic' is used with `-Wformat', warnings will be
2336 given about format features not in the selected standard version
2337 (but not for `strfmon' formats, since those are not in any version
2338 of the C standard). *Note Options Controlling C Dialect: C
2341 Since `-Wformat' also checks for null format arguments for several
2342 functions, `-Wformat' also implies `-Wnonnull'.
2344 `-Wformat' is included in `-Wall'. For more control over some
2345 aspects of format checking, the options `-Wformat-y2k',
2346 `-Wno-format-extra-args', `-Wno-format-zero-length',
2347 `-Wformat-nonliteral', `-Wformat-security', and `-Wformat=2' are
2348 available, but are not included in `-Wall'.
2351 If `-Wformat' is specified, also warn about `strftime' formats
2352 which may yield only a two-digit year.
2354 `-Wno-format-extra-args'
2355 If `-Wformat' is specified, do not warn about excess arguments to a
2356 `printf' or `scanf' format function. The C standard specifies
2357 that such arguments are ignored.
2359 Where the unused arguments lie between used arguments that are
2360 specified with `$' operand number specifications, normally
2361 warnings are still given, since the implementation could not know
2362 what type to pass to `va_arg' to skip the unused arguments.
2363 However, in the case of `scanf' formats, this option will suppress
2364 the warning if the unused arguments are all pointers, since the
2365 Single Unix Specification says that such unused arguments are
2368 `-Wno-format-zero-length'
2369 If `-Wformat' is specified, do not warn about zero-length formats.
2370 The C standard specifies that zero-length formats are allowed.
2372 `-Wformat-nonliteral'
2373 If `-Wformat' is specified, also warn if the format string is not a
2374 string literal and so cannot be checked, unless the format function
2375 takes its format arguments as a `va_list'.
2378 If `-Wformat' is specified, also warn about uses of format
2379 functions that represent possible security problems. At present,
2380 this warns about calls to `printf' and `scanf' functions where the
2381 format string is not a string literal and there are no format
2382 arguments, as in `printf (foo);'. This may be a security hole if
2383 the format string came from untrusted input and contains `%n'.
2384 (This is currently a subset of what `-Wformat-nonliteral' warns
2385 about, but in future warnings may be added to `-Wformat-security'
2386 that are not included in `-Wformat-nonliteral'.)
2389 Enable `-Wformat' plus format checks not included in `-Wformat'.
2390 Currently equivalent to `-Wformat -Wformat-nonliteral
2391 -Wformat-security -Wformat-y2k'.
2394 Warn about passing a null pointer for arguments marked as
2395 requiring a non-null value by the `nonnull' function attribute.
2397 `-Wnonnull' is included in `-Wall' and `-Wformat'. It can be
2398 disabled with the `-Wno-nonnull' option.
2400 `-Winit-self (C, C++, Objective-C and Objective-C++ only)'
2401 Warn about uninitialized variables which are initialized with
2402 themselves. Note this option can only be used with the
2403 `-Wuninitialized' option, which in turn only works with `-O1' and
2406 For example, GCC will warn about `i' being uninitialized in the
2407 following snippet only when `-Winit-self' has been specified:
2415 Warn when a declaration does not specify a type. This warning is
2418 `-Wimplicit-function-declaration'
2419 `-Werror-implicit-function-declaration'
2420 Give a warning (or error) whenever a function is used before being
2421 declared. The form `-Wno-error-implicit-function-declaration' is
2422 not supported. This warning is enabled by `-Wall' (as a warning,
2426 Same as `-Wimplicit-int' and `-Wimplicit-function-declaration'.
2427 This warning is enabled by `-Wall'.
2430 Warn if the type of `main' is suspicious. `main' should be a
2431 function with external linkage, returning int, taking either zero
2432 arguments, two, or three arguments of appropriate types. This
2433 warning is enabled by `-Wall'.
2436 Warn if an aggregate or union initializer is not fully bracketed.
2437 In the following example, the initializer for `a' is not fully
2438 bracketed, but that for `b' is fully bracketed.
2440 int a[2][2] = { 0, 1, 2, 3 };
2441 int b[2][2] = { { 0, 1 }, { 2, 3 } };
2443 This warning is enabled by `-Wall'.
2445 `-Wmissing-include-dirs (C, C++, Objective-C and Objective-C++ only)'
2446 Warn if a user-supplied include directory does not exist.
2449 Warn if parentheses are omitted in certain contexts, such as when
2450 there is an assignment in a context where a truth value is
2451 expected, or when operators are nested whose precedence people
2452 often get confused about. Only the warning for an assignment used
2453 as a truth value is supported when compiling C++; the other
2454 warnings are only supported when compiling C.
2456 Also warn if a comparison like `x<=y<=z' appears; this is
2457 equivalent to `(x<=y ? 1 : 0) <= z', which is a different
2458 interpretation from that of ordinary mathematical notation.
2460 Also warn about constructions where there may be confusion to which
2461 `if' statement an `else' branch belongs. Here is an example of
2472 In C, every `else' branch belongs to the innermost possible `if'
2473 statement, which in this example is `if (b)'. This is often not
2474 what the programmer expected, as illustrated in the above example
2475 by indentation the programmer chose. When there is the potential
2476 for this confusion, GCC will issue a warning when this flag is
2477 specified. To eliminate the warning, add explicit braces around
2478 the innermost `if' statement so there is no way the `else' could
2479 belong to the enclosing `if'. The resulting code would look like
2492 This warning is enabled by `-Wall'.
2495 Warn about code that may have undefined semantics because of
2496 violations of sequence point rules in the C standard.
2498 The C standard defines the order in which expressions in a C
2499 program are evaluated in terms of "sequence points", which
2500 represent a partial ordering between the execution of parts of the
2501 program: those executed before the sequence point, and those
2502 executed after it. These occur after the evaluation of a full
2503 expression (one which is not part of a larger expression), after
2504 the evaluation of the first operand of a `&&', `||', `? :' or `,'
2505 (comma) operator, before a function is called (but after the
2506 evaluation of its arguments and the expression denoting the called
2507 function), and in certain other places. Other than as expressed
2508 by the sequence point rules, the order of evaluation of
2509 subexpressions of an expression is not specified. All these rules
2510 describe only a partial order rather than a total order, since,
2511 for example, if two functions are called within one expression
2512 with no sequence point between them, the order in which the
2513 functions are called is not specified. However, the standards
2514 committee have ruled that function calls do not overlap.
2516 It is not specified when between sequence points modifications to
2517 the values of objects take effect. Programs whose behavior
2518 depends on this have undefined behavior; the C standard specifies
2519 that "Between the previous and next sequence point an object shall
2520 have its stored value modified at most once by the evaluation of
2521 an expression. Furthermore, the prior value shall be read only to
2522 determine the value to be stored.". If a program breaks these
2523 rules, the results on any particular implementation are entirely
2526 Examples of code with undefined behavior are `a = a++;', `a[n] =
2527 b[n++]' and `a[i++] = i;'. Some more complicated cases are not
2528 diagnosed by this option, and it may give an occasional false
2529 positive result, but in general it has been found fairly effective
2530 at detecting this sort of problem in programs.
2532 The present implementation of this option only works for C
2533 programs. A future implementation may also work for C++ programs.
2535 The C standard is worded confusingly, therefore there is some
2536 debate over the precise meaning of the sequence point rules in
2537 subtle cases. Links to discussions of the problem, including
2538 proposed formal definitions, may be found on the GCC readings
2539 page, at `http://gcc.gnu.org/readings.html'.
2541 This warning is enabled by `-Wall'.
2544 Warn whenever a function is defined with a return-type that
2545 defaults to `int'. Also warn about any `return' statement with no
2546 return-value in a function whose return-type is not `void'.
2548 For C, also warn if the return type of a function has a type
2549 qualifier such as `const'. Such a type qualifier has no effect,
2550 since the value returned by a function is not an lvalue. ISO C
2551 prohibits qualified `void' return types on function definitions,
2552 so such return types always receive a warning even without this
2555 For C++, a function without return type always produces a
2556 diagnostic message, even when `-Wno-return-type' is specified.
2557 The only exceptions are `main' and functions defined in system
2560 This warning is enabled by `-Wall'.
2563 Warn whenever a `switch' statement has an index of enumerated type
2564 and lacks a `case' for one or more of the named codes of that
2565 enumeration. (The presence of a `default' label prevents this
2566 warning.) `case' labels outside the enumeration range also
2567 provoke warnings when this option is used. This warning is
2571 Warn whenever a `switch' statement does not have a `default' case.
2574 Warn whenever a `switch' statement has an index of enumerated type
2575 and lacks a `case' for one or more of the named codes of that
2576 enumeration. `case' labels outside the enumeration range also
2577 provoke warnings when this option is used.
2580 Warn if any trigraphs are encountered that might change the
2581 meaning of the program (trigraphs within comments are not warned
2582 about). This warning is enabled by `-Wall'.
2585 Warn whenever a static function is declared but not defined or a
2586 non-inline static function is unused. This warning is enabled by
2590 Warn whenever a label is declared but not used. This warning is
2593 To suppress this warning use the `unused' attribute (*note
2594 Variable Attributes::).
2596 `-Wunused-parameter'
2597 Warn whenever a function parameter is unused aside from its
2600 To suppress this warning use the `unused' attribute (*note
2601 Variable Attributes::).
2604 Warn whenever a local variable or non-constant static variable is
2605 unused aside from its declaration This warning is enabled by
2608 To suppress this warning use the `unused' attribute (*note
2609 Variable Attributes::).
2612 Warn whenever a statement computes a result that is explicitly not
2613 used. This warning is enabled by `-Wall'.
2615 To suppress this warning cast the expression to `void'.
2618 All the above `-Wunused' options combined.
2620 In order to get a warning about an unused function parameter, you
2621 must either specify `-Wextra -Wunused' (note that `-Wall' implies
2622 `-Wunused'), or separately specify `-Wunused-parameter'.
2625 Warn if an automatic variable is used without first being
2626 initialized or if a variable may be clobbered by a `setjmp' call.
2628 These warnings are possible only in optimizing compilation,
2629 because they require data flow information that is computed only
2630 when optimizing. If you don't specify `-O', you simply won't get
2633 If you want to warn about code which uses the uninitialized value
2634 of the variable in its own initializer, use the `-Winit-self'
2637 These warnings occur for individual uninitialized or clobbered
2638 elements of structure, union or array variables as well as for
2639 variables which are uninitialized or clobbered as a whole. They do
2640 not occur for variables or elements declared `volatile'. Because
2641 these warnings depend on optimization, the exact variables or
2642 elements for which there are warnings will depend on the precise
2643 optimization options and version of GCC used.
2645 Note that there may be no warning about a variable that is used
2646 only to compute a value that itself is never used, because such
2647 computations may be deleted by data flow analysis before the
2648 warnings are printed.
2650 These warnings are made optional because GCC is not smart enough
2651 to see all the reasons why the code might be correct despite
2652 appearing to have an error. Here is one example of how this can
2668 If the value of `y' is always 1, 2 or 3, then `x' is always
2669 initialized, but GCC doesn't know this. Here is another common
2674 if (change_y) save_y = y, y = new_y;
2676 if (change_y) y = save_y;
2679 This has no bug because `save_y' is used only if it is set.
2681 This option also warns when a non-volatile automatic variable
2682 might be changed by a call to `longjmp'. These warnings as well
2683 are possible only in optimizing compilation.
2685 The compiler sees only the calls to `setjmp'. It cannot know
2686 where `longjmp' will be called; in fact, a signal handler could
2687 call it at any point in the code. As a result, you may get a
2688 warning even when there is in fact no problem because `longjmp'
2689 cannot in fact be called at the place which would cause a problem.
2691 Some spurious warnings can be avoided if you declare all the
2692 functions you use that never return as `noreturn'. *Note Function
2695 This warning is enabled by `-Wall'.
2698 Warn when a #pragma directive is encountered which is not
2699 understood by GCC. If this command line option is used, warnings
2700 will even be issued for unknown pragmas in system header files.
2701 This is not the case if the warnings were only enabled by the
2702 `-Wall' command line option.
2705 Do not warn about misuses of pragmas, such as incorrect parameters,
2706 invalid syntax, or conflicts between pragmas. See also
2707 `-Wunknown-pragmas'.
2710 This option is only active when `-fstrict-aliasing' is active. It
2711 warns about code which might break the strict aliasing rules that
2712 the compiler is using for optimization. The warning does not
2713 catch all cases, but does attempt to catch the more common
2714 pitfalls. It is included in `-Wall'.
2716 `-Wstrict-aliasing=2'
2717 This option is only active when `-fstrict-aliasing' is active. It
2718 warns about code which might break the strict aliasing rules that
2719 the compiler is using for optimization. This warning catches more
2720 cases than `-Wstrict-aliasing', but it will also give a warning
2721 for some ambiguous cases that are safe.
2724 All of the above `-W' options combined. This enables all the
2725 warnings about constructions that some users consider
2726 questionable, and that are easy to avoid (or modify to prevent the
2727 warning), even in conjunction with macros. This also enables some
2728 language-specific warnings described in *Note C++ Dialect
2729 Options:: and *Note Objective-C and Objective-C++ Dialect
2732 The following `-W...' options are not implied by `-Wall'. Some of
2733 them warn about constructions that users generally do not consider
2734 questionable, but which occasionally you might wish to check for;
2735 others warn about constructions that are necessary or hard to avoid in
2736 some cases, and there is no simple way to modify the code to suppress
2740 (This option used to be called `-W'. The older name is still
2741 supported, but the newer name is more descriptive.) Print extra
2742 warning messages for these events:
2744 * A function can return either with or without a value.
2745 (Falling off the end of the function body is considered
2746 returning without a value.) For example, this function would
2747 evoke such a warning:
2755 * An expression-statement or the left-hand side of a comma
2756 expression contains no side effects. To suppress the
2757 warning, cast the unused expression to void. For example, an
2758 expression such as `x[i,j]' will cause a warning, but
2759 `x[(void)i,j]' will not.
2761 * An unsigned value is compared against zero with `<' or `>='.
2763 * Storage-class specifiers like `static' are not the first
2764 things in a declaration. According to the C Standard, this
2765 usage is obsolescent.
2767 * If `-Wall' or `-Wunused' is also specified, warn about unused
2770 * A comparison between signed and unsigned values could produce
2771 an incorrect result when the signed value is converted to
2772 unsigned. (But don't warn if `-Wno-sign-compare' is also
2775 * An aggregate has an initializer which does not initialize all
2776 members. This warning can be independently controlled by
2777 `-Wmissing-field-initializers'.
2779 * A function parameter is declared without a type specifier in
2780 K&R-style functions:
2784 * An empty body occurs in an `if' or `else' statement.
2786 * A pointer is compared against integer zero with `<', `<=',
2789 * A variable might be changed by `longjmp' or `vfork'.
2791 * Any of several floating-point events that often indicate
2792 errors, such as overflow, underflow, loss of precision, etc.
2794 * (C++ only) An enumerator and a non-enumerator both appear in
2795 a conditional expression.
2797 * (C++ only) A non-static reference or non-static `const'
2798 member appears in a class without constructors.
2800 * (C++ only) Ambiguous virtual bases.
2802 * (C++ only) Subscripting an array which has been declared
2805 * (C++ only) Taking the address of a variable which has been
2806 declared `register'.
2808 * (C++ only) A base class is not initialized in a derived
2809 class' copy constructor.
2812 Do not warn about compile-time integer division by zero. Floating
2813 point division by zero is not warned about, as it can be a
2814 legitimate way of obtaining infinities and NaNs.
2817 Print warning messages for constructs found in system header files.
2818 Warnings from system headers are normally suppressed, on the
2819 assumption that they usually do not indicate real problems and
2820 would only make the compiler output harder to read. Using this
2821 command line option tells GCC to emit warnings from system headers
2822 as if they occurred in user code. However, note that using
2823 `-Wall' in conjunction with this option will _not_ warn about
2824 unknown pragmas in system headers--for that, `-Wunknown-pragmas'
2828 Warn if floating point values are used in equality comparisons.
2830 The idea behind this is that sometimes it is convenient (for the
2831 programmer) to consider floating-point values as approximations to
2832 infinitely precise real numbers. If you are doing this, then you
2833 need to compute (by analyzing the code, or in some other way) the
2834 maximum or likely maximum error that the computation introduces,
2835 and allow for it when performing comparisons (and when producing
2836 output, but that's a different problem). In particular, instead
2837 of testing for equality, you would check to see whether the two
2838 values have ranges that overlap; and this is done with the
2839 relational operators, so equality comparisons are probably
2842 `-Wtraditional (C only)'
2843 Warn about certain constructs that behave differently in
2844 traditional and ISO C. Also warn about ISO C constructs that have
2845 no traditional C equivalent, and/or problematic constructs which
2848 * Macro parameters that appear within string literals in the
2849 macro body. In traditional C macro replacement takes place
2850 within string literals, but does not in ISO C.
2852 * In traditional C, some preprocessor directives did not exist.
2853 Traditional preprocessors would only consider a line to be a
2854 directive if the `#' appeared in column 1 on the line.
2855 Therefore `-Wtraditional' warns about directives that
2856 traditional C understands but would ignore because the `#'
2857 does not appear as the first character on the line. It also
2858 suggests you hide directives like `#pragma' not understood by
2859 traditional C by indenting them. Some traditional
2860 implementations would not recognize `#elif', so it suggests
2861 avoiding it altogether.
2863 * A function-like macro that appears without arguments.
2865 * The unary plus operator.
2867 * The `U' integer constant suffix, or the `F' or `L' floating
2868 point constant suffixes. (Traditional C does support the `L'
2869 suffix on integer constants.) Note, these suffixes appear in
2870 macros defined in the system headers of most modern systems,
2871 e.g. the `_MIN'/`_MAX' macros in `<limits.h>'. Use of these
2872 macros in user code might normally lead to spurious warnings,
2873 however GCC's integrated preprocessor has enough context to
2874 avoid warning in these cases.
2876 * A function declared external in one block and then used after
2877 the end of the block.
2879 * A `switch' statement has an operand of type `long'.
2881 * A non-`static' function declaration follows a `static' one.
2882 This construct is not accepted by some traditional C
2885 * The ISO type of an integer constant has a different width or
2886 signedness from its traditional type. This warning is only
2887 issued if the base of the constant is ten. I.e. hexadecimal
2888 or octal values, which typically represent bit patterns, are
2891 * Usage of ISO string concatenation is detected.
2893 * Initialization of automatic aggregates.
2895 * Identifier conflicts with labels. Traditional C lacks a
2896 separate namespace for labels.
2898 * Initialization of unions. If the initializer is zero, the
2899 warning is omitted. This is done under the assumption that
2900 the zero initializer in user code appears conditioned on e.g.
2901 `__STDC__' to avoid missing initializer warnings and relies
2902 on default initialization to zero in the traditional C case.
2904 * Conversions by prototypes between fixed/floating point values
2905 and vice versa. The absence of these prototypes when
2906 compiling with traditional C would cause serious problems.
2907 This is a subset of the possible conversion warnings, for the
2908 full set use `-Wconversion'.
2910 * Use of ISO C style function definitions. This warning
2911 intentionally is _not_ issued for prototype declarations or
2912 variadic functions because these ISO C features will appear
2913 in your code when using libiberty's traditional C
2914 compatibility macros, `PARAMS' and `VPARAMS'. This warning
2915 is also bypassed for nested functions because that feature is
2916 already a GCC extension and thus not relevant to traditional
2919 `-Wdeclaration-after-statement (C only)'
2920 Warn when a declaration is found after a statement in a block.
2921 This construct, known from C++, was introduced with ISO C99 and is
2922 by default allowed in GCC. It is not supported by ISO C90 and was
2923 not supported by GCC versions before GCC 3.0. *Note Mixed
2927 Warn if an undefined identifier is evaluated in an `#if' directive.
2930 Do not warn whenever an `#else' or an `#endif' are followed by
2934 Warn whenever a local variable shadows another local variable,
2935 parameter or global variable or whenever a built-in function is
2939 Warn whenever an object of larger than LEN bytes is defined.
2941 `-Wunsafe-loop-optimizations'
2942 Warn if the loop cannot be optimized because the compiler could not
2943 assume anything on the bounds of the loop indices. With
2944 `-funsafe-loop-optimizations' warn if the compiler made such
2948 Warn about anything that depends on the "size of" a function type
2949 or of `void'. GNU C assigns these types a size of 1, for
2950 convenience in calculations with `void *' pointers and pointers to
2953 `-Wbad-function-cast (C only)'
2954 Warn whenever a function call is cast to a non-matching type. For
2955 example, warn if `int malloc()' is cast to `anything *'.
2958 Warn about ISO C constructs that are outside of the common subset
2959 of ISO C and ISO C++, e.g. request for implicit conversion from
2960 `void *' to a pointer to non-`void' type.
2963 Warn whenever a pointer is cast so as to remove a type qualifier
2964 from the target type. For example, warn if a `const char *' is
2965 cast to an ordinary `char *'.
2968 Warn whenever a pointer is cast such that the required alignment
2969 of the target is increased. For example, warn if a `char *' is
2970 cast to an `int *' on machines where integers can only be accessed
2971 at two- or four-byte boundaries.
2974 When compiling C, give string constants the type `const
2975 char[LENGTH]' so that copying the address of one into a
2976 non-`const' `char *' pointer will get a warning; when compiling
2977 C++, warn about the deprecated conversion from string constants to
2978 `char *'. These warnings will help you find at compile time code
2979 that can try to write into a string constant, but only if you have
2980 been very careful about using `const' in declarations and
2981 prototypes. Otherwise, it will just be a nuisance; this is why we
2982 did not make `-Wall' request these warnings.
2985 Warn if a prototype causes a type conversion that is different
2986 from what would happen to the same argument in the absence of a
2987 prototype. This includes conversions of fixed point to floating
2988 and vice versa, and conversions changing the width or signedness
2989 of a fixed point argument except when the same as the default
2992 Also, warn if a negative integer constant expression is implicitly
2993 converted to an unsigned type. For example, warn about the
2994 assignment `x = -1' if `x' is unsigned. But do not warn about
2995 explicit casts like `(unsigned) -1'.
2998 Warn when a comparison between signed and unsigned values could
2999 produce an incorrect result when the signed value is converted to
3000 unsigned. This warning is also enabled by `-Wextra'; to get the
3001 other warnings of `-Wextra' without this warning, use `-Wextra
3004 `-Waggregate-return'
3005 Warn if any functions that return structures or unions are defined
3006 or called. (In languages where you can return an array, this also
3010 Do not warn if an unexpected `__attribute__' is used, such as
3011 unrecognized attributes, function attributes applied to variables,
3012 etc. This will not stop errors for incorrect use of supported
3015 `-Wstrict-prototypes (C only)'
3016 Warn if a function is declared or defined without specifying the
3017 argument types. (An old-style function definition is permitted
3018 without a warning if preceded by a declaration which specifies the
3021 `-Wold-style-definition (C only)'
3022 Warn if an old-style function definition is used. A warning is
3023 given even if there is a previous prototype.
3025 `-Wmissing-prototypes (C only)'
3026 Warn if a global function is defined without a previous prototype
3027 declaration. This warning is issued even if the definition itself
3028 provides a prototype. The aim is to detect global functions that
3029 fail to be declared in header files.
3031 `-Wmissing-declarations (C only)'
3032 Warn if a global function is defined without a previous
3033 declaration. Do so even if the definition itself provides a
3034 prototype. Use this option to detect global functions that are
3035 not declared in header files.
3037 `-Wmissing-field-initializers'
3038 Warn if a structure's initializer has some fields missing. For
3039 example, the following code would cause such a warning, because
3040 `x.h' is implicitly zero:
3042 struct s { int f, g, h; };
3043 struct s x = { 3, 4 };
3045 This option does not warn about designated initializers, so the
3046 following modification would not trigger a warning:
3048 struct s { int f, g, h; };
3049 struct s x = { .f = 3, .g = 4 };
3051 This warning is included in `-Wextra'. To get other `-Wextra'
3052 warnings without this one, use `-Wextra
3053 -Wno-missing-field-initializers'.
3055 `-Wmissing-noreturn'
3056 Warn about functions which might be candidates for attribute
3057 `noreturn'. Note these are only possible candidates, not absolute
3058 ones. Care should be taken to manually verify functions actually
3059 do not ever return before adding the `noreturn' attribute,
3060 otherwise subtle code generation bugs could be introduced. You
3061 will not get a warning for `main' in hosted C environments.
3063 `-Wmissing-format-attribute'
3064 Warn about function pointers which might be candidates for `format'
3065 attributes. Note these are only possible candidates, not absolute
3066 ones. GCC will guess that function pointers with `format'
3067 attributes that are used in assignment, initialization, parameter
3068 passing or return statements should have a corresponding `format'
3069 attribute in the resulting type. I.e. the left-hand side of the
3070 assignment or initialization, the type of the parameter variable,
3071 or the return type of the containing function respectively should
3072 also have a `format' attribute to avoid the warning.
3074 GCC will also warn about function definitions which might be
3075 candidates for `format' attributes. Again, these are only
3076 possible candidates. GCC will guess that `format' attributes
3077 might be appropriate for any function that calls a function like
3078 `vprintf' or `vscanf', but this might not always be the case, and
3079 some functions for which `format' attributes are appropriate may
3083 Do not warn if a multicharacter constant (`'FOOF'') is used.
3084 Usually they indicate a typo in the user's code, as they have
3085 implementation-defined values, and should not be used in portable
3088 `-Wnormalized=<none|id|nfc|nfkc>'
3089 In ISO C and ISO C++, two identifiers are different if they are
3090 different sequences of characters. However, sometimes when
3091 characters outside the basic ASCII character set are used, you can
3092 have two different character sequences that look the same. To
3093 avoid confusion, the ISO 10646 standard sets out some
3094 "normalization rules" which when applied ensure that two sequences
3095 that look the same are turned into the same sequence. GCC can
3096 warn you if you are using identifiers which have not been
3097 normalized; this option controls that warning.
3099 There are four levels of warning that GCC supports. The default is
3100 `-Wnormalized=nfc', which warns about any identifier which is not
3101 in the ISO 10646 "C" normalized form, "NFC". NFC is the
3102 recommended form for most uses.
3104 Unfortunately, there are some characters which ISO C and ISO C++
3105 allow in identifiers that when turned into NFC aren't allowable as
3106 identifiers. That is, there's no way to use these symbols in
3107 portable ISO C or C++ and have all your identifiers in NFC.
3108 `-Wnormalized=id' suppresses the warning for these characters. It
3109 is hoped that future versions of the standards involved will
3110 correct this, which is why this option is not the default.
3112 You can switch the warning off for all characters by writing
3113 `-Wnormalized=none'. You would only want to do this if you were
3114 using some other normalization scheme (like "D"), because
3115 otherwise you can easily create bugs that are literally impossible
3118 Some characters in ISO 10646 have distinct meanings but look
3119 identical in some fonts or display methodologies, especially once
3120 formatting has been applied. For instance `\u207F', "SUPERSCRIPT
3121 LATIN SMALL LETTER N", will display just like a regular `n' which
3122 has been placed in a superscript. ISO 10646 defines the "NFKC"
3123 normalisation scheme to convert all these into a standard form as
3124 well, and GCC will warn if your code is not in NFKC if you use
3125 `-Wnormalized=nfkc'. This warning is comparable to warning about
3126 every identifier that contains the letter O because it might be
3127 confused with the digit 0, and so is not the default, but may be
3128 useful as a local coding convention if the programming environment
3129 is unable to be fixed to display these characters distinctly.
3131 `-Wno-deprecated-declarations'
3132 Do not warn about uses of functions, variables, and types marked as
3133 deprecated by using the `deprecated' attribute. (*note Function
3134 Attributes::, *note Variable Attributes::, *note Type
3138 Warn if a structure is given the packed attribute, but the packed
3139 attribute has no effect on the layout or size of the structure.
3140 Such structures may be mis-aligned for little benefit. For
3141 instance, in this code, the variable `f.x' in `struct bar' will be
3142 misaligned even though `struct bar' does not itself have the
3148 } __attribute__((packed));
3155 Warn if padding is included in a structure, either to align an
3156 element of the structure or to align the whole structure.
3157 Sometimes when this happens it is possible to rearrange the fields
3158 of the structure to reduce the padding and so make the structure
3162 Warn if anything is declared more than once in the same scope,
3163 even in cases where multiple declaration is valid and changes
3166 `-Wnested-externs (C only)'
3167 Warn if an `extern' declaration is encountered within a function.
3169 `-Wunreachable-code'
3170 Warn if the compiler detects that code will never be executed.
3172 This option is intended to warn when the compiler detects that at
3173 least a whole line of source code will never be executed, because
3174 some condition is never satisfied or because it is after a
3175 procedure that never returns.
3177 It is possible for this option to produce a warning even though
3178 there are circumstances under which part of the affected line can
3179 be executed, so care should be taken when removing
3180 apparently-unreachable code.
3182 For instance, when a function is inlined, a warning may mean that
3183 the line is unreachable in only one inlined copy of the function.
3185 This option is not made part of `-Wall' because in a debugging
3186 version of a program there is often substantial code which checks
3187 correct functioning of the program and is, hopefully, unreachable
3188 because the program does work. Another common use of unreachable
3189 code is to provide behavior which is selectable at compile-time.
3192 Warn if a function can not be inlined and it was declared as
3193 inline. Even with this option, the compiler will not warn about
3194 failures to inline functions declared in system headers.
3196 The compiler uses a variety of heuristics to determine whether or
3197 not to inline a function. For example, the compiler takes into
3198 account the size of the function being inlined and the amount of
3199 inlining that has already been done in the current function.
3200 Therefore, seemingly insignificant changes in the source program
3201 can cause the warnings produced by `-Winline' to appear or
3204 `-Wno-invalid-offsetof (C++ only)'
3205 Suppress warnings from applying the `offsetof' macro to a non-POD
3206 type. According to the 1998 ISO C++ standard, applying `offsetof'
3207 to a non-POD type is undefined. In existing C++ implementations,
3208 however, `offsetof' typically gives meaningful results even when
3209 applied to certain kinds of non-POD types. (Such as a simple
3210 `struct' that fails to be a POD type only by virtue of having a
3211 constructor.) This flag is for users who are aware that they are
3212 writing nonportable code and who have deliberately chosen to
3213 ignore the warning about it.
3215 The restrictions on `offsetof' may be relaxed in a future version
3216 of the C++ standard.
3218 `-Wno-int-to-pointer-cast (C only)'
3219 Suppress warnings from casts to pointer type of an integer of a
3222 `-Wno-pointer-to-int-cast (C only)'
3223 Suppress warnings from casts from a pointer to an integer type of a
3227 Warn if a precompiled header (*note Precompiled Headers::) is
3228 found in the search path but can't be used.
3231 Warn if `long long' type is used. This is default. To inhibit
3232 the warning messages, use `-Wno-long-long'. Flags `-Wlong-long'
3233 and `-Wno-long-long' are taken into account only when `-pedantic'
3237 Warn if variadic macros are used in pedantic ISO C90 mode, or the
3238 GNU alternate syntax when in pedantic ISO C99 mode. This is
3239 default. To inhibit the warning messages, use
3240 `-Wno-variadic-macros'.
3242 `-Wvolatile-register-var'
3243 Warn if a register variable is declared volatile. The volatile
3244 modifier does not inhibit all optimizations that may eliminate
3245 reads and/or writes to register variables.
3247 `-Wdisabled-optimization'
3248 Warn if a requested optimization pass is disabled. This warning
3249 does not generally indicate that there is anything wrong with your
3250 code; it merely indicates that GCC's optimizers were unable to
3251 handle the code effectively. Often, the problem is that your code
3252 is too big or too complex; GCC will refuse to optimize programs
3253 when the optimization itself is likely to take inordinate amounts
3257 Warn for pointer argument passing or assignment with different
3258 signedness. This option is only supported for C and Objective-C.
3259 It is implied by `-Wall' and by `-pedantic', which can be disabled
3260 with `-Wno-pointer-sign'.
3263 Make all warnings into errors.
3266 This option is only active when `-fstack-protector' is active. It
3267 warns about functions that will not be protected against stack
3272 File: gcc.info, Node: Debugging Options, Next: Optimize Options, Prev: Warning Options, Up: Invoking GCC
3274 3.9 Options for Debugging Your Program or GCC
3275 =============================================
3277 GCC has various special options that are used for debugging either your
3281 Produce debugging information in the operating system's native
3282 format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this
3283 debugging information.
3285 On most systems that use stabs format, `-g' enables use of extra
3286 debugging information that only GDB can use; this extra information
3287 makes debugging work better in GDB but will probably make other
3288 debuggers crash or refuse to read the program. If you want to
3289 control for certain whether to generate the extra information, use
3290 `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', or `-gvms' (see
3293 GCC allows you to use `-g' with `-O'. The shortcuts taken by
3294 optimized code may occasionally produce surprising results: some
3295 variables you declared may not exist at all; flow of control may
3296 briefly move where you did not expect it; some statements may not
3297 be executed because they compute constant results or their values
3298 were already at hand; some statements may execute in different
3299 places because they were moved out of loops.
3301 Nevertheless it proves possible to debug optimized output. This
3302 makes it reasonable to use the optimizer for programs that might
3305 The following options are useful when GCC is generated with the
3306 capability for more than one debugging format.
3309 Produce debugging information for use by GDB. This means to use
3310 the most expressive format available (DWARF 2, stabs, or the
3311 native format if neither of those are supported), including GDB
3312 extensions if at all possible.
3315 Produce debugging information in stabs format (if that is
3316 supported), without GDB extensions. This is the format used by
3317 DBX on most BSD systems. On MIPS, Alpha and System V Release 4
3318 systems this option produces stabs debugging output which is not
3319 understood by DBX or SDB. On System V Release 4 systems this
3320 option requires the GNU assembler.
3322 `-feliminate-unused-debug-symbols'
3323 Produce debugging information in stabs format (if that is
3324 supported), for only symbols that are actually used.
3327 Produce debugging information in stabs format (if that is
3328 supported), using GNU extensions understood only by the GNU
3329 debugger (GDB). The use of these extensions is likely to make
3330 other debuggers crash or refuse to read the program.
3333 Produce debugging information in COFF format (if that is
3334 supported). This is the format used by SDB on most System V
3335 systems prior to System V Release 4.
3338 Produce debugging information in XCOFF format (if that is
3339 supported). This is the format used by the DBX debugger on IBM
3343 Produce debugging information in XCOFF format (if that is
3344 supported), using GNU extensions understood only by the GNU
3345 debugger (GDB). The use of these extensions is likely to make
3346 other debuggers crash or refuse to read the program, and may cause
3347 assemblers other than the GNU assembler (GAS) to fail with an
3351 Produce debugging information in DWARF version 2 format (if that is
3352 supported). This is the format used by DBX on IRIX 6. With this
3353 option, GCC uses features of DWARF version 3 when they are useful;
3354 version 3 is upward compatible with version 2, but may still cause
3355 problems for older debuggers.
3358 Produce debugging information in VMS debug format (if that is
3359 supported). This is the format used by DEBUG on VMS systems.
3367 Request debugging information and also use LEVEL to specify how
3368 much information. The default level is 2.
3370 Level 1 produces minimal information, enough for making backtraces
3371 in parts of the program that you don't plan to debug. This
3372 includes descriptions of functions and external variables, but no
3373 information about local variables and no line numbers.
3375 Level 3 includes extra information, such as all the macro
3376 definitions present in the program. Some debuggers support macro
3377 expansion when you use `-g3'.
3379 `-gdwarf-2' does not accept a concatenated debug level, because
3380 GCC used to support an option `-gdwarf' that meant to generate
3381 debug information in version 1 of the DWARF format (which is very
3382 different from version 2), and it would have been too confusing.
3383 That debug format is long obsolete, but the option cannot be
3384 changed now. Instead use an additional `-gLEVEL' option to change
3385 the debug level for DWARF2.
3387 `-feliminate-dwarf2-dups'
3388 Compress DWARF2 debugging information by eliminating duplicated
3389 information about each symbol. This option only makes sense when
3390 generating DWARF2 debugging information with `-gdwarf-2'.
3393 Generate extra code to write profile information suitable for the
3394 analysis program `prof'. You must use this option when compiling
3395 the source files you want data about, and you must also use it when
3399 Generate extra code to write profile information suitable for the
3400 analysis program `gprof'. You must use this option when compiling
3401 the source files you want data about, and you must also use it when
3405 Makes the compiler print out each function name as it is compiled,
3406 and print some statistics about each pass when it finishes.
3409 Makes the compiler print some statistics about the time consumed
3410 by each pass when it finishes.
3413 Makes the compiler print some statistics about permanent memory
3414 allocation when it finishes.
3417 Add code so that program flow "arcs" are instrumented. During
3418 execution the program records how many times each branch and call
3419 is executed and how many times it is taken or returns. When the
3420 compiled program exits it saves this data to a file called
3421 `AUXNAME.gcda' for each source file. The data may be used for
3422 profile-directed optimizations (`-fbranch-probabilities'), or for
3423 test coverage analysis (`-ftest-coverage'). Each object file's
3424 AUXNAME is generated from the name of the output file, if
3425 explicitly specified and it is not the final executable, otherwise
3426 it is the basename of the source file. In both cases any suffix
3427 is removed (e.g. `foo.gcda' for input file `dir/foo.c', or
3428 `dir/foo.gcda' for output file specified as `-o dir/foo.o').
3429 *Note Cross-profiling::.
3432 This option is used to compile and link code instrumented for
3433 coverage analysis. The option is a synonym for `-fprofile-arcs'
3434 `-ftest-coverage' (when compiling) and `-lgcov' (when linking).
3435 See the documentation for those options for more details.
3437 * Compile the source files with `-fprofile-arcs' plus
3438 optimization and code generation options. For test coverage
3439 analysis, use the additional `-ftest-coverage' option. You
3440 do not need to profile every source file in a program.
3442 * Link your object files with `-lgcov' or `-fprofile-arcs' (the
3443 latter implies the former).
3445 * Run the program on a representative workload to generate the
3446 arc profile information. This may be repeated any number of
3447 times. You can run concurrent instances of your program, and
3448 provided that the file system supports locking, the data
3449 files will be correctly updated. Also `fork' calls are
3450 detected and correctly handled (double counting will not
3453 * For profile-directed optimizations, compile the source files
3454 again with the same optimization and code generation options
3455 plus `-fbranch-probabilities' (*note Options that Control
3456 Optimization: Optimize Options.).
3458 * For test coverage analysis, use `gcov' to produce human
3459 readable information from the `.gcno' and `.gcda' files.
3460 Refer to the `gcov' documentation for further information.
3463 With `-fprofile-arcs', for each function of your program GCC
3464 creates a program flow graph, then finds a spanning tree for the
3465 graph. Only arcs that are not on the spanning tree have to be
3466 instrumented: the compiler adds code to count the number of times
3467 that these arcs are executed. When an arc is the only exit or
3468 only entrance to a block, the instrumentation code can be added to
3469 the block; otherwise, a new basic block must be created to hold
3470 the instrumentation code.
3473 Produce a notes file that the `gcov' code-coverage utility (*note
3474 `gcov'--a Test Coverage Program: Gcov.) can use to show program
3475 coverage. Each source file's note file is called `AUXNAME.gcno'.
3476 Refer to the `-fprofile-arcs' option above for a description of
3477 AUXNAME and instructions on how to generate test coverage data.
3478 Coverage data will match the source files more closely, if you do
3484 Says to make debugging dumps during compilation at times specified
3485 by LETTERS. This is used for debugging the RTL-based passes of
3486 the compiler. The file names for most of the dumps are made by
3487 appending a pass number and a word to the DUMPNAME. DUMPNAME is
3488 generated from the name of the output file, if explicitly
3489 specified and it is not an executable, otherwise it is the
3490 basename of the source file.
3492 Most debug dumps can be enabled either passing a letter to the `-d'
3493 option, or with a long `-fdump-rtl' switch; here are the possible
3494 letters for use in LETTERS and PASS, and their meanings:
3497 Annotate the assembler output with miscellaneous debugging
3502 Dump after computing branch probabilities, to `FILE.09.bp'.
3506 Dump after block reordering, to `FILE.30.bbro'.
3509 `-fdump-rtl-combine'
3510 Dump after instruction combination, to the file
3516 `-dC' and `-fdump-rtl-ce1' enable dumping after the first if
3517 conversion, to the file `FILE.11.ce1'. `-dC' and
3518 `-fdump-rtl-ce2' enable dumping after the second if
3519 conversion, to the file `FILE.18.ce2'.
3524 `-dd' and `-fdump-rtl-btl' enable dumping after branch target
3525 load optimization, to `FILE.31.btl'. `-dd' and
3526 `-fdump-rtl-dbr' enable dumping after delayed branch
3527 scheduling, to `FILE.36.dbr'.
3530 Dump all macro definitions, at the end of preprocessing, in
3531 addition to normal output.
3535 Dump after the third if conversion, to `FILE.28.ce3'.
3540 `-df' and `-fdump-rtl-cfg' enable dumping after control and
3541 data flow analysis, to `FILE.08.cfg'. `-df' and
3542 `-fdump-rtl-cfg' enable dumping dump after life analysis, to
3547 Dump after global register allocation, to `FILE.23.greg'.
3552 `-dG' and `-fdump-rtl-gcse' enable dumping after GCSE, to
3553 `FILE.05.gcse'. `-dG' and `-fdump-rtl-bypass' enable dumping
3554 after jump bypassing and control flow optimizations, to
3559 Dump after finalization of EH handling code, to `FILE.02.eh'.
3562 `-fdump-rtl-sibling'
3563 Dump after sibling call optimizations, to `FILE.01.sibling'.
3567 Dump after the first jump optimization, to `FILE.03.jump'.
3571 Dump after conversion from registers to stack, to
3576 Dump after local register allocation, to `FILE.22.lreg'.
3581 `-dL' and `-fdump-rtl-loop' enable dumping after the first
3582 loop optimization pass, to `FILE.06.loop'. `-dL' and
3583 `-fdump-rtl-loop2' enable dumping after the second pass, to
3588 Dump after modulo scheduling, to `FILE.20.sms'.
3592 Dump after performing the machine dependent reorganization
3593 pass, to `FILE.35.mach'.
3597 Dump after register renumbering, to `FILE.29.rnreg'.
3600 `-fdump-rtl-regmove'
3601 Dump after the register move pass, to `FILE.19.regmove'.
3604 `-fdump-rtl-postreload'
3605 Dump after post-reload optimizations, to `FILE.24.postreload'.
3609 Dump after RTL generation, to `FILE.00.expand'.
3613 Dump after the second scheduling pass, to `FILE.32.sched2'.
3617 Dump after CSE (including the jump optimization that
3618 sometimes follows CSE), to `FILE.04.cse'.
3622 Dump after the first scheduling pass, to `FILE.21.sched'.
3626 Dump after the second CSE pass (including the jump
3627 optimization that sometimes follows CSE), to `FILE.15.cse2'.
3631 Dump after running tracer, to `FILE.12.tracer'.
3635 `-fdump-rtl-vartrack'
3636 `-dV' and `-fdump-rtl-vpt' enable dumping after the value
3637 profile transformations, to `FILE.10.vpt'. `-dV' and
3638 `-fdump-rtl-vartrack' enable dumping after variable tracking,
3639 to `FILE.34.vartrack'.
3643 Dump after the second flow pass, to `FILE.26.flow2'.
3646 `-fdump-rtl-peephole2'
3647 Dump after the peephole pass, to `FILE.27.peephole2'.
3651 Dump after live range splitting, to `FILE.14.web'.
3655 Produce all the dumps listed above.
3658 Produce a core dump whenever an error occurs.
3661 Print statistics on memory usage, at the end of the run, to
3665 Annotate the assembler output with a comment indicating which
3666 pattern and alternative was used. The length of each
3667 instruction is also printed.
3670 Dump the RTL in the assembler output as a comment before each
3671 instruction. Also turns on `-dp' annotation.
3674 For each of the other indicated dump files (either with `-d'
3675 or `-fdump-rtl-PASS'), dump a representation of the control
3676 flow graph suitable for viewing with VCG to `FILE.PASS.vcg'.
3679 Just generate RTL for a function instead of compiling it.
3680 Usually used with `r' (`-fdump-rtl-expand').
3683 Dump debugging information during parsing, to standard error.
3686 When doing debugging dumps (see `-d' option above), suppress
3687 instruction numbers and line number note output. This makes it
3688 more feasible to use diff on debugging dumps for compiler
3689 invocations with different options, in particular with and without
3692 `-fdump-translation-unit (C++ only)'
3693 `-fdump-translation-unit-OPTIONS (C++ only)'
3694 Dump a representation of the tree structure for the entire
3695 translation unit to a file. The file name is made by appending
3696 `.tu' to the source file name. If the `-OPTIONS' form is used,
3697 OPTIONS controls the details of the dump as described for the
3698 `-fdump-tree' options.
3700 `-fdump-class-hierarchy (C++ only)'
3701 `-fdump-class-hierarchy-OPTIONS (C++ only)'
3702 Dump a representation of each class's hierarchy and virtual
3703 function table layout to a file. The file name is made by
3704 appending `.class' to the source file name. If the `-OPTIONS'
3705 form is used, OPTIONS controls the details of the dump as
3706 described for the `-fdump-tree' options.
3709 Control the dumping at various stages of inter-procedural analysis
3710 language tree to a file. The file name is generated by appending
3711 a switch specific suffix to the source file name. The following
3715 Enables all inter-procedural analysis dumps; currently the
3716 only produced dump is the `cgraph' dump.
3719 Dumps information about call-graph optimization, unused
3720 function removal, and inlining decisions.
3722 `-fdump-tree-SWITCH'
3723 `-fdump-tree-SWITCH-OPTIONS'
3724 Control the dumping at various stages of processing the
3725 intermediate language tree to a file. The file name is generated
3726 by appending a switch specific suffix to the source file name. If
3727 the `-OPTIONS' form is used, OPTIONS is a list of `-' separated
3728 options that control the details of the dump. Not all options are
3729 applicable to all dumps, those which are not meaningful will be
3730 ignored. The following options are available
3733 Print the address of each node. Usually this is not
3734 meaningful as it changes according to the environment and
3735 source file. Its primary use is for tying up a dump file
3736 with a debug environment.
3739 Inhibit dumping of members of a scope or body of a function
3740 merely because that scope has been reached. Only dump such
3741 items when they are directly reachable by some other path.
3742 When dumping pretty-printed trees, this option inhibits
3743 dumping the bodies of control structures.
3746 Print a raw representation of the tree. By default, trees are
3747 pretty-printed into a C-like representation.
3750 Enable more detailed dumps (not honored by every dump option).
3753 Enable dumping various statistics about the pass (not honored
3754 by every dump option).
3757 Enable showing basic block boundaries (disabled in raw dumps).
3760 Enable showing virtual operands for every statement.
3763 Enable showing line numbers for statements.
3766 Enable showing the unique ID (`DECL_UID') for each variable.
3769 Turn on all options, except `raw', `slim' and `lineno'.
3771 The following tree dumps are possible:
3773 Dump before any tree based optimization, to `FILE.original'.
3776 Dump after all tree based optimization, to `FILE.optimized'.
3779 Dump after function inlining, to `FILE.inlined'.
3782 Dump each function before and after the gimplification pass
3783 to a file. The file name is made by appending `.gimple' to
3784 the source file name.
3787 Dump the control flow graph of each function to a file. The
3788 file name is made by appending `.cfg' to the source file name.
3791 Dump the control flow graph of each function to a file in VCG
3792 format. The file name is made by appending `.vcg' to the
3793 source file name. Note that if the file contains more than
3794 one function, the generated file cannot be used directly by
3795 VCG. You will need to cut and paste each function's graph
3796 into its own separate file first.
3799 Dump each function after copying loop headers. The file name
3800 is made by appending `.ch' to the source file name.
3803 Dump SSA related information to a file. The file name is
3804 made by appending `.ssa' to the source file name.
3807 Dump structure aliasing variable information to a file. This
3808 file name is made by appending `.salias' to the source file
3812 Dump aliasing information for each function. The file name
3813 is made by appending `.alias' to the source file name.
3816 Dump each function after CCP. The file name is made by
3817 appending `.ccp' to the source file name.
3820 Dump each function after STORE-CCP. The file name is made by
3821 appending `.storeccp' to the source file name.
3824 Dump trees after partial redundancy elimination. The file
3825 name is made by appending `.pre' to the source file name.
3828 Dump trees after full redundancy elimination. The file name
3829 is made by appending `.fre' to the source file name.
3832 Dump trees after copy propagation. The file name is made by
3833 appending `.copyprop' to the source file name.
3836 Dump trees after store copy-propagation. The file name is
3837 made by appending `.store_copyprop' to the source file name.
3840 Dump each function after dead code elimination. The file
3841 name is made by appending `.dce' to the source file name.
3844 Dump each function after adding mudflap instrumentation. The
3845 file name is made by appending `.mudflap' to the source file
3849 Dump each function after performing scalar replacement of
3850 aggregates. The file name is made by appending `.sra' to the
3854 Dump each function after performing code sinking. The file
3855 name is made by appending `.sink' to the source file name.
3858 Dump each function after applying dominator tree
3859 optimizations. The file name is made by appending `.dom' to
3860 the source file name.
3863 Dump each function after applying dead store elimination.
3864 The file name is made by appending `.dse' to the source file
3868 Dump each function after optimizing PHI nodes into
3869 straightline code. The file name is made by appending
3870 `.phiopt' to the source file name.
3873 Dump each function after forward propagating single use
3874 variables. The file name is made by appending `.forwprop' to
3875 the source file name.
3878 Dump each function after applying the copy rename
3879 optimization. The file name is made by appending
3880 `.copyrename' to the source file name.
3883 Dump each function after applying the named return value
3884 optimization on generic trees. The file name is made by
3885 appending `.nrv' to the source file name.
3888 Dump each function after applying vectorization of loops.
3889 The file name is made by appending `.vect' to the source file
3893 Dump each function after Value Range Propagation (VRP). The
3894 file name is made by appending `.vrp' to the source file name.
3897 Enable all the available tree dumps with the flags provided
3900 `-ftree-vectorizer-verbose=N'
3901 This option controls the amount of debugging output the vectorizer
3902 prints. This information is written to standard error, unless
3903 `-fdump-tree-all' or `-fdump-tree-vect' is specified, in which
3904 case it is output to the usual dump listing file, `.vect'.
3906 `-frandom-seed=STRING'
3907 This option provides a seed that GCC uses when it would otherwise
3908 use random numbers. It is used to generate certain symbol names
3909 that have to be different in every compiled file. It is also used
3910 to place unique stamps in coverage data files and the object files
3911 that produce them. You can use the `-frandom-seed' option to
3912 produce reproducibly identical object files.
3914 The STRING should be different for every file you compile.
3917 On targets that use instruction scheduling, this option controls
3918 the amount of debugging output the scheduler prints. This
3919 information is written to standard error, unless `-dS' or `-dR' is
3920 specified, in which case it is output to the usual dump listing
3921 file, `.sched' or `.sched2' respectively. However for N greater
3922 than nine, the output is always printed to standard error.
3924 For N greater than zero, `-fsched-verbose' outputs the same
3925 information as `-dRS'. For N greater than one, it also output
3926 basic block probabilities, detailed ready list information and
3927 unit/insn info. For N greater than two, it includes RTL at abort
3928 point, control-flow and regions info. And for N over four,
3929 `-fsched-verbose' also includes dependence info.
3932 Store the usual "temporary" intermediate files permanently; place
3933 them in the current directory and name them based on the source
3934 file. Thus, compiling `foo.c' with `-c -save-temps' would produce
3935 files `foo.i' and `foo.s', as well as `foo.o'. This creates a
3936 preprocessed `foo.i' output file even though the compiler now
3937 normally uses an integrated preprocessor.
3939 When used in combination with the `-x' command line option,
3940 `-save-temps' is sensible enough to avoid over writing an input
3941 source file with the same extension as an intermediate file. The
3942 corresponding intermediate file may be obtained by renaming the
3943 source file before using `-save-temps'.
3946 Report the CPU time taken by each subprocess in the compilation
3947 sequence. For C source files, this is the compiler proper and
3948 assembler (plus the linker if linking is done). The output looks
3954 The first number on each line is the "user time", that is time
3955 spent executing the program itself. The second number is "system
3956 time", time spent executing operating system routines on behalf of
3957 the program. Both numbers are in seconds.
3960 Run variable tracking pass. It computes where variables are
3961 stored at each position in code. Better debugging information is
3962 then generated (if the debugging information format supports this
3965 It is enabled by default when compiling with optimization (`-Os',
3966 `-O', `-O2', ...), debugging information (`-g') and the debug info
3969 `-print-file-name=LIBRARY'
3970 Print the full absolute name of the library file LIBRARY that
3971 would be used when linking--and don't do anything else. With this
3972 option, GCC does not compile or link anything; it just prints the
3975 `-print-multi-directory'
3976 Print the directory name corresponding to the multilib selected by
3977 any other switches present in the command line. This directory is
3978 supposed to exist in `GCC_EXEC_PREFIX'.
3981 Print the mapping from multilib directory names to compiler
3982 switches that enable them. The directory name is separated from
3983 the switches by `;', and each switch starts with an `@' instead of
3984 the `-', without spaces between multiple switches. This is
3985 supposed to ease shell-processing.
3987 `-print-prog-name=PROGRAM'
3988 Like `-print-file-name', but searches for a program such as `cpp'.
3990 `-print-libgcc-file-name'
3991 Same as `-print-file-name=libgcc.a'.
3993 This is useful when you use `-nostdlib' or `-nodefaultlibs' but
3994 you do want to link with `libgcc.a'. You can do
3996 gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
3998 `-print-search-dirs'
3999 Print the name of the configured installation directory and a list
4000 of program and library directories `gcc' will search--and don't do
4003 This is useful when `gcc' prints the error message `installation
4004 problem, cannot exec cpp0: No such file or directory'. To resolve
4005 this you either need to put `cpp0' and the other compiler
4006 components where `gcc' expects to find them, or you can set the
4007 environment variable `GCC_EXEC_PREFIX' to the directory where you
4008 installed them. Don't forget the trailing `/'. *Note Environment
4012 Print the compiler's target machine (for example,
4013 `i686-pc-linux-gnu')--and don't do anything else.
4016 Print the compiler version (for example, `3.0')--and don't do
4020 Print the compiler's built-in specs--and don't do anything else.
4021 (This is used when GCC itself is being built.) *Note Spec Files::.
4023 `-feliminate-unused-debug-types'
4024 Normally, when producing DWARF2 output, GCC will emit debugging
4025 information for all types declared in a compilation unit,
4026 regardless of whether or not they are actually used in that
4027 compilation unit. Sometimes this is useful, such as if, in the
4028 debugger, you want to cast a value to a type that is not actually
4029 used in your program (but is declared). More often, however, this
4030 results in a significant amount of wasted space. With this
4031 option, GCC will avoid producing debug symbol output for types
4032 that are nowhere used in the source file being compiled.
4035 File: gcc.info, Node: Optimize Options, Next: Preprocessor Options, Prev: Debugging Options, Up: Invoking GCC
4037 3.10 Options That Control Optimization
4038 ======================================
4040 These options control various sorts of optimizations.
4042 Without any optimization option, the compiler's goal is to reduce the
4043 cost of compilation and to make debugging produce the expected results.
4044 Statements are independent: if you stop the program with a breakpoint
4045 between statements, you can then assign a new value to any variable or
4046 change the program counter to any other statement in the function and
4047 get exactly the results you would expect from the source code.
4049 Turning on optimization flags makes the compiler attempt to improve
4050 the performance and/or code size at the expense of compilation time and
4051 possibly the ability to debug the program.
4053 The compiler performs optimization based on the knowledge it has of
4054 the program. Optimization levels `-O2' and above, in particular,
4055 enable _unit-at-a-time_ mode, which allows the compiler to consider
4056 information gained from later functions in the file when compiling a
4057 function. Compiling multiple files at once to a single output file in
4058 _unit-at-a-time_ mode allows the compiler to use information gained
4059 from all of the files when compiling each of them.
4061 Not all optimizations are controlled directly by a flag. Only
4062 optimizations that have a flag are listed.
4066 Optimize. Optimizing compilation takes somewhat more time, and a
4067 lot more memory for a large function.
4069 With `-O', the compiler tries to reduce code size and execution
4070 time, without performing any optimizations that take a great deal
4071 of compilation time.
4073 `-O' turns on the following optimization flags:
4076 -fguess-branch-probability
4083 -ftree-dominator-opts
4093 `-O' also turns on `-fomit-frame-pointer' on machines where doing
4094 so does not interfere with debugging.
4096 `-O' doesn't turn on `-ftree-sra' for the Ada compiler. This
4097 option must be explicitly specified on the command line to be
4098 enabled for the Ada compiler.
4101 Optimize even more. GCC performs nearly all supported
4102 optimizations that do not involve a space-speed tradeoff. The
4103 compiler does not perform loop unrolling or function inlining when
4104 you specify `-O2'. As compared to `-O', this option increases
4105 both compilation time and the performance of the generated code.
4107 `-O2' turns on all optimization flags specified by `-O'. It also
4108 turns on the following optimization flags:
4111 -foptimize-sibling-calls
4112 -fcse-follow-jumps -fcse-skip-blocks
4114 -fexpensive-optimizations
4116 -frerun-cse-after-loop -frerun-loop-opt
4119 -fschedule-insns -fschedule-insns2
4120 -fsched-interblock -fsched-spec
4123 -fdelete-null-pointer-checks
4124 -freorder-blocks -freorder-functions
4126 -falign-functions -falign-jumps
4127 -falign-loops -falign-labels
4131 Please note the warning under `-fgcse' about invoking `-O2' on
4132 programs that use computed gotos.
4135 Optimize yet more. `-O3' turns on all optimizations specified by
4136 `-O2' and also turns on the `-finline-functions',
4137 `-funswitch-loops' and `-fgcse-after-reload' options.
4140 Do not optimize. This is the default.
4143 Optimize for size. `-Os' enables all `-O2' optimizations that do
4144 not typically increase code size. It also performs further
4145 optimizations designed to reduce code size.
4147 `-Os' disables the following optimization flags:
4148 -falign-functions -falign-jumps -falign-loops
4149 -falign-labels -freorder-blocks -freorder-blocks-and-partition
4150 -fprefetch-loop-arrays -ftree-vect-loop-version
4152 If you use multiple `-O' options, with or without level numbers,
4153 the last such option is the one that is effective.
4155 Options of the form `-fFLAG' specify machine-independent flags. Most
4156 flags have both positive and negative forms; the negative form of
4157 `-ffoo' would be `-fno-foo'. In the table below, only one of the forms
4158 is listed--the one you typically will use. You can figure out the
4159 other form by either removing `no-' or adding it.
4161 The following options control specific optimizations. They are either
4162 activated by `-O' options or are related to ones that are. You can use
4163 the following flags in the rare cases when "fine-tuning" of
4164 optimizations to be performed is desired.
4166 `-fno-default-inline'
4167 Do not make member functions inline by default merely because they
4168 are defined inside the class scope (C++ only). Otherwise, when
4169 you specify `-O', member functions defined inside class scope are
4170 compiled inline by default; i.e., you don't need to add `inline'
4171 in front of the member function name.
4174 Always pop the arguments to each function call as soon as that
4175 function returns. For machines which must pop arguments after a
4176 function call, the compiler normally lets arguments accumulate on
4177 the stack for several function calls and pops them all at once.
4179 Disabled at levels `-O', `-O2', `-O3', `-Os'.
4182 Force memory operands to be copied into registers before doing
4183 arithmetic on them. This produces better code by making all memory
4184 references potential common subexpressions. When they are not
4185 common subexpressions, instruction combination should eliminate
4186 the separate register-load. This option is now a nop and will be
4190 Force memory address constants to be copied into registers before
4191 doing arithmetic on them.
4193 `-fomit-frame-pointer'
4194 Don't keep the frame pointer in a register for functions that
4195 don't need one. This avoids the instructions to save, set up and
4196 restore frame pointers; it also makes an extra register available
4197 in many functions. *It also makes debugging impossible on some
4200 On some machines, such as the VAX, this flag has no effect, because
4201 the standard calling sequence automatically handles the frame
4202 pointer and nothing is saved by pretending it doesn't exist. The
4203 machine-description macro `FRAME_POINTER_REQUIRED' controls
4204 whether a target machine supports this flag. *Note Register
4205 Usage: (gccint)Registers.
4207 Enabled at levels `-O', `-O2', `-O3', `-Os'.
4209 `-foptimize-sibling-calls'
4210 Optimize sibling and tail recursive calls.
4212 Enabled at levels `-O2', `-O3', `-Os'.
4215 Don't pay attention to the `inline' keyword. Normally this option
4216 is used to keep the compiler from expanding any functions inline.
4217 Note that if you are not optimizing, no functions can be expanded
4220 `-finline-functions'
4221 Integrate all simple functions into their callers. The compiler
4222 heuristically decides which functions are simple enough to be worth
4223 integrating in this way.
4225 If all calls to a given function are integrated, and the function
4226 is declared `static', then the function is normally not output as
4227 assembler code in its own right.
4229 Enabled at level `-O3'.
4231 `-finline-functions-called-once'
4232 Consider all `static' functions called once for inlining into their
4233 caller even if they are not marked `inline'. If a call to a given
4234 function is integrated, then the function is not output as
4235 assembler code in its own right.
4237 Enabled if `-funit-at-a-time' is enabled.
4240 Inline functions marked by `always_inline' and functions whose
4241 body seems smaller than the function call overhead early before
4242 doing `-fprofile-generate' instrumentation and real inlining pass.
4243 Doing so makes profiling significantly cheaper and usually
4244 inlining faster on programs having large chains of nested wrapper
4250 By default, GCC limits the size of functions that can be inlined.
4251 This flag allows the control of this limit for functions that are
4252 explicitly marked as inline (i.e., marked with the inline keyword
4253 or defined within the class definition in c++). N is the size of
4254 functions that can be inlined in number of pseudo instructions
4255 (not counting parameter handling). The default value of N is 600.
4256 Increasing this value can result in more inlined code at the cost
4257 of compilation time and memory consumption. Decreasing usually
4258 makes the compilation faster and less code will be inlined (which
4259 presumably means slower programs). This option is particularly
4260 useful for programs that use inlining heavily such as those based
4261 on recursive templates with C++.
4263 Inlining is actually controlled by a number of parameters, which
4264 may be specified individually by using `--param NAME=VALUE'. The
4265 `-finline-limit=N' option sets some of these parameters as follows:
4267 `max-inline-insns-single'
4270 `max-inline-insns-auto'
4274 is set to 130 or N/4, whichever is smaller.
4276 `max-inline-insns-rtl'
4279 See below for a documentation of the individual parameters
4280 controlling inlining.
4282 _Note:_ pseudo instruction represents, in this particular context,
4283 an abstract measurement of function's size. In no way does it
4284 represent a count of assembly instructions and as such its exact
4285 meaning might change from one release to an another.
4287 `-fkeep-inline-functions'
4288 In C, emit `static' functions that are declared `inline' into the
4289 object file, even if the function has been inlined into all of its
4290 callers. This switch does not affect functions using the `extern
4291 inline' extension in GNU C. In C++, emit any and all inline
4292 functions into the object file.
4294 `-fkeep-static-consts'
4295 Emit variables declared `static const' when optimization isn't
4296 turned on, even if the variables aren't referenced.
4298 GCC enables this option by default. If you want to force the
4299 compiler to check if the variable was referenced, regardless of
4300 whether or not optimization is turned on, use the
4301 `-fno-keep-static-consts' option.
4304 Attempt to merge identical constants (string constants and
4305 floating point constants) across compilation units.
4307 This option is the default for optimized compilation if the
4308 assembler and linker support it. Use `-fno-merge-constants' to
4309 inhibit this behavior.
4311 Enabled at levels `-O', `-O2', `-O3', `-Os'.
4313 `-fmerge-all-constants'
4314 Attempt to merge identical constants and identical variables.
4316 This option implies `-fmerge-constants'. In addition to
4317 `-fmerge-constants' this considers e.g. even constant initialized
4318 arrays or initialized constant variables with integral or floating
4319 point types. Languages like C or C++ require each non-automatic
4320 variable to have distinct location, so using this option will
4321 result in non-conforming behavior.
4324 Perform swing modulo scheduling immediately before the first
4325 scheduling pass. This pass looks at innermost loops and reorders
4326 their instructions by overlapping different iterations.
4328 `-fno-branch-count-reg'
4329 Do not use "decrement and branch" instructions on a count register,
4330 but instead generate a sequence of instructions that decrement a
4331 register, compare it against zero, then branch based upon the
4332 result. This option is only meaningful on architectures that
4333 support such instructions, which include x86, PowerPC, IA-64 and
4336 The default is `-fbranch-count-reg', enabled when
4337 `-fstrength-reduce' is enabled.
4340 Do not put function addresses in registers; make each instruction
4341 that calls a constant function contain the function's address
4344 This option results in less efficient code, but some strange hacks
4345 that alter the assembler output may be confused by the
4346 optimizations performed when this option is not used.
4348 The default is `-ffunction-cse'
4350 `-fno-zero-initialized-in-bss'
4351 If the target supports a BSS section, GCC by default puts
4352 variables that are initialized to zero into BSS. This can save
4353 space in the resulting code.
4355 This option turns off this behavior because some programs
4356 explicitly rely on variables going to the data section. E.g., so
4357 that the resulting executable can find the beginning of that
4358 section and/or make assumptions based on that.
4360 The default is `-fzero-initialized-in-bss'.
4363 For front-ends that support it, generate additional code to check
4364 that indices used to access arrays are within the declared range.
4365 This is currently only supported by the Java and Fortran
4366 front-ends, where this option defaults to true and false
4369 `-fmudflap -fmudflapth -fmudflapir'
4370 For front-ends that support it (C and C++), instrument all risky
4371 pointer/array dereferencing operations, some standard library
4372 string/heap functions, and some other associated constructs with
4373 range/validity tests. Modules so instrumented should be immune to
4374 buffer overflows, invalid heap use, and some other classes of C/C++
4375 programming errors. The instrumentation relies on a separate
4376 runtime library (`libmudflap'), which will be linked into a
4377 program if `-fmudflap' is given at link time. Run-time behavior
4378 of the instrumented program is controlled by the `MUDFLAP_OPTIONS'
4379 environment variable. See `env MUDFLAP_OPTIONS=-help a.out' for
4382 Use `-fmudflapth' instead of `-fmudflap' to compile and to link if
4383 your program is multi-threaded. Use `-fmudflapir', in addition to
4384 `-fmudflap' or `-fmudflapth', if instrumentation should ignore
4385 pointer reads. This produces less instrumentation (and therefore
4386 faster execution) and still provides some protection against
4387 outright memory corrupting writes, but allows erroneously read
4388 data to propagate within a program.
4391 Perform the optimizations of loop strength reduction and
4392 elimination of iteration variables.
4394 Enabled at levels `-O2', `-O3', `-Os'.
4397 Perform optimizations where we check to see if a jump branches to a
4398 location where another comparison subsumed by the first is found.
4399 If so, the first branch is redirected to either the destination of
4400 the second branch or a point immediately following it, depending
4401 on whether the condition is known to be true or false.
4403 Enabled at levels `-O2', `-O3', `-Os'.
4405 `-fcse-follow-jumps'
4406 In common subexpression elimination, scan through jump instructions
4407 when the target of the jump is not reached by any other path. For
4408 example, when CSE encounters an `if' statement with an `else'
4409 clause, CSE will follow the jump when the condition tested is
4412 Enabled at levels `-O2', `-O3', `-Os'.
4415 This is similar to `-fcse-follow-jumps', but causes CSE to follow
4416 jumps which conditionally skip over blocks. When CSE encounters a
4417 simple `if' statement with no else clause, `-fcse-skip-blocks'
4418 causes CSE to follow the jump around the body of the `if'.
4420 Enabled at levels `-O2', `-O3', `-Os'.
4422 `-frerun-cse-after-loop'
4423 Re-run common subexpression elimination after loop optimizations
4426 Enabled at levels `-O2', `-O3', `-Os'.
4429 Run the loop optimizer twice.
4431 Enabled at levels `-O2', `-O3', `-Os'.
4434 Perform a global common subexpression elimination pass. This pass
4435 also performs global constant and copy propagation.
4437 _Note:_ When compiling a program using computed gotos, a GCC
4438 extension, you may get better runtime performance if you disable
4439 the global common subexpression elimination pass by adding
4440 `-fno-gcse' to the command line.
4442 Enabled at levels `-O2', `-O3', `-Os'.
4445 When `-fgcse-lm' is enabled, global common subexpression
4446 elimination will attempt to move loads which are only killed by
4447 stores into themselves. This allows a loop containing a
4448 load/store sequence to be changed to a load outside the loop, and
4449 a copy/store within the loop.
4451 Enabled by default when gcse is enabled.
4454 When `-fgcse-sm' is enabled, a store motion pass is run after
4455 global common subexpression elimination. This pass will attempt
4456 to move stores out of loops. When used in conjunction with
4457 `-fgcse-lm', loops containing a load/store sequence can be changed
4458 to a load before the loop and a store after the loop.
4460 Not enabled at any optimization level.
4463 When `-fgcse-las' is enabled, the global common subexpression
4464 elimination pass eliminates redundant loads that come after stores
4465 to the same memory location (both partial and full redundancies).
4467 Not enabled at any optimization level.
4469 `-fgcse-after-reload'
4470 When `-fgcse-after-reload' is enabled, a redundant load elimination
4471 pass is performed after reload. The purpose of this pass is to
4472 cleanup redundant spilling.
4475 Perform loop optimizations: move constant expressions out of
4476 loops, simplify exit test conditions and optionally do
4477 strength-reduction as well.
4479 Enabled at levels `-O', `-O2', `-O3', `-Os'.
4482 Perform loop optimizations using the new loop optimizer. The
4483 optimizations (loop unrolling, peeling and unswitching, loop
4484 invariant motion) are enabled by separate flags.
4486 `-funsafe-loop-optimizations'
4487 If given, the loop optimizer will assume that loop indices do not
4488 overflow, and that the loops with nontrivial exit condition are not
4489 infinite. This enables a wider range of loop optimizations even if
4490 the loop optimizer itself cannot prove that these assumptions are
4491 valid. Using `-Wunsafe-loop-optimizations', the compiler will
4492 warn you if it finds this kind of loop.
4495 Perform cross-jumping transformation. This transformation unifies
4496 equivalent code and save code size. The resulting code may or may
4497 not perform better than without cross-jumping.
4499 Enabled at levels `-O2', `-O3', `-Os'.
4502 Attempt to transform conditional jumps into branch-less
4503 equivalents. This include use of conditional moves, min, max, set
4504 flags and abs instructions, and some tricks doable by standard
4505 arithmetics. The use of conditional execution on chips where it
4506 is available is controlled by `if-conversion2'.
4508 Enabled at levels `-O', `-O2', `-O3', `-Os'.
4511 Use conditional execution (where available) to transform
4512 conditional jumps into branch-less equivalents.
4514 Enabled at levels `-O', `-O2', `-O3', `-Os'.
4516 `-fdelete-null-pointer-checks'
4517 Use global dataflow analysis to identify and eliminate useless
4518 checks for null pointers. The compiler assumes that dereferencing
4519 a null pointer would have halted the program. If a pointer is
4520 checked after it has already been dereferenced, it cannot be null.
4522 In some environments, this assumption is not true, and programs can
4523 safely dereference null pointers. Use
4524 `-fno-delete-null-pointer-checks' to disable this optimization for
4525 programs which depend on that behavior.
4527 Enabled at levels `-O2', `-O3', `-Os'.
4529 `-fexpensive-optimizations'
4530 Perform a number of minor optimizations that are relatively
4533 Enabled at levels `-O2', `-O3', `-Os'.
4535 `-foptimize-register-move'
4537 Attempt to reassign register numbers in move instructions and as
4538 operands of other simple instructions in order to maximize the
4539 amount of register tying. This is especially helpful on machines
4540 with two-operand instructions.
4542 Note `-fregmove' and `-foptimize-register-move' are the same
4545 Enabled at levels `-O2', `-O3', `-Os'.
4548 If supported for the target machine, attempt to reorder
4549 instructions to exploit instruction slots available after delayed
4550 branch instructions.
4552 Enabled at levels `-O', `-O2', `-O3', `-Os'.
4555 If supported for the target machine, attempt to reorder
4556 instructions to eliminate execution stalls due to required data
4557 being unavailable. This helps machines that have slow floating
4558 point or memory load instructions by allowing other instructions
4559 to be issued until the result of the load or floating point
4560 instruction is required.
4562 Enabled at levels `-O2', `-O3', `-Os'.
4565 Similar to `-fschedule-insns', but requests an additional pass of
4566 instruction scheduling after register allocation has been done.
4567 This is especially useful on machines with a relatively small
4568 number of registers and where memory load instructions take more
4571 Enabled at levels `-O2', `-O3', `-Os'.
4573 `-fno-sched-interblock'
4574 Don't schedule instructions across basic blocks. This is normally
4575 enabled by default when scheduling before register allocation, i.e.
4576 with `-fschedule-insns' or at `-O2' or higher.
4579 Don't allow speculative motion of non-load instructions. This is
4580 normally enabled by default when scheduling before register
4581 allocation, i.e. with `-fschedule-insns' or at `-O2' or higher.
4584 Allow speculative motion of some load instructions. This only
4585 makes sense when scheduling before register allocation, i.e. with
4586 `-fschedule-insns' or at `-O2' or higher.
4588 `-fsched-spec-load-dangerous'
4589 Allow speculative motion of more load instructions. This only
4590 makes sense when scheduling before register allocation, i.e. with
4591 `-fschedule-insns' or at `-O2' or higher.
4593 `-fsched-stalled-insns=N'
4594 Define how many insns (if any) can be moved prematurely from the
4595 queue of stalled insns into the ready list, during the second
4598 `-fsched-stalled-insns-dep=N'
4599 Define how many insn groups (cycles) will be examined for a
4600 dependency on a stalled insn that is candidate for premature
4601 removal from the queue of stalled insns. Has an effect only
4602 during the second scheduling pass, and only if
4603 `-fsched-stalled-insns' is used and its value is not zero.
4605 `-fsched2-use-superblocks'
4606 When scheduling after register allocation, do use superblock
4607 scheduling algorithm. Superblock scheduling allows motion across
4608 basic block boundaries resulting on faster schedules. This option
4609 is experimental, as not all machine descriptions used by GCC model
4610 the CPU closely enough to avoid unreliable results from the
4613 This only makes sense when scheduling after register allocation,
4614 i.e. with `-fschedule-insns2' or at `-O2' or higher.
4616 `-fsched2-use-traces'
4617 Use `-fsched2-use-superblocks' algorithm when scheduling after
4618 register allocation and additionally perform code duplication in
4619 order to increase the size of superblocks using tracer pass. See
4620 `-ftracer' for details on trace formation.
4622 This mode should produce faster but significantly longer programs.
4623 Also without `-fbranch-probabilities' the traces constructed may
4624 not match the reality and hurt the performance. This only makes
4625 sense when scheduling after register allocation, i.e. with
4626 `-fschedule-insns2' or at `-O2' or higher.
4628 `-freschedule-modulo-scheduled-loops'
4629 The modulo scheduling comes before the traditional scheduling, if
4630 a loop was modulo scheduled we may want to prevent the later
4631 scheduling passes from changing its schedule, we use this option
4635 Enable values to be allocated in registers that will be clobbered
4636 by function calls, by emitting extra instructions to save and
4637 restore the registers around such calls. Such allocation is done
4638 only when it seems to result in better code than would otherwise
4641 This option is always enabled by default on certain machines,
4642 usually those which have no call-preserved registers to use
4645 Enabled at levels `-O2', `-O3', `-Os'.
4648 Perform Partial Redundancy Elimination (PRE) on trees. This flag
4649 is enabled by default at `-O2' and `-O3'.
4652 Perform Full Redundancy Elimination (FRE) on trees. The difference
4653 between FRE and PRE is that FRE only considers expressions that
4654 are computed on all paths leading to the redundant computation.
4655 This analysis faster than PRE, though it exposes fewer
4656 redundancies. This flag is enabled by default at `-O' and higher.
4659 Perform copy propagation on trees. This pass eliminates
4660 unnecessary copy operations. This flag is enabled by default at
4663 `-ftree-store-copy-prop'
4664 Perform copy propagation of memory loads and stores. This pass
4665 eliminates unnecessary copy operations in memory references
4666 (structures, global variables, arrays, etc). This flag is enabled
4667 by default at `-O2' and higher.
4670 Perform structural alias analysis on trees. This flag is enabled
4671 by default at `-O' and higher.
4674 Perform forward store motion on trees. This flag is enabled by
4675 default at `-O' and higher.
4678 Perform sparse conditional constant propagation (CCP) on trees.
4679 This pass only operates on local scalar variables and is enabled
4680 by default at `-O' and higher.
4683 Perform sparse conditional constant propagation (CCP) on trees.
4684 This pass operates on both local scalar variables and memory
4685 stores and loads (global variables, structures, arrays, etc).
4686 This flag is enabled by default at `-O2' and higher.
4689 Perform dead code elimination (DCE) on trees. This flag is
4690 enabled by default at `-O' and higher.
4692 `-ftree-dominator-opts'
4693 Perform a variety of simple scalar cleanups (constant/copy
4694 propagation, redundancy elimination, range propagation and
4695 expression simplification) based on a dominator tree traversal.
4696 This also performs jump threading (to reduce jumps to jumps). This
4697 flag is enabled by default at `-O' and higher.
4700 Perform loop header copying on trees. This is beneficial since it
4701 increases effectiveness of code motion optimizations. It also
4702 saves one jump. This flag is enabled by default at `-O' and
4703 higher. It is not enabled for `-Os', since it usually increases
4706 `-ftree-loop-optimize'
4707 Perform loop optimizations on trees. This flag is enabled by
4708 default at `-O' and higher.
4710 `-ftree-loop-linear'
4711 Perform linear loop transformations on tree. This flag can
4712 improve cache performance and allow further loop optimizations to
4716 Perform loop invariant motion on trees. This pass moves only
4717 invariants that would be hard to handle at RTL level (function
4718 calls, operations that expand to nontrivial sequences of insns).
4719 With `-funswitch-loops' it also moves operands of conditions that
4720 are invariant out of the loop, so that we can use just trivial
4721 invariantness analysis in loop unswitching. The pass also includes
4724 `-ftree-loop-ivcanon'
4725 Create a canonical counter for number of iterations in the loop
4726 for that determining number of iterations requires complicated
4727 analysis. Later optimizations then may determine the number
4728 easily. Useful especially in connection with unrolling.
4731 Perform induction variable optimizations (strength reduction,
4732 induction variable merging and induction variable elimination) on
4736 Perform scalar replacement of aggregates. This pass replaces
4737 structure references with scalars to prevent committing structures
4738 to memory too early. This flag is enabled by default at `-O' and
4742 Perform copy renaming on trees. This pass attempts to rename
4743 compiler temporaries to other variables at copy locations, usually
4744 resulting in variable names which more closely resemble the
4745 original variables. This flag is enabled by default at `-O' and
4749 Perform temporary expression replacement during the SSA->normal
4750 phase. Single use/single def temporaries are replaced at their
4751 use location with their defining expression. This results in
4752 non-GIMPLE code, but gives the expanders much more complex trees
4753 to work on resulting in better RTL generation. This is enabled by
4754 default at `-O' and higher.
4757 Perform live range splitting during the SSA->normal phase.
4758 Distinct live ranges of a variable are split into unique
4759 variables, allowing for better optimization later. This is
4760 enabled by default at `-O' and higher.
4763 Perform loop vectorization on trees.
4765 `-ftree-vect-loop-version'
4766 Perform loop versioning when doing loop vectorization on trees.
4767 When a loop appears to be vectorizable except that data alignment
4768 or data dependence cannot be determined at compile time then
4769 vectorized and non-vectorized versions of the loop are generated
4770 along with runtime checks for alignment or dependence to control
4771 which version is executed. This option is enabled by default
4772 except at level `-Os' where it is disabled.
4775 Perform Value Range Propagation on trees. This is similar to the
4776 constant propagation pass, but instead of values, ranges of values
4777 are propagated. This allows the optimizers to remove unnecessary
4778 range checks like array bound checks and null pointer checks.
4779 This is enabled by default at `-O2' and higher. Null pointer check
4780 elimination is only done if `-fdelete-null-pointer-checks' is
4784 Perform tail duplication to enlarge superblock size. This
4785 transformation simplifies the control flow of the function
4786 allowing other optimizations to do better job.
4789 Unroll loops whose number of iterations can be determined at
4790 compile time or upon entry to the loop. `-funroll-loops' implies
4791 both `-fstrength-reduce' and `-frerun-cse-after-loop'. This
4792 option makes code larger, and may or may not make it run faster.
4794 `-funroll-all-loops'
4795 Unroll all loops, even if their number of iterations is uncertain
4796 when the loop is entered. This usually makes programs run more
4797 slowly. `-funroll-all-loops' implies the same options as
4800 `-fsplit-ivs-in-unroller'
4801 Enables expressing of values of induction variables in later
4802 iterations of the unrolled loop using the value in the first
4803 iteration. This breaks long dependency chains, thus improving
4804 efficiency of the scheduling passes.
4806 Combination of `-fweb' and CSE is often sufficient to obtain the
4807 same effect. However in cases the loop body is more complicated
4808 than a single basic block, this is not reliable. It also does not
4809 work at all on some of the architectures due to restrictions in
4812 This optimization is enabled by default.
4814 `-fvariable-expansion-in-unroller'
4815 With this option, the compiler will create multiple copies of some
4816 local variables when unrolling a loop which can result in superior
4819 `-fprefetch-loop-arrays'
4820 If supported by the target machine, generate instructions to
4821 prefetch memory to improve the performance of loops that access
4824 These options may generate better or worse code; results are highly
4825 dependent on the structure of loops within the source code.
4829 Disable any machine-specific peephole optimizations. The
4830 difference between `-fno-peephole' and `-fno-peephole2' is in how
4831 they are implemented in the compiler; some targets use one, some
4832 use the other, a few use both.
4834 `-fpeephole' is enabled by default. `-fpeephole2' enabled at
4835 levels `-O2', `-O3', `-Os'.
4837 `-fno-guess-branch-probability'
4838 Do not guess branch probabilities using heuristics.
4840 GCC will use heuristics to guess branch probabilities if they are
4841 not provided by profiling feedback (`-fprofile-arcs'). These
4842 heuristics are based on the control flow graph. If some branch
4843 probabilities are specified by `__builtin_expect', then the
4844 heuristics will be used to guess branch probabilities for the rest
4845 of the control flow graph, taking the `__builtin_expect' info into
4846 account. The interactions between the heuristics and
4847 `__builtin_expect' can be complex, and in some cases, it may be
4848 useful to disable the heuristics so that the effects of
4849 `__builtin_expect' are easier to understand.
4851 The default is `-fguess-branch-probability' at levels `-O', `-O2',
4855 Reorder basic blocks in the compiled function in order to reduce
4856 number of taken branches and improve code locality.
4858 Enabled at levels `-O2', `-O3'.
4860 `-freorder-blocks-and-partition'
4861 In addition to reordering basic blocks in the compiled function,
4862 in order to reduce number of taken branches, partitions hot and
4863 cold basic blocks into separate sections of the assembly and .o
4864 files, to improve paging and cache locality performance.
4866 This optimization is automatically turned off in the presence of
4867 exception handling, for linkonce sections, for functions with a
4868 user-defined section attribute and on any architecture that does
4869 not support named sections.
4871 `-freorder-functions'
4872 Reorder functions in the object file in order to improve code
4873 locality. This is implemented by using special subsections
4874 `.text.hot' for most frequently executed functions and
4875 `.text.unlikely' for unlikely executed functions. Reordering is
4876 done by the linker so object file format must support named
4877 sections and linker must place them in a reasonable way.
4879 Also profile feedback must be available in to make this option
4880 effective. See `-fprofile-arcs' for details.
4882 Enabled at levels `-O2', `-O3', `-Os'.
4885 Allows the compiler to assume the strictest aliasing rules
4886 applicable to the language being compiled. For C (and C++), this
4887 activates optimizations based on the type of expressions. In
4888 particular, an object of one type is assumed never to reside at
4889 the same address as an object of a different type, unless the
4890 types are almost the same. For example, an `unsigned int' can
4891 alias an `int', but not a `void*' or a `double'. A character type
4892 may alias any other type.
4894 Pay special attention to code like this:
4905 The practice of reading from a different union member than the one
4906 most recently written to (called "type-punning") is common. Even
4907 with `-fstrict-aliasing', type-punning is allowed, provided the
4908 memory is accessed through the union type. So, the code above
4909 will work as expected. However, this code might not:
4918 Every language that wishes to perform language-specific alias
4919 analysis should define a function that computes, given an `tree'
4920 node, an alias set for the node. Nodes in different alias sets
4921 are not allowed to alias. For an example, see the C front-end
4922 function `c_get_alias_set'.
4924 Enabled at levels `-O2', `-O3', `-Os'.
4927 `-falign-functions=N'
4928 Align the start of functions to the next power-of-two greater than
4929 N, skipping up to N bytes. For instance, `-falign-functions=32'
4930 aligns functions to the next 32-byte boundary, but
4931 `-falign-functions=24' would align to the next 32-byte boundary
4932 only if this can be done by skipping 23 bytes or less.
4934 `-fno-align-functions' and `-falign-functions=1' are equivalent
4935 and mean that functions will not be aligned.
4937 Some assemblers only support this flag when N is a power of two;
4938 in that case, it is rounded up.
4940 If N is not specified or is zero, use a machine-dependent default.
4942 Enabled at levels `-O2', `-O3'.
4946 Align all branch targets to a power-of-two boundary, skipping up to
4947 N bytes like `-falign-functions'. This option can easily make
4948 code slower, because it must insert dummy operations for when the
4949 branch target is reached in the usual flow of the code.
4951 `-fno-align-labels' and `-falign-labels=1' are equivalent and mean
4952 that labels will not be aligned.
4954 If `-falign-loops' or `-falign-jumps' are applicable and are
4955 greater than this value, then their values are used instead.
4957 If N is not specified or is zero, use a machine-dependent default
4958 which is very likely to be `1', meaning no alignment.
4960 Enabled at levels `-O2', `-O3'.
4964 Align loops to a power-of-two boundary, skipping up to N bytes
4965 like `-falign-functions'. The hope is that the loop will be
4966 executed many times, which will make up for any execution of the
4969 `-fno-align-loops' and `-falign-loops=1' are equivalent and mean
4970 that loops will not be aligned.
4972 If N is not specified or is zero, use a machine-dependent default.
4974 Enabled at levels `-O2', `-O3'.
4978 Align branch targets to a power-of-two boundary, for branch targets
4979 where the targets can only be reached by jumping, skipping up to N
4980 bytes like `-falign-functions'. In this case, no dummy operations
4983 `-fno-align-jumps' and `-falign-jumps=1' are equivalent and mean
4984 that loops will not be aligned.
4986 If N is not specified or is zero, use a machine-dependent default.
4988 Enabled at levels `-O2', `-O3'.
4991 Parse the whole compilation unit before starting to produce code.
4992 This allows some extra optimizations to take place but consumes
4993 more memory (in general). There are some compatibility issues
4994 with _unit-at-at-time_ mode:
4995 * enabling _unit-at-a-time_ mode may change the order in which
4996 functions, variables, and top-level `asm' statements are
4997 emitted, and will likely break code relying on some particular
4998 ordering. The majority of such top-level `asm' statements,
4999 though, can be replaced by `section' attributes.
5001 * _unit-at-a-time_ mode removes unreferenced static variables
5002 and functions. This may result in undefined references when
5003 an `asm' statement refers directly to variables or functions
5004 that are otherwise unused. In that case either the
5005 variable/function shall be listed as an operand of the `asm'
5006 statement operand or, in the case of top-level `asm'
5007 statements the attribute `used' shall be used on the
5010 * Static functions now can use non-standard passing conventions
5011 that may break `asm' statements calling functions directly.
5012 Again, attribute `used' will prevent this behavior.
5014 As a temporary workaround, `-fno-unit-at-a-time' can be used, but
5015 this scheme may not be supported by future releases of GCC.
5017 Enabled at levels `-O2', `-O3'.
5020 Constructs webs as commonly used for register allocation purposes
5021 and assign each web individual pseudo register. This allows the
5022 register allocation pass to operate on pseudos directly, but also
5023 strengthens several other optimization passes, such as CSE, loop
5024 optimizer and trivial dead code remover. It can, however, make
5025 debugging impossible, since variables will no longer stay in a
5028 Enabled by default with `-funroll-loops'.
5031 Assume that the current compilation unit represents whole program
5032 being compiled. All public functions and variables with the
5033 exception of `main' and those merged by attribute
5034 `externally_visible' become static functions and in a affect gets
5035 more aggressively optimized by interprocedural optimizers. While
5036 this option is equivalent to proper use of `static' keyword for
5037 programs consisting of single file, in combination with option
5038 `--combine' this flag can be used to compile most of smaller scale
5039 C programs since the functions and variables become local for the
5040 whole combined compilation unit, not for the single source file
5043 `-fno-cprop-registers'
5044 After register allocation and post-register allocation instruction
5045 splitting, we perform a copy-propagation pass to try to reduce
5046 scheduling dependencies and occasionally eliminate the copy.
5048 Disabled at levels `-O', `-O2', `-O3', `-Os'.
5050 `-fprofile-generate'
5051 Enable options usually used for instrumenting application to
5052 produce profile useful for later recompilation with profile
5053 feedback based optimization. You must use `-fprofile-generate'
5054 both when compiling and when linking your program.
5056 The following options are enabled: `-fprofile-arcs',
5057 `-fprofile-values', `-fvpt'.
5060 Enable profile feedback directed optimizations, and optimizations
5061 generally profitable only with profile feedback available.
5063 The following options are enabled: `-fbranch-probabilities',
5064 `-fvpt', `-funroll-loops', `-fpeel-loops', `-ftracer',
5065 `-fno-loop-optimize'.
5068 The following options control compiler behavior regarding floating
5069 point arithmetic. These options trade off between speed and
5070 correctness. All must be specifically enabled.
5073 Do not store floating point variables in registers, and inhibit
5074 other options that might change whether a floating point value is
5075 taken from a register or memory.
5077 This option prevents undesirable excess precision on machines such
5078 as the 68000 where the floating registers (of the 68881) keep more
5079 precision than a `double' is supposed to have. Similarly for the
5080 x86 architecture. For most programs, the excess precision does
5081 only good, but a few programs rely on the precise definition of
5082 IEEE floating point. Use `-ffloat-store' for such programs, after
5083 modifying them to store all pertinent intermediate computations
5087 Sets `-fno-math-errno', `-funsafe-math-optimizations',
5088 `-fno-trapping-math', `-ffinite-math-only', `-fno-rounding-math',
5089 `-fno-signaling-nans' and `fcx-limited-range'.
5091 This option causes the preprocessor macro `__FAST_MATH__' to be
5094 This option should never be turned on by any `-O' option since it
5095 can result in incorrect output for programs which depend on an
5096 exact implementation of IEEE or ISO rules/specifications for math
5100 Do not set ERRNO after calling math functions that are executed
5101 with a single instruction, e.g., sqrt. A program that relies on
5102 IEEE exceptions for math error handling may want to use this flag
5103 for speed while maintaining IEEE arithmetic compatibility.
5105 This option should never be turned on by any `-O' option since it
5106 can result in incorrect output for programs which depend on an
5107 exact implementation of IEEE or ISO rules/specifications for math
5110 The default is `-fmath-errno'.
5112 On Darwin systems, the math library never sets `errno'. There is
5113 therefore no reason for the compiler to consider the possibility
5114 that it might, and `-fno-math-errno' is the default.
5116 `-funsafe-math-optimizations'
5117 Allow optimizations for floating-point arithmetic that (a) assume
5118 that arguments and results are valid and (b) may violate IEEE or
5119 ANSI standards. When used at link-time, it may include libraries
5120 or startup files that change the default FPU control word or other
5121 similar optimizations.
5123 This option should never be turned on by any `-O' option since it
5124 can result in incorrect output for programs which depend on an
5125 exact implementation of IEEE or ISO rules/specifications for math
5128 The default is `-fno-unsafe-math-optimizations'.
5130 `-ffinite-math-only'
5131 Allow optimizations for floating-point arithmetic that assume that
5132 arguments and results are not NaNs or +-Infs.
5134 This option should never be turned on by any `-O' option since it
5135 can result in incorrect output for programs which depend on an
5136 exact implementation of IEEE or ISO rules/specifications.
5138 The default is `-fno-finite-math-only'.
5140 `-fno-trapping-math'
5141 Compile code assuming that floating-point operations cannot
5142 generate user-visible traps. These traps include division by
5143 zero, overflow, underflow, inexact result and invalid operation.
5144 This option implies `-fno-signaling-nans'. Setting this option
5145 may allow faster code if one relies on "non-stop" IEEE arithmetic,
5148 This option should never be turned on by any `-O' option since it
5149 can result in incorrect output for programs which depend on an
5150 exact implementation of IEEE or ISO rules/specifications for math
5153 The default is `-ftrapping-math'.
5156 Disable transformations and optimizations that assume default
5157 floating point rounding behavior. This is round-to-zero for all
5158 floating point to integer conversions, and round-to-nearest for
5159 all other arithmetic truncations. This option should be specified
5160 for programs that change the FP rounding mode dynamically, or that
5161 may be executed with a non-default rounding mode. This option
5162 disables constant folding of floating point expressions at
5163 compile-time (which may be affected by rounding mode) and
5164 arithmetic transformations that are unsafe in the presence of
5165 sign-dependent rounding modes.
5167 The default is `-fno-rounding-math'.
5169 This option is experimental and does not currently guarantee to
5170 disable all GCC optimizations that are affected by rounding mode.
5171 Future versions of GCC may provide finer control of this setting
5172 using C99's `FENV_ACCESS' pragma. This command line option will
5173 be used to specify the default state for `FENV_ACCESS'.
5176 Compile code assuming that IEEE signaling NaNs may generate
5177 user-visible traps during floating-point operations. Setting this
5178 option disables optimizations that may change the number of
5179 exceptions visible with signaling NaNs. This option implies
5182 This option causes the preprocessor macro `__SUPPORT_SNAN__' to be
5185 The default is `-fno-signaling-nans'.
5187 This option is experimental and does not currently guarantee to
5188 disable all GCC optimizations that affect signaling NaN behavior.
5190 `-fsingle-precision-constant'
5191 Treat floating point constant as single precision constant instead
5192 of implicitly converting it to double precision constant.
5194 `-fcx-limited-range'
5195 `-fno-cx-limited-range'
5196 When enabled, this option states that a range reduction step is not
5197 needed when performing complex division. The default is
5198 `-fno-cx-limited-range', but is enabled by `-ffast-math'.
5200 This option controls the default setting of the ISO C99
5201 `CX_LIMITED_RANGE' pragma. Nevertheless, the option applies to
5205 The following options control optimizations that may improve
5206 performance, but are not enabled by any `-O' options. This section
5207 includes experimental options that may produce broken code.
5209 `-fbranch-probabilities'
5210 After running a program compiled with `-fprofile-arcs' (*note
5211 Options for Debugging Your Program or `gcc': Debugging Options.),
5212 you can compile it a second time using `-fbranch-probabilities',
5213 to improve optimizations based on the number of times each branch
5214 was taken. When the program compiled with `-fprofile-arcs' exits
5215 it saves arc execution counts to a file called `SOURCENAME.gcda'
5216 for each source file The information in this data file is very
5217 dependent on the structure of the generated code, so you must use
5218 the same source code and the same optimization options for both
5221 With `-fbranch-probabilities', GCC puts a `REG_BR_PROB' note on
5222 each `JUMP_INSN' and `CALL_INSN'. These can be used to improve
5223 optimization. Currently, they are only used in one place: in
5224 `reorg.c', instead of guessing which path a branch is mostly to
5225 take, the `REG_BR_PROB' values are used to exactly determine which
5226 path is taken more often.
5229 If combined with `-fprofile-arcs', it adds code so that some data
5230 about values of expressions in the program is gathered.
5232 With `-fbranch-probabilities', it reads back the data gathered
5233 from profiling values of expressions and adds `REG_VALUE_PROFILE'
5234 notes to instructions for their later usage in optimizations.
5236 Enabled with `-fprofile-generate' and `-fprofile-use'.
5239 If combined with `-fprofile-arcs', it instructs the compiler to add
5240 a code to gather information about values of expressions.
5242 With `-fbranch-probabilities', it reads back the data gathered and
5243 actually performs the optimizations based on them. Currently the
5244 optimizations include specialization of division operation using
5245 the knowledge about the value of the denominator.
5247 `-frename-registers'
5248 Attempt to avoid false dependencies in scheduled code by making use
5249 of registers left over after register allocation. This
5250 optimization will most benefit processors with lots of registers.
5251 Depending on the debug information format adopted by the target,
5252 however, it can make debugging impossible, since variables will no
5253 longer stay in a "home register".
5255 Enabled by default with `-funroll-loops'.
5258 Perform tail duplication to enlarge superblock size. This
5259 transformation simplifies the control flow of the function
5260 allowing other optimizations to do better job.
5262 Enabled with `-fprofile-use'.
5265 Unroll loops whose number of iterations can be determined at
5266 compile time or upon entry to the loop. `-funroll-loops' implies
5267 `-frerun-cse-after-loop', `-fweb' and `-frename-registers'. It
5268 also turns on complete loop peeling (i.e. complete removal of
5269 loops with small constant number of iterations). This option
5270 makes code larger, and may or may not make it run faster.
5272 Enabled with `-fprofile-use'.
5274 `-funroll-all-loops'
5275 Unroll all loops, even if their number of iterations is uncertain
5276 when the loop is entered. This usually makes programs run more
5277 slowly. `-funroll-all-loops' implies the same options as
5281 Peels the loops for that there is enough information that they do
5282 not roll much (from profile feedback). It also turns on complete
5283 loop peeling (i.e. complete removal of loops with small constant
5284 number of iterations).
5286 Enabled with `-fprofile-use'.
5288 `-fmove-loop-invariants'
5289 Enables the loop invariant motion pass in the new loop optimizer.
5290 Enabled at level `-O1'
5293 Move branches with loop invariant conditions out of the loop, with
5294 duplicates of the loop on both branches (modified according to
5295 result of the condition).
5297 `-fprefetch-loop-arrays'
5298 If supported by the target machine, generate instructions to
5299 prefetch memory to improve the performance of loops that access
5302 Disabled at level `-Os'.
5304 `-ffunction-sections'
5306 Place each function or data item into its own section in the output
5307 file if the target supports arbitrary sections. The name of the
5308 function or the name of the data item determines the section's name
5311 Use these options on systems where the linker can perform
5312 optimizations to improve locality of reference in the instruction
5313 space. Most systems using the ELF object format and SPARC
5314 processors running Solaris 2 have linkers with such optimizations.
5315 AIX may have these optimizations in the future.
5317 Only use these options when there are significant benefits from
5318 doing so. When you specify these options, the assembler and
5319 linker will create larger object and executable files and will
5320 also be slower. You will not be able to use `gprof' on all
5321 systems if you specify this option and you may have problems with
5322 debugging if you specify both this option and `-g'.
5324 `-fbranch-target-load-optimize'
5325 Perform branch target register load optimization before prologue /
5326 epilogue threading. The use of target registers can typically be
5327 exposed only during reload, thus hoisting loads out of loops and
5328 doing inter-block scheduling needs a separate optimization pass.
5330 `-fbranch-target-load-optimize2'
5331 Perform branch target register load optimization after prologue /
5334 `-fbtr-bb-exclusive'
5335 When performing branch target register load optimization, don't
5336 reuse branch target registers in within any basic block.
5339 Emit extra code to check for buffer overflows, such as stack
5340 smashing attacks. This is done by adding a guard variable to
5341 functions with vulnerable objects. This includes functions that
5342 call alloca, and functions with buffers larger than 8 bytes. The
5343 guards are initialized when a function is entered and then checked
5344 when the function exits. If a guard check fails, an error message
5345 is printed and the program exits.
5347 `-fstack-protector-all'
5348 Like `-fstack-protector' except that all functions are protected.
5350 `--param NAME=VALUE'
5351 In some places, GCC uses various constants to control the amount of
5352 optimization that is done. For example, GCC will not inline
5353 functions that contain more that a certain number of instructions.
5354 You can control some of these constants on the command-line using
5355 the `--param' option.
5357 The names of specific parameters, and the meaning of the values,
5358 are tied to the internals of the compiler, and are subject to
5359 change without notice in future releases.
5361 In each case, the VALUE is an integer. The allowable choices for
5362 NAME are given in the following table:
5364 `salias-max-implicit-fields'
5365 The maximum number of fields in a variable without direct
5366 structure accesses for which structure aliasing will consider
5367 trying to track each field. The default is 5
5369 `sra-max-structure-size'
5370 The maximum structure size, in bytes, at which the scalar
5371 replacement of aggregates (SRA) optimization will perform
5372 block copies. The default value, 0, implies that GCC will
5373 select the most appropriate size itself.
5375 `sra-field-structure-ratio'
5376 The threshold ratio (as a percentage) between instantiated
5377 fields and the complete structure size. We say that if the
5378 ratio of the number of bytes in instantiated fields to the
5379 number of bytes in the complete structure exceeds this
5380 parameter, then block copies are not used. The default is 75.
5382 `max-crossjump-edges'
5383 The maximum number of incoming edges to consider for
5384 crossjumping. The algorithm used by `-fcrossjumping' is
5385 O(N^2) in the number of edges incoming to each block.
5386 Increasing values mean more aggressive optimization, making
5387 the compile time increase with probably small improvement in
5390 `min-crossjump-insns'
5391 The minimum number of instructions which must be matched at
5392 the end of two blocks before crossjumping will be performed
5393 on them. This value is ignored in the case where all
5394 instructions in the block being crossjumped from are matched.
5395 The default value is 5.
5397 `max-grow-copy-bb-insns'
5398 The maximum code size expansion factor when copying basic
5399 blocks instead of jumping. The expansion is relative to a
5400 jump instruction. The default value is 8.
5402 `max-goto-duplication-insns'
5403 The maximum number of instructions to duplicate to a block
5404 that jumps to a computed goto. To avoid O(N^2) behavior in a
5405 number of passes, GCC factors computed gotos early in the
5406 compilation process, and unfactors them as late as possible.
5407 Only computed jumps at the end of a basic blocks with no more
5408 than max-goto-duplication-insns are unfactored. The default
5411 `max-delay-slot-insn-search'
5412 The maximum number of instructions to consider when looking
5413 for an instruction to fill a delay slot. If more than this
5414 arbitrary number of instructions is searched, the time
5415 savings from filling the delay slot will be minimal so stop
5416 searching. Increasing values mean more aggressive
5417 optimization, making the compile time increase with probably
5418 small improvement in executable run time.
5420 `max-delay-slot-live-search'
5421 When trying to fill delay slots, the maximum number of
5422 instructions to consider when searching for a block with
5423 valid live register information. Increasing this arbitrarily
5424 chosen value means more aggressive optimization, increasing
5425 the compile time. This parameter should be removed when the
5426 delay slot code is rewritten to maintain the control-flow
5430 The approximate maximum amount of memory that will be
5431 allocated in order to perform the global common subexpression
5432 elimination optimization. If more memory than specified is
5433 required, the optimization will not be done.
5436 The maximum number of passes of GCSE to run. The default is
5439 `max-pending-list-length'
5440 The maximum number of pending dependencies scheduling will
5441 allow before flushing the current state and starting over.
5442 Large functions with few branches or calls can create
5443 excessively large lists which needlessly consume memory and
5446 `max-inline-insns-single'
5447 Several parameters control the tree inliner used in gcc.
5448 This number sets the maximum number of instructions (counted
5449 in GCC's internal representation) in a single function that
5450 the tree inliner will consider for inlining. This only
5451 affects functions declared inline and methods implemented in
5452 a class declaration (C++). The default value is 450.
5454 `max-inline-insns-auto'
5455 When you use `-finline-functions' (included in `-O3'), a lot
5456 of functions that would otherwise not be considered for
5457 inlining by the compiler will be investigated. To those
5458 functions, a different (more restrictive) limit compared to
5459 functions declared inline can be applied. The default value
5462 `large-function-insns'
5463 The limit specifying really large functions. For functions
5464 larger than this limit after inlining inlining is constrained
5465 by `--param large-function-growth'. This parameter is useful
5466 primarily to avoid extreme compilation time caused by
5467 non-linear algorithms used by the backend. This parameter is
5468 ignored when `-funit-at-a-time' is not used. The default
5471 `large-function-growth'
5472 Specifies maximal growth of large function caused by inlining
5473 in percents. This parameter is ignored when
5474 `-funit-at-a-time' is not used. The default value is 100
5475 which limits large function growth to 2.0 times the original
5479 The limit specifying large translation unit. Growth caused
5480 by inlining of units larger than this limit is limited by
5481 `--param inline-unit-growth'. For small units this might be
5482 too tight (consider unit consisting of function A that is
5483 inline and B that just calls A three time. If B is small
5484 relative to A, the growth of unit is 300\% and yet such
5485 inlining is very sane. For very large units consisting of
5486 small inlininable functions however the overall unit growth
5487 limit is needed to avoid exponential explosion of code size.
5488 Thus for smaller units, the size is increased to `--param
5489 large-unit-insns' before aplying `--param
5490 inline-unit-growth'. The default is 10000
5492 `inline-unit-growth'
5493 Specifies maximal overall growth of the compilation unit
5494 caused by inlining. This parameter is ignored when
5495 `-funit-at-a-time' is not used. The default value is 50
5496 which limits unit growth to 1.5 times the original size.
5498 `max-inline-insns-recursive'
5499 `max-inline-insns-recursive-auto'
5500 Specifies maximum number of instructions out-of-line copy of
5501 self recursive inline function can grow into by performing
5504 For functions declared inline `--param
5505 max-inline-insns-recursive' is taken into acount. For
5506 function not declared inline, recursive inlining happens only
5507 when `-finline-functions' (included in `-O3') is enabled and
5508 `--param max-inline-insns-recursive-auto' is used. The
5509 default value is 450.
5511 `max-inline-recursive-depth'
5512 `max-inline-recursive-depth-auto'
5513 Specifies maximum recursion depth used by the recursive
5516 For functions declared inline `--param
5517 max-inline-recursive-depth' is taken into acount. For
5518 function not declared inline, recursive inlining happens only
5519 when `-finline-functions' (included in `-O3') is enabled and
5520 `--param max-inline-recursive-depth-auto' is used. The
5521 default value is 450.
5523 `min-inline-recursive-probability'
5524 Recursive inlining is profitable only for function having
5525 deep recursion in average and can hurt for function having
5526 little recursion depth by increasing the prologue size or
5527 complexity of function body to other optimizers.
5529 When profile feedback is available (see `-fprofile-generate')
5530 the actual recursion depth can be guessed from probability
5531 that function will recurse via given call expression. This
5532 parameter limits inlining only to call expression whose
5533 probability exceeds given threshold (in percents). The
5534 default value is 10.
5537 Specify cost of call instruction relative to simple
5538 arithmetics operations (having cost of 1). Increasing this
5539 cost disqualifies inlining of non-leaf functions and at the
5540 same time increases size of leaf function that is believed to
5541 reduce function size by being inlined. In effect it
5542 increases amount of inlining for code having large
5543 abstraction penalty (many functions that just pass the
5544 arguments to other functions) and decrease inlining for code
5545 with low abstraction penalty. The default value is 16.
5547 `max-unrolled-insns'
5548 The maximum number of instructions that a loop should have if
5549 that loop is unrolled, and if the loop is unrolled, it
5550 determines how many times the loop code is unrolled.
5552 `max-average-unrolled-insns'
5553 The maximum number of instructions biased by probabilities of
5554 their execution that a loop should have if that loop is
5555 unrolled, and if the loop is unrolled, it determines how many
5556 times the loop code is unrolled.
5559 The maximum number of unrollings of a single loop.
5562 The maximum number of instructions that a loop should have if
5563 that loop is peeled, and if the loop is peeled, it determines
5564 how many times the loop code is peeled.
5567 The maximum number of peelings of a single loop.
5569 `max-completely-peeled-insns'
5570 The maximum number of insns of a completely peeled loop.
5572 `max-completely-peel-times'
5573 The maximum number of iterations of a loop to be suitable for
5576 `max-unswitch-insns'
5577 The maximum number of insns of an unswitched loop.
5579 `max-unswitch-level'
5580 The maximum number of branches unswitched in a single loop.
5583 The minimum cost of an expensive expression in the loop
5586 `iv-consider-all-candidates-bound'
5587 Bound on number of candidates for induction variables below
5588 that all candidates are considered for each use in induction
5589 variable optimizations. Only the most relevant candidates
5590 are considered if there are more candidates, to avoid
5591 quadratic time complexity.
5593 `iv-max-considered-uses'
5594 The induction variable optimizations give up on loops that
5595 contain more induction variable uses.
5597 `iv-always-prune-cand-set-bound'
5598 If number of candidates in the set is smaller than this value,
5599 we always try to remove unnecessary ivs from the set during
5600 its optimization when a new iv is added to the set.
5602 `scev-max-expr-size'
5603 Bound on size of expressions used in the scalar evolutions
5604 analyzer. Large expressions slow the analyzer.
5606 `vect-max-version-checks'
5607 The maximum number of runtime checks that can be performed
5608 when doing loop versioning in the vectorizer. See option
5609 ftree-vect-loop-version for more information.
5611 `max-iterations-to-track'
5612 The maximum number of iterations of a loop the brute force
5613 algorithm for analysis of # of iterations of the loop tries
5616 `hot-bb-count-fraction'
5617 Select fraction of the maximal count of repetitions of basic
5618 block in program given basic block needs to have to be
5621 `hot-bb-frequency-fraction'
5622 Select fraction of the maximal frequency of executions of
5623 basic block in function given basic block needs to have to be
5626 `max-predicted-iterations'
5627 The maximum number of loop iterations we predict statically.
5628 This is useful in cases where function contain single loop
5629 with known bound and other loop with unknown. We predict the
5630 known number of iterations correctly, while the unknown
5631 number of iterations average to roughly 10. This means that
5632 the loop without bounds would appear artificially cold
5633 relative to the other one.
5635 `tracer-dynamic-coverage'
5636 `tracer-dynamic-coverage-feedback'
5637 This value is used to limit superblock formation once the
5638 given percentage of executed instructions is covered. This
5639 limits unnecessary code size expansion.
5641 The `tracer-dynamic-coverage-feedback' is used only when
5642 profile feedback is available. The real profiles (as opposed
5643 to statically estimated ones) are much less balanced allowing
5644 the threshold to be larger value.
5646 `tracer-max-code-growth'
5647 Stop tail duplication once code growth has reached given
5648 percentage. This is rather hokey argument, as most of the
5649 duplicates will be eliminated later in cross jumping, so it
5650 may be set to much higher values than is the desired code
5653 `tracer-min-branch-ratio'
5654 Stop reverse growth when the reverse probability of best edge
5655 is less than this threshold (in percent).
5657 `tracer-min-branch-ratio'
5658 `tracer-min-branch-ratio-feedback'
5659 Stop forward growth if the best edge do have probability
5660 lower than this threshold.
5662 Similarly to `tracer-dynamic-coverage' two values are
5663 present, one for compilation for profile feedback and one for
5664 compilation without. The value for compilation with profile
5665 feedback needs to be more conservative (higher) in order to
5666 make tracer effective.
5668 `max-cse-path-length'
5669 Maximum number of basic blocks on path that cse considers.
5673 The maximum instructions CSE process before flushing. The
5676 `global-var-threshold'
5677 Counts the number of function calls (N) and the number of
5678 call-clobbered variables (V). If NxV is larger than this
5679 limit, a single artificial variable will be created to
5680 represent all the call-clobbered variables at function call
5681 sites. This artificial variable will then be made to alias
5682 every call-clobbered variable. (done as `int * size_t' on
5683 the host machine; beware overflow).
5686 Maximum number of virtual operands allowed to represent
5687 aliases before triggering the alias grouping heuristic.
5688 Alias grouping reduces compile times and memory consumption
5689 needed for aliasing at the expense of precision loss in alias
5693 GCC uses a garbage collector to manage its own memory
5694 allocation. This parameter specifies the minimum percentage
5695 by which the garbage collector's heap should be allowed to
5696 expand between collections. Tuning this may improve
5697 compilation speed; it has no effect on code generation.
5699 The default is 30% + 70% * (RAM/1GB) with an upper bound of
5700 100% when RAM >= 1GB. If `getrlimit' is available, the
5701 notion of "RAM" is the smallest of actual RAM and
5702 `RLIMIT_DATA' or `RLIMIT_AS'. If GCC is not able to
5703 calculate RAM on a particular platform, the lower bound of
5704 30% is used. Setting this parameter and `ggc-min-heapsize'
5705 to zero causes a full collection to occur at every
5706 opportunity. This is extremely slow, but can be useful for
5710 Minimum size of the garbage collector's heap before it begins
5711 bothering to collect garbage. The first collection occurs
5712 after the heap expands by `ggc-min-expand'% beyond
5713 `ggc-min-heapsize'. Again, tuning this may improve
5714 compilation speed, and has no effect on code generation.
5716 The default is the smaller of RAM/8, RLIMIT_RSS, or a limit
5717 which tries to ensure that RLIMIT_DATA or RLIMIT_AS are not
5718 exceeded, but with a lower bound of 4096 (four megabytes) and
5719 an upper bound of 131072 (128 megabytes). If GCC is not able
5720 to calculate RAM on a particular platform, the lower bound is
5721 used. Setting this parameter very large effectively disables
5722 garbage collection. Setting this parameter and
5723 `ggc-min-expand' to zero causes a full collection to occur at
5726 `max-reload-search-insns'
5727 The maximum number of instruction reload should look backward
5728 for equivalent register. Increasing values mean more
5729 aggressive optimization, making the compile time increase
5730 with probably slightly better performance. The default value
5733 `max-cselib-memory-location'
5734 The maximum number of memory locations cselib should take
5735 into acount. Increasing values mean more aggressive
5736 optimization, making the compile time increase with probably
5737 slightly better performance. The default value is 500.
5739 `max-flow-memory-location'
5740 Similar as `max-cselib-memory-location' but for dataflow
5741 liveness. The default value is 100.
5743 `reorder-blocks-duplicate'
5744 `reorder-blocks-duplicate-feedback'
5745 Used by basic block reordering pass to decide whether to use
5746 unconditional branch or duplicate the code on its
5747 destination. Code is duplicated when its estimated size is
5748 smaller than this value multiplied by the estimated size of
5749 unconditional jump in the hot spots of the program.
5751 The `reorder-block-duplicate-feedback' is used only when
5752 profile feedback is available and may be set to higher values
5753 than `reorder-block-duplicate' since information about the
5754 hot spots is more accurate.
5756 `max-sched-region-blocks'
5757 The maximum number of blocks in a region to be considered for
5758 interblock scheduling. The default value is 10.
5760 `max-sched-region-insns'
5761 The maximum number of insns in a region to be considered for
5762 interblock scheduling. The default value is 100.
5765 The minimum probability of reaching a source block for
5766 interblock speculative scheduling. The default value is 40.
5768 `max-last-value-rtl'
5769 The maximum size measured as number of RTLs that can be
5770 recorded in an expression in combiner for a pseudo register
5771 as last known value of that register. The default is 10000.
5773 `integer-share-limit'
5774 Small integer constants can use a shared data structure,
5775 reducing the compiler's memory usage and increasing its
5776 speed. This sets the maximum value of a shared integer
5777 constant's. The default value is 256.
5779 `min-virtual-mappings'
5780 Specifies the minimum number of virtual mappings in the
5781 incremental SSA updater that should be registered to trigger
5782 the virtual mappings heuristic defined by
5783 virtual-mappings-ratio. The default value is 100.
5785 `virtual-mappings-ratio'
5786 If the number of virtual mappings is virtual-mappings-ratio
5787 bigger than the number of virtual symbols to be updated, then
5788 the incremental SSA updater switches to a full update for
5789 those symbols. The default ratio is 3.
5792 The minimum size of buffers (i.e. arrays) that will receive
5793 stack smashing protection when `-fstack-protection' is used.
5795 `max-jump-thread-duplication-stmts'
5796 Maximum number of statements allowed in a block that needs to
5797 be duplicated when threading jumps.
5799 `max-fields-for-field-sensitive'
5800 Maximum number of fields in a structure we will treat in a
5801 field sensitive manner during pointer analysis.
5805 File: gcc.info, Node: Preprocessor Options, Next: Assembler Options, Prev: Optimize Options, Up: Invoking GCC
5807 3.11 Options Controlling the Preprocessor
5808 =========================================
5810 These options control the C preprocessor, which is run on each C source
5811 file before actual compilation.
5813 If you use the `-E' option, nothing is done except preprocessing.
5814 Some of these options make sense only together with `-E' because they
5815 cause the preprocessor output to be unsuitable for actual compilation.
5817 You can use `-Wp,OPTION' to bypass the compiler driver and pass
5818 OPTION directly through to the preprocessor. If OPTION contains
5819 commas, it is split into multiple options at the commas. However,
5820 many options are modified, translated or interpreted by the
5821 compiler driver before being passed to the preprocessor, and `-Wp'
5822 forcibly bypasses this phase. The preprocessor's direct interface
5823 is undocumented and subject to change, so whenever possible you
5824 should avoid using `-Wp' and let the driver handle the options
5827 `-Xpreprocessor OPTION'
5828 Pass OPTION as an option to the preprocessor. You can use this to
5829 supply system-specific preprocessor options which GCC does not
5830 know how to recognize.
5832 If you want to pass an option that takes an argument, you must use
5833 `-Xpreprocessor' twice, once for the option and once for the
5837 Predefine NAME as a macro, with definition `1'.
5839 `-D NAME=DEFINITION'
5840 The contents of DEFINITION are tokenized and processed as if they
5841 appeared during translation phase three in a `#define' directive.
5842 In particular, the definition will be truncated by embedded
5845 If you are invoking the preprocessor from a shell or shell-like
5846 program you may need to use the shell's quoting syntax to protect
5847 characters such as spaces that have a meaning in the shell syntax.
5849 If you wish to define a function-like macro on the command line,
5850 write its argument list with surrounding parentheses before the
5851 equals sign (if any). Parentheses are meaningful to most shells,
5852 so you will need to quote the option. With `sh' and `csh',
5853 `-D'NAME(ARGS...)=DEFINITION'' works.
5855 `-D' and `-U' options are processed in the order they are given on
5856 the command line. All `-imacros FILE' and `-include FILE' options
5857 are processed after all `-D' and `-U' options.
5860 Cancel any previous definition of NAME, either built in or
5861 provided with a `-D' option.
5864 Do not predefine any system-specific or GCC-specific macros. The
5865 standard predefined macros remain defined.
5868 Add the directory DIR to the list of directories to be searched
5869 for header files. Directories named by `-I' are searched before
5870 the standard system include directories. If the directory DIR is
5871 a standard system include directory, the option is ignored to
5872 ensure that the default search order for system directories and
5873 the special treatment of system headers are not defeated .
5876 Write output to FILE. This is the same as specifying FILE as the
5877 second non-option argument to `cpp'. `gcc' has a different
5878 interpretation of a second non-option argument, so you must use
5879 `-o' to specify the output file.
5882 Turns on all optional warnings which are desirable for normal code.
5883 At present this is `-Wcomment', `-Wtrigraphs', `-Wmultichar' and a
5884 warning about integer promotion causing a change of sign in `#if'
5885 expressions. Note that many of the preprocessor's warnings are on
5886 by default and have no options to control them.
5890 Warn whenever a comment-start sequence `/*' appears in a `/*'
5891 comment, or whenever a backslash-newline appears in a `//' comment.
5892 (Both forms have the same effect.)
5895 Most trigraphs in comments cannot affect the meaning of the
5896 program. However, a trigraph that would form an escaped newline
5897 (`??/' at the end of a line) can, by changing where the comment
5898 begins or ends. Therefore, only trigraphs that would form escaped
5899 newlines produce warnings inside a comment.
5901 This option is implied by `-Wall'. If `-Wall' is not given, this
5902 option is still enabled unless trigraphs are enabled. To get
5903 trigraph conversion without warnings, but get the other `-Wall'
5904 warnings, use `-trigraphs -Wall -Wno-trigraphs'.
5907 Warn about certain constructs that behave differently in
5908 traditional and ISO C. Also warn about ISO C constructs that have
5909 no traditional C equivalent, and problematic constructs which
5913 Warn the first time `#import' is used.
5916 Warn whenever an identifier which is not a macro is encountered in
5917 an `#if' directive, outside of `defined'. Such identifiers are
5921 Warn about macros defined in the main file that are unused. A
5922 macro is "used" if it is expanded or tested for existence at least
5923 once. The preprocessor will also warn if the macro has not been
5924 used at the time it is redefined or undefined.
5926 Built-in macros, macros defined on the command line, and macros
5927 defined in include files are not warned about.
5929 _Note:_ If a macro is actually used, but only used in skipped
5930 conditional blocks, then CPP will report it as unused. To avoid
5931 the warning in such a case, you might improve the scope of the
5932 macro's definition by, for example, moving it into the first
5933 skipped block. Alternatively, you could provide a dummy use with
5936 #if defined the_macro_causing_the_warning
5940 Warn whenever an `#else' or an `#endif' are followed by text.
5941 This usually happens in code of the form
5949 The second and third `FOO' should be in comments, but often are not
5950 in older programs. This warning is on by default.
5953 Make all warnings into hard errors. Source code which triggers
5954 warnings will be rejected.
5957 Issue warnings for code in system headers. These are normally
5958 unhelpful in finding bugs in your own code, therefore suppressed.
5959 If you are responsible for the system library, you may want to see
5963 Suppress all warnings, including those which GNU CPP issues by
5967 Issue all the mandatory diagnostics listed in the C standard.
5968 Some of them are left out by default, since they trigger
5969 frequently on harmless code.
5972 Issue all the mandatory diagnostics, and make all mandatory
5973 diagnostics into errors. This includes mandatory diagnostics that
5974 GCC issues without `-pedantic' but treats as warnings.
5977 Instead of outputting the result of preprocessing, output a rule
5978 suitable for `make' describing the dependencies of the main source
5979 file. The preprocessor outputs one `make' rule containing the
5980 object file name for that source file, a colon, and the names of
5981 all the included files, including those coming from `-include' or
5982 `-imacros' command line options.
5984 Unless specified explicitly (with `-MT' or `-MQ'), the object file
5985 name consists of the basename of the source file with any suffix
5986 replaced with object file suffix. If there are many included
5987 files then the rule is split into several lines using `\'-newline.
5988 The rule has no commands.
5990 This option does not suppress the preprocessor's debug output,
5991 such as `-dM'. To avoid mixing such debug output with the
5992 dependency rules you should explicitly specify the dependency
5993 output file with `-MF', or use an environment variable like
5994 `DEPENDENCIES_OUTPUT' (*note Environment Variables::). Debug
5995 output will still be sent to the regular output stream as normal.
5997 Passing `-M' to the driver implies `-E', and suppresses warnings
5998 with an implicit `-w'.
6001 Like `-M' but do not mention header files that are found in system
6002 header directories, nor header files that are included, directly
6003 or indirectly, from such a header.
6005 This implies that the choice of angle brackets or double quotes in
6006 an `#include' directive does not in itself determine whether that
6007 header will appear in `-MM' dependency output. This is a slight
6008 change in semantics from GCC versions 3.0 and earlier.
6011 When used with `-M' or `-MM', specifies a file to write the
6012 dependencies to. If no `-MF' switch is given the preprocessor
6013 sends the rules to the same place it would have sent preprocessed
6016 When used with the driver options `-MD' or `-MMD', `-MF' overrides
6017 the default dependency output file.
6020 In conjunction with an option such as `-M' requesting dependency
6021 generation, `-MG' assumes missing header files are generated files
6022 and adds them to the dependency list without raising an error.
6023 The dependency filename is taken directly from the `#include'
6024 directive without prepending any path. `-MG' also suppresses
6025 preprocessed output, as a missing header file renders this useless.
6027 This feature is used in automatic updating of makefiles.
6030 This option instructs CPP to add a phony target for each dependency
6031 other than the main file, causing each to depend on nothing. These
6032 dummy rules work around errors `make' gives if you remove header
6033 files without updating the `Makefile' to match.
6035 This is typical output:
6037 test.o: test.c test.h
6042 Change the target of the rule emitted by dependency generation. By
6043 default CPP takes the name of the main input file, including any
6044 path, deletes any file suffix such as `.c', and appends the
6045 platform's usual object suffix. The result is the target.
6047 An `-MT' option will set the target to be exactly the string you
6048 specify. If you want multiple targets, you can specify them as a
6049 single argument to `-MT', or use multiple `-MT' options.
6051 For example, `-MT '$(objpfx)foo.o'' might give
6053 $(objpfx)foo.o: foo.c
6056 Same as `-MT', but it quotes any characters which are special to
6057 Make. `-MQ '$(objpfx)foo.o'' gives
6059 $$(objpfx)foo.o: foo.c
6061 The default target is automatically quoted, as if it were given
6065 `-MD' is equivalent to `-M -MF FILE', except that `-E' is not
6066 implied. The driver determines FILE based on whether an `-o'
6067 option is given. If it is, the driver uses its argument but with
6068 a suffix of `.d', otherwise it take the basename of the input file
6069 and applies a `.d' suffix.
6071 If `-MD' is used in conjunction with `-E', any `-o' switch is
6072 understood to specify the dependency output file (but *note -MF:
6073 dashMF.), but if used without `-E', each `-o' is understood to
6074 specify a target object file.
6076 Since `-E' is not implied, `-MD' can be used to generate a
6077 dependency output file as a side-effect of the compilation process.
6080 Like `-MD' except mention only user header files, not system
6084 When using precompiled headers (*note Precompiled Headers::), this
6085 flag will cause the dependency-output flags to also list the files
6086 from the precompiled header's dependencies. If not specified only
6087 the precompiled header would be listed and not the files that were
6088 used to create it because those files are not consulted when a
6089 precompiled header is used.
6092 This option allows use of a precompiled header (*note Precompiled
6093 Headers::) together with `-E'. It inserts a special `#pragma',
6094 `#pragma GCC pch_preprocess "<filename>"' in the output to mark
6095 the place where the precompiled header was found, and its
6096 filename. When `-fpreprocessed' is in use, GCC recognizes this
6097 `#pragma' and loads the PCH.
6099 This option is off by default, because the resulting preprocessed
6100 output is only really suitable as input to GCC. It is switched on
6103 You should not write this `#pragma' in your own code, but it is
6104 safe to edit the filename if the PCH file is available in a
6105 different location. The filename may be absolute or it may be
6106 relative to GCC's current directory.
6111 `-x assembler-with-cpp'
6112 Specify the source language: C, C++, Objective-C, or assembly.
6113 This has nothing to do with standards conformance or extensions;
6114 it merely selects which base syntax to expect. If you give none
6115 of these options, cpp will deduce the language from the extension
6116 of the source file: `.c', `.cc', `.m', or `.S'. Some other common
6117 extensions for C++ and assembly are also recognized. If cpp does
6118 not recognize the extension, it will treat the file as C; this is
6119 the most generic mode.
6121 _Note:_ Previous versions of cpp accepted a `-lang' option which
6122 selected both the language and the standards conformance level.
6123 This option has been removed, because it conflicts with the `-l'
6128 Specify the standard to which the code should conform. Currently
6129 CPP knows about C and C++ standards; others may be added in the
6132 STANDARD may be one of:
6135 The ISO C standard from 1990. `c89' is the customary
6136 shorthand for this version of the standard.
6138 The `-ansi' option is equivalent to `-std=c89'.
6141 The 1990 C standard, as amended in 1994.
6147 The revised ISO C standard, published in December 1999.
6148 Before publication, this was known as C9X.
6151 The 1990 C standard plus GNU extensions. This is the default.
6155 The 1999 C standard plus GNU extensions.
6158 The 1998 ISO C++ standard plus amendments.
6161 The same as `-std=c++98' plus GNU extensions. This is the
6162 default for C++ code.
6165 Split the include path. Any directories specified with `-I'
6166 options before `-I-' are searched only for headers requested with
6167 `#include "FILE"'; they are not searched for `#include <FILE>'.
6168 If additional directories are specified with `-I' options after
6169 the `-I-', those directories are searched for all `#include'
6172 In addition, `-I-' inhibits the use of the directory of the current
6173 file directory as the first search directory for `#include "FILE"'.
6174 This option has been deprecated.
6177 Do not search the standard system directories for header files.
6178 Only the directories you have specified with `-I' options (and the
6179 directory of the current file, if appropriate) are searched.
6182 Do not search for header files in the C++-specific standard
6183 directories, but do still search the other standard directories.
6184 (This option is used when building the C++ library.)
6187 Process FILE as if `#include "file"' appeared as the first line of
6188 the primary source file. However, the first directory searched
6189 for FILE is the preprocessor's working directory _instead of_ the
6190 directory containing the main source file. If not found there, it
6191 is searched for in the remainder of the `#include "..."' search
6194 If multiple `-include' options are given, the files are included
6195 in the order they appear on the command line.
6198 Exactly like `-include', except that any output produced by
6199 scanning FILE is thrown away. Macros it defines remain defined.
6200 This allows you to acquire all the macros from a header without
6201 also processing its declarations.
6203 All files specified by `-imacros' are processed before all files
6204 specified by `-include'.
6207 Search DIR for header files, but do it _after_ all directories
6208 specified with `-I' and the standard system directories have been
6209 exhausted. DIR is treated as a system include directory.
6212 Specify PREFIX as the prefix for subsequent `-iwithprefix'
6213 options. If the prefix represents a directory, you should include
6217 `-iwithprefixbefore DIR'
6218 Append DIR to the prefix specified previously with `-iprefix', and
6219 add the resulting directory to the include search path.
6220 `-iwithprefixbefore' puts it in the same place `-I' would;
6221 `-iwithprefix' puts it where `-idirafter' would.
6224 This option is like the `--sysroot' option, but applies only to
6225 header files. See the `--sysroot' option for more information.
6228 Search DIR for header files, after all directories specified by
6229 `-I' but before the standard system directories. Mark it as a
6230 system directory, so that it gets the same special treatment as is
6231 applied to the standard system directories.
6234 Search DIR only for header files requested with `#include "FILE"';
6235 they are not searched for `#include <FILE>', before all
6236 directories specified by `-I' and before the standard system
6239 `-fdollars-in-identifiers'
6240 Accept `$' in identifiers.
6242 `-fextended-identifiers'
6243 Accept universal character names in identifiers. This option is
6244 experimental; in a future version of GCC, it will be enabled by
6245 default for C99 and C++.
6248 Indicate to the preprocessor that the input file has already been
6249 preprocessed. This suppresses things like macro expansion,
6250 trigraph conversion, escaped newline splicing, and processing of
6251 most directives. The preprocessor still recognizes and removes
6252 comments, so that you can pass a file preprocessed with `-C' to
6253 the compiler without problems. In this mode the integrated
6254 preprocessor is little more than a tokenizer for the front ends.
6256 `-fpreprocessed' is implicit if the input file has one of the
6257 extensions `.i', `.ii' or `.mi'. These are the extensions that
6258 GCC uses for preprocessed files created by `-save-temps'.
6261 Set the distance between tab stops. This helps the preprocessor
6262 report correct column numbers in warnings or errors, even if tabs
6263 appear on the line. If the value is less than 1 or greater than
6264 100, the option is ignored. The default is 8.
6266 `-fexec-charset=CHARSET'
6267 Set the execution character set, used for string and character
6268 constants. The default is UTF-8. CHARSET can be any encoding
6269 supported by the system's `iconv' library routine.
6271 `-fwide-exec-charset=CHARSET'
6272 Set the wide execution character set, used for wide string and
6273 character constants. The default is UTF-32 or UTF-16, whichever
6274 corresponds to the width of `wchar_t'. As with `-fexec-charset',
6275 CHARSET can be any encoding supported by the system's `iconv'
6276 library routine; however, you will have problems with encodings
6277 that do not fit exactly in `wchar_t'.
6279 `-finput-charset=CHARSET'
6280 Set the input character set, used for translation from the
6281 character set of the input file to the source character set used
6282 by GCC. If the locale does not specify, or GCC cannot get this
6283 information from the locale, the default is UTF-8. This can be
6284 overridden by either the locale or this command line option.
6285 Currently the command line option takes precedence if there's a
6286 conflict. CHARSET can be any encoding supported by the system's
6287 `iconv' library routine.
6289 `-fworking-directory'
6290 Enable generation of linemarkers in the preprocessor output that
6291 will let the compiler know the current working directory at the
6292 time of preprocessing. When this option is enabled, the
6293 preprocessor will emit, after the initial linemarker, a second
6294 linemarker with the current working directory followed by two
6295 slashes. GCC will use this directory, when it's present in the
6296 preprocessed input, as the directory emitted as the current
6297 working directory in some debugging information formats. This
6298 option is implicitly enabled if debugging information is enabled,
6299 but this can be inhibited with the negated form
6300 `-fno-working-directory'. If the `-P' flag is present in the
6301 command line, this option has no effect, since no `#line'
6302 directives are emitted whatsoever.
6305 Do not print column numbers in diagnostics. This may be necessary
6306 if diagnostics are being scanned by a program that does not
6307 understand the column numbers, such as `dejagnu'.
6309 `-A PREDICATE=ANSWER'
6310 Make an assertion with the predicate PREDICATE and answer ANSWER.
6311 This form is preferred to the older form `-A PREDICATE(ANSWER)',
6312 which is still supported, because it does not use shell special
6315 `-A -PREDICATE=ANSWER'
6316 Cancel an assertion with the predicate PREDICATE and answer ANSWER.
6319 CHARS is a sequence of one or more of the following characters,
6320 and must not be preceded by a space. Other characters are
6321 interpreted by the compiler proper, or reserved for future
6322 versions of GCC, and so are silently ignored. If you specify
6323 characters whose behavior conflicts, the result is undefined.
6326 Instead of the normal output, generate a list of `#define'
6327 directives for all the macros defined during the execution of
6328 the preprocessor, including predefined macros. This gives
6329 you a way of finding out what is predefined in your version
6330 of the preprocessor. Assuming you have no file `foo.h', the
6333 touch foo.h; cpp -dM foo.h
6335 will show all the predefined macros.
6338 Like `M' except in two respects: it does _not_ include the
6339 predefined macros, and it outputs _both_ the `#define'
6340 directives and the result of preprocessing. Both kinds of
6341 output go to the standard output file.
6344 Like `D', but emit only the macro names, not their expansions.
6347 Output `#include' directives in addition to the result of
6351 Inhibit generation of linemarkers in the output from the
6352 preprocessor. This might be useful when running the preprocessor
6353 on something that is not C code, and will be sent to a program
6354 which might be confused by the linemarkers.
6357 Do not discard comments. All comments are passed through to the
6358 output file, except for comments in processed directives, which
6359 are deleted along with the directive.
6361 You should be prepared for side effects when using `-C'; it causes
6362 the preprocessor to treat comments as tokens in their own right.
6363 For example, comments appearing at the start of what would be a
6364 directive line have the effect of turning that line into an
6365 ordinary source line, since the first token on the line is no
6369 Do not discard comments, including during macro expansion. This is
6370 like `-C', except that comments contained within macros are also
6371 passed through to the output file where the macro is expanded.
6373 In addition to the side-effects of the `-C' option, the `-CC'
6374 option causes all C++-style comments inside a macro to be
6375 converted to C-style comments. This is to prevent later use of
6376 that macro from inadvertently commenting out the remainder of the
6379 The `-CC' option is generally used to support lint comments.
6382 Try to imitate the behavior of old-fashioned C preprocessors, as
6383 opposed to ISO C preprocessors.
6386 Process trigraph sequences. These are three-character sequences,
6387 all starting with `??', that are defined by ISO C to stand for
6388 single characters. For example, `??/' stands for `\', so `'??/n''
6389 is a character constant for a newline. By default, GCC ignores
6390 trigraphs, but in standard-conforming modes it converts them. See
6391 the `-std' and `-ansi' options.
6393 The nine trigraphs and their replacements are
6395 Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
6396 Replacement: [ ] { } # \ ^ | ~
6399 Enable special code to work around file systems which only permit
6400 very short file names, such as MS-DOS.
6404 Print text describing all the command line options instead of
6405 preprocessing anything.
6408 Verbose mode. Print out GNU CPP's version number at the beginning
6409 of execution, and report the final form of the include path.
6412 Print the name of each header file used, in addition to other
6413 normal activities. Each name is indented to show how deep in the
6414 `#include' stack it is. Precompiled header files are also
6415 printed, even if they are found to be invalid; an invalid
6416 precompiled header file is printed with `...x' and a valid one
6421 Print out GNU CPP's version number. With one dash, proceed to
6422 preprocess as normal. With two dashes, exit immediately.
6425 File: gcc.info, Node: Assembler Options, Next: Link Options, Prev: Preprocessor Options, Up: Invoking GCC
6427 3.12 Passing Options to the Assembler
6428 =====================================
6430 You can pass options to the assembler.
6433 Pass OPTION as an option to the assembler. If OPTION contains
6434 commas, it is split into multiple options at the commas.
6436 `-Xassembler OPTION'
6437 Pass OPTION as an option to the assembler. You can use this to
6438 supply system-specific assembler options which GCC does not know
6441 If you want to pass an option that takes an argument, you must use
6442 `-Xassembler' twice, once for the option and once for the argument.
6446 File: gcc.info, Node: Link Options, Next: Directory Options, Prev: Assembler Options, Up: Invoking GCC
6448 3.13 Options for Linking
6449 ========================
6451 These options come into play when the compiler links object files into
6452 an executable output file. They are meaningless if the compiler is not
6456 A file name that does not end in a special recognized suffix is
6457 considered to name an object file or library. (Object files are
6458 distinguished from libraries by the linker according to the file
6459 contents.) If linking is done, these object files are used as
6460 input to the linker.
6465 If any of these options is used, then the linker is not run, and
6466 object file names should not be used as arguments. *Note Overall
6471 Search the library named LIBRARY when linking. (The second
6472 alternative with the library as a separate argument is only for
6473 POSIX compliance and is not recommended.)
6475 It makes a difference where in the command you write this option;
6476 the linker searches and processes libraries and object files in
6477 the order they are specified. Thus, `foo.o -lz bar.o' searches
6478 library `z' after file `foo.o' but before `bar.o'. If `bar.o'
6479 refers to functions in `z', those functions may not be loaded.
6481 The linker searches a standard list of directories for the library,
6482 which is actually a file named `libLIBRARY.a'. The linker then
6483 uses this file as if it had been specified precisely by name.
6485 The directories searched include several standard system
6486 directories plus any that you specify with `-L'.
6488 Normally the files found this way are library files--archive files
6489 whose members are object files. The linker handles an archive
6490 file by scanning through it for members which define symbols that
6491 have so far been referenced but not defined. But if the file that
6492 is found is an ordinary object file, it is linked in the usual
6493 fashion. The only difference between using an `-l' option and
6494 specifying a file name is that `-l' surrounds LIBRARY with `lib'
6495 and `.a' and searches several directories.
6498 You need this special case of the `-l' option in order to link an
6499 Objective-C or Objective-C++ program.
6502 Do not use the standard system startup files when linking. The
6503 standard system libraries are used normally, unless `-nostdlib' or
6504 `-nodefaultlibs' is used.
6507 Do not use the standard system libraries when linking. Only the
6508 libraries you specify will be passed to the linker. The standard
6509 startup files are used normally, unless `-nostartfiles' is used.
6510 The compiler may generate calls to `memcmp', `memset', `memcpy'
6511 and `memmove'. These entries are usually resolved by entries in
6512 libc. These entry points should be supplied through some other
6513 mechanism when this option is specified.
6516 Do not use the standard system startup files or libraries when
6517 linking. No startup files and only the libraries you specify will
6518 be passed to the linker. The compiler may generate calls to
6519 `memcmp', `memset', `memcpy' and `memmove'. These entries are
6520 usually resolved by entries in libc. These entry points should be
6521 supplied through some other mechanism when this option is
6524 One of the standard libraries bypassed by `-nostdlib' and
6525 `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
6526 that GCC uses to overcome shortcomings of particular machines, or
6527 special needs for some languages. (*Note Interfacing to GCC
6528 Output: (gccint)Interface, for more discussion of `libgcc.a'.) In
6529 most cases, you need `libgcc.a' even when you want to avoid other
6530 standard libraries. In other words, when you specify `-nostdlib'
6531 or `-nodefaultlibs' you should usually specify `-lgcc' as well.
6532 This ensures that you have no unresolved references to internal GCC
6533 library subroutines. (For example, `__main', used to ensure C++
6534 constructors will be called; *note `collect2': (gccint)Collect2.)
6537 Produce a position independent executable on targets which support
6538 it. For predictable results, you must also specify the same set
6539 of options that were used to generate code (`-fpie', `-fPIE', or
6540 model suboptions) when you specify this option.
6543 Pass the flag `-export-dynamic' to the ELF linker, on targets that
6544 support it. This instructs the linker to add all symbols, not only
6545 used ones, to the dynamic symbol table. This option is needed for
6546 some uses of `dlopen' or to allow obtaining backtraces from within
6550 Remove all symbol table and relocation information from the
6554 On systems that support dynamic linking, this prevents linking
6555 with the shared libraries. On other systems, this option has no
6559 Produce a shared object which can then be linked with other
6560 objects to form an executable. Not all systems support this
6561 option. For predictable results, you must also specify the same
6562 set of options that were used to generate code (`-fpic', `-fPIC',
6563 or model suboptions) when you specify this option.(1)
6567 On systems that provide `libgcc' as a shared library, these options
6568 force the use of either the shared or static version respectively.
6569 If no shared version of `libgcc' was built when the compiler was
6570 configured, these options have no effect.
6572 There are several situations in which an application should use the
6573 shared `libgcc' instead of the static version. The most common of
6574 these is when the application wishes to throw and catch exceptions
6575 across different shared libraries. In that case, each of the
6576 libraries as well as the application itself should use the shared
6579 Therefore, the G++ and GCJ drivers automatically add
6580 `-shared-libgcc' whenever you build a shared library or a main
6581 executable, because C++ and Java programs typically use
6582 exceptions, so this is the right thing to do.
6584 If, instead, you use the GCC driver to create shared libraries,
6585 you may find that they will not always be linked with the shared
6586 `libgcc'. If GCC finds, at its configuration time, that you have
6587 a non-GNU linker or a GNU linker that does not support option
6588 `--eh-frame-hdr', it will link the shared version of `libgcc' into
6589 shared libraries by default. Otherwise, it will take advantage of
6590 the linker and optimize away the linking with the shared version
6591 of `libgcc', linking with the static version of libgcc by default.
6592 This allows exceptions to propagate through such shared
6593 libraries, without incurring relocation costs at library load time.
6595 However, if a library or main executable is supposed to throw or
6596 catch exceptions, you must link it using the G++ or GCJ driver, as
6597 appropriate for the languages used in the program, or using the
6598 option `-shared-libgcc', such that it is linked with the shared
6602 Bind references to global symbols when building a shared object.
6603 Warn about any unresolved references (unless overridden by the
6604 link editor option `-Xlinker -z -Xlinker defs'). Only a few
6605 systems support this option.
6608 Pass OPTION as an option to the linker. You can use this to
6609 supply system-specific linker options which GCC does not know how
6612 If you want to pass an option that takes an argument, you must use
6613 `-Xlinker' twice, once for the option and once for the argument.
6614 For example, to pass `-assert definitions', you must write
6615 `-Xlinker -assert -Xlinker definitions'. It does not work to write
6616 `-Xlinker "-assert definitions"', because this passes the entire
6617 string as a single argument, which is not what the linker expects.
6620 Pass OPTION as an option to the linker. If OPTION contains
6621 commas, it is split into multiple options at the commas.
6624 Pretend the symbol SYMBOL is undefined, to force linking of
6625 library modules to define it. You can use `-u' multiple times with
6626 different symbols to force loading of additional library modules.
6628 ---------- Footnotes ----------
6630 (1) On some systems, `gcc -shared' needs to build supplementary stub
6631 code for constructors to work. On multi-libbed systems, `gcc -shared'
6632 must select the correct support libraries to link against. Failing to
6633 supply the correct flags may lead to subtle defects. Supplying them in
6634 cases where they are not necessary is innocuous.
6637 File: gcc.info, Node: Directory Options, Next: Spec Files, Prev: Link Options, Up: Invoking GCC
6639 3.14 Options for Directory Search
6640 =================================
6642 These options specify directories to search for header files, for
6643 libraries and for parts of the compiler:
6646 Add the directory DIR to the head of the list of directories to be
6647 searched for header files. This can be used to override a system
6648 header file, substituting your own version, since these
6649 directories are searched before the system header file
6650 directories. However, you should not use this option to add
6651 directories that contain vendor-supplied system header files (use
6652 `-isystem' for that). If you use more than one `-I' option, the
6653 directories are scanned in left-to-right order; the standard
6654 system directories come after.
6656 If a standard system include directory, or a directory specified
6657 with `-isystem', is also specified with `-I', the `-I' option will
6658 be ignored. The directory will still be searched but as a system
6659 directory at its normal position in the system include chain.
6660 This is to ensure that GCC's procedure to fix buggy system headers
6661 and the ordering for the include_next directive are not
6662 inadvertently changed. If you really need to change the search
6663 order for system directories, use the `-nostdinc' and/or
6667 Add the directory DIR to the head of the list of directories to be
6668 searched for header files only for the case of `#include "FILE"';
6669 they are not searched for `#include <FILE>', otherwise just like
6673 Add directory DIR to the list of directories to be searched for
6677 This option specifies where to find the executables, libraries,
6678 include files, and data files of the compiler itself.
6680 The compiler driver program runs one or more of the subprograms
6681 `cpp', `cc1', `as' and `ld'. It tries PREFIX as a prefix for each
6682 program it tries to run, both with and without `MACHINE/VERSION/'
6683 (*note Target Options::).
6685 For each subprogram to be run, the compiler driver first tries the
6686 `-B' prefix, if any. If that name is not found, or if `-B' was
6687 not specified, the driver tries two standard prefixes, which are
6688 `/usr/lib/gcc/' and `/usr/local/lib/gcc/'. If neither of those
6689 results in a file name that is found, the unmodified program name
6690 is searched for using the directories specified in your `PATH'
6691 environment variable.
6693 The compiler will check to see if the path provided by the `-B'
6694 refers to a directory, and if necessary it will add a directory
6695 separator character at the end of the path.
6697 `-B' prefixes that effectively specify directory names also apply
6698 to libraries in the linker, because the compiler translates these
6699 options into `-L' options for the linker. They also apply to
6700 includes files in the preprocessor, because the compiler
6701 translates these options into `-isystem' options for the
6702 preprocessor. In this case, the compiler appends `include' to the
6705 The run-time support file `libgcc.a' can also be searched for using
6706 the `-B' prefix, if needed. If it is not found there, the two
6707 standard prefixes above are tried, and that is all. The file is
6708 left out of the link if it is not found by those means.
6710 Another way to specify a prefix much like the `-B' prefix is to use
6711 the environment variable `GCC_EXEC_PREFIX'. *Note Environment
6714 As a special kludge, if the path provided by `-B' is
6715 `[dir/]stageN/', where N is a number in the range 0 to 9, then it
6716 will be replaced by `[dir/]include'. This is to help with
6717 boot-strapping the compiler.
6720 Process FILE after the compiler reads in the standard `specs'
6721 file, in order to override the defaults that the `gcc' driver
6722 program uses when determining what switches to pass to `cc1',
6723 `cc1plus', `as', `ld', etc. More than one `-specs=FILE' can be
6724 specified on the command line, and they are processed in order,
6728 Use DIR as the logical root directory for headers and libraries.
6729 For example, if the compiler would normally search for headers in
6730 `/usr/include' and libraries in `/usr/lib', it will instead search
6731 `DIR/usr/include' and `DIR/usr/lib'.
6733 If you use both this option and the `-isysroot' option, then the
6734 `--sysroot' option will apply to libraries, but the `-isysroot'
6735 option will apply to header files.
6737 The GNU linker (beginning with version 2.16) has the necessary
6738 support for this option. If your linker does not support this
6739 option, the header file aspect of `--sysroot' will still work, but
6740 the library aspect will not.
6743 This option has been deprecated. Please use `-iquote' instead for
6744 `-I' directories before the `-I-' and remove the `-I-'. Any
6745 directories you specify with `-I' options before the `-I-' option
6746 are searched only for the case of `#include "FILE"'; they are not
6747 searched for `#include <FILE>'.
6749 If additional directories are specified with `-I' options after
6750 the `-I-', these directories are searched for all `#include'
6751 directives. (Ordinarily _all_ `-I' directories are used this way.)
6753 In addition, the `-I-' option inhibits the use of the current
6754 directory (where the current input file came from) as the first
6755 search directory for `#include "FILE"'. There is no way to
6756 override this effect of `-I-'. With `-I.' you can specify
6757 searching the directory which was current when the compiler was
6758 invoked. That is not exactly the same as what the preprocessor
6759 does by default, but it is often satisfactory.
6761 `-I-' does not inhibit the use of the standard system directories
6762 for header files. Thus, `-I-' and `-nostdinc' are independent.
6765 File: gcc.info, Node: Spec Files, Next: Target Options, Prev: Directory Options, Up: Invoking GCC
6767 3.15 Specifying subprocesses and the switches to pass to them
6768 =============================================================
6770 `gcc' is a driver program. It performs its job by invoking a sequence
6771 of other programs to do the work of compiling, assembling and linking.
6772 GCC interprets its command-line parameters and uses these to deduce
6773 which programs it should invoke, and which command-line options it
6774 ought to place on their command lines. This behavior is controlled by
6775 "spec strings". In most cases there is one spec string for each
6776 program that GCC can invoke, but a few programs have multiple spec
6777 strings to control their behavior. The spec strings built into GCC can
6778 be overridden by using the `-specs=' command-line switch to specify a
6781 "Spec files" are plaintext files that are used to construct spec
6782 strings. They consist of a sequence of directives separated by blank
6783 lines. The type of directive is determined by the first non-whitespace
6784 character on the line and it can be one of the following:
6787 Issues a COMMAND to the spec file processor. The commands that can
6791 Search for FILE and insert its text at the current point in
6794 `%include_noerr <FILE>'
6795 Just like `%include', but do not generate an error message if
6796 the include file cannot be found.
6798 `%rename OLD_NAME NEW_NAME'
6799 Rename the spec string OLD_NAME to NEW_NAME.
6803 This tells the compiler to create, override or delete the named
6804 spec string. All lines after this directive up to the next
6805 directive or blank line are considered to be the text for the spec
6806 string. If this results in an empty string then the spec will be
6807 deleted. (Or, if the spec did not exist, then nothing will
6808 happened.) Otherwise, if the spec does not currently exist a new
6809 spec will be created. If the spec does exist then its contents
6810 will be overridden by the text of this directive, unless the first
6811 character of that text is the `+' character, in which case the
6812 text will be appended to the spec.
6815 Creates a new `[SUFFIX] spec' pair. All lines after this directive
6816 and up to the next directive or blank line are considered to make
6817 up the spec string for the indicated suffix. When the compiler
6818 encounters an input file with the named suffix, it will processes
6819 the spec string in order to work out how to compile that file.
6825 This says that any input file whose name ends in `.ZZ' should be
6826 passed to the program `z-compile', which should be invoked with the
6827 command-line switch `-input' and with the result of performing the
6828 `%i' substitution. (See below.)
6830 As an alternative to providing a spec string, the text that
6831 follows a suffix directive can be one of the following:
6834 This says that the suffix is an alias for a known LANGUAGE.
6835 This is similar to using the `-x' command-line switch to GCC
6836 to specify a language explicitly. For example:
6841 Says that .ZZ files are, in fact, C++ source files.
6844 This causes an error messages saying:
6846 NAME compiler not installed on this system.
6848 GCC already has an extensive list of suffixes built into it. This
6849 directive will add an entry to the end of the list of suffixes, but
6850 since the list is searched from the end backwards, it is
6851 effectively possible to override earlier entries using this
6855 GCC has the following spec strings built into it. Spec files can
6856 override these strings or create their own. Note that individual
6857 targets can also add their own spec strings to this list.
6859 asm Options to pass to the assembler
6860 asm_final Options to pass to the assembler post-processor
6861 cpp Options to pass to the C preprocessor
6862 cc1 Options to pass to the C compiler
6863 cc1plus Options to pass to the C++ compiler
6864 endfile Object files to include at the end of the link
6865 link Options to pass to the linker
6866 lib Libraries to include on the command line to the linker
6867 libgcc Decides which GCC support library to pass to the linker
6868 linker Sets the name of the linker
6869 predefines Defines to be passed to the C preprocessor
6870 signed_char Defines to pass to CPP to say whether `char' is signed
6872 startfile Object files to include at the start of the link
6874 Here is a small example of a spec file:
6879 --start-group -lgcc -lc -leval1 --end-group %(old_lib)
6881 This example renames the spec called `lib' to `old_lib' and then
6882 overrides the previous definition of `lib' with a new one. The new
6883 definition adds in some extra command-line options before including the
6884 text of the old definition.
6886 "Spec strings" are a list of command-line options to be passed to their
6887 corresponding program. In addition, the spec strings can contain
6888 `%'-prefixed sequences to substitute variable text or to conditionally
6889 insert text into the command line. Using these constructs it is
6890 possible to generate quite complex command lines.
6892 Here is a table of all defined `%'-sequences for spec strings. Note
6893 that spaces are not generated automatically around the results of
6894 expanding these sequences. Therefore you can concatenate them together
6895 or combine them with constant text in a single argument.
6898 Substitute one `%' into the program name or argument.
6901 Substitute the name of the input file being processed.
6904 Substitute the basename of the input file being processed. This
6905 is the substring up to (and not including) the last period and not
6906 including the directory.
6909 This is the same as `%b', but include the file suffix (text after
6913 Marks the argument containing or following the `%d' as a temporary
6914 file name, so that that file will be deleted if GCC exits
6915 successfully. Unlike `%g', this contributes no text to the
6919 Substitute a file name that has suffix SUFFIX and is chosen once
6920 per compilation, and mark the argument in the same way as `%d'.
6921 To reduce exposure to denial-of-service attacks, the file name is
6922 now chosen in a way that is hard to predict even when previously
6923 chosen file names are known. For example, `%g.s ... %g.o ... %g.s'
6924 might turn into `ccUVUUAU.s ccXYAXZ12.o ccUVUUAU.s'. SUFFIX
6925 matches the regexp `[.A-Za-z]*' or the special string `%O', which
6926 is treated exactly as if `%O' had been preprocessed. Previously,
6927 `%g' was simply substituted with a file name chosen once per
6928 compilation, without regard to any appended suffix (which was
6929 therefore treated just like ordinary text), making such attacks
6930 more likely to succeed.
6933 Like `%g', but generates a new temporary file name even if
6934 `%uSUFFIX' was already seen.
6937 Substitutes the last file name generated with `%uSUFFIX',
6938 generating a new one if there is no such last file name. In the
6939 absence of any `%uSUFFIX', this is just like `%gSUFFIX', except
6940 they don't share the same suffix _space_, so `%g.s ... %U.s ...
6941 %g.s ... %U.s' would involve the generation of two distinct file
6942 names, one for each `%g.s' and another for each `%U.s'.
6943 Previously, `%U' was simply substituted with a file name chosen
6944 for the previous `%u', without regard to any appended suffix.
6947 Substitutes the name of the `HOST_BIT_BUCKET', if any, and if it is
6948 writable, and if save-temps is off; otherwise, substitute the name
6949 of a temporary file, just like `%u'. This temporary file is not
6950 meant for communication between processes, but rather as a junk
6955 Like `%g', except if `-pipe' is in effect. In that case `%|'
6956 substitutes a single dash and `%m' substitutes nothing at all.
6957 These are the two most common ways to instruct a program that it
6958 should read from standard input or write to standard output. If
6959 you need something more elaborate you can use an `%{pipe:`X'}'
6960 construct: see for example `f/lang-specs.h'.
6963 Substitutes .SUFFIX for the suffixes of a matched switch's args
6964 when it is subsequently output with `%*'. SUFFIX is terminated by
6965 the next space or %.
6968 Marks the argument containing or following the `%w' as the
6969 designated output file of this compilation. This puts the argument
6970 into the sequence of arguments that `%o' will substitute later.
6973 Substitutes the names of all the output files, with spaces
6974 automatically placed around them. You should write spaces around
6975 the `%o' as well or the results are undefined. `%o' is for use in
6976 the specs for running the linker. Input files whose names have no
6977 recognized suffix are not compiled at all, but they are included
6978 among the output files, so they will be linked.
6981 Substitutes the suffix for object files. Note that this is
6982 handled specially when it immediately follows `%g, %u, or %U',
6983 because of the need for those to form complete file names. The
6984 handling is such that `%O' is treated exactly as if it had already
6985 been substituted, except that `%g, %u, and %U' do not currently
6986 support additional SUFFIX characters following `%O' as they would
6987 following, for example, `.o'.
6990 Substitutes the standard macro predefinitions for the current
6991 target machine. Use this when running `cpp'.
6994 Like `%p', but puts `__' before and after the name of each
6995 predefined macro, except for macros that start with `__' or with
6996 `_L', where L is an uppercase letter. This is for ISO C.
6999 Substitute any of `-iprefix' (made from `GCC_EXEC_PREFIX'),
7000 `-isysroot' (made from `TARGET_SYSTEM_ROOT'), and `-isystem' (made
7001 from `COMPILER_PATH' and `-B' options) as necessary.
7004 Current argument is the name of a library or startup file of some
7005 sort. Search for that file in a standard list of directories and
7006 substitute the full name found.
7009 Print STR as an error message. STR is terminated by a newline.
7010 Use this when inconsistent options are detected.
7013 Substitute the contents of spec string NAME at this point.
7016 Like `%(...)' but put `__' around `-D' arguments.
7019 Accumulate an option for `%X'.
7022 Output the accumulated linker options specified by `-Wl' or a `%x'
7026 Output the accumulated assembler options specified by `-Wa'.
7029 Output the accumulated preprocessor options specified by `-Wp'.
7032 Process the `asm' spec. This is used to compute the switches to
7033 be passed to the assembler.
7036 Process the `asm_final' spec. This is a spec string for passing
7037 switches to an assembler post-processor, if such a program is
7041 Process the `link' spec. This is the spec for computing the
7042 command line passed to the linker. Typically it will make use of
7043 the `%L %G %S %D and %E' sequences.
7046 Dump out a `-L' option for each directory that GCC believes might
7047 contain startup files. If the target supports multilibs then the
7048 current multilib directory will be prepended to each of these
7052 Process the `lib' spec. This is a spec string for deciding which
7053 libraries should be included on the command line to the linker.
7056 Process the `libgcc' spec. This is a spec string for deciding
7057 which GCC support library should be included on the command line
7061 Process the `startfile' spec. This is a spec for deciding which
7062 object files should be the first ones passed to the linker.
7063 Typically this might be a file named `crt0.o'.
7066 Process the `endfile' spec. This is a spec string that specifies
7067 the last object files that will be passed to the linker.
7070 Process the `cpp' spec. This is used to construct the arguments
7071 to be passed to the C preprocessor.
7074 Process the `cc1' spec. This is used to construct the options to
7075 be passed to the actual C compiler (`cc1').
7078 Process the `cc1plus' spec. This is used to construct the options
7079 to be passed to the actual C++ compiler (`cc1plus').
7082 Substitute the variable part of a matched option. See below.
7083 Note that each comma in the substituted string is replaced by a
7087 Remove all occurrences of `-S' from the command line. Note--this
7088 command is position dependent. `%' commands in the spec string
7089 before this one will see `-S', `%' commands in the spec string
7090 after this one will not.
7093 Call the named function FUNCTION, passing it ARGS. ARGS is first
7094 processed as a nested spec string, then split into an argument
7095 vector in the usual fashion. The function returns a string which
7096 is processed as if it had appeared literally as part of the
7099 The following built-in spec functions are provided:
7102 The `if-exists' spec function takes one argument, an absolute
7103 pathname to a file. If the file exists, `if-exists' returns
7104 the pathname. Here is a small example of its usage:
7107 crt0%O%s %:if-exists(crti%O%s) crtbegin%O%s
7110 The `if-exists-else' spec function is similar to the
7111 `if-exists' spec function, except that it takes two
7112 arguments. The first argument is an absolute pathname to a
7113 file. If the file exists, `if-exists-else' returns the
7114 pathname. If it does not exist, it returns the second
7115 argument. This way, `if-exists-else' can be used to select
7116 one file or another, based on the existence of the first.
7117 Here is a small example of its usage:
7120 crt0%O%s %:if-exists(crti%O%s) \
7121 %:if-exists-else(crtbeginT%O%s crtbegin%O%s)
7124 The `replace-outfile' spec function takes two arguments. It
7125 looks for the first argument in the outfiles array and
7126 replaces it with the second argument. Here is a small
7127 example of its usage:
7129 %{fgnu-runtime:%:replace-outfile(-lobjc -lobjc-gnu)}
7133 Substitutes the `-S' switch, if that switch was given to GCC. If
7134 that switch was not specified, this substitutes nothing. Note that
7135 the leading dash is omitted when specifying this option, and it is
7136 automatically inserted if the substitution is performed. Thus the
7137 spec string `%{foo}' would match the command-line option `-foo'
7138 and would output the command line option `-foo'.
7141 Like %{`S'} but mark last argument supplied within as a file to be
7145 Substitutes all the switches specified to GCC whose names start
7146 with `-S', but which also take an argument. This is used for
7147 switches like `-o', `-D', `-I', etc. GCC considers `-o foo' as
7148 being one switch whose names starts with `o'. %{o*} would
7149 substitute this text, including the space. Thus two arguments
7153 Like %{`S'*}, but preserve order of `S' and `T' options (the order
7154 of `S' and `T' in the spec is not significant). There can be any
7155 number of ampersand-separated variables; for each the wild card is
7156 optional. Useful for CPP as `%{D*&U*&A*}'.
7159 Substitutes `X', if the `-S' switch was given to GCC.
7162 Substitutes `X', if the `-S' switch was _not_ given to GCC.
7165 Substitutes `X' if one or more switches whose names start with
7166 `-S' are specified to GCC. Normally `X' is substituted only once,
7167 no matter how many such switches appeared. However, if `%*'
7168 appears somewhere in `X', then `X' will be substituted once for
7169 each matching switch, with the `%*' replaced by the part of that
7170 switch that matched the `*'.
7173 Substitutes `X', if processing a file with suffix `S'.
7176 Substitutes `X', if _not_ processing a file with suffix `S'.
7179 Substitutes `X' if either `-S' or `-P' was given to GCC. This may
7180 be combined with `!', `.', and `*' sequences as well, although
7181 they have a stronger binding than the `|'. If `%*' appears in
7182 `X', all of the alternatives must be starred, and only the first
7183 matching alternative is substituted.
7185 For example, a spec string like this:
7187 %{.c:-foo} %{!.c:-bar} %{.c|d:-baz} %{!.c|d:-boggle}
7189 will output the following command-line options from the following
7190 input command-line options:
7194 -d fred.c -foo -baz -boggle
7195 -d jim.d -bar -baz -boggle
7198 If `S' was given to GCC, substitutes `X'; else if `T' was given to
7199 GCC, substitutes `Y'; else substitutes `D'. There can be as many
7200 clauses as you need. This may be combined with `.', `!', `|', and
7204 The conditional text `X' in a %{`S':`X'} or similar construct may
7205 contain other nested `%' constructs or spaces, or even newlines. They
7206 are processed as usual, as described above. Trailing white space in
7207 `X' is ignored. White space may also appear anywhere on the left side
7208 of the colon in these constructs, except between `.' or `*' and the
7211 The `-O', `-f', `-m', and `-W' switches are handled specifically in
7212 these constructs. If another value of `-O' or the negated form of a
7213 `-f', `-m', or `-W' switch is found later in the command line, the
7214 earlier switch value is ignored, except with {`S'*} where `S' is just
7215 one letter, which passes all matching options.
7217 The character `|' at the beginning of the predicate text is used to
7218 indicate that a command should be piped to the following command, but
7219 only if `-pipe' is specified.
7221 It is built into GCC which switches take arguments and which do not.
7222 (You might think it would be useful to generalize this to allow each
7223 compiler's spec to say which switches take arguments. But this cannot
7224 be done in a consistent fashion. GCC cannot even decide which input
7225 files have been specified without knowing which switches take arguments,
7226 and it must know which input files to compile in order to tell which
7229 GCC also knows implicitly that arguments starting in `-l' are to be
7230 treated as compiler output files, and passed to the linker in their
7231 proper position among the other output files.
7234 File: gcc.info, Node: Target Options, Next: Submodel Options, Prev: Spec Files, Up: Invoking GCC
7236 3.16 Specifying Target Machine and Compiler Version
7237 ===================================================
7239 The usual way to run GCC is to run the executable called `gcc', or
7240 `<machine>-gcc' when cross-compiling, or `<machine>-gcc-<version>' to
7241 run a version other than the one that was installed last. Sometimes
7242 this is inconvenient, so GCC provides options that will switch to
7243 another cross-compiler or version.
7246 The argument MACHINE specifies the target machine for compilation.
7248 The value to use for MACHINE is the same as was specified as the
7249 machine type when configuring GCC as a cross-compiler. For
7250 example, if a cross-compiler was configured with `configure
7251 arm-elf', meaning to compile for an arm processor with elf
7252 binaries, then you would specify `-b arm-elf' to run that cross
7253 compiler. Because there are other options beginning with `-b', the
7254 configuration must contain a hyphen.
7257 The argument VERSION specifies which version of GCC to run. This
7258 is useful when multiple versions are installed. For example,
7259 VERSION might be `4.0', meaning to run GCC version 4.0.
7261 The `-V' and `-b' options work by running the
7262 `<machine>-gcc-<version>' executable, so there's no real reason to use
7263 them if you can just run that directly.
7266 File: gcc.info, Node: Submodel Options, Next: Code Gen Options, Prev: Target Options, Up: Invoking GCC
7268 3.17 Hardware Models and Configurations
7269 =======================================
7271 Earlier we discussed the standard option `-b' which chooses among
7272 different installed compilers for completely different target machines,
7273 such as VAX vs. 68000 vs. 80386.
7275 In addition, each of these target machine types can have its own
7276 special options, starting with `-m', to choose among various hardware
7277 models or configurations--for example, 68010 vs 68020, floating
7278 coprocessor or none. A single installed version of the compiler can
7279 compile for any model or configuration, according to the options
7282 Some configurations of the compiler also support additional special
7283 options, usually for compatibility with other compilers on the same
7291 * Blackfin Options::
7295 * DEC Alpha Options::
7296 * DEC Alpha/VMS Options::
7300 * i386 and x86-64 Options::
7313 * RS/6000 and PowerPC Options::
7314 * S/390 and zSeries Options::
7317 * System V Options::
7318 * TMS320C3x/C4x Options::
7322 * Xstormy16 Options::
7327 File: gcc.info, Node: ARC Options, Next: ARM Options, Up: Submodel Options
7332 These options are defined for ARC implementations:
7335 Compile code for little endian mode. This is the default.
7338 Compile code for big endian mode.
7341 Prepend the name of the cpu to all public symbol names. In
7342 multiple-processor systems, there are many ARC variants with
7343 different instruction and register set characteristics. This flag
7344 prevents code compiled for one cpu to be linked with code compiled
7345 for another. No facility exists for handling variants that are
7346 "almost identical". This is an all or nothing option.
7349 Compile code for ARC variant CPU. Which variants are supported
7350 depend on the configuration. All variants support `-mcpu=base',
7351 this is the default.
7353 `-mtext=TEXT-SECTION'
7354 `-mdata=DATA-SECTION'
7355 `-mrodata=READONLY-DATA-SECTION'
7356 Put functions, data, and readonly data in TEXT-SECTION,
7357 DATA-SECTION, and READONLY-DATA-SECTION respectively by default.
7358 This can be overridden with the `section' attribute. *Note
7359 Variable Attributes::.
7363 File: gcc.info, Node: ARM Options, Next: AVR Options, Prev: ARC Options, Up: Submodel Options
7368 These `-m' options are defined for Advanced RISC Machines (ARM)
7372 Generate code for the specified ABI. Permissible values are:
7373 `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'.
7376 Generate a stack frame that is compliant with the ARM Procedure
7377 Call Standard for all functions, even if this is not strictly
7378 necessary for correct execution of the code. Specifying
7379 `-fomit-frame-pointer' with this option will cause the stack
7380 frames not to be generated for leaf functions. The default is
7384 This is a synonym for `-mapcs-frame'.
7387 Generate code which supports calling between the ARM and Thumb
7388 instruction sets. Without this option the two instruction sets
7389 cannot be reliably used inside one program. The default is
7390 `-mno-thumb-interwork', since slightly larger code is generated
7391 when `-mthumb-interwork' is specified.
7394 Prevent the reordering of instructions in the function prolog, or
7395 the merging of those instruction with the instructions in the
7396 function's body. This means that all functions will start with a
7397 recognizable set of instructions (or in fact one of a choice from
7398 a small set of different function prologues), and this information
7399 can be used to locate the start if functions inside an executable
7400 piece of code. The default is `-msched-prolog'.
7403 Generate output containing floating point instructions. This is
7407 Generate output containing library calls for floating point.
7408 *Warning:* the requisite libraries are not available for all ARM
7409 targets. Normally the facilities of the machine's usual C
7410 compiler are used, but this cannot be done directly in
7411 cross-compilation. You must make your own arrangements to provide
7412 suitable library functions for cross-compilation.
7414 `-msoft-float' changes the calling convention in the output file;
7415 therefore, it is only useful if you compile _all_ of a program with
7416 this option. In particular, you need to compile `libgcc.a', the
7417 library that comes with GCC, with `-msoft-float' in order for this
7421 Specifies which ABI to use for floating point values. Permissible
7422 values are: `soft', `softfp' and `hard'.
7424 `soft' and `hard' are equivalent to `-msoft-float' and
7425 `-mhard-float' respectively. `softfp' allows the generation of
7426 floating point instructions, but still uses the soft-float calling
7430 Generate code for a processor running in little-endian mode. This
7431 is the default for all standard configurations.
7434 Generate code for a processor running in big-endian mode; the
7435 default is to compile code for a little-endian processor.
7437 `-mwords-little-endian'
7438 This option only applies when generating code for big-endian
7439 processors. Generate code for a little-endian word order but a
7440 big-endian byte order. That is, a byte order of the form
7441 `32107654'. Note: this option should only be used if you require
7442 compatibility with code for big-endian ARM processors generated by
7443 versions of the compiler prior to 2.8.
7446 This specifies the name of the target ARM processor. GCC uses
7447 this name to determine what kind of instructions it can emit when
7448 generating assembly code. Permissible names are: `arm2', `arm250',
7449 `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
7450 `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
7451 `arm700i', `arm710', `arm710c', `arm7100', `arm7500', `arm7500fe',
7452 `arm7tdmi', `arm7tdmi-s', `arm8', `strongarm', `strongarm110',
7453 `strongarm1100', `arm8', `arm810', `arm9', `arm9e', `arm920',
7454 `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s',
7455 `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t',
7456 `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s',
7457 `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1176jz-s',
7458 `arm1176jzf-s', `xscale', `iwmmxt', `ep9312'.
7461 This option is very similar to the `-mcpu=' option, except that
7462 instead of specifying the actual target processor type, and hence
7463 restricting which instructions can be used, it specifies that GCC
7464 should tune the performance of the code as if the target were of
7465 the type specified in this option, but still choosing the
7466 instructions that it will generate based on the cpu specified by a
7467 `-mcpu=' option. For some ARM implementations better performance
7468 can be obtained by using this option.
7471 This specifies the name of the target ARM architecture. GCC uses
7472 this name to determine what kind of instructions it can emit when
7473 generating assembly code. This option can be used in conjunction
7474 with or instead of the `-mcpu=' option. Permissible names are:
7475 `armv2', `armv2a', `armv3', `armv3m', `armv4', `armv4t', `armv5',
7476 `armv5t', `armv5te', `armv6', `armv6j', `iwmmxt', `ep9312'.
7481 This specifies what floating point hardware (or hardware
7482 emulation) is available on the target. Permissible names are:
7483 `fpa', `fpe2', `fpe3', `maverick', `vfp'. `-mfp' and `-mfpe' are
7484 synonyms for `-mfpu'=`fpe'NUMBER, for compatibility with older
7487 If `-msoft-float' is specified this specifies the format of
7488 floating point values.
7490 `-mstructure-size-boundary=N'
7491 The size of all structures and unions will be rounded up to a
7492 multiple of the number of bits set by this option. Permissible
7493 values are 8, 32 and 64. The default value varies for different
7494 toolchains. For the COFF targeted toolchain the default value is
7495 8. A value of 64 is only allowed if the underlying ABI supports
7498 Specifying the larger number can produce faster, more efficient
7499 code, but can also increase the size of the program. Different
7500 values are potentially incompatible. Code compiled with one value
7501 cannot necessarily expect to work with code or libraries compiled
7502 with another value, if they exchange information using structures
7505 `-mabort-on-noreturn'
7506 Generate a call to the function `abort' at the end of a `noreturn'
7507 function. It will be executed if the function tries to return.
7511 Tells the compiler to perform function calls by first loading the
7512 address of the function into a register and then performing a
7513 subroutine call on this register. This switch is needed if the
7514 target function will lie outside of the 64 megabyte addressing
7515 range of the offset based version of subroutine call instruction.
7517 Even if this switch is enabled, not all function calls will be
7518 turned into long calls. The heuristic is that static functions,
7519 functions which have the `short-call' attribute, functions that
7520 are inside the scope of a `#pragma no_long_calls' directive and
7521 functions whose definitions have already been compiled within the
7522 current compilation unit, will not be turned into long calls. The
7523 exception to this rule is that weak function definitions,
7524 functions with the `long-call' attribute or the `section'
7525 attribute, and functions that are within the scope of a `#pragma
7526 long_calls' directive, will always be turned into long calls.
7528 This feature is not enabled by default. Specifying
7529 `-mno-long-calls' will restore the default behavior, as will
7530 placing the function calls within the scope of a `#pragma
7531 long_calls_off' directive. Note these switches have no effect on
7532 how the compiler generates code to handle function calls via
7535 `-mnop-fun-dllimport'
7536 Disable support for the `dllimport' attribute.
7539 Treat the register used for PIC addressing as read-only, rather
7540 than loading it in the prologue for each function. The run-time
7541 system is responsible for initializing this register with an
7542 appropriate value before execution begins.
7544 `-mpic-register=REG'
7545 Specify the register to be used for PIC addressing. The default
7546 is R10 unless stack-checking is enabled, when R9 is used.
7548 `-mcirrus-fix-invalid-insns'
7549 Insert NOPs into the instruction stream to in order to work around
7550 problems with invalid Maverick instruction combinations. This
7551 option is only valid if the `-mcpu=ep9312' option has been used to
7552 enable generation of instructions for the Cirrus Maverick floating
7553 point co-processor. This option is not enabled by default, since
7554 the problem is only present in older Maverick implementations.
7555 The default can be re-enabled by use of the
7556 `-mno-cirrus-fix-invalid-insns' switch.
7558 `-mpoke-function-name'
7559 Write the name of each function into the text section, directly
7560 preceding the function prologue. The generated code is similar to
7564 .ascii "arm_poke_function_name", 0
7567 .word 0xff000000 + (t1 - t0)
7568 arm_poke_function_name
7570 stmfd sp!, {fp, ip, lr, pc}
7573 When performing a stack backtrace, code can inspect the value of
7574 `pc' stored at `fp + 0'. If the trace function then looks at
7575 location `pc - 12' and the top 8 bits are set, then we know that
7576 there is a function name embedded immediately preceding this
7577 location and has length `((pc[-3]) & 0xff000000)'.
7580 Generate code for the 16-bit Thumb instruction set. The default
7581 is to use the 32-bit ARM instruction set.
7584 Generate a stack frame that is compliant with the Thumb Procedure
7585 Call Standard for all non-leaf functions. (A leaf function is one
7586 that does not call any other functions.) The default is
7590 Generate a stack frame that is compliant with the Thumb Procedure
7591 Call Standard for all leaf functions. (A leaf function is one
7592 that does not call any other functions.) The default is
7593 `-mno-apcs-leaf-frame'.
7595 `-mcallee-super-interworking'
7596 Gives all externally visible functions in the file being compiled
7597 an ARM instruction set header which switches to Thumb mode before
7598 executing the rest of the function. This allows these functions
7599 to be called from non-interworking code.
7601 `-mcaller-super-interworking'
7602 Allows calls via function pointers (including virtual functions) to
7603 execute correctly regardless of whether the target code has been
7604 compiled for interworking or not. There is a small overhead in
7605 the cost of executing a function pointer if this option is enabled.
7608 Specify the access model for the thread local storage pointer.
7609 The valid models are `soft', which generates calls to
7610 `__aeabi_read_tp', `cp15', which fetches the thread pointer from
7611 `cp15' directly (supported in the arm6k architecture), and `auto',
7612 which uses the best available method for the selected processor.
7613 The default setting is `auto'.
7617 File: gcc.info, Node: AVR Options, Next: Blackfin Options, Prev: ARM Options, Up: Submodel Options
7622 These options are defined for AVR implementations:
7625 Specify ATMEL AVR instruction set or MCU type.
7627 Instruction set avr1 is for the minimal AVR core, not supported by
7628 the C compiler, only for assembler programs (MCU types: at90s1200,
7629 attiny10, attiny11, attiny12, attiny15, attiny28).
7631 Instruction set avr2 (default) is for the classic AVR core with up
7632 to 8K program memory space (MCU types: at90s2313, at90s2323,
7633 attiny22, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434,
7634 at90s8515, at90c8534, at90s8535).
7636 Instruction set avr3 is for the classic AVR core with up to 128K
7637 program memory space (MCU types: atmega103, atmega603, at43usb320,
7640 Instruction set avr4 is for the enhanced AVR core with up to 8K
7641 program memory space (MCU types: atmega8, atmega83, atmega85).
7643 Instruction set avr5 is for the enhanced AVR core with up to 128K
7644 program memory space (MCU types: atmega16, atmega161, atmega163,
7645 atmega32, atmega323, atmega64, atmega128, at43usb355, at94k).
7648 Output instruction sizes to the asm file.
7651 Specify the initial stack address, which may be a symbol or
7652 numeric value, `__stack' is the default.
7655 Generated code is not compatible with hardware interrupts. Code
7656 size will be smaller.
7659 Functions prologues/epilogues expanded as call to appropriate
7660 subroutines. Code size will be smaller.
7663 Do not generate tablejump insns which sometimes increase code size.
7666 Change only the low 8 bits of the stack pointer.
7669 Assume int to be 8 bit integer. This affects the sizes of all
7670 types: A char will be 1 byte, an int will be 1 byte, an long will
7671 be 2 bytes and long long will be 4 bytes. Please note that this
7672 option does not comply to the C standards, but it will provide you
7673 with smaller code size.
7676 File: gcc.info, Node: Blackfin Options, Next: CRIS Options, Prev: AVR Options, Up: Submodel Options
7678 3.17.4 Blackfin Options
7679 -----------------------
7681 `-momit-leaf-frame-pointer'
7682 Don't keep the frame pointer in a register for leaf functions.
7683 This avoids the instructions to save, set up and restore frame
7684 pointers and makes an extra register available in leaf functions.
7685 The option `-fomit-frame-pointer' removes the frame pointer for
7686 all functions which might make debugging harder.
7689 When enabled, the compiler will ensure that the generated code
7690 does not contain speculative loads after jump instructions. This
7691 option is enabled by default.
7693 `-mno-specld-anomaly'
7694 Don't generate extra code to prevent speculative loads from
7698 When enabled, the compiler will ensure that the generated code
7699 does not contain CSYNC or SSYNC instructions too soon after
7700 conditional branches. This option is enabled by default.
7702 `-mno-csync-anomaly'
7703 Don't generate extra code to prevent CSYNC or SSYNC instructions
7704 from occurring too soon after a conditional branch.
7707 When enabled, the compiler is free to take advantage of the
7708 knowledge that the entire program fits into the low 64k of memory.
7711 Assume that the program is arbitrarily large. This is the default.
7713 `-mid-shared-library'
7714 Generate code that supports shared libraries via the library ID
7715 method. This allows for execute in place and shared libraries in
7716 an environment without virtual memory management. This option
7719 `-mno-id-shared-library'
7720 Generate code that doesn't assume ID based shared libraries are
7721 being used. This is the default.
7723 `-mshared-library-id=n'
7724 Specified the identification number of the ID based shared library
7725 being compiled. Specifying a value of 0 will generate more
7726 compact code, specifying other values will force the allocation of
7727 that number to the current library but is no more space or time
7728 efficient than omitting this option.
7732 Tells the compiler to perform function calls by first loading the
7733 address of the function into a register and then performing a
7734 subroutine call on this register. This switch is needed if the
7735 target function will lie outside of the 24 bit addressing range of
7736 the offset based version of subroutine call instruction.
7738 This feature is not enabled by default. Specifying
7739 `-mno-long-calls' will restore the default behavior. Note these
7740 switches have no effect on how the compiler generates code to
7741 handle function calls via function pointers.
7744 File: gcc.info, Node: CRIS Options, Next: CRX Options, Prev: Blackfin Options, Up: Submodel Options
7749 These options are defined specifically for the CRIS ports.
7751 `-march=ARCHITECTURE-TYPE'
7752 `-mcpu=ARCHITECTURE-TYPE'
7753 Generate code for the specified architecture. The choices for
7754 ARCHITECTURE-TYPE are `v3', `v8' and `v10' for respectively
7755 ETRAX 4, ETRAX 100, and ETRAX 100 LX. Default is `v0' except for
7756 cris-axis-linux-gnu, where the default is `v10'.
7758 `-mtune=ARCHITECTURE-TYPE'
7759 Tune to ARCHITECTURE-TYPE everything applicable about the generated
7760 code, except for the ABI and the set of available instructions.
7761 The choices for ARCHITECTURE-TYPE are the same as for
7762 `-march=ARCHITECTURE-TYPE'.
7764 `-mmax-stack-frame=N'
7765 Warn when the stack frame of a function exceeds N bytes.
7767 `-melinux-stacksize=N'
7768 Only available with the `cris-axis-aout' target. Arranges for
7769 indications in the program to the kernel loader that the stack of
7770 the program should be set to N bytes.
7774 The options `-metrax4' and `-metrax100' are synonyms for
7775 `-march=v3' and `-march=v8' respectively.
7777 `-mmul-bug-workaround'
7778 `-mno-mul-bug-workaround'
7779 Work around a bug in the `muls' and `mulu' instructions for CPU
7780 models where it applies. This option is active by default.
7783 Enable CRIS-specific verbose debug-related information in the
7784 assembly code. This option also has the effect to turn off the
7785 `#NO_APP' formatted-code indicator to the assembler at the
7786 beginning of the assembly file.
7789 Do not use condition-code results from previous instruction;
7790 always emit compare and test instructions before use of condition
7794 Do not emit instructions with side-effects in addressing modes
7795 other than post-increment.
7803 These options (no-options) arranges (eliminate arrangements) for
7804 the stack-frame, individual data and constants to be aligned for
7805 the maximum single data access size for the chosen CPU model. The
7806 default is to arrange for 32-bit alignment. ABI details such as
7807 structure layout are not affected by these options.
7812 Similar to the stack- data- and const-align options above, these
7813 options arrange for stack-frame, writable data and constants to
7814 all be 32-bit, 16-bit or 8-bit aligned. The default is 32-bit
7817 `-mno-prologue-epilogue'
7818 `-mprologue-epilogue'
7819 With `-mno-prologue-epilogue', the normal function prologue and
7820 epilogue that sets up the stack-frame are omitted and no return
7821 instructions or return sequences are generated in the code. Use
7822 this option only together with visual inspection of the compiled
7823 code: no warnings or errors are generated when call-saved
7824 registers must be saved, or storage for local variable needs to be
7829 With `-fpic' and `-fPIC', don't generate (do generate) instruction
7830 sequences that load addresses for functions from the PLT part of
7831 the GOT rather than (traditional on other architectures) calls to
7832 the PLT. The default is `-mgotplt'.
7835 Legacy no-op option only recognized with the cris-axis-aout target.
7838 Legacy no-op option only recognized with the cris-axis-elf and
7839 cris-axis-linux-gnu targets.
7842 Only recognized with the cris-axis-aout target, where it selects a
7843 GNU/linux-like multilib, include files and instruction set for
7847 Legacy no-op option only recognized with the cris-axis-linux-gnu
7851 This option, recognized for the cris-axis-aout and cris-axis-elf
7852 arranges to link with input-output functions from a simulator
7853 library. Code, initialized data and zero-initialized data are
7854 allocated consecutively.
7857 Like `-sim', but pass linker options to locate initialized data at
7858 0x40000000 and zero-initialized data at 0x80000000.
7861 File: gcc.info, Node: CRX Options, Next: Darwin Options, Prev: CRIS Options, Up: Submodel Options
7866 These options are defined specifically for the CRX ports.
7869 Enable the use of multiply-accumulate instructions. Disabled by
7873 Push instructions will be used to pass outgoing arguments when
7874 functions are called. Enabled by default.
7877 File: gcc.info, Node: Darwin Options, Next: DEC Alpha Options, Prev: CRX Options, Up: Submodel Options
7879 3.17.7 Darwin Options
7880 ---------------------
7882 These options are defined for all architectures running the Darwin
7885 FSF GCC on Darwin does not create "fat" object files; it will create
7886 an object file for the single architecture that it was built to target.
7887 Apple's GCC on Darwin does create "fat" files if multiple `-arch'
7888 options are used; it does so by running the compiler or linker multiple
7889 times and joining the results together with `lipo'.
7891 The subtype of the file created (like `ppc7400' or `ppc970' or `i686')
7892 is determined by the flags that specify the ISA that GCC is targetting,
7893 like `-mcpu' or `-march'. The `-force_cpusubtype_ALL' option can be
7894 used to override this.
7896 The Darwin tools vary in their behavior when presented with an ISA
7897 mismatch. The assembler, `as', will only permit instructions to be
7898 used that are valid for the subtype of the file it is generating, so
7899 you cannot put 64-bit instructions in an `ppc750' object file. The
7900 linker for shared libraries, `/usr/bin/libtool', will fail and print an
7901 error if asked to create a shared library with a less restrictive
7902 subtype than its input files (for instance, trying to put a `ppc970'
7903 object file in a `ppc7400' library). The linker for executables, `ld',
7904 will quietly give the executable the most restrictive subtype of any of
7908 Add the framework directory DIR to the head of the list of
7909 directories to be searched for header files. These directories are
7910 interleaved with those specified by `-I' options and are scanned
7911 in a left-to-right order.
7913 A framework directory is a directory with frameworks in it. A
7914 framework is a directory with a `"Headers"' and/or
7915 `"PrivateHeaders"' directory contained directly in it that ends in
7916 `".framework"'. The name of a framework is the name of this
7917 directory excluding the `".framework"'. Headers associated with
7918 the framework are found in one of those two directories, with
7919 `"Headers"' being searched first. A subframework is a framework
7920 directory that is in a framework's `"Frameworks"' directory.
7921 Includes of subframework headers can only appear in a header of a
7922 framework that contains the subframework, or in a sibling
7923 subframework header. Two subframeworks are siblings if they occur
7924 in the same framework. A subframework should not have the same
7925 name as a framework, a warning will be issued if this is violated.
7926 Currently a subframework cannot have subframeworks, in the
7927 future, the mechanism may be extended to support this. The
7928 standard frameworks can be found in `"/System/Library/Frameworks"'
7929 and `"/Library/Frameworks"'. An example include looks like
7930 `#include <Framework/header.h>', where `Framework' denotes the
7931 name of the framework and header.h is found in the
7932 `"PrivateHeaders"' or `"Headers"' directory.
7935 Emit debugging information for symbols that are used. For STABS
7936 debugging format, this enables `-feliminate-unused-debug-symbols'.
7937 This is by default ON.
7940 Emit debugging information for all symbols and types.
7942 `-mmacosx-version-min=VERSION'
7943 The earliest version of MacOS X that this executable will run on
7944 is VERSION. Typical values of VERSION include `10.1', `10.2', and
7947 The default for this option is to make choices that seem to be most
7951 Override the defaults for `bool' so that `sizeof(bool)==1'. By
7952 default `sizeof(bool)' is `4' when compiling for Darwin/PowerPC
7953 and `1' when compiling for Darwin/x86, so this option has no
7956 *Warning:* The `-mone-byte-bool' switch causes GCC to generate
7957 code that is not binary compatible with code generated without
7958 that switch. Using this switch may require recompiling all other
7959 modules in a program, including system libraries. Use this switch
7960 to conform to a non-default data model.
7962 `-mfix-and-continue'
7963 `-ffix-and-continue'
7965 Generate code suitable for fast turn around development. Needed to
7966 enable gdb to dynamically load `.o' files into already running
7967 programs. `-findirect-data' and `-ffix-and-continue' are provided
7968 for backwards compatibility.
7971 Loads all members of static archive libraries. See man ld(1) for
7974 `-arch_errors_fatal'
7975 Cause the errors having to do with files that have the wrong
7976 architecture to be fatal.
7979 Causes the output file to be marked such that the dynamic linker
7980 will bind all undefined references when the file is loaded or
7984 Produce a Mach-o bundle format file. See man ld(1) for more
7987 `-bundle_loader EXECUTABLE'
7988 This option specifies the EXECUTABLE that will be loading the build
7989 output file being linked. See man ld(1) for more information.
7992 When passed this option, GCC will produce a dynamic library
7993 instead of an executable when linking, using the Darwin `libtool'
7996 `-force_cpusubtype_ALL'
7997 This causes GCC's output file to have the ALL subtype, instead of
7998 one controlled by the `-mcpu' or `-march' option.
8000 `-allowable_client CLIENT_NAME'
8002 `-compatibility_version'
8007 `-dylinker_install_name'
8009 `-exported_symbols_list'
8012 `-force_flat_namespace'
8013 `-headerpad_max_install_names'
8017 `-keep_private_externs'
8020 `-multiply_defined_unused'
8022 `-no_dead_strip_inits_and_terms'
8029 `-prebind_all_twolevel_modules'
8033 `-sectobjectsymbols'
8037 `-sectobjectsymbols'
8040 `-segs_read_only_addr'
8041 `-segs_read_write_addr'
8043 `-seg_addr_table_filename'
8046 `-segs_read_only_addr'
8047 `-segs_read_write_addr'
8052 `-twolevel_namespace'
8055 `-unexported_symbols_list'
8056 `-weak_reference_mismatches'
8058 These options are passed to the Darwin linker. The Darwin linker
8059 man page describes them in detail.
8062 File: gcc.info, Node: DEC Alpha Options, Next: DEC Alpha/VMS Options, Prev: Darwin Options, Up: Submodel Options
8064 3.17.8 DEC Alpha Options
8065 ------------------------
8067 These `-m' options are defined for the DEC Alpha implementations:
8071 Use (do not use) the hardware floating-point instructions for
8072 floating-point operations. When `-msoft-float' is specified,
8073 functions in `libgcc.a' will be used to perform floating-point
8074 operations. Unless they are replaced by routines that emulate the
8075 floating-point operations, or compiled in such a way as to call
8076 such emulations routines, these routines will issue floating-point
8077 operations. If you are compiling for an Alpha without
8078 floating-point operations, you must ensure that the library is
8079 built so as not to call them.
8081 Note that Alpha implementations without floating-point operations
8082 are required to have floating-point registers.
8086 Generate code that uses (does not use) the floating-point register
8087 set. `-mno-fp-regs' implies `-msoft-float'. If the floating-point
8088 register set is not used, floating point operands are passed in
8089 integer registers as if they were integers and floating-point
8090 results are passed in `$0' instead of `$f0'. This is a
8091 non-standard calling sequence, so any function with a
8092 floating-point argument or return value called by code compiled
8093 with `-mno-fp-regs' must also be compiled with that option.
8095 A typical use of this option is building a kernel that does not
8096 use, and hence need not save and restore, any floating-point
8100 The Alpha architecture implements floating-point hardware
8101 optimized for maximum performance. It is mostly compliant with
8102 the IEEE floating point standard. However, for full compliance,
8103 software assistance is required. This option generates code fully
8104 IEEE compliant code _except_ that the INEXACT-FLAG is not
8105 maintained (see below). If this option is turned on, the
8106 preprocessor macro `_IEEE_FP' is defined during compilation. The
8107 resulting code is less efficient but is able to correctly support
8108 denormalized numbers and exceptional IEEE values such as
8109 not-a-number and plus/minus infinity. Other Alpha compilers call
8110 this option `-ieee_with_no_inexact'.
8112 `-mieee-with-inexact'
8113 This is like `-mieee' except the generated code also maintains the
8114 IEEE INEXACT-FLAG. Turning on this option causes the generated
8115 code to implement fully-compliant IEEE math. In addition to
8116 `_IEEE_FP', `_IEEE_FP_EXACT' is defined as a preprocessor macro.
8117 On some Alpha implementations the resulting code may execute
8118 significantly slower than the code generated by default. Since
8119 there is very little code that depends on the INEXACT-FLAG, you
8120 should normally not specify this option. Other Alpha compilers
8121 call this option `-ieee_with_inexact'.
8123 `-mfp-trap-mode=TRAP-MODE'
8124 This option controls what floating-point related traps are enabled.
8125 Other Alpha compilers call this option `-fptm TRAP-MODE'. The
8126 trap mode can be set to one of four values:
8129 This is the default (normal) setting. The only traps that
8130 are enabled are the ones that cannot be disabled in software
8131 (e.g., division by zero trap).
8134 In addition to the traps enabled by `n', underflow traps are
8138 Like `su', but the instructions are marked to be safe for
8139 software completion (see Alpha architecture manual for
8143 Like `su', but inexact traps are enabled as well.
8145 `-mfp-rounding-mode=ROUNDING-MODE'
8146 Selects the IEEE rounding mode. Other Alpha compilers call this
8147 option `-fprm ROUNDING-MODE'. The ROUNDING-MODE can be one of:
8150 Normal IEEE rounding mode. Floating point numbers are
8151 rounded towards the nearest machine number or towards the
8152 even machine number in case of a tie.
8155 Round towards minus infinity.
8158 Chopped rounding mode. Floating point numbers are rounded
8162 Dynamic rounding mode. A field in the floating point control
8163 register (FPCR, see Alpha architecture reference manual)
8164 controls the rounding mode in effect. The C library
8165 initializes this register for rounding towards plus infinity.
8166 Thus, unless your program modifies the FPCR, `d' corresponds
8167 to round towards plus infinity.
8169 `-mtrap-precision=TRAP-PRECISION'
8170 In the Alpha architecture, floating point traps are imprecise.
8171 This means without software assistance it is impossible to recover
8172 from a floating trap and program execution normally needs to be
8173 terminated. GCC can generate code that can assist operating
8174 system trap handlers in determining the exact location that caused
8175 a floating point trap. Depending on the requirements of an
8176 application, different levels of precisions can be selected:
8179 Program precision. This option is the default and means a
8180 trap handler can only identify which program caused a
8181 floating point exception.
8184 Function precision. The trap handler can determine the
8185 function that caused a floating point exception.
8188 Instruction precision. The trap handler can determine the
8189 exact instruction that caused a floating point exception.
8191 Other Alpha compilers provide the equivalent options called
8192 `-scope_safe' and `-resumption_safe'.
8195 This option marks the generated code as IEEE conformant. You must
8196 not use this option unless you also specify `-mtrap-precision=i'
8197 and either `-mfp-trap-mode=su' or `-mfp-trap-mode=sui'. Its only
8198 effect is to emit the line `.eflag 48' in the function prologue of
8199 the generated assembly file. Under DEC Unix, this has the effect
8200 that IEEE-conformant math library routines will be linked in.
8203 Normally GCC examines a 32- or 64-bit integer constant to see if
8204 it can construct it from smaller constants in two or three
8205 instructions. If it cannot, it will output the constant as a
8206 literal and generate code to load it from the data segment at
8209 Use this option to require GCC to construct _all_ integer constants
8210 using code, even if it takes more instructions (the maximum is
8213 You would typically use this option to build a shared library
8214 dynamic loader. Itself a shared library, it must relocate itself
8215 in memory before it can find the variables and constants in its
8220 Select whether to generate code to be assembled by the
8221 vendor-supplied assembler (`-malpha-as') or by the GNU assembler
8232 Indicate whether GCC should generate code to use the optional BWX,
8233 CIX, FIX and MAX instruction sets. The default is to use the
8234 instruction sets supported by the CPU type specified via `-mcpu='
8235 option or that of the CPU on which GCC was built if none was
8240 Generate code that uses (does not use) VAX F and G floating point
8241 arithmetic instead of IEEE single and double precision.
8244 `-mno-explicit-relocs'
8245 Older Alpha assemblers provided no way to generate symbol
8246 relocations except via assembler macros. Use of these macros does
8247 not allow optimal instruction scheduling. GNU binutils as of
8248 version 2.12 supports a new syntax that allows the compiler to
8249 explicitly mark which relocations should apply to which
8250 instructions. This option is mostly useful for debugging, as GCC
8251 detects the capabilities of the assembler when it is built and
8252 sets the default accordingly.
8256 When `-mexplicit-relocs' is in effect, static data is accessed via
8257 "gp-relative" relocations. When `-msmall-data' is used, objects 8
8258 bytes long or smaller are placed in a "small data area" (the
8259 `.sdata' and `.sbss' sections) and are accessed via 16-bit
8260 relocations off of the `$gp' register. This limits the size of
8261 the small data area to 64KB, but allows the variables to be
8262 directly accessed via a single instruction.
8264 The default is `-mlarge-data'. With this option the data area is
8265 limited to just below 2GB. Programs that require more than 2GB of
8266 data must use `malloc' or `mmap' to allocate the data in the heap
8267 instead of in the program's data segment.
8269 When generating code for shared libraries, `-fpic' implies
8270 `-msmall-data' and `-fPIC' implies `-mlarge-data'.
8274 When `-msmall-text' is used, the compiler assumes that the code of
8275 the entire program (or shared library) fits in 4MB, and is thus
8276 reachable with a branch instruction. When `-msmall-data' is used,
8277 the compiler can assume that all local symbols share the same
8278 `$gp' value, and thus reduce the number of instructions required
8279 for a function call from 4 to 1.
8281 The default is `-mlarge-text'.
8284 Set the instruction set and instruction scheduling parameters for
8285 machine type CPU_TYPE. You can specify either the `EV' style name
8286 or the corresponding chip number. GCC supports scheduling
8287 parameters for the EV4, EV5 and EV6 family of processors and will
8288 choose the default values for the instruction set from the
8289 processor you specify. If you do not specify a processor type,
8290 GCC will default to the processor on which the compiler was built.
8292 Supported values for CPU_TYPE are
8297 Schedules as an EV4 and has no instruction set extensions.
8301 Schedules as an EV5 and has no instruction set extensions.
8305 Schedules as an EV5 and supports the BWX extension.
8310 Schedules as an EV5 and supports the BWX and MAX extensions.
8314 Schedules as an EV6 and supports the BWX, FIX, and MAX
8319 Schedules as an EV6 and supports the BWX, CIX, FIX, and MAX
8323 Set only the instruction scheduling parameters for machine type
8324 CPU_TYPE. The instruction set is not changed.
8326 `-mmemory-latency=TIME'
8327 Sets the latency the scheduler should assume for typical memory
8328 references as seen by the application. This number is highly
8329 dependent on the memory access patterns used by the application
8330 and the size of the external cache on the machine.
8332 Valid options for TIME are
8335 A decimal number representing clock cycles.
8341 The compiler contains estimates of the number of clock cycles
8342 for "typical" EV4 & EV5 hardware for the Level 1, 2 & 3 caches
8343 (also called Dcache, Scache, and Bcache), as well as to main
8344 memory. Note that L3 is only valid for EV5.
8348 File: gcc.info, Node: DEC Alpha/VMS Options, Next: FRV Options, Prev: DEC Alpha Options, Up: Submodel Options
8350 3.17.9 DEC Alpha/VMS Options
8351 ----------------------------
8353 These `-m' options are defined for the DEC Alpha/VMS implementations:
8355 `-mvms-return-codes'
8356 Return VMS condition codes from main. The default is to return
8357 POSIX style condition (e.g. error) codes.
8360 File: gcc.info, Node: FRV Options, Next: H8/300 Options, Prev: DEC Alpha/VMS Options, Up: Submodel Options
8366 Only use the first 32 general purpose registers.
8369 Use all 64 general purpose registers.
8372 Use only the first 32 floating point registers.
8375 Use all 64 floating point registers
8378 Use hardware instructions for floating point operations.
8381 Use library routines for floating point operations.
8384 Dynamically allocate condition code registers.
8387 Do not try to dynamically allocate condition code registers, only
8388 use `icc0' and `fcc0'.
8391 Change ABI to use double word insns.
8394 Do not use double word instructions.
8397 Use floating point double instructions.
8400 Do not use floating point double instructions.
8403 Use media instructions.
8406 Do not use media instructions.
8409 Use multiply and add/subtract instructions.
8412 Do not use multiply and add/subtract instructions.
8415 Select the FDPIC ABI, that uses function descriptors to represent
8416 pointers to functions. Without any PIC/PIE-related options, it
8417 implies `-fPIE'. With `-fpic' or `-fpie', it assumes GOT entries
8418 and small data are within a 12-bit range from the GOT base
8419 address; with `-fPIC' or `-fPIE', GOT offsets are computed with 32
8423 Enable inlining of PLT entries in function calls to functions that
8424 are not known to bind locally. It has no effect without `-mfdpic'.
8425 It's enabled by default if optimizing for speed and compiling for
8426 shared libraries (i.e., `-fPIC' or `-fpic'), or when an
8427 optimization option such as `-O3' or above is present in the
8431 Assume a large TLS segment when generating thread-local code.
8434 Do not assume a large TLS segment when generating thread-local
8438 Enable the use of `GPREL' relocations in the FDPIC ABI for data
8439 that is known to be in read-only sections. It's enabled by
8440 default, except for `-fpic' or `-fpie': even though it may help
8441 make the global offset table smaller, it trades 1 instruction for
8442 4. With `-fPIC' or `-fPIE', it trades 3 instructions for 4, one
8443 of which may be shared by multiple symbols, and it avoids the need
8444 for a GOT entry for the referenced symbol, so it's more likely to
8445 be a win. If it is not, `-mno-gprel-ro' can be used to disable it.
8447 `-multilib-library-pic'
8448 Link with the (library, not FD) pic libraries. It's implied by
8449 `-mlibrary-pic', as well as by `-fPIC' and `-fpic' without
8450 `-mfdpic'. You should never have to use it explicitly.
8453 Follow the EABI requirement of always creating a frame pointer
8454 whenever a stack frame is allocated. This option is enabled by
8455 default and can be disabled with `-mno-linked-fp'.
8458 Use indirect addressing to call functions outside the current
8459 compilation unit. This allows the functions to be placed anywhere
8460 within the 32-bit address space.
8463 Try to align labels to an 8-byte boundary by inserting nops into
8464 the previous packet. This option only has an effect when VLIW
8465 packing is enabled. It doesn't create new packets; it merely adds
8466 nops to existing ones.
8469 Generate position-independent EABI code.
8472 Use only the first four media accumulator registers.
8475 Use all eight media accumulator registers.
8478 Pack VLIW instructions.
8481 Do not pack VLIW instructions.
8484 Do not mark ABI switches in e_flags.
8487 Enable the use of conditional-move instructions (default).
8489 This switch is mainly for debugging the compiler and will likely
8490 be removed in a future version.
8493 Disable the use of conditional-move instructions.
8495 This switch is mainly for debugging the compiler and will likely
8496 be removed in a future version.
8499 Enable the use of conditional set instructions (default).
8501 This switch is mainly for debugging the compiler and will likely
8502 be removed in a future version.
8505 Disable the use of conditional set instructions.
8507 This switch is mainly for debugging the compiler and will likely
8508 be removed in a future version.
8511 Enable the use of conditional execution (default).
8513 This switch is mainly for debugging the compiler and will likely
8514 be removed in a future version.
8517 Disable the use of conditional execution.
8519 This switch is mainly for debugging the compiler and will likely
8520 be removed in a future version.
8523 Run a pass to pack branches into VLIW instructions (default).
8525 This switch is mainly for debugging the compiler and will likely
8526 be removed in a future version.
8529 Do not run a pass to pack branches into VLIW instructions.
8531 This switch is mainly for debugging the compiler and will likely
8532 be removed in a future version.
8535 Enable optimization of `&&' and `||' in conditional execution
8538 This switch is mainly for debugging the compiler and will likely
8539 be removed in a future version.
8541 `-mno-multi-cond-exec'
8542 Disable optimization of `&&' and `||' in conditional execution.
8544 This switch is mainly for debugging the compiler and will likely
8545 be removed in a future version.
8547 `-mnested-cond-exec'
8548 Enable nested conditional execution optimizations (default).
8550 This switch is mainly for debugging the compiler and will likely
8551 be removed in a future version.
8553 `-mno-nested-cond-exec'
8554 Disable nested conditional execution optimizations.
8556 This switch is mainly for debugging the compiler and will likely
8557 be removed in a future version.
8560 This switch removes redundant `membar' instructions from the
8561 compiler generated code. It is enabled by default.
8563 `-mno-optimize-membar'
8564 This switch disables the automatic removal of redundant `membar'
8565 instructions from the generated code.
8568 Cause gas to print out tomcat statistics.
8571 Select the processor type for which to generate code. Possible
8572 values are `frv', `fr550', `tomcat', `fr500', `fr450', `fr405',
8573 `fr400', `fr300' and `simple'.
8577 File: gcc.info, Node: H8/300 Options, Next: HPPA Options, Prev: FRV Options, Up: Submodel Options
8579 3.17.11 H8/300 Options
8580 ----------------------
8582 These `-m' options are defined for the H8/300 implementations:
8585 Shorten some address references at link time, when possible; uses
8586 the linker option `-relax'. *Note `ld' and the H8/300:
8587 (ld)H8/300, for a fuller description.
8590 Generate code for the H8/300H.
8593 Generate code for the H8S.
8596 Generate code for the H8S and H8/300H in the normal mode. This
8597 switch must be used either with `-mh' or `-ms'.
8600 Generate code for the H8S/2600. This switch must be used with
8604 Make `int' data 32 bits by default.
8607 On the H8/300H and H8S, use the same alignment rules as for the
8608 H8/300. The default for the H8/300H and H8S is to align longs and
8609 floats on 4 byte boundaries. `-malign-300' causes them to be
8610 aligned on 2 byte boundaries. This option has no effect on the
8614 File: gcc.info, Node: HPPA Options, Next: i386 and x86-64 Options, Prev: H8/300 Options, Up: Submodel Options
8616 3.17.12 HPPA Options
8617 --------------------
8619 These `-m' options are defined for the HPPA family of computers:
8621 `-march=ARCHITECTURE-TYPE'
8622 Generate code for the specified architecture. The choices for
8623 ARCHITECTURE-TYPE are `1.0' for PA 1.0, `1.1' for PA 1.1, and
8624 `2.0' for PA 2.0 processors. Refer to `/usr/lib/sched.models' on
8625 an HP-UX system to determine the proper architecture option for
8626 your machine. Code compiled for lower numbered architectures will
8627 run on higher numbered architectures, but not the other way around.
8632 Synonyms for `-march=1.0', `-march=1.1', and `-march=2.0'
8636 Generate code suitable for big switch tables. Use this option
8637 only if the assembler/linker complain about out of range branches
8638 within a switch table.
8641 Fill delay slots of function calls with unconditional jump
8642 instructions by modifying the return pointer for the function call
8643 to be the target of the conditional jump.
8646 Prevent floating point registers from being used in any manner.
8647 This is necessary for compiling kernels which perform lazy context
8648 switching of floating point registers. If you use this option and
8649 attempt to perform floating point operations, the compiler will
8652 `-mdisable-indexing'
8653 Prevent the compiler from using indexing address modes. This
8654 avoids some rather obscure problems when compiling MIG generated
8658 Generate code that assumes the target has no space registers.
8659 This allows GCC to generate faster indirect calls and use unscaled
8660 index address modes.
8662 Such code is suitable for level 0 PA systems and kernels.
8664 `-mfast-indirect-calls'
8665 Generate code that assumes calls never cross space boundaries.
8666 This allows GCC to emit code which performs faster indirect calls.
8668 This option will not work in the presence of shared libraries or
8671 `-mfixed-range=REGISTER-RANGE'
8672 Generate code treating the given register range as fixed registers.
8673 A fixed register is one that the register allocator can not use.
8674 This is useful when compiling kernel code. A register range is
8675 specified as two registers separated by a dash. Multiple register
8676 ranges can be specified separated by a comma.
8679 Generate 3-instruction load and store sequences as sometimes
8680 required by the HP-UX 10 linker. This is equivalent to the `+k'
8681 option to the HP compilers.
8683 `-mportable-runtime'
8684 Use the portable calling conventions proposed by HP for ELF
8688 Enable the use of assembler directives only GAS understands.
8690 `-mschedule=CPU-TYPE'
8691 Schedule code according to the constraints for the machine type
8692 CPU-TYPE. The choices for CPU-TYPE are `700' `7100', `7100LC',
8693 `7200', `7300' and `8000'. Refer to `/usr/lib/sched.models' on an
8694 HP-UX system to determine the proper scheduling option for your
8695 machine. The default scheduling is `8000'.
8698 Enable the optimization pass in the HP-UX linker. Note this makes
8699 symbolic debugging impossible. It also triggers a bug in the
8700 HP-UX 8 and HP-UX 9 linkers in which they give bogus error
8701 messages when linking some programs.
8704 Generate output containing library calls for floating point.
8705 *Warning:* the requisite libraries are not available for all HPPA
8706 targets. Normally the facilities of the machine's usual C
8707 compiler are used, but this cannot be done directly in
8708 cross-compilation. You must make your own arrangements to provide
8709 suitable library functions for cross-compilation. The embedded
8710 target `hppa1.1-*-pro' does provide software floating point
8713 `-msoft-float' changes the calling convention in the output file;
8714 therefore, it is only useful if you compile _all_ of a program with
8715 this option. In particular, you need to compile `libgcc.a', the
8716 library that comes with GCC, with `-msoft-float' in order for this
8720 Generate the predefine, `_SIO', for server IO. The default is
8721 `-mwsio'. This generates the predefines, `__hp9000s700',
8722 `__hp9000s700__' and `_WSIO', for workstation IO. These options
8723 are available under HP-UX and HI-UX.
8726 Use GNU ld specific options. This passes `-shared' to ld when
8727 building a shared library. It is the default when GCC is
8728 configured, explicitly or implicitly, with the GNU linker. This
8729 option does not have any affect on which ld is called, it only
8730 changes what parameters are passed to that ld. The ld that is
8731 called is determined by the `--with-ld' configure option, GCC's
8732 program search path, and finally by the user's `PATH'. The linker
8733 used by GCC can be printed using `which `gcc
8734 -print-prog-name=ld`'. This option is only available on the 64
8735 bit HP-UX GCC, i.e. configured with `hppa*64*-*-hpux*'.
8738 Use HP ld specific options. This passes `-b' to ld when building
8739 a shared library and passes `+Accept TypeMismatch' to ld on all
8740 links. It is the default when GCC is configured, explicitly or
8741 implicitly, with the HP linker. This option does not have any
8742 affect on which ld is called, it only changes what parameters are
8743 passed to that ld. The ld that is called is determined by the
8744 `--with-ld' configure option, GCC's program search path, and
8745 finally by the user's `PATH'. The linker used by GCC can be
8746 printed using `which `gcc -print-prog-name=ld`'. This option is
8747 only available on the 64 bit HP-UX GCC, i.e. configured with
8751 Generate code that uses long call sequences. This ensures that a
8752 call is always able to reach linker generated stubs. The default
8753 is to generate long calls only when the distance from the call
8754 site to the beginning of the function or translation unit, as the
8755 case may be, exceeds a predefined limit set by the branch type
8756 being used. The limits for normal calls are 7,600,000 and 240,000
8757 bytes, respectively for the PA 2.0 and PA 1.X architectures.
8758 Sibcalls are always limited at 240,000 bytes.
8760 Distances are measured from the beginning of functions when using
8761 the `-ffunction-sections' option, or when using the `-mgas' and
8762 `-mno-portable-runtime' options together under HP-UX with the SOM
8765 It is normally not desirable to use this option as it will degrade
8766 performance. However, it may be useful in large applications,
8767 particularly when partial linking is used to build the application.
8769 The types of long calls used depends on the capabilities of the
8770 assembler and linker, and the type of code being generated. The
8771 impact on systems that support long absolute calls, and long pic
8772 symbol-difference or pc-relative calls should be relatively small.
8773 However, an indirect call is used on 32-bit ELF systems in pic code
8774 and it is quite long.
8777 Generate compiler predefines and select a startfile for the
8778 specified UNIX standard. The choices for UNIX-STD are `93', `95'
8779 and `98'. `93' is supported on all HP-UX versions. `95' is
8780 available on HP-UX 10.10 and later. `98' is available on HP-UX
8781 11.11 and later. The default values are `93' for HP-UX 10.00,
8782 `95' for HP-UX 10.10 though to 11.00, and `98' for HP-UX 11.11 and
8785 `-munix=93' provides the same predefines as GCC 3.3 and 3.4.
8786 `-munix=95' provides additional predefines for `XOPEN_UNIX' and
8787 `_XOPEN_SOURCE_EXTENDED', and the startfile `unix95.o'.
8788 `-munix=98' provides additional predefines for `_XOPEN_UNIX',
8789 `_XOPEN_SOURCE_EXTENDED', `_INCLUDE__STDC_A1_SOURCE' and
8790 `_INCLUDE_XOPEN_SOURCE_500', and the startfile `unix98.o'.
8792 It is _important_ to note that this option changes the interfaces
8793 for various library routines. It also affects the operational
8794 behavior of the C library. Thus, _extreme_ care is needed in
8797 Library code that is intended to operate with more than one UNIX
8798 standard must test, set and restore the variable
8799 __XPG4_EXTENDED_MASK as appropriate. Most GNU software doesn't
8800 provide this capability.
8803 Suppress the generation of link options to search libdld.sl when
8804 the `-static' option is specified on HP-UX 10 and later.
8807 The HP-UX implementation of setlocale in libc has a dependency on
8808 libdld.sl. There isn't an archive version of libdld.sl. Thus,
8809 when the `-static' option is specified, special link options are
8810 needed to resolve this dependency.
8812 On HP-UX 10 and later, the GCC driver adds the necessary options to
8813 link with libdld.sl when the `-static' option is specified. This
8814 causes the resulting binary to be dynamic. On the 64-bit port,
8815 the linkers generate dynamic binaries by default in any case. The
8816 `-nolibdld' option can be used to prevent the GCC driver from
8817 adding these link options.
8820 Add support for multithreading with the "dce thread" library under
8821 HP-UX. This option sets flags for both the preprocessor and
8825 File: gcc.info, Node: i386 and x86-64 Options, Next: IA-64 Options, Prev: HPPA Options, Up: Submodel Options
8827 3.17.13 Intel 386 and AMD x86-64 Options
8828 ----------------------------------------
8830 These `-m' options are defined for the i386 and x86-64 family of
8834 Tune to CPU-TYPE everything applicable about the generated code,
8835 except for the ABI and the set of available instructions. The
8836 choices for CPU-TYPE are:
8838 Original Intel's i386 CPU.
8841 Intel's i486 CPU. (No scheduling is implemented for this
8845 Intel Pentium CPU with no MMX support.
8848 Intel PentiumMMX CPU based on Pentium core with MMX
8849 instruction set support.
8852 Intel PentiumPro CPU.
8855 Intel Pentium2 CPU based on PentiumPro core with MMX
8856 instruction set support.
8858 _pentium3, pentium3m_
8859 Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
8860 instruction set support.
8863 Low power version of Intel Pentium3 CPU with MMX, SSE and
8864 SSE2 instruction set support. Used by Centrino notebooks.
8866 _pentium4, pentium4m_
8867 Intel Pentium4 CPU with MMX, SSE and SSE2 instruction set
8871 Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2
8872 and SSE3 instruction set support.
8875 Improved version of Intel Pentium4 CPU with 64-bit
8876 extensions, MMX, SSE, SSE2 and SSE3 instruction set support.
8879 AMD K6 CPU with MMX instruction set support.
8882 Improved versions of AMD K6 CPU with MMX and 3dNOW!
8883 instruction set support.
8885 _athlon, athlon-tbird_
8886 AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
8887 prefetch instructions support.
8889 _athlon-4, athlon-xp, athlon-mp_
8890 Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
8891 full SSE instruction set support.
8893 _k8, opteron, athlon64, athlon-fx_
8894 AMD K8 core based CPUs with x86-64 instruction set support.
8895 (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
8896 64-bit instruction set extensions.)
8899 IDT Winchip C6 CPU, dealt in same way as i486 with additional
8900 MMX instruction set support.
8903 IDT Winchip2 CPU, dealt in same way as i486 with additional
8904 MMX and 3dNOW! instruction set support.
8907 Via C3 CPU with MMX and 3dNOW! instruction set support. (No
8908 scheduling is implemented for this chip.)
8911 Via C3-2 CPU with MMX and SSE instruction set support. (No
8912 scheduling is implemented for this chip.)
8914 While picking a specific CPU-TYPE will schedule things
8915 appropriately for that particular chip, the compiler will not
8916 generate any code that does not run on the i386 without the
8917 `-march=CPU-TYPE' option being used.
8920 Generate instructions for the machine type CPU-TYPE. The choices
8921 for CPU-TYPE are the same as for `-mtune'. Moreover, specifying
8922 `-march=CPU-TYPE' implies `-mtune=CPU-TYPE'.
8925 A deprecated synonym for `-mtune'.
8931 These options are synonyms for `-mtune=i386', `-mtune=i486',
8932 `-mtune=pentium', and `-mtune=pentiumpro' respectively. These
8933 synonyms are deprecated.
8936 Generate floating point arithmetics for selected unit UNIT. The
8937 choices for UNIT are:
8940 Use the standard 387 floating point coprocessor present
8941 majority of chips and emulated otherwise. Code compiled with
8942 this option will run almost everywhere. The temporary
8943 results are computed in 80bit precision instead of precision
8944 specified by the type resulting in slightly different results
8945 compared to most of other chips. See `-ffloat-store' for
8946 more detailed description.
8948 This is the default choice for i386 compiler.
8951 Use scalar floating point instructions present in the SSE
8952 instruction set. This instruction set is supported by
8953 Pentium3 and newer chips, in the AMD line by Athlon-4,
8954 Athlon-xp and Athlon-mp chips. The earlier version of SSE
8955 instruction set supports only single precision arithmetics,
8956 thus the double and extended precision arithmetics is still
8957 done using 387. Later version, present only in Pentium4 and
8958 the future AMD x86-64 chips supports double precision
8961 For the i386 compiler, you need to use `-march=CPU-TYPE',
8962 `-msse' or `-msse2' switches to enable SSE extensions and
8963 make this option effective. For the x86-64 compiler, these
8964 extensions are enabled by default.
8966 The resulting code should be considerably faster in the
8967 majority of cases and avoid the numerical instability
8968 problems of 387 code, but may break some existing code that
8969 expects temporaries to be 80bit.
8971 This is the default choice for the x86-64 compiler.
8974 Attempt to utilize both instruction sets at once. This
8975 effectively double the amount of available registers and on
8976 chips with separate execution units for 387 and SSE the
8977 execution resources too. Use this option with care, as it is
8978 still experimental, because the GCC register allocator does
8979 not model separate functional units well resulting in
8980 instable performance.
8983 Output asm instructions using selected DIALECT. Supported choices
8984 are `intel' or `att' (the default one). Darwin does not support
8989 Control whether or not the compiler uses IEEE floating point
8990 comparisons. These handle correctly the case where the result of a
8991 comparison is unordered.
8994 Generate output containing library calls for floating point.
8995 *Warning:* the requisite libraries are not part of GCC. Normally
8996 the facilities of the machine's usual C compiler are used, but
8997 this can't be done directly in cross-compilation. You must make
8998 your own arrangements to provide suitable library functions for
9001 On machines where a function returns floating point results in the
9002 80387 register stack, some floating point opcodes may be emitted
9003 even if `-msoft-float' is used.
9005 `-mno-fp-ret-in-387'
9006 Do not use the FPU registers for return values of functions.
9008 The usual calling convention has functions return values of types
9009 `float' and `double' in an FPU register, even if there is no FPU.
9010 The idea is that the operating system should emulate an FPU.
9012 The option `-mno-fp-ret-in-387' causes such values to be returned
9013 in ordinary CPU registers instead.
9015 `-mno-fancy-math-387'
9016 Some 387 emulators do not support the `sin', `cos' and `sqrt'
9017 instructions for the 387. Specify this option to avoid generating
9018 those instructions. This option is the default on FreeBSD,
9019 OpenBSD and NetBSD. This option is overridden when `-march'
9020 indicates that the target cpu will always have an FPU and so the
9021 instruction will not need emulation. As of revision 2.6.1, these
9022 instructions are not generated unless you also use the
9023 `-funsafe-math-optimizations' switch.
9027 Control whether GCC aligns `double', `long double', and `long
9028 long' variables on a two word boundary or a one word boundary.
9029 Aligning `double' variables on a two word boundary will produce
9030 code that runs somewhat faster on a `Pentium' at the expense of
9033 *Warning:* if you use the `-malign-double' switch, structures
9034 containing the above types will be aligned differently than the
9035 published application binary interface specifications for the 386
9036 and will not be binary compatible with structures in code compiled
9037 without that switch.
9039 `-m96bit-long-double'
9040 `-m128bit-long-double'
9041 These switches control the size of `long double' type. The i386
9042 application binary interface specifies the size to be 96 bits, so
9043 `-m96bit-long-double' is the default in 32 bit mode.
9045 Modern architectures (Pentium and newer) would prefer `long double'
9046 to be aligned to an 8 or 16 byte boundary. In arrays or structures
9047 conforming to the ABI, this would not be possible. So specifying a
9048 `-m128bit-long-double' will align `long double' to a 16 byte
9049 boundary by padding the `long double' with an additional 32 bit
9052 In the x86-64 compiler, `-m128bit-long-double' is the default
9053 choice as its ABI specifies that `long double' is to be aligned on
9056 Notice that neither of these options enable any extra precision
9057 over the x87 standard of 80 bits for a `long double'.
9059 *Warning:* if you override the default value for your target ABI,
9060 the structures and arrays containing `long double' variables will
9061 change their size as well as function calling convention for
9062 function taking `long double' will be modified. Hence they will
9063 not be binary compatible with arrays or structures in code
9064 compiled without that switch.
9066 `-mmlarge-data-threshold=NUMBER'
9067 When `-mcmodel=medium' is specified, the data greater than
9068 THRESHOLD are placed in large data section. This value must be the
9069 same across all object linked into the binary and defaults to
9074 Control whether GCC places uninitialized local variables into the
9075 `bss' or `data' segments. `-msvr3-shlib' places them into `bss'.
9076 These options are meaningful only on System V Release 3.
9079 Use a different function-calling convention, in which functions
9080 that take a fixed number of arguments return with the `ret' NUM
9081 instruction, which pops their arguments while returning. This
9082 saves one instruction in the caller since there is no need to pop
9083 the arguments there.
9085 You can specify that an individual function is called with this
9086 calling sequence with the function attribute `stdcall'. You can
9087 also override the `-mrtd' option by using the function attribute
9088 `cdecl'. *Note Function Attributes::.
9090 *Warning:* this calling convention is incompatible with the one
9091 normally used on Unix, so you cannot use it if you need to call
9092 libraries compiled with the Unix compiler.
9094 Also, you must provide function prototypes for all functions that
9095 take variable numbers of arguments (including `printf'); otherwise
9096 incorrect code will be generated for calls to those functions.
9098 In addition, seriously incorrect code will result if you call a
9099 function with too many arguments. (Normally, extra arguments are
9100 harmlessly ignored.)
9103 Control how many registers are used to pass integer arguments. By
9104 default, no registers are used to pass arguments, and at most 3
9105 registers can be used. You can control this behavior for a
9106 specific function by using the function attribute `regparm'.
9107 *Note Function Attributes::.
9109 *Warning:* if you use this switch, and NUM is nonzero, then you
9110 must build all modules with the same value, including any
9111 libraries. This includes the system libraries and startup modules.
9114 Use SSE register passing conventions for float and double arguments
9115 and return values. You can control this behavior for a specific
9116 function by using the function attribute `sseregparm'. *Note
9117 Function Attributes::.
9119 *Warning:* if you use this switch then you must build all modules
9120 with the same value, including any libraries. This includes the
9121 system libraries and startup modules.
9123 `-mpreferred-stack-boundary=NUM'
9124 Attempt to keep the stack boundary aligned to a 2 raised to NUM
9125 byte boundary. If `-mpreferred-stack-boundary' is not specified,
9126 the default is 4 (16 bytes or 128 bits), except when optimizing
9127 for code size (`-Os'), in which case the default is the minimum
9128 correct alignment (4 bytes for x86, and 8 bytes for x86-64).
9130 On Pentium and PentiumPro, `double' and `long double' values
9131 should be aligned to an 8 byte boundary (see `-malign-double') or
9132 suffer significant run time performance penalties. On Pentium
9133 III, the Streaming SIMD Extension (SSE) data type `__m128' suffers
9134 similar penalties if it is not 16 byte aligned.
9136 To ensure proper alignment of this values on the stack, the stack
9137 boundary must be as aligned as that required by any value stored
9138 on the stack. Further, every function must be generated such that
9139 it keeps the stack aligned. Thus calling a function compiled with
9140 a higher preferred stack boundary from a function compiled with a
9141 lower preferred stack boundary will most likely misalign the
9142 stack. It is recommended that libraries that use callbacks always
9143 use the default setting.
9145 This extra alignment does consume extra stack space, and generally
9146 increases code size. Code that is sensitive to stack space usage,
9147 such as embedded systems and operating system kernels, may want to
9148 reduce the preferred alignment to `-mpreferred-stack-boundary=2'.
9164 These switches enable or disable the use of instructions in the
9165 MMX, SSE, SSE2 or 3DNow! extended instruction sets. These
9166 extensions are also available as built-in functions: see *Note X86
9167 Built-in Functions::, for details of the functions enabled and
9168 disabled by these switches.
9170 To have SSE/SSE2 instructions generated automatically from
9171 floating-point code (as opposed to 387 instructions), see
9174 These options will enable GCC to use these extended instructions in
9175 generated code, even without `-mfpmath=sse'. Applications which
9176 perform runtime CPU detection must compile separate files for each
9177 supported architecture, using the appropriate flags. In
9178 particular, the file containing the CPU detection code should be
9179 compiled without these options.
9183 Use PUSH operations to store outgoing parameters. This method is
9184 shorter and usually equally fast as method using SUB/MOV
9185 operations and is enabled by default. In some cases disabling it
9186 may improve performance because of improved scheduling and reduced
9189 `-maccumulate-outgoing-args'
9190 If enabled, the maximum amount of space required for outgoing
9191 arguments will be computed in the function prologue. This is
9192 faster on most modern CPUs because of reduced dependencies,
9193 improved scheduling and reduced stack usage when preferred stack
9194 boundary is not equal to 2. The drawback is a notable increase in
9195 code size. This switch implies `-mno-push-args'.
9198 Support thread-safe exception handling on `Mingw32'. Code that
9199 relies on thread-safe exception handling must compile and link all
9200 code with the `-mthreads' option. When compiling, `-mthreads'
9201 defines `-D_MT'; when linking, it links in a special thread helper
9202 library `-lmingwthrd' which cleans up per thread exception
9205 `-mno-align-stringops'
9206 Do not align destination of inlined string operations. This
9207 switch reduces code size and improves performance in case the
9208 destination is already aligned, but GCC doesn't know about it.
9210 `-minline-all-stringops'
9211 By default GCC inlines string operations only when destination is
9212 known to be aligned at least to 4 byte boundary. This enables
9213 more inlining, increase code size, but may improve performance of
9214 code that depends on fast memcpy, strlen and memset for short
9217 `-momit-leaf-frame-pointer'
9218 Don't keep the frame pointer in a register for leaf functions.
9219 This avoids the instructions to save, set up and restore frame
9220 pointers and makes an extra register available in leaf functions.
9221 The option `-fomit-frame-pointer' removes the frame pointer for
9222 all functions which might make debugging harder.
9224 `-mtls-direct-seg-refs'
9225 `-mno-tls-direct-seg-refs'
9226 Controls whether TLS variables may be accessed with offsets from
9227 the TLS segment register (`%gs' for 32-bit, `%fs' for 64-bit), or
9228 whether the thread base pointer must be added. Whether or not this
9229 is legal depends on the operating system, and whether it maps the
9230 segment to cover the entire TLS area.
9232 For systems that use GNU libc, the default is on.
9234 These `-m' switches are supported in addition to the above on AMD
9235 x86-64 processors in 64-bit environments.
9239 Generate code for a 32-bit or 64-bit environment. The 32-bit
9240 environment sets int, long and pointer to 32 bits and generates
9241 code that runs on any i386 system. The 64-bit environment sets
9242 int to 32 bits and long and pointer to 64 bits and generates code
9243 for AMD's x86-64 architecture.
9246 Do not use a so called red zone for x86-64 code. The red zone is
9247 mandated by the x86-64 ABI, it is a 128-byte area beyond the
9248 location of the stack pointer that will not be modified by signal
9249 or interrupt handlers and therefore can be used for temporary data
9250 without adjusting the stack pointer. The flag `-mno-red-zone'
9251 disables this red zone.
9254 Generate code for the small code model: the program and its
9255 symbols must be linked in the lower 2 GB of the address space.
9256 Pointers are 64 bits. Programs can be statically or dynamically
9257 linked. This is the default code model.
9260 Generate code for the kernel code model. The kernel runs in the
9261 negative 2 GB of the address space. This model has to be used for
9265 Generate code for the medium model: The program is linked in the
9266 lower 2 GB of the address space but symbols can be located
9267 anywhere in the address space. Programs can be statically or
9268 dynamically linked, but building of shared libraries are not
9269 supported with the medium model.
9272 Generate code for the large model: This model makes no assumptions
9273 about addresses and sizes of sections. Currently GCC does not
9274 implement this model.
9277 File: gcc.info, Node: IA-64 Options, Next: M32C Options, Prev: i386 and x86-64 Options, Up: Submodel Options
9279 3.17.14 IA-64 Options
9280 ---------------------
9282 These are the `-m' options defined for the Intel IA-64 architecture.
9285 Generate code for a big endian target. This is the default for
9289 Generate code for a little endian target. This is the default for
9294 Generate (or don't) code for the GNU assembler. This is the
9299 Generate (or don't) code for the GNU linker. This is the default.
9302 Generate code that does not use a global pointer register. The
9303 result is not position independent code, and violates the IA-64
9306 `-mvolatile-asm-stop'
9307 `-mno-volatile-asm-stop'
9308 Generate (or don't) a stop bit immediately before and after
9309 volatile asm statements.
9312 `-mno-register-names'
9313 Generate (or don't) `in', `loc', and `out' register names for the
9314 stacked registers. This may make assembler output more readable.
9318 Disable (or enable) optimizations that use the small data section.
9319 This may be useful for working around optimizer bugs.
9322 Generate code that uses a single constant global pointer value.
9323 This is useful when compiling kernel code.
9326 Generate code that is self-relocatable. This implies
9327 `-mconstant-gp'. This is useful when compiling firmware code.
9329 `-minline-float-divide-min-latency'
9330 Generate code for inline divides of floating point values using
9331 the minimum latency algorithm.
9333 `-minline-float-divide-max-throughput'
9334 Generate code for inline divides of floating point values using
9335 the maximum throughput algorithm.
9337 `-minline-int-divide-min-latency'
9338 Generate code for inline divides of integer values using the
9339 minimum latency algorithm.
9341 `-minline-int-divide-max-throughput'
9342 Generate code for inline divides of integer values using the
9343 maximum throughput algorithm.
9345 `-minline-sqrt-min-latency'
9346 Generate code for inline square roots using the minimum latency
9349 `-minline-sqrt-max-throughput'
9350 Generate code for inline square roots using the maximum throughput
9355 Don't (or do) generate assembler code for the DWARF2 line number
9356 debugging info. This may be useful when not using the GNU
9360 `-mno-early-stop-bits'
9361 Allow stop bits to be placed earlier than immediately preceding the
9362 instruction that triggered the stop bit. This can improve
9363 instruction scheduling, but does not always do so.
9365 `-mfixed-range=REGISTER-RANGE'
9366 Generate code treating the given register range as fixed registers.
9367 A fixed register is one that the register allocator can not use.
9368 This is useful when compiling kernel code. A register range is
9369 specified as two registers separated by a dash. Multiple register
9370 ranges can be specified separated by a comma.
9372 `-mtls-size=TLS-SIZE'
9373 Specify bit size of immediate TLS offsets. Valid values are 14,
9377 Tune the instruction scheduling for a particular CPU, Valid values
9378 are itanium, itanium1, merced, itanium2, and mckinley.
9382 Add support for multithreading using the POSIX threads library.
9383 This option sets flags for both the preprocessor and linker. It
9384 does not affect the thread safety of object code produced by the
9385 compiler or that of libraries supplied with it. These are HP-UX
9390 Generate code for a 32-bit or 64-bit environment. The 32-bit
9391 environment sets int, long and pointer to 32 bits. The 64-bit
9392 environment sets int to 32 bits and long and pointer to 64 bits.
9393 These are HP-UX specific flags.
9397 File: gcc.info, Node: M32C Options, Next: M32R/D Options, Prev: IA-64 Options, Up: Submodel Options
9399 3.17.15 M32C Options
9400 --------------------
9403 Select the CPU for which code is generated. NAME may be one of
9404 `r8c' for the R8C/Tiny series, `m16c' for the M16C (up to /60)
9405 series, `m32cm' for the M16C/80 series, or `m32c' for the M32C/80
9409 Specifies that the program will be run on the simulator. This
9410 causes an alternate runtime library to be linked in which
9411 supports, for example, file I/O. You must not use this option
9412 when generating programs that will run on real hardware; you must
9413 provide your own runtime library for whatever I/O functions are
9417 Specifies the number of memory-based pseudo-registers GCC will use
9418 during code generation. These pseudo-registers will be used like
9419 real registers, so there is a tradeoff between GCC's ability to
9420 fit the code into available registers, and the performance penalty
9421 of using memory instead of registers. Note that all modules in a
9422 program must be compiled with the same value for this option.
9423 Because of that, you must not use this option with the default
9424 runtime libraries gcc builds.
9428 File: gcc.info, Node: M32R/D Options, Next: M680x0 Options, Prev: M32C Options, Up: Submodel Options
9430 3.17.16 M32R/D Options
9431 ----------------------
9433 These `-m' options are defined for Renesas M32R/D architectures:
9436 Generate code for the M32R/2.
9439 Generate code for the M32R/X.
9442 Generate code for the M32R. This is the default.
9445 Assume all objects live in the lower 16MB of memory (so that their
9446 addresses can be loaded with the `ld24' instruction), and assume
9447 all subroutines are reachable with the `bl' instruction. This is
9450 The addressability of a particular object can be set with the
9454 Assume objects may be anywhere in the 32-bit address space (the
9455 compiler will generate `seth/add3' instructions to load their
9456 addresses), and assume all subroutines are reachable with the `bl'
9460 Assume objects may be anywhere in the 32-bit address space (the
9461 compiler will generate `seth/add3' instructions to load their
9462 addresses), and assume subroutines may not be reachable with the
9463 `bl' instruction (the compiler will generate the much slower
9464 `seth/add3/jl' instruction sequence).
9467 Disable use of the small data area. Variables will be put into
9468 one of `.data', `bss', or `.rodata' (unless the `section'
9469 attribute has been specified). This is the default.
9471 The small data area consists of sections `.sdata' and `.sbss'.
9472 Objects may be explicitly put in the small data area with the
9473 `section' attribute using one of these sections.
9476 Put small global and static data in the small data area, but do not
9477 generate special code to reference them.
9480 Put small global and static data in the small data area, and
9481 generate special instructions to reference them.
9484 Put global and static objects less than or equal to NUM bytes into
9485 the small data or bss sections instead of the normal data or bss
9486 sections. The default value of NUM is 8. The `-msdata' option
9487 must be set to one of `sdata' or `use' for this option to have any
9490 All modules should be compiled with the same `-G NUM' value.
9491 Compiling with different values of NUM may or may not work; if it
9492 doesn't the linker will give an error message--incorrect code will
9496 Makes the M32R specific code in the compiler display some
9497 statistics that might help in debugging programs.
9500 Align all loops to a 32-byte boundary.
9503 Do not enforce a 32-byte alignment for loops. This is the default.
9505 `-missue-rate=NUMBER'
9506 Issue NUMBER instructions per cycle. NUMBER can only be 1 or 2.
9508 `-mbranch-cost=NUMBER'
9509 NUMBER can only be 1 or 2. If it is 1 then branches will be
9510 preferred over conditional code, if it is 2, then the opposite will
9513 `-mflush-trap=NUMBER'
9514 Specifies the trap number to use to flush the cache. The default
9515 is 12. Valid numbers are between 0 and 15 inclusive.
9518 Specifies that the cache cannot be flushed by using a trap.
9521 Specifies the name of the operating system function to call to
9522 flush the cache. The default is __flush_cache_, but a function
9523 call will only be used if a trap is not available.
9526 Indicates that there is no OS function for flushing the cache.
9530 File: gcc.info, Node: M680x0 Options, Next: M68hc1x Options, Prev: M32R/D Options, Up: Submodel Options
9532 3.17.17 M680x0 Options
9533 ----------------------
9535 These are the `-m' options defined for the 68000 series. The default
9536 values for these options depends on which style of 68000 was selected
9537 when the compiler was configured; the defaults for the most common
9538 choices are given below.
9542 Generate output for a 68000. This is the default when the
9543 compiler is configured for 68000-based systems.
9545 Use this option for microcontrollers with a 68000 or EC000 core,
9546 including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
9550 Generate output for a 68020. This is the default when the
9551 compiler is configured for 68020-based systems.
9554 Generate output containing 68881 instructions for floating point.
9555 This is the default for most 68020 systems unless `--nfp' was
9556 specified when the compiler was configured.
9559 Generate output for a 68030. This is the default when the
9560 compiler is configured for 68030-based systems.
9563 Generate output for a 68040. This is the default when the
9564 compiler is configured for 68040-based systems.
9566 This option inhibits the use of 68881/68882 instructions that have
9567 to be emulated by software on the 68040. Use this option if your
9568 68040 does not have code to emulate those instructions.
9571 Generate output for a 68060. This is the default when the
9572 compiler is configured for 68060-based systems.
9574 This option inhibits the use of 68020 and 68881/68882 instructions
9575 that have to be emulated by software on the 68060. Use this
9576 option if your 68060 does not have code to emulate those
9580 Generate output for a CPU32. This is the default when the
9581 compiler is configured for CPU32-based systems.
9583 Use this option for microcontrollers with a CPU32 or CPU32+ core,
9584 including the 68330, 68331, 68332, 68333, 68334, 68336, 68340,
9585 68341, 68349 and 68360.
9588 Generate output for a 520X "coldfire" family cpu. This is the
9589 default when the compiler is configured for 520X-based systems.
9591 Use this option for microcontroller with a 5200 core, including
9592 the MCF5202, MCF5203, MCF5204 and MCF5202.
9595 Generate output for a 68040, without using any of the new
9596 instructions. This results in code which can run relatively
9597 efficiently on either a 68020/68881 or a 68030 or a 68040. The
9598 generated code does use the 68881 instructions that are emulated
9602 Generate output for a 68060, without using any of the new
9603 instructions. This results in code which can run relatively
9604 efficiently on either a 68020/68881 or a 68030 or a 68040. The
9605 generated code does use the 68881 instructions that are emulated
9609 Generate output containing library calls for floating point.
9610 *Warning:* the requisite libraries are not available for all m68k
9611 targets. Normally the facilities of the machine's usual C
9612 compiler are used, but this can't be done directly in
9613 cross-compilation. You must make your own arrangements to provide
9614 suitable library functions for cross-compilation. The embedded
9615 targets `m68k-*-aout' and `m68k-*-coff' do provide software
9616 floating point support.
9619 Consider type `int' to be 16 bits wide, like `short int'.
9620 Additionally, parameters passed on the stack are also aligned to a
9621 16-bit boundary even on targets whose API mandates promotion to
9625 Do not use the bit-field instructions. The `-m68000', `-mcpu32'
9626 and `-m5200' options imply `-mnobitfield'.
9629 Do use the bit-field instructions. The `-m68020' option implies
9630 `-mbitfield'. This is the default if you use a configuration
9631 designed for a 68020.
9634 Use a different function-calling convention, in which functions
9635 that take a fixed number of arguments return with the `rtd'
9636 instruction, which pops their arguments while returning. This
9637 saves one instruction in the caller since there is no need to pop
9638 the arguments there.
9640 This calling convention is incompatible with the one normally used
9641 on Unix, so you cannot use it if you need to call libraries
9642 compiled with the Unix compiler.
9644 Also, you must provide function prototypes for all functions that
9645 take variable numbers of arguments (including `printf'); otherwise
9646 incorrect code will be generated for calls to those functions.
9648 In addition, seriously incorrect code will result if you call a
9649 function with too many arguments. (Normally, extra arguments are
9650 harmlessly ignored.)
9652 The `rtd' instruction is supported by the 68010, 68020, 68030,
9653 68040, 68060 and CPU32 processors, but not by the 68000 or 5200.
9657 Control whether GCC aligns `int', `long', `long long', `float',
9658 `double', and `long double' variables on a 32-bit boundary
9659 (`-malign-int') or a 16-bit boundary (`-mno-align-int'). Aligning
9660 variables on 32-bit boundaries produces code that runs somewhat
9661 faster on processors with 32-bit busses at the expense of more
9664 *Warning:* if you use the `-malign-int' switch, GCC will align
9665 structures containing the above types differently than most
9666 published application binary interface specifications for the m68k.
9669 Use the pc-relative addressing mode of the 68000 directly, instead
9670 of using a global offset table. At present, this option implies
9671 `-fpic', allowing at most a 16-bit offset for pc-relative
9672 addressing. `-fPIC' is not presently supported with `-mpcrel',
9673 though this could be supported for 68020 and higher processors.
9677 Do not (do) assume that unaligned memory references will be
9678 handled by the system.
9681 Generate code that allows the data segment to be located in a
9682 different area of memory from the text segment. This allows for
9683 execute in place in an environment without virtual memory
9684 management. This option implies `-fPIC'.
9687 Generate code that assumes that the data segment follows the text
9688 segment. This is the default.
9690 `-mid-shared-library'
9691 Generate code that supports shared libraries via the library ID
9692 method. This allows for execute in place and shared libraries in
9693 an environment without virtual memory management. This option
9696 `-mno-id-shared-library'
9697 Generate code that doesn't assume ID based shared libraries are
9698 being used. This is the default.
9700 `-mshared-library-id=n'
9701 Specified the identification number of the ID based shared library
9702 being compiled. Specifying a value of 0 will generate more
9703 compact code, specifying other values will force the allocation of
9704 that number to the current library but is no more space or time
9705 efficient than omitting this option.
9709 File: gcc.info, Node: M68hc1x Options, Next: MCore Options, Prev: M680x0 Options, Up: Submodel Options
9711 3.17.18 M68hc1x Options
9712 -----------------------
9714 These are the `-m' options defined for the 68hc11 and 68hc12
9715 microcontrollers. The default values for these options depends on
9716 which style of microcontroller was selected when the compiler was
9717 configured; the defaults for the most common choices are given below.
9721 Generate output for a 68HC11. This is the default when the
9722 compiler is configured for 68HC11-based systems.
9726 Generate output for a 68HC12. This is the default when the
9727 compiler is configured for 68HC12-based systems.
9731 Generate output for a 68HCS12.
9734 Enable the use of 68HC12 pre and post auto-increment and
9735 auto-decrement addressing modes.
9739 Enable the use of 68HC12 min and max instructions.
9743 Treat all calls as being far away (near). If calls are assumed to
9744 be far away, the compiler will use the `call' instruction to call
9745 a function and the `rtc' instruction for returning.
9748 Consider type `int' to be 16 bits wide, like `short int'.
9750 `-msoft-reg-count=COUNT'
9751 Specify the number of pseudo-soft registers which are used for the
9752 code generation. The maximum number is 32. Using more pseudo-soft
9753 register may or may not result in better code depending on the
9754 program. The default is 4 for 68HC11 and 2 for 68HC12.
9758 File: gcc.info, Node: MCore Options, Next: MIPS Options, Prev: M68hc1x Options, Up: Submodel Options
9760 3.17.19 MCore Options
9761 ---------------------
9763 These are the `-m' options defined for the Motorola M*Core processors.
9767 Inline constants into the code stream if it can be done in two
9768 instructions or less.
9772 Use the divide instruction. (Enabled by default).
9775 `-mno-relax-immediate'
9776 Allow arbitrary sized immediates in bit operations.
9779 `-mno-wide-bitfields'
9780 Always treat bit-fields as int-sized.
9783 `-mno-4byte-functions'
9784 Force all functions to be aligned to a four byte boundary.
9787 `-mno-callgraph-data'
9788 Emit callgraph information.
9792 Prefer word access when reading byte quantities.
9796 Generate code for a little endian target.
9800 Generate code for the 210 processor.
9803 File: gcc.info, Node: MIPS Options, Next: MMIX Options, Prev: MCore Options, Up: Submodel Options
9805 3.17.20 MIPS Options
9806 --------------------
9809 Generate big-endian code.
9812 Generate little-endian code. This is the default for `mips*el-*-*'
9816 Generate code that will run on ARCH, which can be the name of a
9817 generic MIPS ISA, or the name of a particular processor. The ISA
9818 names are: `mips1', `mips2', `mips3', `mips4', `mips32',
9819 `mips32r2', and `mips64'. The processor names are: `4kc', `4km',
9820 `4kp', `5kc', `5kf', `20kc', `24k', `24kc', `24kf', `24kx', `m4k',
9821 `orion', `r2000', `r3000', `r3900', `r4000', `r4400', `r4600',
9822 `r4650', `r6000', `r8000', `rm7000', `rm9000', `sb1', `sr71000',
9823 `vr4100', `vr4111', `vr4120', `vr4130', `vr4300', `vr5000',
9824 `vr5400' and `vr5500'. The special value `from-abi' selects the
9825 most compatible architecture for the selected ABI (that is,
9826 `mips1' for 32-bit ABIs and `mips3' for 64-bit ABIs).
9828 In processor names, a final `000' can be abbreviated as `k' (for
9829 example, `-march=r2k'). Prefixes are optional, and `vr' may be
9832 GCC defines two macros based on the value of this option. The
9833 first is `_MIPS_ARCH', which gives the name of target
9834 architecture, as a string. The second has the form
9835 `_MIPS_ARCH_FOO', where FOO is the capitalized value of
9836 `_MIPS_ARCH'. For example, `-march=r2000' will set `_MIPS_ARCH'
9837 to `"r2000"' and define the macro `_MIPS_ARCH_R2000'.
9839 Note that the `_MIPS_ARCH' macro uses the processor names given
9840 above. In other words, it will have the full prefix and will not
9841 abbreviate `000' as `k'. In the case of `from-abi', the macro
9842 names the resolved architecture (either `"mips1"' or `"mips3"').
9843 It names the default architecture when no `-march' option is given.
9846 Optimize for ARCH. Among other things, this option controls the
9847 way instructions are scheduled, and the perceived cost of
9848 arithmetic operations. The list of ARCH values is the same as for
9851 When this option is not used, GCC will optimize for the processor
9852 specified by `-march'. By using `-march' and `-mtune' together,
9853 it is possible to generate code that will run on a family of
9854 processors, but optimize the code for one particular member of
9857 `-mtune' defines the macros `_MIPS_TUNE' and `_MIPS_TUNE_FOO',
9858 which work in the same way as the `-march' ones described above.
9861 Equivalent to `-march=mips1'.
9864 Equivalent to `-march=mips2'.
9867 Equivalent to `-march=mips3'.
9870 Equivalent to `-march=mips4'.
9873 Equivalent to `-march=mips32'.
9876 Equivalent to `-march=mips32r2'.
9879 Equivalent to `-march=mips64'.
9883 Generate (do not generate) MIPS16 code. If GCC is targetting a
9884 MIPS32 or MIPS64 architecture, it will make use of the MIPS16e ASE.
9891 Generate code for the given ABI.
9893 Note that the EABI has a 32-bit and a 64-bit variant. GCC normally
9894 generates 64-bit code when you select a 64-bit architecture, but
9895 you can use `-mgp32' to get 32-bit code instead.
9897 For information about the O64 ABI, see
9898 `http://gcc.gnu.org/projects/mipso64-abi.html'.
9902 Generate (do not generate) SVR4-style position-independent code.
9903 `-mabicalls' is the default for SVR4-based systems.
9907 Lift (do not lift) the usual restrictions on the size of the global
9910 GCC normally uses a single instruction to load values from the GOT.
9911 While this is relatively efficient, it will only work if the GOT
9912 is smaller than about 64k. Anything larger will cause the linker
9913 to report an error such as:
9915 relocation truncated to fit: R_MIPS_GOT16 foobar
9917 If this happens, you should recompile your code with `-mxgot'. It
9918 should then work with very large GOTs, although it will also be
9919 less efficient, since it will take three instructions to fetch the
9920 value of a global symbol.
9922 Note that some linkers can create multiple GOTs. If you have such
9923 a linker, you should only need to use `-mxgot' when a single object
9924 file accesses more than 64k's worth of GOT entries. Very few do.
9926 These options have no effect unless GCC is generating position
9930 Assume that general-purpose registers are 32 bits wide.
9933 Assume that general-purpose registers are 64 bits wide.
9936 Assume that floating-point registers are 32 bits wide.
9939 Assume that floating-point registers are 64 bits wide.
9942 Use floating-point coprocessor instructions.
9945 Do not use floating-point coprocessor instructions. Implement
9946 floating-point calculations using library calls instead.
9949 Assume that the floating-point coprocessor only supports
9950 single-precision operations.
9953 Assume that the floating-point coprocessor supports
9954 double-precision operations. This is the default.
9958 Use (do not use) the MIPS DSP ASE. *Note MIPS DSP Built-in
9962 `-mno-paired-single'
9963 Use (do not use) paired-single floating-point instructions. *Note
9964 MIPS Paired-Single Support::. This option can only be used when
9965 generating 64-bit code and requires hardware floating-point
9966 support to be enabled.
9970 Use (do not use) the MIPS-3D ASE. *Note MIPS-3D Built-in
9971 Functions::. The option `-mips3d' implies `-mpaired-single'.
9974 Force `long' types to be 64 bits wide. See `-mlong32' for an
9975 explanation of the default and the way that the pointer size is
9979 Force `long', `int', and pointer types to be 32 bits wide.
9981 The default size of `int's, `long's and pointers depends on the
9982 ABI. All the supported ABIs use 32-bit `int's. The n64 ABI uses
9983 64-bit `long's, as does the 64-bit EABI; the others use 32-bit
9984 `long's. Pointers are the same size as `long's, or the same size
9985 as integer registers, whichever is smaller.
9989 Assume (do not assume) that all symbols have 32-bit values,
9990 regardless of the selected ABI. This option is useful in
9991 combination with `-mabi=64' and `-mno-abicalls' because it allows
9992 GCC to generate shorter and faster references to symbolic
9996 Put global and static items less than or equal to NUM bytes into
9997 the small data or bss section instead of the normal data or bss
9998 section. This allows the data to be accessed using a single
10001 All modules should be compiled with the same `-G NUM' value.
10004 `-mno-embedded-data'
10005 Allocate variables to the read-only data section first if
10006 possible, then next in the small data section if possible,
10007 otherwise in data. This gives slightly slower code than the
10008 default, but reduces the amount of RAM required when executing,
10009 and thus may be preferred for some embedded systems.
10011 `-muninit-const-in-rodata'
10012 `-mno-uninit-const-in-rodata'
10013 Put uninitialized `const' variables in the read-only data section.
10014 This option is only meaningful in conjunction with
10017 `-msplit-addresses'
10018 `-mno-split-addresses'
10019 Enable (disable) use of the `%hi()' and `%lo()' assembler
10020 relocation operators. This option has been superseded by
10021 `-mexplicit-relocs' but is retained for backwards compatibility.
10023 `-mexplicit-relocs'
10024 `-mno-explicit-relocs'
10025 Use (do not use) assembler relocation operators when dealing with
10026 symbolic addresses. The alternative, selected by
10027 `-mno-explicit-relocs', is to use assembler macros instead.
10029 `-mexplicit-relocs' is the default if GCC was configured to use an
10030 assembler that supports relocation operators.
10032 `-mcheck-zero-division'
10033 `-mno-check-zero-division'
10034 Trap (do not trap) on integer division by zero. The default is
10035 `-mcheck-zero-division'.
10039 MIPS systems check for division by zero by generating either a
10040 conditional trap or a break instruction. Using traps results in
10041 smaller code, but is only supported on MIPS II and later. Also,
10042 some versions of the Linux kernel have a bug that prevents trap
10043 from generating the proper signal (`SIGFPE'). Use
10044 `-mdivide-traps' to allow conditional traps on architectures that
10045 support them and `-mdivide-breaks' to force the use of breaks.
10047 The default is usually `-mdivide-traps', but this can be
10048 overridden at configure time using `--with-divide=breaks'.
10049 Divide-by-zero checks can be completely disabled using
10050 `-mno-check-zero-division'.
10054 Force (do not force) the use of `memcpy()' for non-trivial block
10055 moves. The default is `-mno-memcpy', which allows GCC to inline
10056 most constant-sized copies.
10060 Disable (do not disable) use of the `jal' instruction. Calling
10061 functions using `jal' is more efficient but requires the caller
10062 and callee to be in the same 256 megabyte segment.
10064 This option has no effect on abicalls code. The default is
10069 Enable (disable) use of the `mad', `madu' and `mul' instructions,
10070 as provided by the R4650 ISA.
10074 Enable (disable) use of the floating point multiply-accumulate
10075 instructions, when they are available. The default is
10078 When multiply-accumulate instructions are used, the intermediate
10079 product is calculated to infinite precision and is not subject to
10080 the FCSR Flush to Zero bit. This may be undesirable in some
10084 Tell the MIPS assembler to not run its preprocessor over user
10085 assembler files (with a `.s' suffix) when assembling them.
10089 Work around certain R4000 CPU errata:
10090 - A double-word or a variable shift may give an incorrect
10091 result if executed immediately after starting an integer
10094 - A double-word or a variable shift may give an incorrect
10095 result if executed while an integer multiplication is in
10098 - An integer division may give an incorrect result if started
10099 in a delay slot of a taken branch or a jump.
10103 Work around certain R4400 CPU errata:
10104 - A double-word or a variable shift may give an incorrect
10105 result if executed immediately after starting an integer
10110 Work around certain VR4120 errata:
10111 - `dmultu' does not always produce the correct result.
10113 - `div' and `ddiv' do not always produce the correct result if
10114 one of the operands is negative.
10115 The workarounds for the division errata rely on special functions
10116 in `libgcc.a'. At present, these functions are only provided by
10117 the `mips64vr*-elf' configurations.
10119 Other VR4120 errata require a nop to be inserted between certain
10120 pairs of instructions. These errata are handled by the assembler,
10124 Work around the VR4130 `mflo'/`mfhi' errata. The workarounds are
10125 implemented by the assembler rather than by GCC, although GCC will
10126 avoid using `mflo' and `mfhi' if the VR4130 `macc', `macchi',
10127 `dmacc' and `dmacchi' instructions are available instead.
10131 Work around certain SB-1 CPU core errata. (This flag currently
10132 works around the SB-1 revision 2 "F1" and "F2" floating point
10135 `-mflush-func=FUNC'
10137 Specifies the function to call to flush the I and D caches, or to
10138 not call any such function. If called, the function must take the
10139 same arguments as the common `_flush_func()', that is, the address
10140 of the memory range for which the cache is being flushed, the size
10141 of the memory range, and the number 3 (to flush both caches). The
10142 default depends on the target GCC was configured for, but commonly
10143 is either `_flush_func' or `__cpu_flush'.
10146 `-mno-branch-likely'
10147 Enable or disable use of Branch Likely instructions, regardless of
10148 the default for the selected architecture. By default, Branch
10149 Likely instructions may be generated if they are supported by the
10150 selected architecture. An exception is for the MIPS32 and MIPS64
10151 architectures and processors which implement those architectures;
10152 for those, Branch Likely instructions will not be generated by
10153 default because the MIPS32 and MIPS64 architectures specifically
10154 deprecate their use.
10157 `-mno-fp-exceptions'
10158 Specifies whether FP exceptions are enabled. This affects how we
10159 schedule FP instructions for some processors. The default is that
10160 FP exceptions are enabled.
10162 For instance, on the SB-1, if FP exceptions are disabled, and we
10163 are emitting 64-bit code, then we can use both FP pipes.
10164 Otherwise, we can only use one FP pipe.
10167 `-mno-vr4130-align'
10168 The VR4130 pipeline is two-way superscalar, but can only issue two
10169 instructions together if the first one is 8-byte aligned. When
10170 this option is enabled, GCC will align pairs of instructions that
10171 it thinks should execute in parallel.
10173 This option only has an effect when optimizing for the VR4130. It
10174 normally makes code faster, but at the expense of making it bigger.
10175 It is enabled by default at optimization level `-O3'.
10178 File: gcc.info, Node: MMIX Options, Next: MN10300 Options, Prev: MIPS Options, Up: Submodel Options
10180 3.17.21 MMIX Options
10181 --------------------
10183 These options are defined for the MMIX:
10187 Specify that intrinsic library functions are being compiled,
10188 passing all values in registers, no matter the size.
10192 Generate floating-point comparison instructions that compare with
10193 respect to the `rE' epsilon register.
10197 Generate code that passes function parameters and return values
10198 that (in the called function) are seen as registers `$0' and up,
10199 as opposed to the GNU ABI which uses global registers `$231' and
10204 When reading data from memory in sizes shorter than 64 bits, use
10205 (do not use) zero-extending load instructions by default, rather
10206 than sign-extending ones.
10210 Make the result of a division yielding a remainder have the same
10211 sign as the divisor. With the default, `-mno-knuthdiv', the sign
10212 of the remainder follows the sign of the dividend. Both methods
10213 are arithmetically valid, the latter being almost exclusively used.
10215 `-mtoplevel-symbols'
10216 `-mno-toplevel-symbols'
10217 Prepend (do not prepend) a `:' to all global symbols, so the
10218 assembly code can be used with the `PREFIX' assembly directive.
10221 Generate an executable in the ELF format, rather than the default
10222 `mmo' format used by the `mmix' simulator.
10225 `-mno-branch-predict'
10226 Use (do not use) the probable-branch instructions, when static
10227 branch prediction indicates a probable branch.
10230 `-mno-base-addresses'
10231 Generate (do not generate) code that uses _base addresses_. Using
10232 a base address automatically generates a request (handled by the
10233 assembler and the linker) for a constant to be set up in a global
10234 register. The register is used for one or more base address
10235 requests within the range 0 to 255 from the value held in the
10236 register. The generally leads to short and fast code, but the
10237 number of different data items that can be addressed is limited.
10238 This means that a program that uses lots of static data may
10239 require `-mno-base-addresses'.
10243 Force (do not force) generated code to have a single exit point in
10247 File: gcc.info, Node: MN10300 Options, Next: MT Options, Prev: MMIX Options, Up: Submodel Options
10249 3.17.22 MN10300 Options
10250 -----------------------
10252 These `-m' options are defined for Matsushita MN10300 architectures:
10255 Generate code to avoid bugs in the multiply instructions for the
10256 MN10300 processors. This is the default.
10259 Do not generate code to avoid bugs in the multiply instructions
10260 for the MN10300 processors.
10263 Generate code which uses features specific to the AM33 processor.
10266 Do not generate code which uses features specific to the AM33
10267 processor. This is the default.
10269 `-mreturn-pointer-on-d0'
10270 When generating a function which returns a pointer, return the
10271 pointer in both `a0' and `d0'. Otherwise, the pointer is returned
10272 only in a0, and attempts to call such functions without a prototype
10273 would result in errors. Note that this option is on by default;
10274 use `-mno-return-pointer-on-d0' to disable it.
10277 Do not link in the C run-time initialization object file.
10280 Indicate to the linker that it should perform a relaxation
10281 optimization pass to shorten branches, calls and absolute memory
10282 addresses. This option only has an effect when used on the
10283 command line for the final link step.
10285 This option makes symbolic debugging impossible.
10288 File: gcc.info, Node: MT Options, Next: PDP-11 Options, Prev: MN10300 Options, Up: Submodel Options
10293 These `-m' options are defined for Morpho MT architectures:
10296 Generate code that will run on CPU-TYPE, which is the name of a
10297 system representing a certain processor type. Possible values for
10298 CPU-TYPE are `ms1-64-001', `ms1-16-002', `ms1-16-003' and `ms2'.
10300 When this option is not used, the default is `-march=ms1-16-002'.
10303 Use byte loads and stores when generating code.
10306 Do not use byte loads and stores when generating code.
10309 Use simulator runtime
10312 Do not link in the C run-time initialization object file `crti.o'.
10313 Other run-time initialization and termination files such as
10314 `startup.o' and `exit.o' are still included on the linker command
10319 File: gcc.info, Node: PDP-11 Options, Next: PowerPC Options, Prev: MT Options, Up: Submodel Options
10321 3.17.24 PDP-11 Options
10322 ----------------------
10324 These options are defined for the PDP-11:
10327 Use hardware FPP floating point. This is the default. (FIS
10328 floating point on the PDP-11/40 is not supported.)
10331 Do not use hardware floating point.
10334 Return floating-point results in ac0 (fr0 in Unix assembler
10338 Return floating-point results in memory. This is the default.
10341 Generate code for a PDP-11/40.
10344 Generate code for a PDP-11/45. This is the default.
10347 Generate code for a PDP-11/10.
10350 Use inline `movmemhi' patterns for copying memory. This is the
10354 Do not use inline `movmemhi' patterns for copying memory.
10358 Use 16-bit `int'. This is the default.
10366 Use 64-bit `float'. This is the default.
10370 Use 32-bit `float'.
10373 Use `abshi2' pattern. This is the default.
10376 Do not use `abshi2' pattern.
10378 `-mbranch-expensive'
10379 Pretend that branches are expensive. This is for experimenting
10380 with code generation only.
10383 Do not pretend that branches are expensive. This is the default.
10386 Generate code for a system with split I&D.
10389 Generate code for a system without split I&D. This is the default.
10392 Use Unix assembler syntax. This is the default when configured for
10396 Use DEC assembler syntax. This is the default when configured for
10397 any PDP-11 target other than `pdp11-*-bsd'.
10400 File: gcc.info, Node: PowerPC Options, Next: RS/6000 and PowerPC Options, Prev: PDP-11 Options, Up: Submodel Options
10402 3.17.25 PowerPC Options
10403 -----------------------
10405 These are listed under *Note RS/6000 and PowerPC Options::.
10408 File: gcc.info, Node: RS/6000 and PowerPC Options, Next: S/390 and zSeries Options, Prev: PowerPC Options, Up: Submodel Options
10410 3.17.26 IBM RS/6000 and PowerPC Options
10411 ---------------------------------------
10413 These `-m' options are defined for the IBM RS/6000 and PowerPC:
10421 `-mno-powerpc-gpopt'
10423 `-mno-powerpc-gfxopt'
10432 GCC supports two related instruction set architectures for the
10433 RS/6000 and PowerPC. The "POWER" instruction set are those
10434 instructions supported by the `rios' chip set used in the original
10435 RS/6000 systems and the "PowerPC" instruction set is the
10436 architecture of the Freescale MPC5xx, MPC6xx, MPC8xx
10437 microprocessors, and the IBM 4xx, 6xx, and follow-on
10440 Neither architecture is a subset of the other. However there is a
10441 large common subset of instructions supported by both. An MQ
10442 register is included in processors supporting the POWER
10445 You use these options to specify which instructions are available
10446 on the processor you are using. The default value of these
10447 options is determined when configuring GCC. Specifying the
10448 `-mcpu=CPU_TYPE' overrides the specification of these options. We
10449 recommend you use the `-mcpu=CPU_TYPE' option rather than the
10450 options listed above.
10452 The `-mpower' option allows GCC to generate instructions that are
10453 found only in the POWER architecture and to use the MQ register.
10454 Specifying `-mpower2' implies `-power' and also allows GCC to
10455 generate instructions that are present in the POWER2 architecture
10456 but not the original POWER architecture.
10458 The `-mpowerpc' option allows GCC to generate instructions that
10459 are found only in the 32-bit subset of the PowerPC architecture.
10460 Specifying `-mpowerpc-gpopt' implies `-mpowerpc' and also allows
10461 GCC to use the optional PowerPC architecture instructions in the
10462 General Purpose group, including floating-point square root.
10463 Specifying `-mpowerpc-gfxopt' implies `-mpowerpc' and also allows
10464 GCC to use the optional PowerPC architecture instructions in the
10465 Graphics group, including floating-point select.
10467 The `-mmfcrf' option allows GCC to generate the move from
10468 condition register field instruction implemented on the POWER4
10469 processor and other processors that support the PowerPC V2.01
10470 architecture. The `-mpopcntb' option allows GCC to generate the
10471 popcount and double precision FP reciprocal estimate instruction
10472 implemented on the POWER5 processor and other processors that
10473 support the PowerPC V2.02 architecture. The `-mfprnd' option
10474 allows GCC to generate the FP round to integer instructions
10475 implemented on the POWER5+ processor and other processors that
10476 support the PowerPC V2.03 architecture.
10478 The `-mpowerpc64' option allows GCC to generate the additional
10479 64-bit instructions that are found in the full PowerPC64
10480 architecture and to treat GPRs as 64-bit, doubleword quantities.
10481 GCC defaults to `-mno-powerpc64'.
10483 If you specify both `-mno-power' and `-mno-powerpc', GCC will use
10484 only the instructions in the common subset of both architectures
10485 plus some special AIX common-mode calls, and will not use the MQ
10486 register. Specifying both `-mpower' and `-mpowerpc' permits GCC
10487 to use any instruction from either architecture and to allow use
10488 of the MQ register; specify this for the Motorola MPC601.
10492 Select which mnemonics to use in the generated assembler code.
10493 With `-mnew-mnemonics', GCC uses the assembler mnemonics defined
10494 for the PowerPC architecture. With `-mold-mnemonics' it uses the
10495 assembler mnemonics defined for the POWER architecture.
10496 Instructions defined in only one architecture have only one
10497 mnemonic; GCC uses that mnemonic irrespective of which of these
10498 options is specified.
10500 GCC defaults to the mnemonics appropriate for the architecture in
10501 use. Specifying `-mcpu=CPU_TYPE' sometimes overrides the value of
10502 these option. Unless you are building a cross-compiler, you
10503 should normally not specify either `-mnew-mnemonics' or
10504 `-mold-mnemonics', but should instead accept the default.
10507 Set architecture type, register usage, choice of mnemonics, and
10508 instruction scheduling parameters for machine type CPU_TYPE.
10509 Supported values for CPU_TYPE are `401', `403', `405', `405fp',
10510 `440', `440fp', `505', `601', `602', `603', `603e', `604', `604e',
10511 `620', `630', `740', `7400', `7450', `750', `801', `821', `823',
10512 `860', `970', `8540', `ec603e', `G3', `G4', `G5', `power',
10513 `power2', `power3', `power4', `power5', `power5+', `common',
10514 `powerpc', `powerpc64', `rios', `rios1', `rios2', `rsc', and
10517 `-mcpu=common' selects a completely generic processor. Code
10518 generated under this option will run on any POWER or PowerPC
10519 processor. GCC will use only the instructions in the common
10520 subset of both architectures, and will not use the MQ register.
10521 GCC assumes a generic processor model for scheduling purposes.
10523 `-mcpu=power', `-mcpu=power2', `-mcpu=powerpc', and
10524 `-mcpu=powerpc64' specify generic POWER, POWER2, pure 32-bit
10525 PowerPC (i.e., not MPC601), and 64-bit PowerPC architecture machine
10526 types, with an appropriate, generic processor model assumed for
10527 scheduling purposes.
10529 The other options specify a specific processor. Code generated
10530 under those options will run best on that processor, and may not
10531 run at all on others.
10533 The `-mcpu' options automatically enable or disable the following
10534 options: `-maltivec', `-mfprnd', `-mhard-float', `-mmfcrf',
10535 `-mmultiple', `-mnew-mnemonics', `-mpopcntb', `-mpower',
10536 `-mpower2', `-mpowerpc64', `-mpowerpc-gpopt', `-mpowerpc-gfxopt',
10537 `-mstring'. The particular options set for any particular CPU
10538 will vary between compiler versions, depending on what setting
10539 seems to produce optimal code for that CPU; it doesn't necessarily
10540 reflect the actual hardware's capabilities. If you wish to set an
10541 individual option to a particular value, you may specify it after
10542 the `-mcpu' option, like `-mcpu=970 -mno-altivec'.
10544 On AIX, the `-maltivec' and `-mpowerpc64' options are not enabled
10545 or disabled by the `-mcpu' option at present because AIX does not
10546 have full support for these options. You may still enable or
10547 disable them individually if you're sure it'll work in your
10551 Set the instruction scheduling parameters for machine type
10552 CPU_TYPE, but do not set the architecture type, register usage, or
10553 choice of mnemonics, as `-mcpu=CPU_TYPE' would. The same values
10554 for CPU_TYPE are used for `-mtune' as for `-mcpu'. If both are
10555 specified, the code generated will use the architecture,
10556 registers, and mnemonics set by `-mcpu', but the scheduling
10557 parameters set by `-mtune'.
10561 Generate code to compute division as reciprocal estimate and
10562 iterative refinement, creating opportunities for increased
10563 throughput. This feature requires: optional PowerPC Graphics
10564 instruction set for single precision and FRE instruction for
10565 double precision, assuming divides cannot generate user-visible
10566 traps, and the domain values not include Infinities, denormals or
10571 Generate code that uses (does not use) AltiVec instructions, and
10572 also enable the use of built-in functions that allow more direct
10573 access to the AltiVec instruction set. You may also need to set
10574 `-mabi=altivec' to adjust the current ABI with AltiVec ABI
10580 Generate VRSAVE instructions when generating AltiVec code.
10583 Generate code that allows ld and ld.so to build executables and
10584 shared libraries with non-exec .plt and .got sections. This is a
10585 PowerPC 32-bit SYSV ABI option.
10588 Generate code that uses a BSS .plt section that ld.so fills in, and
10589 requires .plt and .got sections that are both writable and
10590 executable. This is a PowerPC 32-bit SYSV ABI option.
10594 This switch enables or disables the generation of ISEL
10598 This switch has been deprecated. Use `-misel' and `-mno-isel'
10603 This switch enables or disables the generation of SPE simd
10607 This option has been deprecated. Use `-mspe' and `-mno-spe'
10610 `-mfloat-gprs=YES/SINGLE/DOUBLE/NO'
10612 This switch enables or disables the generation of floating point
10613 operations on the general purpose registers for architectures that
10616 The argument YES or SINGLE enables the use of single-precision
10617 floating point operations.
10619 The argument DOUBLE enables the use of single and double-precision
10620 floating point operations.
10622 The argument NO disables floating point operations on the general
10625 This option is currently only available on the MPC854x.
10629 Generate code for 32-bit or 64-bit environments of Darwin and SVR4
10630 targets (including GNU/Linux). The 32-bit environment sets int,
10631 long and pointer to 32 bits and generates code that runs on any
10632 PowerPC variant. The 64-bit environment sets int to 32 bits and
10633 long and pointer to 64 bits, and generates code for PowerPC64, as
10640 Modify generation of the TOC (Table Of Contents), which is created
10641 for every executable file. The `-mfull-toc' option is selected by
10642 default. In that case, GCC will allocate at least one TOC entry
10643 for each unique non-automatic variable reference in your program.
10644 GCC will also place floating-point constants in the TOC. However,
10645 only 16,384 entries are available in the TOC.
10647 If you receive a linker error message that saying you have
10648 overflowed the available TOC space, you can reduce the amount of
10649 TOC space used with the `-mno-fp-in-toc' and `-mno-sum-in-toc'
10650 options. `-mno-fp-in-toc' prevents GCC from putting floating-point
10651 constants in the TOC and `-mno-sum-in-toc' forces GCC to generate
10652 code to calculate the sum of an address and a constant at run-time
10653 instead of putting that sum into the TOC. You may specify one or
10654 both of these options. Each causes GCC to produce very slightly
10655 slower and larger code at the expense of conserving TOC space.
10657 If you still run out of space in the TOC even when you specify
10658 both of these options, specify `-mminimal-toc' instead. This
10659 option causes GCC to make only one TOC entry for every file. When
10660 you specify this option, GCC will produce code that is slower and
10661 larger but which uses extremely little TOC space. You may wish to
10662 use this option only on files that contain less frequently
10667 Enable 64-bit AIX ABI and calling convention: 64-bit pointers,
10668 64-bit `long' type, and the infrastructure needed to support them.
10669 Specifying `-maix64' implies `-mpowerpc64' and `-mpowerpc', while
10670 `-maix32' disables the 64-bit ABI and implies `-mno-powerpc64'.
10671 GCC defaults to `-maix32'.
10675 Produce code that conforms more closely to IBM XL compiler
10676 semantics when using AIX-compatible ABI. Pass floating-point
10677 arguments to prototyped functions beyond the register save area
10678 (RSA) on the stack in addition to argument FPRs. Do not assume
10679 that most significant double in 128-bit long double value is
10680 properly rounded when comparing values and converting to double.
10681 Use XL symbol names for long double support routines.
10683 The AIX calling convention was extended but not initially
10684 documented to handle an obscure K&R C case of calling a function
10685 that takes the address of its arguments with fewer arguments than
10686 declared. IBM XL compilers access floating point arguments which
10687 do not fit in the RSA from the stack when a subroutine is compiled
10688 without optimization. Because always storing floating-point
10689 arguments on the stack is inefficient and rarely needed, this
10690 option is not enabled by default and only is necessary when
10691 calling subroutines compiled by IBM XL compilers without
10695 Support "IBM RS/6000 SP" "Parallel Environment" (PE). Link an
10696 application written to use message passing with special startup
10697 code to enable the application to run. The system must have PE
10698 installed in the standard location (`/usr/lpp/ppe.poe/'), or the
10699 `specs' file must be overridden with the `-specs=' option to
10700 specify the appropriate directory location. The Parallel
10701 Environment does not support threads, so the `-mpe' option and the
10702 `-pthread' option are incompatible.
10706 On AIX, 32-bit Darwin, and 64-bit PowerPC GNU/Linux, the option
10707 `-malign-natural' overrides the ABI-defined alignment of larger
10708 types, such as floating-point doubles, on their natural size-based
10709 boundary. The option `-malign-power' instructs GCC to follow the
10710 ABI-specified alignment rules. GCC defaults to the standard
10711 alignment defined in the ABI.
10713 On 64-bit Darwin, natural alignment is the default, and
10714 `-malign-power' is not supported.
10718 Generate code that does not use (uses) the floating-point register
10719 set. Software floating point emulation is provided if you use the
10720 `-msoft-float' option, and pass the option to GCC when linking.
10724 Generate code that uses (does not use) the load multiple word
10725 instructions and the store multiple word instructions. These
10726 instructions are generated by default on POWER systems, and not
10727 generated on PowerPC systems. Do not use `-mmultiple' on little
10728 endian PowerPC systems, since those instructions do not work when
10729 the processor is in little endian mode. The exceptions are PPC740
10730 and PPC750 which permit the instructions usage in little endian
10735 Generate code that uses (does not use) the load string instructions
10736 and the store string word instructions to save multiple registers
10737 and do small block moves. These instructions are generated by
10738 default on POWER systems, and not generated on PowerPC systems.
10739 Do not use `-mstring' on little endian PowerPC systems, since those
10740 instructions do not work when the processor is in little endian
10741 mode. The exceptions are PPC740 and PPC750 which permit the
10742 instructions usage in little endian mode.
10746 Generate code that uses (does not use) the load or store
10747 instructions that update the base register to the address of the
10748 calculated memory location. These instructions are generated by
10749 default. If you use `-mno-update', there is a small window
10750 between the time that the stack pointer is updated and the address
10751 of the previous frame is stored, which means code that walks the
10752 stack frame across interrupts or signals may get corrupted data.
10756 Generate code that uses (does not use) the floating point multiply
10757 and accumulate instructions. These instructions are generated by
10758 default if hardware floating is used.
10762 On System V.4 and embedded PowerPC systems do not (do) force
10763 structures and unions that contain bit-fields to be aligned to the
10764 base type of the bit-field.
10766 For example, by default a structure containing nothing but 8
10767 `unsigned' bit-fields of length 1 would be aligned to a 4 byte
10768 boundary and have a size of 4 bytes. By using `-mno-bit-align',
10769 the structure would be aligned to a 1 byte boundary and be one
10772 `-mno-strict-align'
10774 On System V.4 and embedded PowerPC systems do not (do) assume that
10775 unaligned memory references will be handled by the system.
10779 On embedded PowerPC systems generate code that allows (does not
10780 allow) the program to be relocated to a different address at
10781 runtime. If you use `-mrelocatable' on any module, all objects
10782 linked together must be compiled with `-mrelocatable' or
10783 `-mrelocatable-lib'.
10785 `-mrelocatable-lib'
10786 `-mno-relocatable-lib'
10787 On embedded PowerPC systems generate code that allows (does not
10788 allow) the program to be relocated to a different address at
10789 runtime. Modules compiled with `-mrelocatable-lib' can be linked
10790 with either modules compiled without `-mrelocatable' and
10791 `-mrelocatable-lib' or with modules compiled with the
10792 `-mrelocatable' options.
10796 On System V.4 and embedded PowerPC systems do not (do) assume that
10797 register 2 contains a pointer to a global area pointing to the
10798 addresses used in the program.
10802 On System V.4 and embedded PowerPC systems compile code for the
10803 processor in little endian mode. The `-mlittle-endian' option is
10804 the same as `-mlittle'.
10808 On System V.4 and embedded PowerPC systems compile code for the
10809 processor in big endian mode. The `-mbig-endian' option is the
10813 On Darwin and Mac OS X systems, compile code so that it is not
10814 relocatable, but that its external references are relocatable. The
10815 resulting code is suitable for applications, but not shared
10818 `-mprioritize-restricted-insns=PRIORITY'
10819 This option controls the priority that is assigned to
10820 dispatch-slot restricted instructions during the second scheduling
10821 pass. The argument PRIORITY takes the value 0/1/2 to assign
10822 NO/HIGHEST/SECOND-HIGHEST priority to dispatch slot restricted
10825 `-msched-costly-dep=DEPENDENCE_TYPE'
10826 This option controls which dependences are considered costly by
10827 the target during instruction scheduling. The argument
10828 DEPENDENCE_TYPE takes one of the following values: NO: no
10829 dependence is costly, ALL: all dependences are costly,
10830 TRUE_STORE_TO_LOAD: a true dependence from store to load is costly,
10831 STORE_TO_LOAD: any dependence from store to load is costly,
10832 NUMBER: any dependence which latency >= NUMBER is costly.
10834 `-minsert-sched-nops=SCHEME'
10835 This option controls which nop insertion scheme will be used during
10836 the second scheduling pass. The argument SCHEME takes one of the
10837 following values: NO: Don't insert nops. PAD: Pad with nops any
10838 dispatch group which has vacant issue slots, according to the
10839 scheduler's grouping. REGROUP_EXACT: Insert nops to force costly
10840 dependent insns into separate groups. Insert exactly as many nops
10841 as needed to force an insn to a new group, according to the
10842 estimated processor grouping. NUMBER: Insert nops to force costly
10843 dependent insns into separate groups. Insert NUMBER nops to force
10844 an insn to a new group.
10847 On System V.4 and embedded PowerPC systems compile code using
10848 calling conventions that adheres to the March 1995 draft of the
10849 System V Application Binary Interface, PowerPC processor
10850 supplement. This is the default unless you configured GCC using
10851 `powerpc-*-eabiaix'.
10854 Specify both `-mcall-sysv' and `-meabi' options.
10856 `-mcall-sysv-noeabi'
10857 Specify both `-mcall-sysv' and `-mno-eabi' options.
10860 On System V.4 and embedded PowerPC systems compile code for the
10861 Solaris operating system.
10864 On System V.4 and embedded PowerPC systems compile code for the
10865 Linux-based GNU system.
10868 On System V.4 and embedded PowerPC systems compile code for the
10869 Hurd-based GNU system.
10872 On System V.4 and embedded PowerPC systems compile code for the
10873 NetBSD operating system.
10875 `-maix-struct-return'
10876 Return all structures in memory (as specified by the AIX ABI).
10878 `-msvr4-struct-return'
10879 Return structures smaller than 8 bytes in registers (as specified
10883 Extend the current ABI with a particular extension, or remove such
10884 extension. Valid values are ALTIVEC, NO-ALTIVEC, SPE, NO-SPE,
10885 IBMLONGDOUBLE, IEEELONGDOUBLE.
10888 Extend the current ABI with SPE ABI extensions. This does not
10889 change the default ABI, instead it adds the SPE ABI extensions to
10893 Disable Booke SPE ABI extensions for the current ABI.
10895 `-mabi=ibmlongdouble'
10896 Change the current ABI to use IBM extended precision long double.
10897 This is a PowerPC 32-bit SYSV ABI option.
10899 `-mabi=ieeelongdouble'
10900 Change the current ABI to use IEEE extended precision long double.
10901 This is a PowerPC 32-bit Linux ABI option.
10905 On System V.4 and embedded PowerPC systems assume that all calls to
10906 variable argument functions are properly prototyped. Otherwise,
10907 the compiler must insert an instruction before every non
10908 prototyped call to set or clear bit 6 of the condition code
10909 register (CR) to indicate whether floating point values were
10910 passed in the floating point registers in case the function takes
10911 a variable arguments. With `-mprototype', only calls to
10912 prototyped variable argument functions will set or clear the bit.
10915 On embedded PowerPC systems, assume that the startup module is
10916 called `sim-crt0.o' and that the standard C libraries are
10917 `libsim.a' and `libc.a'. This is the default for
10918 `powerpc-*-eabisim'. configurations.
10921 On embedded PowerPC systems, assume that the startup module is
10922 called `crt0.o' and the standard C libraries are `libmvme.a' and
10926 On embedded PowerPC systems, assume that the startup module is
10927 called `crt0.o' and the standard C libraries are `libads.a' and
10931 On embedded PowerPC systems, assume that the startup module is
10932 called `crt0.o' and the standard C libraries are `libyk.a' and
10936 On System V.4 and embedded PowerPC systems, specify that you are
10937 compiling for a VxWorks system.
10940 Specify that you are compiling for the WindISS simulation
10944 On embedded PowerPC systems, set the PPC_EMB bit in the ELF flags
10945 header to indicate that `eabi' extended relocations are used.
10949 On System V.4 and embedded PowerPC systems do (do not) adhere to
10950 the Embedded Applications Binary Interface (eabi) which is a set of
10951 modifications to the System V.4 specifications. Selecting `-meabi'
10952 means that the stack is aligned to an 8 byte boundary, a function
10953 `__eabi' is called to from `main' to set up the eabi environment,
10954 and the `-msdata' option can use both `r2' and `r13' to point to
10955 two separate small data areas. Selecting `-mno-eabi' means that
10956 the stack is aligned to a 16 byte boundary, do not call an
10957 initialization function from `main', and the `-msdata' option will
10958 only use `r13' to point to a single small data area. The `-meabi'
10959 option is on by default if you configured GCC using one of the
10960 `powerpc*-*-eabi*' options.
10963 On System V.4 and embedded PowerPC systems, put small initialized
10964 `const' global and static data in the `.sdata2' section, which is
10965 pointed to by register `r2'. Put small initialized non-`const'
10966 global and static data in the `.sdata' section, which is pointed
10967 to by register `r13'. Put small uninitialized global and static
10968 data in the `.sbss' section, which is adjacent to the `.sdata'
10969 section. The `-msdata=eabi' option is incompatible with the
10970 `-mrelocatable' option. The `-msdata=eabi' option also sets the
10974 On System V.4 and embedded PowerPC systems, put small global and
10975 static data in the `.sdata' section, which is pointed to by
10976 register `r13'. Put small uninitialized global and static data in
10977 the `.sbss' section, which is adjacent to the `.sdata' section.
10978 The `-msdata=sysv' option is incompatible with the `-mrelocatable'
10983 On System V.4 and embedded PowerPC systems, if `-meabi' is used,
10984 compile code the same as `-msdata=eabi', otherwise compile code the
10985 same as `-msdata=sysv'.
10988 On System V.4 and embedded PowerPC systems, put small global and
10989 static data in the `.sdata' section. Put small uninitialized
10990 global and static data in the `.sbss' section. Do not use
10991 register `r13' to address small data however. This is the default
10992 behavior unless other `-msdata' options are used.
10996 On embedded PowerPC systems, put all initialized global and static
10997 data in the `.data' section, and all uninitialized data in the
11001 On embedded PowerPC systems, put global and static items less than
11002 or equal to NUM bytes into the small data or bss sections instead
11003 of the normal data or bss section. By default, NUM is 8. The `-G
11004 NUM' switch is also passed to the linker. All modules should be
11005 compiled with the same `-G NUM' value.
11009 On System V.4 and embedded PowerPC systems do (do not) emit
11010 register names in the assembly language output using symbolic
11015 Default to making all function calls indirectly, using a register,
11016 so that functions which reside further than 32 megabytes
11017 (33,554,432 bytes) from the current location can be called. This
11018 setting can be overridden by the `shortcall' function attribute,
11019 or by `#pragma longcall(0)'.
11021 Some linkers are capable of detecting out-of-range calls and
11022 generating glue code on the fly. On these systems, long calls are
11023 unnecessary and generate slower code. As of this writing, the AIX
11024 linker can do this, as can the GNU linker for PowerPC/64. It is
11025 planned to add this feature to the GNU linker for 32-bit PowerPC
11028 On Darwin/PPC systems, `#pragma longcall' will generate "jbsr
11029 callee, L42", plus a "branch island" (glue code). The two target
11030 addresses represent the callee and the "branch island". The
11031 Darwin/PPC linker will prefer the first address and generate a "bl
11032 callee" if the PPC "bl" instruction will reach the callee directly;
11033 otherwise, the linker will generate "bl L42" to call the "branch
11034 island". The "branch island" is appended to the body of the
11035 calling function; it computes the full 32-bit address of the callee
11038 On Mach-O (Darwin) systems, this option directs the compiler emit
11039 to the glue for every direct call, and the Darwin linker decides
11040 whether to use or discard it.
11042 In the future, we may cause GCC to ignore all longcall
11043 specifications when the linker is known to generate glue.
11046 Adds support for multithreading with the "pthreads" library. This
11047 option sets flags for both the preprocessor and linker.
11051 File: gcc.info, Node: S/390 and zSeries Options, Next: SH Options, Prev: RS/6000 and PowerPC Options, Up: Submodel Options
11053 3.17.27 S/390 and zSeries Options
11054 ---------------------------------
11056 These are the `-m' options defined for the S/390 and zSeries
11061 Use (do not use) the hardware floating-point instructions and
11062 registers for floating-point operations. When `-msoft-float' is
11063 specified, functions in `libgcc.a' will be used to perform
11064 floating-point operations. When `-mhard-float' is specified, the
11065 compiler generates IEEE floating-point instructions. This is the
11069 `-mlong-double-128'
11070 These switches control the size of `long double' type. A size of
11071 64bit makes the `long double' type equivalent to the `double'
11072 type. This is the default.
11076 Store (do not store) the address of the caller's frame as
11077 backchain pointer into the callee's stack frame. A backchain may
11078 be needed to allow debugging using tools that do not understand
11079 DWARF-2 call frame information. When `-mno-packed-stack' is in
11080 effect, the backchain pointer is stored at the bottom of the stack
11081 frame; when `-mpacked-stack' is in effect, the backchain is placed
11082 into the topmost word of the 96/160 byte register save area.
11084 In general, code compiled with `-mbackchain' is call-compatible
11085 with code compiled with `-mmo-backchain'; however, use of the
11086 backchain for debugging purposes usually requires that the whole
11087 binary is built with `-mbackchain'. Note that the combination of
11088 `-mbackchain', `-mpacked-stack' and `-mhard-float' is not
11089 supported. In order to build a linux kernel use `-msoft-float'.
11091 The default is to not maintain the backchain.
11095 `-mno-packed-stack'
11096 Use (do not use) the packed stack layout. When
11097 `-mno-packed-stack' is specified, the compiler uses the all fields
11098 of the 96/160 byte register save area only for their default
11099 purpose; unused fields still take up stack space. When
11100 `-mpacked-stack' is specified, register save slots are densely
11101 packed at the top of the register save area; unused space is
11102 reused for other purposes, allowing for more efficient use of the
11103 available stack space. However, when `-mbackchain' is also in
11104 effect, the topmost word of the save area is always used to store
11105 the backchain, and the return address register is always saved two
11106 words below the backchain.
11108 As long as the stack frame backchain is not used, code generated
11109 with `-mpacked-stack' is call-compatible with code generated with
11110 `-mno-packed-stack'. Note that some non-FSF releases of GCC 2.95
11111 for S/390 or zSeries generated code that uses the stack frame
11112 backchain at run time, not just for debugging purposes. Such code
11113 is not call-compatible with code compiled with `-mpacked-stack'.
11114 Also, note that the combination of `-mbackchain', `-mpacked-stack'
11115 and `-mhard-float' is not supported. In order to build a linux
11116 kernel use `-msoft-float'.
11118 The default is to not use the packed stack layout.
11122 Generate (or do not generate) code using the `bras' instruction to
11123 do subroutine calls. This only works reliably if the total
11124 executable size does not exceed 64k. The default is to use the
11125 `basr' instruction instead, which does not have this limitation.
11129 When `-m31' is specified, generate code compliant to the GNU/Linux
11130 for S/390 ABI. When `-m64' is specified, generate code compliant
11131 to the GNU/Linux for zSeries ABI. This allows GCC in particular
11132 to generate 64-bit instructions. For the `s390' targets, the
11133 default is `-m31', while the `s390x' targets default to `-m64'.
11137 When `-mzarch' is specified, generate code using the instructions
11138 available on z/Architecture. When `-mesa' is specified, generate
11139 code using the instructions available on ESA/390. Note that
11140 `-mesa' is not possible with `-m64'. When generating code
11141 compliant to the GNU/Linux for S/390 ABI, the default is `-mesa'.
11142 When generating code compliant to the GNU/Linux for zSeries ABI,
11143 the default is `-mzarch'.
11147 Generate (or do not generate) code using the `mvcle' instruction
11148 to perform block moves. When `-mno-mvcle' is specified, use a
11149 `mvc' loop instead. This is the default unless optimizing for
11154 Print (or do not print) additional debug information when
11155 compiling. The default is to not print debug information.
11158 Generate code that will run on CPU-TYPE, which is the name of a
11159 system representing a certain processor type. Possible values for
11160 CPU-TYPE are `g5', `g6', `z900', and `z990'. When generating code
11161 using the instructions available on z/Architecture, the default is
11162 `-march=z900'. Otherwise, the default is `-march=g5'.
11165 Tune to CPU-TYPE everything applicable about the generated code,
11166 except for the ABI and the set of available instructions. The
11167 list of CPU-TYPE values is the same as for `-march'. The default
11168 is the value used for `-march'.
11172 Generate code that adds (does not add) in TPF OS specific branches
11173 to trace routines in the operating system. This option is off by
11174 default, even when compiling for the TPF OS.
11178 Generate code that uses (does not use) the floating point multiply
11179 and accumulate instructions. These instructions are generated by
11180 default if hardware floating point is used.
11182 `-mwarn-framesize=FRAMESIZE'
11183 Emit a warning if the current function exceeds the given frame
11184 size. Because this is a compile time check it doesn't need to be
11185 a real problem when the program runs. It is intended to identify
11186 functions which most probably cause a stack overflow. It is
11187 useful to be used in an environment with limited stack size e.g.
11190 `-mwarn-dynamicstack'
11191 Emit a warning if the function calls alloca or uses dynamically
11192 sized arrays. This is generally a bad idea with a limited stack
11195 `-mstack-guard=STACK-GUARD'
11197 `-mstack-size=STACK-SIZE'
11198 These arguments always have to be used in conjunction. If they
11199 are present the s390 back end emits additional instructions in the
11200 function prologue which trigger a trap if the stack size is
11201 STACK-GUARD bytes above the STACK-SIZE (remember that the stack on
11202 s390 grows downward). These options are intended to be used to
11203 help debugging stack overflow problems. The additionally emitted
11204 code causes only little overhead and hence can also be used in
11205 production like systems without greater performance degradation.
11206 The given values have to be exact powers of 2 and STACK-SIZE has
11207 to be greater than STACK-GUARD without exceeding 64k. In order to
11208 be efficient the extra code makes the assumption that the stack
11209 starts at an address aligned to the value given by STACK-SIZE.
11212 File: gcc.info, Node: SH Options, Next: SPARC Options, Prev: S/390 and zSeries Options, Up: Submodel Options
11217 These `-m' options are defined for the SH implementations:
11220 Generate code for the SH1.
11223 Generate code for the SH2.
11226 Generate code for the SH2e.
11229 Generate code for the SH3.
11232 Generate code for the SH3e.
11235 Generate code for the SH4 without a floating-point unit.
11238 Generate code for the SH4 with a floating-point unit that only
11239 supports single-precision arithmetic.
11242 Generate code for the SH4 assuming the floating-point unit is in
11243 single-precision mode by default.
11246 Generate code for the SH4.
11249 Generate code for the SH4al-dsp, or for a SH4a in such a way that
11250 the floating-point unit is not used.
11253 Generate code for the SH4a, in such a way that no double-precision
11254 floating point operations are used.
11257 Generate code for the SH4a assuming the floating-point unit is in
11258 single-precision mode by default.
11261 Generate code for the SH4a.
11264 Same as `-m4a-nofpu', except that it implicitly passes `-dsp' to
11265 the assembler. GCC doesn't generate any DSP instructions at the
11269 Compile code for the processor in big endian mode.
11272 Compile code for the processor in little endian mode.
11275 Align doubles at 64-bit boundaries. Note that this changes the
11276 calling conventions, and thus some functions from the standard C
11277 library will not work unless you recompile it first with
11281 Shorten some address references at link time, when possible; uses
11282 the linker option `-relax'.
11285 Use 32-bit offsets in `switch' tables. The default is to use
11289 Enable the use of the instruction `fmovd'.
11292 Comply with the calling conventions defined by Renesas.
11295 Comply with the calling conventions defined by Renesas.
11298 Comply with the calling conventions defined for GCC before the
11299 Renesas conventions were available. This option is the default
11300 for all targets of the SH toolchain except for `sh-symbianelf'.
11303 Mark the `MAC' register as call-clobbered, even if `-mhitachi' is
11307 Increase IEEE-compliance of floating-point code. At the moment,
11308 this is equivalent to `-fno-finite-math-only'. When generating 16
11309 bit SH opcodes, getting IEEE-conforming results for comparisons of
11310 NANs / infinities incurs extra overhead in every floating point
11311 comparison, therefore the default is set to `-ffinite-math-only'.
11314 Dump instruction size and location in the assembly code.
11317 This option is deprecated. It pads structures to multiple of 4
11318 bytes, which is incompatible with the SH ABI.
11321 Optimize for space instead of speed. Implied by `-Os'.
11324 When generating position-independent code, emit function calls
11325 using the Global Offset Table instead of the Procedure Linkage
11329 Generate a library function call to invalidate instruction cache
11330 entries, after fixing up a trampoline. This library function call
11331 doesn't assume it can write to the whole memory address space.
11332 This is the default when the target is `sh-*-linux*'.
11335 Set the cost to assume for a multiply insn.
11338 Set the division strategy to use for SHmedia code. STRATEGY must
11339 be one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l,
11340 inv:call, inv:call2, inv:fp . "fp" performs the operation in
11341 floating point. This has a very high latency, but needs only a
11342 few instructions, so it might be a good choice if your code has
11343 enough easily exploitable ILP to allow the compiler to schedule
11344 the floating point instructions together with other instructions.
11345 Division by zero causes a floating point exception. "inv" uses
11346 integer operations to calculate the inverse of the divisor, and
11347 then multiplies the dividend with the inverse. This strategy
11348 allows cse and hoisting of the inverse calculation. Division by
11349 zero calculates an unspecified result, but does not trap.
11350 "inv:minlat" is a variant of "inv" where if no cse / hoisting
11351 opportunities have been found, or if the entire operation has been
11352 hoisted to the same place, the last stages of the inverse
11353 calculation are intertwined with the final multiply to reduce the
11354 overall latency, at the expense of using a few more instructions,
11355 and thus offering fewer scheduling opportunities with other code.
11356 "call" calls a library function that usually implements the
11357 inv:minlat strategy. This gives high code density for
11358 m5-*media-nofpu compilations. "call2" uses a different entry
11359 point of the same library function, where it assumes that a
11360 pointer to a lookup table has already been set up, which exposes
11361 the pointer load to cse / code hoisting optimizations.
11362 "inv:call", "inv:call2" and "inv:fp" all use the "inv" algorithm
11363 for initial code generation, but if the code stays unoptimized,
11364 revert to the "call", "call2", or "fp" strategies, respectively.
11365 Note that the potentially-trapping side effect of division by zero
11366 is carried by a separate instruction, so it is possible that all
11367 the integer instructions are hoisted out, but the marker for the
11368 side effect stays where it is. A recombination to fp operations
11369 or a call is not possible in that case. "inv20u" and "inv20l" are
11370 variants of the "inv:minlat" strategy. In the case that the
11371 inverse calculation was nor separated from the multiply, they speed
11372 up division where the dividend fits into 20 bits (plus sign where
11373 applicable), by inserting a test to skip a number of operations in
11374 this case; this test slows down the case of larger dividends.
11375 inv20u assumes the case of a such a small dividend to be unlikely,
11376 and inv20l assumes it to be likely.
11378 `-mdivsi3_libfunc=NAME'
11379 Set the name of the library function used for 32 bit signed
11380 division to NAME. This only affect the name used in the call and
11381 inv:call division strategies, and the compiler will still expect
11382 the same sets of input/output/clobbered registers as if this
11383 option was not present.
11386 Throttle unrolling to avoid thrashing target registers. This
11387 option only has an effect if the gcc code base supports the
11388 TARGET_ADJUST_UNROLL_MAX target hook.
11390 `-mindexed-addressing'
11391 Enable the use of the indexed addressing mode for
11392 SHmedia32/SHcompact. This is only safe if the hardware and/or OS
11393 implement 32 bit wrap-around semantics for the indexed addressing
11394 mode. The architecture allows the implementation of processors
11395 with 64 bit MMU, which the OS could use to get 32 bit addressing,
11396 but since no current hardware implementation supports this or any
11397 other way to make the indexed addressing mode safe to use in the
11398 32 bit ABI, the default is -mno-indexed-addressing.
11400 `-mgettrcost=NUMBER'
11401 Set the cost assumed for the gettr instruction to NUMBER. The
11402 default is 2 if `-mpt-fixed' is in effect, 100 otherwise.
11405 Assume pt* instructions won't trap. This will generally generate
11406 better scheduled code, but is unsafe on current hardware. The
11407 current architecture definition says that ptabs and ptrel trap
11408 when the target anded with 3 is 3. This has the unintentional
11409 effect of making it unsafe to schedule ptabs / ptrel before a
11410 branch, or hoist it out of a loop. For example,
11411 __do_global_ctors, a part of libgcc that runs constructors at
11412 program startup, calls functions in a list which is delimited by
11413 -1. With the -mpt-fixed option, the ptabs will be done before
11414 testing against -1. That means that all the constructors will be
11415 run a bit quicker, but when the loop comes to the end of the list,
11416 the program crashes because ptabs loads -1 into a target register.
11417 Since this option is unsafe for any hardware implementing the
11418 current architecture specification, the default is -mno-pt-fixed.
11419 Unless the user specifies a specific cost with `-mgettrcost',
11420 -mno-pt-fixed also implies `-mgettrcost=100'; this deters register
11421 allocation using target registers for storing ordinary integers.
11423 `-minvalid-symbols'
11424 Assume symbols might be invalid. Ordinary function symbols
11425 generated by the compiler will always be valid to load with
11426 movi/shori/ptabs or movi/shori/ptrel, but with assembler and/or
11427 linker tricks it is possible to generate symbols that will cause
11428 ptabs / ptrel to trap. This option is only meaningful when
11429 `-mno-pt-fixed' is in effect. It will then prevent
11430 cross-basic-block cse, hoisting and most scheduling of symbol
11431 loads. The default is `-mno-invalid-symbols'.
11434 File: gcc.info, Node: SPARC Options, Next: System V Options, Prev: SH Options, Up: Submodel Options
11436 3.17.29 SPARC Options
11437 ---------------------
11439 These `-m' options are supported on the SPARC:
11443 Specify `-mapp-regs' to generate output using the global registers
11444 2 through 4, which the SPARC SVR4 ABI reserves for applications.
11445 This is the default.
11447 To be fully SVR4 ABI compliant at the cost of some performance
11448 loss, specify `-mno-app-regs'. You should compile libraries and
11449 system software with this option.
11453 Generate output containing floating point instructions. This is
11458 Generate output containing library calls for floating point.
11459 *Warning:* the requisite libraries are not available for all SPARC
11460 targets. Normally the facilities of the machine's usual C
11461 compiler are used, but this cannot be done directly in
11462 cross-compilation. You must make your own arrangements to provide
11463 suitable library functions for cross-compilation. The embedded
11464 targets `sparc-*-aout' and `sparclite-*-*' do provide software
11465 floating point support.
11467 `-msoft-float' changes the calling convention in the output file;
11468 therefore, it is only useful if you compile _all_ of a program with
11469 this option. In particular, you need to compile `libgcc.a', the
11470 library that comes with GCC, with `-msoft-float' in order for this
11473 `-mhard-quad-float'
11474 Generate output containing quad-word (long double) floating point
11477 `-msoft-quad-float'
11478 Generate output containing library calls for quad-word (long
11479 double) floating point instructions. The functions called are
11480 those specified in the SPARC ABI. This is the default.
11482 As of this writing, there are no SPARC implementations that have
11483 hardware support for the quad-word floating point instructions.
11484 They all invoke a trap handler for one of these instructions, and
11485 then the trap handler emulates the effect of the instruction.
11486 Because of the trap handler overhead, this is much slower than
11487 calling the ABI library routines. Thus the `-msoft-quad-float'
11488 option is the default.
11490 `-mno-unaligned-doubles'
11491 `-munaligned-doubles'
11492 Assume that doubles have 8 byte alignment. This is the default.
11494 With `-munaligned-doubles', GCC assumes that doubles have 8 byte
11495 alignment only if they are contained in another type, or if they
11496 have an absolute address. Otherwise, it assumes they have 4 byte
11497 alignment. Specifying this option avoids some rare compatibility
11498 problems with code generated by other compilers. It is not the
11499 default because it results in a performance loss, especially for
11500 floating point code.
11502 `-mno-faster-structs'
11504 With `-mfaster-structs', the compiler assumes that structures
11505 should have 8 byte alignment. This enables the use of pairs of
11506 `ldd' and `std' instructions for copies in structure assignment,
11507 in place of twice as many `ld' and `st' pairs. However, the use
11508 of this changed alignment directly violates the SPARC ABI. Thus,
11509 it's intended only for use on targets where the developer
11510 acknowledges that their resulting code will not be directly in
11511 line with the rules of the ABI.
11514 `-mimpure-text', used in addition to `-shared', tells the compiler
11515 to not pass `-z text' to the linker when linking a shared object.
11516 Using this option, you can link position-dependent code into a
11519 `-mimpure-text' suppresses the "relocations remain against
11520 allocatable but non-writable sections" linker error message.
11521 However, the necessary relocations will trigger copy-on-write, and
11522 the shared object is not actually shared across processes.
11523 Instead of using `-mimpure-text', you should compile all source
11524 code with `-fpic' or `-fPIC'.
11526 This option is only available on SunOS and Solaris.
11529 Set the instruction set, register set, and instruction scheduling
11530 parameters for machine type CPU_TYPE. Supported values for
11531 CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite',
11532 `f930', `f934', `hypersparc', `sparclite86x', `sparclet',
11533 `tsc701', `v9', `ultrasparc', and `ultrasparc3'.
11535 Default instruction scheduling parameters are used for values that
11536 select an architecture and not an implementation. These are `v7',
11537 `v8', `sparclite', `sparclet', `v9'.
11539 Here is a list of each supported architecture and their supported
11543 v8: supersparc, hypersparc
11544 sparclite: f930, f934, sparclite86x
11546 v9: ultrasparc, ultrasparc3
11548 By default (unless configured otherwise), GCC generates code for
11549 the V7 variant of the SPARC architecture. With `-mcpu=cypress',
11550 the compiler additionally optimizes it for the Cypress CY7C602
11551 chip, as used in the SPARCStation/SPARCServer 3xx series. This is
11552 also appropriate for the older SPARCStation 1, 2, IPX etc.
11554 With `-mcpu=v8', GCC generates code for the V8 variant of the SPARC
11555 architecture. The only difference from V7 code is that the
11556 compiler emits the integer multiply and integer divide
11557 instructions which exist in SPARC-V8 but not in SPARC-V7. With
11558 `-mcpu=supersparc', the compiler additionally optimizes it for the
11559 SuperSPARC chip, as used in the SPARCStation 10, 1000 and 2000
11562 With `-mcpu=sparclite', GCC generates code for the SPARClite
11563 variant of the SPARC architecture. This adds the integer
11564 multiply, integer divide step and scan (`ffs') instructions which
11565 exist in SPARClite but not in SPARC-V7. With `-mcpu=f930', the
11566 compiler additionally optimizes it for the Fujitsu MB86930 chip,
11567 which is the original SPARClite, with no FPU. With `-mcpu=f934',
11568 the compiler additionally optimizes it for the Fujitsu MB86934
11569 chip, which is the more recent SPARClite with FPU.
11571 With `-mcpu=sparclet', GCC generates code for the SPARClet variant
11572 of the SPARC architecture. This adds the integer multiply,
11573 multiply/accumulate, integer divide step and scan (`ffs')
11574 instructions which exist in SPARClet but not in SPARC-V7. With
11575 `-mcpu=tsc701', the compiler additionally optimizes it for the
11576 TEMIC SPARClet chip.
11578 With `-mcpu=v9', GCC generates code for the V9 variant of the SPARC
11579 architecture. This adds 64-bit integer and floating-point move
11580 instructions, 3 additional floating-point condition code registers
11581 and conditional move instructions. With `-mcpu=ultrasparc', the
11582 compiler additionally optimizes it for the Sun UltraSPARC I/II
11583 chips. With `-mcpu=ultrasparc3', the compiler additionally
11584 optimizes it for the Sun UltraSPARC III chip.
11587 Set the instruction scheduling parameters for machine type
11588 CPU_TYPE, but do not set the instruction set or register set that
11589 the option `-mcpu=CPU_TYPE' would.
11591 The same values for `-mcpu=CPU_TYPE' can be used for
11592 `-mtune=CPU_TYPE', but the only useful values are those that
11593 select a particular cpu implementation. Those are `cypress',
11594 `supersparc', `hypersparc', `f930', `f934', `sparclite86x',
11595 `tsc701', `ultrasparc', and `ultrasparc3'.
11599 With `-mv8plus', GCC generates code for the SPARC-V8+ ABI. The
11600 difference from the V8 ABI is that the global and out registers are
11601 considered 64-bit wide. This is enabled by default on Solaris in
11602 32-bit mode for all SPARC-V9 processors.
11606 With `-mvis', GCC generates code that takes advantage of the
11607 UltraSPARC Visual Instruction Set extensions. The default is
11610 These `-m' options are supported in addition to the above on SPARC-V9
11611 processors in 64-bit environments:
11614 Generate code for a processor running in little-endian mode. It
11615 is only available for a few configurations and most notably not on
11620 Generate code for a 32-bit or 64-bit environment. The 32-bit
11621 environment sets int, long and pointer to 32 bits. The 64-bit
11622 environment sets int to 32 bits and long and pointer to 64 bits.
11625 Generate code for the Medium/Low code model: 64-bit addresses,
11626 programs must be linked in the low 32 bits of memory. Programs
11627 can be statically or dynamically linked.
11630 Generate code for the Medium/Middle code model: 64-bit addresses,
11631 programs must be linked in the low 44 bits of memory, the text and
11632 data segments must be less than 2GB in size and the data segment
11633 must be located within 2GB of the text segment.
11636 Generate code for the Medium/Anywhere code model: 64-bit
11637 addresses, programs may be linked anywhere in memory, the text and
11638 data segments must be less than 2GB in size and the data segment
11639 must be located within 2GB of the text segment.
11641 `-mcmodel=embmedany'
11642 Generate code for the Medium/Anywhere code model for embedded
11643 systems: 64-bit addresses, the text and data segments must be less
11644 than 2GB in size, both starting anywhere in memory (determined at
11645 link time). The global register %g4 points to the base of the
11646 data segment. Programs are statically linked and PIC is not
11651 With `-mstack-bias', GCC assumes that the stack pointer, and frame
11652 pointer if present, are offset by -2047 which must be added back
11653 when making stack frame references. This is the default in 64-bit
11654 mode. Otherwise, assume no such offset is present.
11656 These switches are supported in addition to the above on Solaris:
11659 Add support for multithreading using the Solaris threads library.
11660 This option sets flags for both the preprocessor and linker. This
11661 option does not affect the thread safety of object code produced
11662 by the compiler or that of libraries supplied with it.
11665 Add support for multithreading using the POSIX threads library.
11666 This option sets flags for both the preprocessor and linker. This
11667 option does not affect the thread safety of object code produced
11668 by the compiler or that of libraries supplied with it.
11671 This is a synonym for `-pthreads'.
11674 File: gcc.info, Node: System V Options, Next: TMS320C3x/C4x Options, Prev: SPARC Options, Up: Submodel Options
11676 3.17.30 Options for System V
11677 ----------------------------
11679 These additional options are available on System V Release 4 for
11680 compatibility with other compilers on those systems:
11683 Create a shared object. It is recommended that `-symbolic' or
11684 `-shared' be used instead.
11687 Identify the versions of each tool used by the compiler, in a
11688 `.ident' assembler directive in the output.
11691 Refrain from adding `.ident' directives to the output file (this is
11695 Search the directories DIRS, and no others, for libraries
11696 specified with `-l'.
11699 Look in the directory DIR to find the M4 preprocessor. The
11700 assembler uses this option.
11703 File: gcc.info, Node: TMS320C3x/C4x Options, Next: V850 Options, Prev: System V Options, Up: Submodel Options
11705 3.17.31 TMS320C3x/C4x Options
11706 -----------------------------
11708 These `-m' options are defined for TMS320C3x/C4x implementations:
11711 Set the instruction set, register set, and instruction scheduling
11712 parameters for machine type CPU_TYPE. Supported values for
11713 CPU_TYPE are `c30', `c31', `c32', `c40', and `c44'. The default
11714 is `c40' to generate code for the TMS320C40.
11720 Generates code for the big or small memory model. The small memory
11721 model assumed that all data fits into one 64K word page. At
11722 run-time the data page (DP) register must be set to point to the
11723 64K page containing the .bss and .data program sections. The big
11724 memory model is the default and requires reloading of the DP
11725 register for every direct memory access.
11729 Allow (disallow) allocation of general integer operands into the
11730 block count register BK.
11734 Enable (disable) generation of code using decrement and branch,
11735 DBcond(D), instructions. This is enabled by default for the C4x.
11736 To be on the safe side, this is disabled for the C3x, since the
11737 maximum iteration count on the C3x is 2^23 + 1 (but who iterates
11738 loops more than 2^23 times on the C3x?). Note that GCC will try
11739 to reverse a loop so that it can utilize the decrement and branch
11740 instruction, but will give up if there is more than one memory
11741 reference in the loop. Thus a loop where the loop counter is
11742 decremented can generate slightly more efficient code, in cases
11743 where the RPTB instruction cannot be utilized.
11747 Force the DP register to be saved on entry to an interrupt service
11748 routine (ISR), reloaded to point to the data section, and restored
11749 on exit from the ISR. This should not be required unless someone
11750 has violated the small memory model by modifying the DP register,
11751 say within an object library.
11755 For the C3x use the 24-bit MPYI instruction for integer multiplies
11756 instead of a library call to guarantee 32-bit results. Note that
11757 if one of the operands is a constant, then the multiplication will
11758 be performed using shifts and adds. If the `-mmpyi' option is not
11759 specified for the C3x, then squaring operations are performed
11760 inline instead of a library call.
11764 The C3x/C4x FIX instruction to convert a floating point value to an
11765 integer value chooses the nearest integer less than or equal to the
11766 floating point value rather than to the nearest integer. Thus if
11767 the floating point number is negative, the result will be
11768 incorrectly truncated an additional code is necessary to detect
11769 and correct this case. This option can be used to disable
11770 generation of the additional code required to correct the result.
11774 Enable (disable) generation of repeat block sequences using the
11775 RPTB instruction for zero overhead looping. The RPTB construct is
11776 only used for innermost loops that do not call functions or jump
11777 across the loop boundaries. There is no advantage having nested
11778 RPTB loops due to the overhead required to save and restore the
11779 RC, RS, and RE registers. This is enabled by default with `-O2'.
11783 Enable (disable) the use of the single instruction repeat
11784 instruction RPTS. If a repeat block contains a single
11785 instruction, and the loop count can be guaranteed to be less than
11786 the value COUNT, GCC will emit a RPTS instruction instead of a
11787 RPTB. If no value is specified, then a RPTS will be emitted even
11788 if the loop count cannot be determined at compile time. Note that
11789 the repeated instruction following RPTS does not have to be
11790 reloaded from memory each iteration, thus freeing up the CPU buses
11791 for operands. However, since interrupts are blocked by this
11792 instruction, it is disabled by default.
11795 `-mno-loop-unsigned'
11796 The maximum iteration count when using RPTS and RPTB (and DB on
11797 the C40) is 2^31 + 1 since these instructions test if the
11798 iteration count is negative to terminate the loop. If the
11799 iteration count is unsigned there is a possibility than the 2^31 +
11800 1 maximum iteration count may be exceeded. This switch allows an
11801 unsigned iteration count.
11804 Try to emit an assembler syntax that the TI assembler (asm30) is
11805 happy with. This also enforces compatibility with the API
11806 employed by the TI C3x C compiler. For example, long doubles are
11807 passed as structures rather than in floating point registers.
11811 Generate code that uses registers (stack) for passing arguments to
11812 functions. By default, arguments are passed in registers where
11813 possible rather than by pushing arguments on to the stack.
11816 `-mno-parallel-insns'
11817 Allow the generation of parallel instructions. This is enabled by
11818 default with `-O2'.
11821 `-mno-parallel-mpy'
11822 Allow the generation of MPY||ADD and MPY||SUB parallel
11823 instructions, provided `-mparallel-insns' is also specified.
11824 These instructions have tight register constraints which can
11825 pessimize the code generation of large functions.
11829 File: gcc.info, Node: V850 Options, Next: VAX Options, Prev: TMS320C3x/C4x Options, Up: Submodel Options
11831 3.17.32 V850 Options
11832 --------------------
11834 These `-m' options are defined for V850 implementations:
11838 Treat all calls as being far away (near). If calls are assumed to
11839 be far away, the compiler will always load the functions address
11840 up into a register, and call indirect through the pointer.
11844 Do not optimize (do optimize) basic blocks that use the same index
11845 pointer 4 or more times to copy pointer into the `ep' register, and
11846 use the shorter `sld' and `sst' instructions. The `-mep' option
11847 is on by default if you optimize.
11849 `-mno-prolog-function'
11850 `-mprolog-function'
11851 Do not use (do use) external functions to save and restore
11852 registers at the prologue and epilogue of a function. The
11853 external functions are slower, but use less code space if more
11854 than one function saves the same number of registers. The
11855 `-mprolog-function' option is on by default if you optimize.
11858 Try to make the code as small as possible. At present, this just
11859 turns on the `-mep' and `-mprolog-function' options.
11862 Put static or global variables whose size is N bytes or less into
11863 the tiny data area that register `ep' points to. The tiny data
11864 area can hold up to 256 bytes in total (128 bytes for byte
11868 Put static or global variables whose size is N bytes or less into
11869 the small data area that register `gp' points to. The small data
11870 area can hold up to 64 kilobytes.
11873 Put static or global variables whose size is N bytes or less into
11874 the first 32 kilobytes of memory.
11877 Specify that the target processor is the V850.
11880 Generate code suitable for big switch tables. Use this option
11881 only if the assembler/linker complain about out of range branches
11882 within a switch table.
11885 This option will cause r2 and r5 to be used in the code generated
11886 by the compiler. This setting is the default.
11889 This option will cause r2 and r5 to be treated as fixed registers.
11892 Specify that the target processor is the V850E1. The preprocessor
11893 constants `__v850e1__' and `__v850e__' will be defined if this
11897 Specify that the target processor is the V850E. The preprocessor
11898 constant `__v850e__' will be defined if this option is used.
11900 If neither `-mv850' nor `-mv850e' nor `-mv850e1' are defined then
11901 a default target processor will be chosen and the relevant
11902 `__v850*__' preprocessor constant will be defined.
11904 The preprocessor constants `__v850' and `__v851__' are always
11905 defined, regardless of which processor variant is the target.
11908 This option will suppress generation of the CALLT instruction for
11909 the v850e and v850e1 flavors of the v850 architecture. The
11910 default is `-mno-disable-callt' which allows the CALLT instruction
11915 File: gcc.info, Node: VAX Options, Next: x86-64 Options, Prev: V850 Options, Up: Submodel Options
11917 3.17.33 VAX Options
11918 -------------------
11920 These `-m' options are defined for the VAX:
11923 Do not output certain jump instructions (`aobleq' and so on) that
11924 the Unix assembler for the VAX cannot handle across long ranges.
11927 Do output those jump instructions, on the assumption that you will
11928 assemble with the GNU assembler.
11931 Output code for g-format floating point numbers instead of
11935 File: gcc.info, Node: x86-64 Options, Next: Xstormy16 Options, Prev: VAX Options, Up: Submodel Options
11937 3.17.34 x86-64 Options
11938 ----------------------
11940 These are listed under *Note i386 and x86-64 Options::.
11943 File: gcc.info, Node: Xstormy16 Options, Next: Xtensa Options, Prev: x86-64 Options, Up: Submodel Options
11945 3.17.35 Xstormy16 Options
11946 -------------------------
11948 These options are defined for Xstormy16:
11951 Choose startup files and linker script suitable for the simulator.
11954 File: gcc.info, Node: Xtensa Options, Next: zSeries Options, Prev: Xstormy16 Options, Up: Submodel Options
11956 3.17.36 Xtensa Options
11957 ----------------------
11959 These options are supported for Xtensa targets:
11963 Enable or disable use of `CONST16' instructions for loading
11964 constant values. The `CONST16' instruction is currently not a
11965 standard option from Tensilica. When enabled, `CONST16'
11966 instructions are always used in place of the standard `L32R'
11967 instructions. The use of `CONST16' is enabled by default only if
11968 the `L32R' instruction is not available.
11972 Enable or disable use of fused multiply/add and multiply/subtract
11973 instructions in the floating-point option. This has no effect if
11974 the floating-point option is not also enabled. Disabling fused
11975 multiply/add and multiply/subtract instructions forces the
11976 compiler to use separate instructions for the multiply and
11977 add/subtract operations. This may be desirable in some cases
11978 where strict IEEE 754-compliant results are required: the fused
11979 multiply add/subtract instructions do not round the intermediate
11980 result, thereby producing results with _more_ bits of precision
11981 than specified by the IEEE standard. Disabling fused multiply
11982 add/subtract instructions also ensures that the program output is
11983 not sensitive to the compiler's ability to combine multiply and
11984 add/subtract operations.
11986 `-mtext-section-literals'
11987 `-mno-text-section-literals'
11988 Control the treatment of literal pools. The default is
11989 `-mno-text-section-literals', which places literals in a separate
11990 section in the output file. This allows the literal pool to be
11991 placed in a data RAM/ROM, and it also allows the linker to combine
11992 literal pools from separate object files to remove redundant
11993 literals and improve code size. With `-mtext-section-literals',
11994 the literals are interspersed in the text section in order to keep
11995 them as close as possible to their references. This may be
11996 necessary for large assembly files.
11999 `-mno-target-align'
12000 When this option is enabled, GCC instructs the assembler to
12001 automatically align instructions to reduce branch penalties at the
12002 expense of some code density. The assembler attempts to widen
12003 density instructions to align branch targets and the instructions
12004 following call instructions. If there are not enough preceding
12005 safe density instructions to align a target, no widening will be
12006 performed. The default is `-mtarget-align'. These options do not
12007 affect the treatment of auto-aligned instructions like `LOOP',
12008 which the assembler will always align, either by widening density
12009 instructions or by inserting no-op instructions.
12013 When this option is enabled, GCC instructs the assembler to
12014 translate direct calls to indirect calls unless it can determine
12015 that the target of a direct call is in the range allowed by the
12016 call instruction. This translation typically occurs for calls to
12017 functions in other source files. Specifically, the assembler
12018 translates a direct `CALL' instruction into an `L32R' followed by
12019 a `CALLX' instruction. The default is `-mno-longcalls'. This
12020 option should be used in programs where the call target can
12021 potentially be out of range. This option is implemented in the
12022 assembler, not the compiler, so the assembly code generated by GCC
12023 will still show direct call instructions--look at the disassembled
12024 object code to see the actual instructions. Note that the
12025 assembler will use an indirect call for every cross-file call, not
12026 just those that really will be out of range.
12029 File: gcc.info, Node: zSeries Options, Prev: Xtensa Options, Up: Submodel Options
12031 3.17.37 zSeries Options
12032 -----------------------
12034 These are listed under *Note S/390 and zSeries Options::.
12037 File: gcc.info, Node: Code Gen Options, Next: Environment Variables, Prev: Submodel Options, Up: Invoking GCC
12039 3.18 Options for Code Generation Conventions
12040 ============================================
12042 These machine-independent options control the interface conventions
12043 used in code generation.
12045 Most of them have both positive and negative forms; the negative form
12046 of `-ffoo' would be `-fno-foo'. In the table below, only one of the
12047 forms is listed--the one which is not the default. You can figure out
12048 the other form by either removing `no-' or adding it.
12051 For front-ends that support it, generate additional code to check
12052 that indices used to access arrays are within the declared range.
12053 This is currently only supported by the Java and Fortran 77
12054 front-ends, where this option defaults to true and false
12058 This option generates traps for signed overflow on addition,
12059 subtraction, multiplication operations.
12062 This option instructs the compiler to assume that signed arithmetic
12063 overflow of addition, subtraction and multiplication wraps around
12064 using twos-complement representation. This flag enables some
12065 optimizations and disables others. This option is enabled by
12066 default for the Java front-end, as required by the Java language
12070 Enable exception handling. Generates extra code needed to
12071 propagate exceptions. For some targets, this implies GCC will
12072 generate frame unwind information for all functions, which can
12073 produce significant data size overhead, although it does not
12074 affect execution. If you do not specify this option, GCC will
12075 enable it by default for languages like C++ which normally require
12076 exception handling, and disable it for languages like C that do
12077 not normally require it. However, you may need to enable this
12078 option when compiling C code that needs to interoperate properly
12079 with exception handlers written in C++. You may also wish to
12080 disable this option if you are compiling older C++ programs that
12081 don't use exception handling.
12083 `-fnon-call-exceptions'
12084 Generate code that allows trapping instructions to throw
12085 exceptions. Note that this requires platform-specific runtime
12086 support that does not exist everywhere. Moreover, it only allows
12087 _trapping_ instructions to throw exceptions, i.e. memory
12088 references or floating point instructions. It does not allow
12089 exceptions to be thrown from arbitrary signal handlers such as
12093 Similar to `-fexceptions', except that it will just generate any
12094 needed static data, but will not affect the generated code in any
12095 other way. You will normally not enable this option; instead, a
12096 language processor that needs this handling would enable it on
12099 `-fasynchronous-unwind-tables'
12100 Generate unwind table in dwarf2 format, if supported by target
12101 machine. The table is exact at each instruction boundary, so it
12102 can be used for stack unwinding from asynchronous events (such as
12103 debugger or garbage collector).
12105 `-fpcc-struct-return'
12106 Return "short" `struct' and `union' values in memory like longer
12107 ones, rather than in registers. This convention is less
12108 efficient, but it has the advantage of allowing intercallability
12109 between GCC-compiled files and files compiled with other
12110 compilers, particularly the Portable C Compiler (pcc).
12112 The precise convention for returning structures in memory depends
12113 on the target configuration macros.
12115 Short structures and unions are those whose size and alignment
12116 match that of some integer type.
12118 *Warning:* code compiled with the `-fpcc-struct-return' switch is
12119 not binary compatible with code compiled with the
12120 `-freg-struct-return' switch. Use it to conform to a non-default
12121 application binary interface.
12123 `-freg-struct-return'
12124 Return `struct' and `union' values in registers when possible.
12125 This is more efficient for small structures than
12126 `-fpcc-struct-return'.
12128 If you specify neither `-fpcc-struct-return' nor
12129 `-freg-struct-return', GCC defaults to whichever convention is
12130 standard for the target. If there is no standard convention, GCC
12131 defaults to `-fpcc-struct-return', except on targets where GCC is
12132 the principal compiler. In those cases, we can choose the
12133 standard, and we chose the more efficient register return
12136 *Warning:* code compiled with the `-freg-struct-return' switch is
12137 not binary compatible with code compiled with the
12138 `-fpcc-struct-return' switch. Use it to conform to a non-default
12139 application binary interface.
12142 Allocate to an `enum' type only as many bytes as it needs for the
12143 declared range of possible values. Specifically, the `enum' type
12144 will be equivalent to the smallest integer type which has enough
12147 *Warning:* the `-fshort-enums' switch causes GCC to generate code
12148 that is not binary compatible with code generated without that
12149 switch. Use it to conform to a non-default application binary
12153 Use the same size for `double' as for `float'.
12155 *Warning:* the `-fshort-double' switch causes GCC to generate code
12156 that is not binary compatible with code generated without that
12157 switch. Use it to conform to a non-default application binary
12161 Override the underlying type for `wchar_t' to be `short unsigned
12162 int' instead of the default for the target. This option is useful
12163 for building programs to run under WINE.
12165 *Warning:* the `-fshort-wchar' switch causes GCC to generate code
12166 that is not binary compatible with code generated without that
12167 switch. Use it to conform to a non-default application binary
12171 Requests that the data and non-`const' variables of this
12172 compilation be shared data rather than private data. The
12173 distinction makes sense only on certain operating systems, where
12174 shared data is shared between processes running the same program,
12175 while private data exists in one copy per process.
12178 In C, allocate even uninitialized global variables in the data
12179 section of the object file, rather than generating them as common
12180 blocks. This has the effect that if the same variable is declared
12181 (without `extern') in two different compilations, you will get an
12182 error when you link them. The only reason this might be useful is
12183 if you wish to verify that the program will work on other systems
12184 which always work this way.
12187 Ignore the `#ident' directive.
12189 `-finhibit-size-directive'
12190 Don't output a `.size' assembler directive, or anything else that
12191 would cause trouble if the function is split in the middle, and the
12192 two halves are placed at locations far apart in memory. This
12193 option is used when compiling `crtstuff.c'; you should not need to
12194 use it for anything else.
12197 Put extra commentary information in the generated assembly code to
12198 make it more readable. This option is generally only of use to
12199 those who actually need to read the generated assembly code
12200 (perhaps while debugging the compiler itself).
12202 `-fno-verbose-asm', the default, causes the extra information to
12203 be omitted and is useful when comparing two assembler files.
12206 Generate position-independent code (PIC) suitable for use in a
12207 shared library, if supported for the target machine. Such code
12208 accesses all constant addresses through a global offset table
12209 (GOT). The dynamic loader resolves the GOT entries when the
12210 program starts (the dynamic loader is not part of GCC; it is part
12211 of the operating system). If the GOT size for the linked
12212 executable exceeds a machine-specific maximum size, you get an
12213 error message from the linker indicating that `-fpic' does not
12214 work; in that case, recompile with `-fPIC' instead. (These
12215 maximums are 8k on the SPARC and 32k on the m68k and RS/6000. The
12216 386 has no such limit.)
12218 Position-independent code requires special support, and therefore
12219 works only on certain machines. For the 386, GCC supports PIC for
12220 System V but not for the Sun 386i. Code generated for the IBM
12221 RS/6000 is always position-independent.
12224 If supported for the target machine, emit position-independent
12225 code, suitable for dynamic linking and avoiding any limit on the
12226 size of the global offset table. This option makes a difference
12227 on the m68k, PowerPC and SPARC.
12229 Position-independent code requires special support, and therefore
12230 works only on certain machines.
12234 These options are similar to `-fpic' and `-fPIC', but generated
12235 position independent code can be only linked into executables.
12236 Usually these options are used when `-pie' GCC option will be used
12240 Do not use jump tables for switch statements even where it would be
12241 more efficient than other code generation strategies. This option
12242 is of use in conjunction with `-fpic' or `-fPIC' for building code
12243 which forms part of a dynamic linker and cannot reference the
12244 address of a jump table. On some targets, jump tables do not
12245 require a GOT and this option is not needed.
12248 Treat the register named REG as a fixed register; generated code
12249 should never refer to it (except perhaps as a stack pointer, frame
12250 pointer or in some other fixed role).
12252 REG must be the name of a register. The register names accepted
12253 are machine-specific and are defined in the `REGISTER_NAMES' macro
12254 in the machine description macro file.
12256 This flag does not have a negative form, because it specifies a
12260 Treat the register named REG as an allocable register that is
12261 clobbered by function calls. It may be allocated for temporaries
12262 or variables that do not live across a call. Functions compiled
12263 this way will not save and restore the register REG.
12265 It is an error to used this flag with the frame pointer or stack
12266 pointer. Use of this flag for other registers that have fixed
12267 pervasive roles in the machine's execution model will produce
12268 disastrous results.
12270 This flag does not have a negative form, because it specifies a
12274 Treat the register named REG as an allocable register saved by
12275 functions. It may be allocated even for temporaries or variables
12276 that live across a call. Functions compiled this way will save
12277 and restore the register REG if they use it.
12279 It is an error to used this flag with the frame pointer or stack
12280 pointer. Use of this flag for other registers that have fixed
12281 pervasive roles in the machine's execution model will produce
12282 disastrous results.
12284 A different sort of disaster will result from the use of this flag
12285 for a register in which function values may be returned.
12287 This flag does not have a negative form, because it specifies a
12290 `-fpack-struct[=N]'
12291 Without a value specified, pack all structure members together
12292 without holes. When a value is specified (which must be a small
12293 power of two), pack structure members according to this value,
12294 representing the maximum alignment (that is, objects with default
12295 alignment requirements larger than this will be output potentially
12296 unaligned at the next fitting location.
12298 *Warning:* the `-fpack-struct' switch causes GCC to generate code
12299 that is not binary compatible with code generated without that
12300 switch. Additionally, it makes the code suboptimal. Use it to
12301 conform to a non-default application binary interface.
12303 `-finstrument-functions'
12304 Generate instrumentation calls for entry and exit to functions.
12305 Just after function entry and just before function exit, the
12306 following profiling functions will be called with the address of
12307 the current function and its call site. (On some platforms,
12308 `__builtin_return_address' does not work beyond the current
12309 function, so the call site information may not be available to the
12310 profiling functions otherwise.)
12312 void __cyg_profile_func_enter (void *this_fn,
12314 void __cyg_profile_func_exit (void *this_fn,
12317 The first argument is the address of the start of the current
12318 function, which may be looked up exactly in the symbol table.
12320 This instrumentation is also done for functions expanded inline in
12321 other functions. The profiling calls will indicate where,
12322 conceptually, the inline function is entered and exited. This
12323 means that addressable versions of such functions must be
12324 available. If all your uses of a function are expanded inline,
12325 this may mean an additional expansion of code size. If you use
12326 `extern inline' in your C code, an addressable version of such
12327 functions must be provided. (This is normally the case anyways,
12328 but if you get lucky and the optimizer always expands the
12329 functions inline, you might have gotten away without providing
12332 A function may be given the attribute `no_instrument_function', in
12333 which case this instrumentation will not be done. This can be
12334 used, for example, for the profiling functions listed above,
12335 high-priority interrupt routines, and any functions from which the
12336 profiling functions cannot safely be called (perhaps signal
12337 handlers, if the profiling routines generate output or allocate
12341 Generate code to verify that you do not go beyond the boundary of
12342 the stack. You should specify this flag if you are running in an
12343 environment with multiple threads, but only rarely need to specify
12344 it in a single-threaded environment since stack overflow is
12345 automatically detected on nearly all systems if there is only one
12348 Note that this switch does not actually cause checking to be done;
12349 the operating system must do that. The switch causes generation
12350 of code to ensure that the operating system sees the stack being
12353 `-fstack-limit-register=REG'
12354 `-fstack-limit-symbol=SYM'
12356 Generate code to ensure that the stack does not grow beyond a
12357 certain value, either the value of a register or the address of a
12358 symbol. If the stack would grow beyond the value, a signal is
12359 raised. For most targets, the signal is raised before the stack
12360 overruns the boundary, so it is possible to catch the signal
12361 without taking special precautions.
12363 For instance, if the stack starts at absolute address `0x80000000'
12364 and grows downwards, you can use the flags
12365 `-fstack-limit-symbol=__stack_limit' and
12366 `-Wl,--defsym,__stack_limit=0x7ffe0000' to enforce a stack limit
12367 of 128KB. Note that this may only work with the GNU linker.
12370 `-fargument-noalias'
12371 `-fargument-noalias-global'
12372 Specify the possible relationships among parameters and between
12373 parameters and global data.
12375 `-fargument-alias' specifies that arguments (parameters) may alias
12376 each other and may alias global storage.
12377 `-fargument-noalias' specifies that arguments do not alias each
12378 other, but may alias global storage.
12379 `-fargument-noalias-global' specifies that arguments do not alias
12380 each other and do not alias global storage.
12382 Each language will automatically use whatever option is required by
12383 the language standard. You should not need to use these options
12386 `-fleading-underscore'
12387 This option and its counterpart, `-fno-leading-underscore',
12388 forcibly change the way C symbols are represented in the object
12389 file. One use is to help link with legacy assembly code.
12391 *Warning:* the `-fleading-underscore' switch causes GCC to
12392 generate code that is not binary compatible with code generated
12393 without that switch. Use it to conform to a non-default
12394 application binary interface. Not all targets provide complete
12395 support for this switch.
12397 `-ftls-model=MODEL'
12398 Alter the thread-local storage model to be used (*note
12399 Thread-Local::). The MODEL argument should be one of
12400 `global-dynamic', `local-dynamic', `initial-exec' or `local-exec'.
12402 The default without `-fpic' is `initial-exec'; with `-fpic' the
12403 default is `global-dynamic'.
12405 `-fvisibility=DEFAULT|INTERNAL|HIDDEN|PROTECTED'
12406 Set the default ELF image symbol visibility to the specified
12407 option--all symbols will be marked with this unless overridden
12408 within the code. Using this feature can very substantially
12409 improve linking and load times of shared object libraries, produce
12410 more optimized code, provide near-perfect API export and prevent
12411 symbol clashes. It is *strongly* recommended that you use this in
12412 any shared objects you distribute.
12414 Despite the nomenclature, `default' always means public ie;
12415 available to be linked against from outside the shared object.
12416 `protected' and `internal' are pretty useless in real-world usage
12417 so the only other commonly used option will be `hidden'. The
12418 default if `-fvisibility' isn't specified is `default', i.e., make
12419 every symbol public--this causes the same behavior as previous
12422 A good explanation of the benefits offered by ensuring ELF symbols
12423 have the correct visibility is given by "How To Write Shared
12424 Libraries" by Ulrich Drepper (which can be found at
12425 `http://people.redhat.com/~drepper/')--however a superior solution
12426 made possible by this option to marking things hidden when the
12427 default is public is to make the default hidden and mark things
12428 public. This is the norm with DLL's on Windows and with
12429 `-fvisibility=hidden' and `__attribute__
12430 ((visibility("default")))' instead of `__declspec(dllexport)' you
12431 get almost identical semantics with identical syntax. This is a
12432 great boon to those working with cross-platform projects.
12434 For those adding visibility support to existing code, you may find
12435 `#pragma GCC visibility' of use. This works by you enclosing the
12436 declarations you wish to set visibility for with (for example)
12437 `#pragma GCC visibility push(hidden)' and `#pragma GCC visibility
12438 pop'. Bear in mind that symbol visibility should be viewed *as
12439 part of the API interface contract* and thus all new code should
12440 always specify visibility when it is not the default ie;
12441 declarations only for use within the local DSO should *always* be
12442 marked explicitly as hidden as so to avoid PLT indirection
12443 overheads--making this abundantly clear also aids readability and
12444 self-documentation of the code. Note that due to ISO C++
12445 specification requirements, operator new and operator delete must
12446 always be of default visibility.
12448 An overview of these techniques, their benefits and how to use them
12449 is at `http://gcc.gnu.org/wiki/Visibility'.
12453 File: gcc.info, Node: Environment Variables, Next: Precompiled Headers, Prev: Code Gen Options, Up: Invoking GCC
12455 3.19 Environment Variables Affecting GCC
12456 ========================================
12458 This section describes several environment variables that affect how GCC
12459 operates. Some of them work by specifying directories or prefixes to
12460 use when searching for various kinds of files. Some are used to
12461 specify other aspects of the compilation environment.
12463 Note that you can also specify places to search using options such as
12464 `-B', `-I' and `-L' (*note Directory Options::). These take precedence
12465 over places specified using environment variables, which in turn take
12466 precedence over those specified by the configuration of GCC. *Note
12467 Controlling the Compilation Driver `gcc': (gccint)Driver.
12473 These environment variables control the way that GCC uses
12474 localization information that allow GCC to work with different
12475 national conventions. GCC inspects the locale categories
12476 `LC_CTYPE' and `LC_MESSAGES' if it has been configured to do so.
12477 These locale categories can be set to any value supported by your
12478 installation. A typical value is `en_GB.UTF-8' for English in the
12479 United Kingdom encoded in UTF-8.
12481 The `LC_CTYPE' environment variable specifies character
12482 classification. GCC uses it to determine the character boundaries
12483 in a string; this is needed for some multibyte encodings that
12484 contain quote and escape characters that would otherwise be
12485 interpreted as a string end or escape.
12487 The `LC_MESSAGES' environment variable specifies the language to
12488 use in diagnostic messages.
12490 If the `LC_ALL' environment variable is set, it overrides the value
12491 of `LC_CTYPE' and `LC_MESSAGES'; otherwise, `LC_CTYPE' and
12492 `LC_MESSAGES' default to the value of the `LANG' environment
12493 variable. If none of these variables are set, GCC defaults to
12494 traditional C English behavior.
12497 If `TMPDIR' is set, it specifies the directory to use for temporary
12498 files. GCC uses temporary files to hold the output of one stage of
12499 compilation which is to be used as input to the next stage: for
12500 example, the output of the preprocessor, which is the input to the
12504 If `GCC_EXEC_PREFIX' is set, it specifies a prefix to use in the
12505 names of the subprograms executed by the compiler. No slash is
12506 added when this prefix is combined with the name of a subprogram,
12507 but you can specify a prefix that ends with a slash if you wish.
12509 If `GCC_EXEC_PREFIX' is not set, GCC will attempt to figure out an
12510 appropriate prefix to use based on the pathname it was invoked
12513 If GCC cannot find the subprogram using the specified prefix, it
12514 tries looking in the usual places for the subprogram.
12516 The default value of `GCC_EXEC_PREFIX' is `PREFIX/lib/gcc/' where
12517 PREFIX is the value of `prefix' when you ran the `configure'
12520 Other prefixes specified with `-B' take precedence over this
12523 This prefix is also used for finding files such as `crt0.o' that
12524 are used for linking.
12526 In addition, the prefix is used in an unusual way in finding the
12527 directories to search for header files. For each of the standard
12528 directories whose name normally begins with `/usr/local/lib/gcc'
12529 (more precisely, with the value of `GCC_INCLUDE_DIR'), GCC tries
12530 replacing that beginning with the specified prefix to produce an
12531 alternate directory name. Thus, with `-Bfoo/', GCC will search
12532 `foo/bar' where it would normally search `/usr/local/lib/bar'.
12533 These alternate directories are searched first; the standard
12534 directories come next.
12537 The value of `COMPILER_PATH' is a colon-separated list of
12538 directories, much like `PATH'. GCC tries the directories thus
12539 specified when searching for subprograms, if it can't find the
12540 subprograms using `GCC_EXEC_PREFIX'.
12543 The value of `LIBRARY_PATH' is a colon-separated list of
12544 directories, much like `PATH'. When configured as a native
12545 compiler, GCC tries the directories thus specified when searching
12546 for special linker files, if it can't find them using
12547 `GCC_EXEC_PREFIX'. Linking using GCC also uses these directories
12548 when searching for ordinary libraries for the `-l' option (but
12549 directories specified with `-L' come first).
12552 This variable is used to pass locale information to the compiler.
12553 One way in which this information is used is to determine the
12554 character set to be used when character literals, string literals
12555 and comments are parsed in C and C++. When the compiler is
12556 configured to allow multibyte characters, the following values for
12557 `LANG' are recognized:
12560 Recognize JIS characters.
12563 Recognize SJIS characters.
12566 Recognize EUCJP characters.
12568 If `LANG' is not defined, or if it has some other value, then the
12569 compiler will use mblen and mbtowc as defined by the default
12570 locale to recognize and translate multibyte characters.
12572 Some additional environments variables affect the behavior of the
12577 `CPLUS_INCLUDE_PATH'
12578 `OBJC_INCLUDE_PATH'
12579 Each variable's value is a list of directories separated by a
12580 special character, much like `PATH', in which to look for header
12581 files. The special character, `PATH_SEPARATOR', is
12582 target-dependent and determined at GCC build time. For Microsoft
12583 Windows-based targets it is a semicolon, and for almost all other
12584 targets it is a colon.
12586 `CPATH' specifies a list of directories to be searched as if
12587 specified with `-I', but after any paths given with `-I' options
12588 on the command line. This environment variable is used regardless
12589 of which language is being preprocessed.
12591 The remaining environment variables apply only when preprocessing
12592 the particular language indicated. Each specifies a list of
12593 directories to be searched as if specified with `-isystem', but
12594 after any paths given with `-isystem' options on the command line.
12596 In all these variables, an empty element instructs the compiler to
12597 search its current working directory. Empty elements can appear
12598 at the beginning or end of a path. For instance, if the value of
12599 `CPATH' is `:/special/include', that has the same effect as
12600 `-I. -I/special/include'.
12602 `DEPENDENCIES_OUTPUT'
12603 If this variable is set, its value specifies how to output
12604 dependencies for Make based on the non-system header files
12605 processed by the compiler. System header files are ignored in the
12608 The value of `DEPENDENCIES_OUTPUT' can be just a file name, in
12609 which case the Make rules are written to that file, guessing the
12610 target name from the source file name. Or the value can have the
12611 form `FILE TARGET', in which case the rules are written to file
12612 FILE using TARGET as the target name.
12614 In other words, this environment variable is equivalent to
12615 combining the options `-MM' and `-MF' (*note Preprocessor
12616 Options::), with an optional `-MT' switch too.
12618 `SUNPRO_DEPENDENCIES'
12619 This variable is the same as `DEPENDENCIES_OUTPUT' (see above),
12620 except that system header files are not ignored, so it implies
12621 `-M' rather than `-MM'. However, the dependence on the main input
12622 file is omitted. *Note Preprocessor Options::.
12625 File: gcc.info, Node: Precompiled Headers, Next: Running Protoize, Prev: Environment Variables, Up: Invoking GCC
12627 3.20 Using Precompiled Headers
12628 ==============================
12630 Often large projects have many header files that are included in every
12631 source file. The time the compiler takes to process these header files
12632 over and over again can account for nearly all of the time required to
12633 build the project. To make builds faster, GCC allows users to
12634 `precompile' a header file; then, if builds can use the precompiled
12635 header file they will be much faster.
12637 To create a precompiled header file, simply compile it as you would any
12638 other file, if necessary using the `-x' option to make the driver treat
12639 it as a C or C++ header file. You will probably want to use a tool
12640 like `make' to keep the precompiled header up-to-date when the headers
12641 it contains change.
12643 A precompiled header file will be searched for when `#include' is seen
12644 in the compilation. As it searches for the included file (*note Search
12645 Path: (cpp)Search Path.) the compiler looks for a precompiled header in
12646 each directory just before it looks for the include file in that
12647 directory. The name searched for is the name specified in the
12648 `#include' with `.gch' appended. If the precompiled header file can't
12649 be used, it is ignored.
12651 For instance, if you have `#include "all.h"', and you have `all.h.gch'
12652 in the same directory as `all.h', then the precompiled header file will
12653 be used if possible, and the original header will be used otherwise.
12655 Alternatively, you might decide to put the precompiled header file in a
12656 directory and use `-I' to ensure that directory is searched before (or
12657 instead of) the directory containing the original header. Then, if you
12658 want to check that the precompiled header file is always used, you can
12659 put a file of the same name as the original header in this directory
12660 containing an `#error' command.
12662 This also works with `-include'. So yet another way to use
12663 precompiled headers, good for projects not designed with precompiled
12664 header files in mind, is to simply take most of the header files used by
12665 a project, include them from another header file, precompile that header
12666 file, and `-include' the precompiled header. If the header files have
12667 guards against multiple inclusion, they will be skipped because they've
12668 already been included (in the precompiled header).
12670 If you need to precompile the same header file for different
12671 languages, targets, or compiler options, you can instead make a
12672 _directory_ named like `all.h.gch', and put each precompiled header in
12673 the directory, perhaps using `-o'. It doesn't matter what you call the
12674 files in the directory, every precompiled header in the directory will
12675 be considered. The first precompiled header encountered in the
12676 directory that is valid for this compilation will be used; they're
12677 searched in no particular order.
12679 There are many other possibilities, limited only by your imagination,
12680 good sense, and the constraints of your build system.
12682 A precompiled header file can be used only when these conditions apply:
12684 * Only one precompiled header can be used in a particular
12687 * A precompiled header can't be used once the first C token is seen.
12688 You can have preprocessor directives before a precompiled header;
12689 you can even include a precompiled header from inside another
12690 header, so long as there are no C tokens before the `#include'.
12692 * The precompiled header file must be produced for the same language
12693 as the current compilation. You can't use a C precompiled header
12694 for a C++ compilation.
12696 * The precompiled header file must have been produced by the same
12697 compiler binary as the current compilation is using.
12699 * Any macros defined before the precompiled header is included must
12700 either be defined in the same way as when the precompiled header
12701 was generated, or must not affect the precompiled header, which
12702 usually means that they don't appear in the precompiled header at
12705 The `-D' option is one way to define a macro before a precompiled
12706 header is included; using a `#define' can also do it. There are
12707 also some options that define macros implicitly, like `-O' and
12708 `-Wdeprecated'; the same rule applies to macros defined this way.
12710 * If debugging information is output when using the precompiled
12711 header, using `-g' or similar, the same kind of debugging
12712 information must have been output when building the precompiled
12713 header. However, a precompiled header built using `-g' can be
12714 used in a compilation when no debugging information is being
12717 * The same `-m' options must generally be used when building and
12718 using the precompiled header. *Note Submodel Options::, for any
12719 cases where this rule is relaxed.
12721 * Each of the following options must be the same when building and
12722 using the precompiled header:
12724 -fexceptions -funit-at-a-time
12726 * Some other command-line options starting with `-f', `-p', or `-O'
12727 must be defined in the same way as when the precompiled header was
12728 generated. At present, it's not clear which options are safe to
12729 change and which are not; the safest choice is to use exactly the
12730 same options when generating and using the precompiled header.
12731 The following are known to be safe:
12733 -fmessage-length= -fpreprocessed
12734 -fsched-interblock -fsched-spec -fsched-spec-load -fsched-spec-load-dangerous
12735 -fsched-verbose=<number> -fschedule-insns -fvisibility=
12739 For all of these except the last, the compiler will automatically
12740 ignore the precompiled header if the conditions aren't met. If you
12741 find an option combination that doesn't work and doesn't cause the
12742 precompiled header to be ignored, please consider filing a bug report,
12745 If you do use differing options when generating and using the
12746 precompiled header, the actual behavior will be a mixture of the
12747 behavior for the options. For instance, if you use `-g' to generate
12748 the precompiled header but not when using it, you may or may not get
12749 debugging information for routines in the precompiled header.
12752 File: gcc.info, Node: Running Protoize, Prev: Precompiled Headers, Up: Invoking GCC
12754 3.21 Running Protoize
12755 =====================
12757 The program `protoize' is an optional part of GCC. You can use it to
12758 add prototypes to a program, thus converting the program to ISO C in
12759 one respect. The companion program `unprotoize' does the reverse: it
12760 removes argument types from any prototypes that are found.
12762 When you run these programs, you must specify a set of source files as
12763 command line arguments. The conversion programs start out by compiling
12764 these files to see what functions they define. The information gathered
12765 about a file FOO is saved in a file named `FOO.X'.
12767 After scanning comes actual conversion. The specified files are all
12768 eligible to be converted; any files they include (whether sources or
12769 just headers) are eligible as well.
12771 But not all the eligible files are converted. By default, `protoize'
12772 and `unprotoize' convert only source and header files in the current
12773 directory. You can specify additional directories whose files should
12774 be converted with the `-d DIRECTORY' option. You can also specify
12775 particular files to exclude with the `-x FILE' option. A file is
12776 converted if it is eligible, its directory name matches one of the
12777 specified directory names, and its name within the directory has not
12780 Basic conversion with `protoize' consists of rewriting most function
12781 definitions and function declarations to specify the types of the
12782 arguments. The only ones not rewritten are those for varargs functions.
12784 `protoize' optionally inserts prototype declarations at the beginning
12785 of the source file, to make them available for any calls that precede
12786 the function's definition. Or it can insert prototype declarations
12787 with block scope in the blocks where undeclared functions are called.
12789 Basic conversion with `unprotoize' consists of rewriting most function
12790 declarations to remove any argument types, and rewriting function
12791 definitions to the old-style pre-ISO form.
12793 Both conversion programs print a warning for any function declaration
12794 or definition that they can't convert. You can suppress these warnings
12797 The output from `protoize' or `unprotoize' replaces the original
12798 source file. The original file is renamed to a name ending with
12799 `.save' (for DOS, the saved filename ends in `.sav' without the
12800 original `.c' suffix). If the `.save' (`.sav' for DOS) file already
12801 exists, then the source file is simply discarded.
12803 `protoize' and `unprotoize' both depend on GCC itself to scan the
12804 program and collect information about the functions it uses. So
12805 neither of these programs will work until GCC is installed.
12807 Here is a table of the options you can use with `protoize' and
12808 `unprotoize'. Each option works with both programs unless otherwise
12812 Look for the file `SYSCALLS.c.X' in DIRECTORY, instead of the
12813 usual directory (normally `/usr/local/lib'). This file contains
12814 prototype information about standard system functions. This option
12815 applies only to `protoize'.
12817 `-c COMPILATION-OPTIONS'
12818 Use COMPILATION-OPTIONS as the options when running `gcc' to
12819 produce the `.X' files. The special option `-aux-info' is always
12820 passed in addition, to tell `gcc' to write a `.X' file.
12822 Note that the compilation options must be given as a single
12823 argument to `protoize' or `unprotoize'. If you want to specify
12824 several `gcc' options, you must quote the entire set of
12825 compilation options to make them a single word in the shell.
12827 There are certain `gcc' arguments that you cannot use, because they
12828 would produce the wrong kind of output. These include `-g', `-O',
12829 `-c', `-S', and `-o' If you include these in the
12830 COMPILATION-OPTIONS, they are ignored.
12833 Rename files to end in `.C' (`.cc' for DOS-based file systems)
12834 instead of `.c'. This is convenient if you are converting a C
12835 program to C++. This option applies only to `protoize'.
12838 Add explicit global declarations. This means inserting explicit
12839 declarations at the beginning of each source file for each function
12840 that is called in the file and was not declared. These
12841 declarations precede the first function definition that contains a
12842 call to an undeclared function. This option applies only to
12846 Indent old-style parameter declarations with the string STRING.
12847 This option applies only to `protoize'.
12849 `unprotoize' converts prototyped function definitions to old-style
12850 function definitions, where the arguments are declared between the
12851 argument list and the initial `{'. By default, `unprotoize' uses
12852 five spaces as the indentation. If you want to indent with just
12853 one space instead, use `-i " "'.
12856 Keep the `.X' files. Normally, they are deleted after conversion
12860 Add explicit local declarations. `protoize' with `-l' inserts a
12861 prototype declaration for each function in each block which calls
12862 the function without any declaration. This option applies only to
12866 Make no real changes. This mode just prints information about the
12867 conversions that would have been done without `-n'.
12870 Make no `.save' files. The original files are simply deleted.
12871 Use this option with caution.
12874 Use the program PROGRAM as the compiler. Normally, the name `gcc'
12878 Work quietly. Most warnings are suppressed.
12881 Print the version number, just like `-v' for `gcc'.
12883 If you need special compiler options to compile one of your program's
12884 source files, then you should generate that file's `.X' file specially,
12885 by running `gcc' on that source file with the appropriate options and
12886 the option `-aux-info'. Then run `protoize' on the entire set of
12887 files. `protoize' will use the existing `.X' file because it is newer
12888 than the source file. For example:
12890 gcc -Dfoo=bar file1.c -aux-info file1.X
12893 You need to include the special files along with the rest in the
12894 `protoize' command, even though their `.X' files already exist, because
12895 otherwise they won't get converted.
12897 *Note Protoize Caveats::, for more information on how to use
12898 `protoize' successfully.
12901 File: gcc.info, Node: C Implementation, Next: C Extensions, Prev: Invoking GCC, Up: Top
12903 4 C Implementation-defined behavior
12904 ***********************************
12906 A conforming implementation of ISO C is required to document its choice
12907 of behavior in each of the areas that are designated "implementation
12908 defined". The following lists all such areas, along with the section
12909 numbers from the ISO/IEC 9899:1990 and ISO/IEC 9899:1999 standards.
12910 Some areas are only implementation-defined in one version of the
12913 Some choices depend on the externally determined ABI for the platform
12914 (including standard character encodings) which GCC follows; these are
12915 listed as "determined by ABI" below. *Note Binary Compatibility:
12916 Compatibility, and `http://gcc.gnu.org/readings.html'. Some choices
12917 are documented in the preprocessor manual. *Note
12918 Implementation-defined behavior: (cpp)Implementation-defined behavior.
12919 Some choices are made by the library and operating system (or other
12920 environment when compiling for a freestanding environment); refer to
12921 their documentation for details.
12925 * Translation implementation::
12926 * Environment implementation::
12927 * Identifiers implementation::
12928 * Characters implementation::
12929 * Integers implementation::
12930 * Floating point implementation::
12931 * Arrays and pointers implementation::
12932 * Hints implementation::
12933 * Structures unions enumerations and bit-fields implementation::
12934 * Qualifiers implementation::
12935 * Declarators implementation::
12936 * Statements implementation::
12937 * Preprocessing directives implementation::
12938 * Library functions implementation::
12939 * Architecture implementation::
12940 * Locale-specific behavior implementation::
12943 File: gcc.info, Node: Translation implementation, Next: Environment implementation, Up: C Implementation
12948 * `How a diagnostic is identified (C90 3.7, C99 3.10, C90 and C99
12951 Diagnostics consist of all the output sent to stderr by GCC.
12953 * `Whether each nonempty sequence of white-space characters other
12954 than new-line is retained or replaced by one space character in
12955 translation phase 3 (C90 and C99 5.1.1.2).'
12957 *Note Implementation-defined behavior: (cpp)Implementation-defined
12962 File: gcc.info, Node: Environment implementation, Next: Identifiers implementation, Prev: Translation implementation, Up: C Implementation
12967 The behavior of most of these points are dependent on the implementation
12968 of the C library, and are not defined by GCC itself.
12970 * `The mapping between physical source file multibyte characters and
12971 the source character set in translation phase 1 (C90 and C99
12974 *Note Implementation-defined behavior: (cpp)Implementation-defined
12979 File: gcc.info, Node: Identifiers implementation, Next: Characters implementation, Prev: Environment implementation, Up: C Implementation
12984 * `Which additional multibyte characters may appear in identifiers
12985 and their correspondence to universal character names (C99 6.4.2).'
12987 *Note Implementation-defined behavior: (cpp)Implementation-defined
12990 * `The number of significant initial characters in an identifier
12991 (C90 6.1.2, C90 and C99 5.2.4.1, C99 6.4.2).'
12993 For internal names, all characters are significant. For external
12994 names, the number of significant characters are defined by the
12995 linker; for almost all targets, all characters are significant.
12997 * `Whether case distinctions are significant in an identifier with
12998 external linkage (C90 6.1.2).'
13000 This is a property of the linker. C99 requires that case
13001 distinctions are always significant in identifiers with external
13002 linkage and systems without this property are not supported by GCC.
13006 File: gcc.info, Node: Characters implementation, Next: Integers implementation, Prev: Identifiers implementation, Up: C Implementation
13011 * `The number of bits in a byte (C90 3.4, C99 3.6).'
13015 * `The values of the members of the execution character set (C90 and
13020 * `The unique value of the member of the execution character set
13021 produced for each of the standard alphabetic escape sequences (C90
13026 * `The value of a `char' object into which has been stored any
13027 character other than a member of the basic execution character set
13028 (C90 6.1.2.5, C99 6.2.5).'
13032 * `Which of `signed char' or `unsigned char' has the same range,
13033 representation, and behavior as "plain" `char' (C90 6.1.2.5, C90
13034 6.2.1.1, C99 6.2.5, C99 6.3.1.1).'
13036 Determined by ABI. The options `-funsigned-char' and
13037 `-fsigned-char' change the default. *Note Options Controlling C
13038 Dialect: C Dialect Options.
13040 * `The mapping of members of the source character set (in character
13041 constants and string literals) to members of the execution
13042 character set (C90 6.1.3.4, C99 6.4.4.4, C90 and C99 5.1.1.2).'
13046 * `The value of an integer character constant containing more than
13047 one character or containing a character or escape sequence that
13048 does not map to a single-byte execution character (C90 6.1.3.4,
13051 *Note Implementation-defined behavior: (cpp)Implementation-defined
13054 * `The value of a wide character constant containing more than one
13055 multibyte character, or containing a multibyte character or escape
13056 sequence not represented in the extended execution character set
13057 (C90 6.1.3.4, C99 6.4.4.4).'
13059 *Note Implementation-defined behavior: (cpp)Implementation-defined
13062 * `The current locale used to convert a wide character constant
13063 consisting of a single multibyte character that maps to a member
13064 of the extended execution character set into a corresponding wide
13065 character code (C90 6.1.3.4, C99 6.4.4.4).'
13067 *Note Implementation-defined behavior: (cpp)Implementation-defined
13070 * `The current locale used to convert a wide string literal into
13071 corresponding wide character codes (C90 6.1.4, C99 6.4.5).'
13073 *Note Implementation-defined behavior: (cpp)Implementation-defined
13076 * `The value of a string literal containing a multibyte character or
13077 escape sequence not represented in the execution character set
13078 (C90 6.1.4, C99 6.4.5).'
13080 *Note Implementation-defined behavior: (cpp)Implementation-defined
13084 File: gcc.info, Node: Integers implementation, Next: Floating point implementation, Prev: Characters implementation, Up: C Implementation
13089 * `Any extended integer types that exist in the implementation (C99
13092 GCC does not support any extended integer types.
13094 * `Whether signed integer types are represented using sign and
13095 magnitude, two's complement, or one's complement, and whether the
13096 extraordinary value is a trap representation or an ordinary value
13099 GCC supports only two's complement integer types, and all bit
13100 patterns are ordinary values.
13102 * `The rank of any extended integer type relative to another extended
13103 integer type with the same precision (C99 6.3.1.1).'
13105 GCC does not support any extended integer types.
13107 * `The result of, or the signal raised by, converting an integer to a
13108 signed integer type when the value cannot be represented in an
13109 object of that type (C90 6.2.1.2, C99 6.3.1.3).'
13111 For conversion to a type of width N, the value is reduced modulo
13112 2^N to be within range of the type; no signal is raised.
13114 * `The results of some bitwise operations on signed integers (C90
13117 Bitwise operators act on the representation of the value including
13118 both the sign and value bits, where the sign bit is considered
13119 immediately above the highest-value value bit. Signed `>>' acts
13120 on negative numbers by sign extension.
13122 GCC does not use the latitude given in C99 only to treat certain
13123 aspects of signed `<<' as undefined, but this is subject to change.
13125 * `The sign of the remainder on integer division (C90 6.3.5).'
13127 GCC always follows the C99 requirement that the result of division
13128 is truncated towards zero.
13132 File: gcc.info, Node: Floating point implementation, Next: Arrays and pointers implementation, Prev: Integers implementation, Up: C Implementation
13137 * `The accuracy of the floating-point operations and of the library
13138 functions in `<math.h>' and `<complex.h>' that return
13139 floating-point results (C90 and C99 5.2.4.2.2).'
13141 The accuracy is unknown.
13143 * `The rounding behaviors characterized by non-standard values of
13144 `FLT_ROUNDS' (C90 and C99 5.2.4.2.2).'
13146 GCC does not use such values.
13148 * `The evaluation methods characterized by non-standard negative
13149 values of `FLT_EVAL_METHOD' (C99 5.2.4.2.2).'
13151 GCC does not use such values.
13153 * `The direction of rounding when an integer is converted to a
13154 floating-point number that cannot exactly represent the original
13155 value (C90 6.2.1.3, C99 6.3.1.4).'
13157 C99 Annex F is followed.
13159 * `The direction of rounding when a floating-point number is
13160 converted to a narrower floating-point number (C90 6.2.1.4, C99
13163 C99 Annex F is followed.
13165 * `How the nearest representable value or the larger or smaller
13166 representable value immediately adjacent to the nearest
13167 representable value is chosen for certain floating constants (C90
13168 6.1.3.1, C99 6.4.4.2).'
13170 C99 Annex F is followed.
13172 * `Whether and how floating expressions are contracted when not
13173 disallowed by the `FP_CONTRACT' pragma (C99 6.5).'
13175 Expressions are currently only contracted if
13176 `-funsafe-math-optimizations' or `-ffast-math' are used. This is
13179 * `The default state for the `FENV_ACCESS' pragma (C99 7.6.1).'
13181 This pragma is not implemented, but the default is to "off" unless
13182 `-frounding-math' is used in which case it is "on".
13184 * `Additional floating-point exceptions, rounding modes,
13185 environments, and classifications, and their macro names (C99 7.6,
13188 This is dependent on the implementation of the C library, and is
13189 not defined by GCC itself.
13191 * `The default state for the `FP_CONTRACT' pragma (C99 7.12.2).'
13193 This pragma is not implemented. Expressions are currently only
13194 contracted if `-funsafe-math-optimizations' or `-ffast-math' are
13195 used. This is subject to change.
13197 * `Whether the "inexact" floating-point exception can be raised when
13198 the rounded result actually does equal the mathematical result in
13199 an IEC 60559 conformant implementation (C99 F.9).'
13201 This is dependent on the implementation of the C library, and is
13202 not defined by GCC itself.
13204 * `Whether the "underflow" (and "inexact") floating-point exception
13205 can be raised when a result is tiny but not inexact in an IEC
13206 60559 conformant implementation (C99 F.9).'
13208 This is dependent on the implementation of the C library, and is
13209 not defined by GCC itself.
13213 File: gcc.info, Node: Arrays and pointers implementation, Next: Hints implementation, Prev: Floating point implementation, Up: C Implementation
13215 4.7 Arrays and pointers
13216 =======================
13218 * `The result of converting a pointer to an integer or vice versa
13219 (C90 6.3.4, C99 6.3.2.3).'
13221 A cast from pointer to integer discards most-significant bits if
13222 the pointer representation is larger than the integer type,
13223 sign-extends(1) if the pointer representation is smaller than the
13224 integer type, otherwise the bits are unchanged.
13226 A cast from integer to pointer discards most-significant bits if
13227 the pointer representation is smaller than the integer type,
13228 extends according to the signedness of the integer type if the
13229 pointer representation is larger than the integer type, otherwise
13230 the bits are unchanged.
13232 When casting from pointer to integer and back again, the resulting
13233 pointer must reference the same object as the original pointer,
13234 otherwise the behavior is undefined. That is, one may not use
13235 integer arithmetic to avoid the undefined behavior of pointer
13236 arithmetic as proscribed in C99 6.5.6/8.
13238 * `The size of the result of subtracting two pointers to elements of
13239 the same array (C90 6.3.6, C99 6.5.6).'
13241 The value is as specified in the standard and the type is
13242 determined by the ABI.
13245 ---------- Footnotes ----------
13247 (1) Future versions of GCC may zero-extend, or use a target-defined
13248 `ptr_extend' pattern. Do not rely on sign extension.
13251 File: gcc.info, Node: Hints implementation, Next: Structures unions enumerations and bit-fields implementation, Prev: Arrays and pointers implementation, Up: C Implementation
13256 * `The extent to which suggestions made by using the `register'
13257 storage-class specifier are effective (C90 6.5.1, C99 6.7.1).'
13259 The `register' specifier affects code generation only in these
13262 * When used as part of the register variable extension, see
13263 *Note Explicit Reg Vars::.
13265 * When `-O0' is in use, the compiler allocates distinct stack
13266 memory for all variables that do not have the `register'
13267 storage-class specifier; if `register' is specified, the
13268 variable may have a shorter lifespan than the code would
13269 indicate and may never be placed in memory.
13271 * On some rare x86 targets, `setjmp' doesn't save the registers
13272 in all circumstances. In those cases, GCC doesn't allocate
13273 any variables in registers unless they are marked `register'.
13276 * `The extent to which suggestions made by using the inline function
13277 specifier are effective (C99 6.7.4).'
13279 GCC will not inline any functions if the `-fno-inline' option is
13280 used or if `-O0' is used. Otherwise, GCC may still be unable to
13281 inline a function for many reasons; the `-Winline' option may be
13282 used to determine if a function has not been inlined and why not.
13286 File: gcc.info, Node: Structures unions enumerations and bit-fields implementation, Next: Qualifiers implementation, Prev: Hints implementation, Up: C Implementation
13288 4.9 Structures, unions, enumerations, and bit-fields
13289 ====================================================
13291 * `A member of a union object is accessed using a member of a
13292 different type (C90 6.3.2.3).'
13294 The relevant bytes of the representation of the object are treated
13295 as an object of the type used for the access. This may be a trap
13298 * `Whether a "plain" `int' bit-field is treated as a `signed int'
13299 bit-field or as an `unsigned int' bit-field (C90 6.5.2, C90
13300 6.5.2.1, C99 6.7.2, C99 6.7.2.1).'
13302 By default it is treated as `signed int' but this may be changed
13303 by the `-funsigned-bitfields' option.
13305 * `Allowable bit-field types other than `_Bool', `signed int', and
13306 `unsigned int' (C99 6.7.2.1).'
13308 No other types are permitted in strictly conforming mode.
13310 * `Whether a bit-field can straddle a storage-unit boundary (C90
13311 6.5.2.1, C99 6.7.2.1).'
13315 * `The order of allocation of bit-fields within a unit (C90 6.5.2.1,
13320 * `The alignment of non-bit-field members of structures (C90
13321 6.5.2.1, C99 6.7.2.1).'
13325 * `The integer type compatible with each enumerated type (C90
13326 6.5.2.2, C99 6.7.2.2).'
13328 Normally, the type is `unsigned int' if there are no negative
13329 values in the enumeration, otherwise `int'. If `-fshort-enums' is
13330 specified, then if there are negative values it is the first of
13331 `signed char', `short' and `int' that can represent all the
13332 values, otherwise it is the first of `unsigned char', `unsigned
13333 short' and `unsigned int' that can represent all the values.
13335 On some targets, `-fshort-enums' is the default; this is
13336 determined by the ABI.
13340 File: gcc.info, Node: Qualifiers implementation, Next: Declarators implementation, Prev: Structures unions enumerations and bit-fields implementation, Up: C Implementation
13345 * `What constitutes an access to an object that has
13346 volatile-qualified type (C90 6.5.3, C99 6.7.3).'
13348 *Note When is a Volatile Object Accessed?: Volatiles.
13352 File: gcc.info, Node: Declarators implementation, Next: Statements implementation, Prev: Qualifiers implementation, Up: C Implementation
13357 * `The maximum number of declarators that may modify an arithmetic,
13358 structure or union type (C90 6.5.4).'
13360 GCC is only limited by available memory.
13364 File: gcc.info, Node: Statements implementation, Next: Preprocessing directives implementation, Prev: Declarators implementation, Up: C Implementation
13369 * `The maximum number of `case' values in a `switch' statement (C90
13372 GCC is only limited by available memory.
13376 File: gcc.info, Node: Preprocessing directives implementation, Next: Library functions implementation, Prev: Statements implementation, Up: C Implementation
13378 4.13 Preprocessing directives
13379 =============================
13381 *Note Implementation-defined behavior: (cpp)Implementation-defined
13382 behavior, for details of these aspects of implementation-defined
13385 * `How sequences in both forms of header names are mapped to headers
13386 or external source file names (C90 6.1.7, C99 6.4.7).'
13388 * `Whether the value of a character constant in a constant expression
13389 that controls conditional inclusion matches the value of the same
13390 character constant in the execution character set (C90 6.8.1, C99
13393 * `Whether the value of a single-character character constant in a
13394 constant expression that controls conditional inclusion may have a
13395 negative value (C90 6.8.1, C99 6.10.1).'
13397 * `The places that are searched for an included `<>' delimited
13398 header, and how the places are specified or the header is
13399 identified (C90 6.8.2, C99 6.10.2).'
13401 * `How the named source file is searched for in an included `""'
13402 delimited header (C90 6.8.2, C99 6.10.2).'
13404 * `The method by which preprocessing tokens (possibly resulting from
13405 macro expansion) in a `#include' directive are combined into a
13406 header name (C90 6.8.2, C99 6.10.2).'
13408 * `The nesting limit for `#include' processing (C90 6.8.2, C99
13411 * `Whether the `#' operator inserts a `\' character before the `\'
13412 character that begins a universal character name in a character
13413 constant or string literal (C99 6.10.3.2).'
13415 * `The behavior on each recognized non-`STDC #pragma' directive (C90
13416 6.8.6, C99 6.10.6).'
13418 *Note Pragmas: (cpp)Pragmas, for details of pragmas accepted by
13419 GCC on all targets. *Note Pragmas Accepted by GCC: Pragmas, for
13420 details of target-specific pragmas.
13422 * `The definitions for `__DATE__' and `__TIME__' when respectively,
13423 the date and time of translation are not available (C90 6.8.8, C99
13428 File: gcc.info, Node: Library functions implementation, Next: Architecture implementation, Prev: Preprocessing directives implementation, Up: C Implementation
13430 4.14 Library functions
13431 ======================
13433 The behavior of most of these points are dependent on the implementation
13434 of the C library, and are not defined by GCC itself.
13436 * `The null pointer constant to which the macro `NULL' expands (C90
13439 In `<stddef.h>', `NULL' expands to `((void *)0)'. GCC does not
13440 provide the other headers which define `NULL' and some library
13441 implementations may use other definitions in those headers.
13445 File: gcc.info, Node: Architecture implementation, Next: Locale-specific behavior implementation, Prev: Library functions implementation, Up: C Implementation
13450 * `The values or expressions assigned to the macros specified in the
13451 headers `<float.h>', `<limits.h>', and `<stdint.h>' (C90 and C99
13452 5.2.4.2, C99 7.18.2, C99 7.18.3).'
13456 * `The number, order, and encoding of bytes in any object (when not
13457 explicitly specified in this International Standard) (C99
13462 * `The value of the result of the `sizeof' operator (C90 6.3.3.4,
13469 File: gcc.info, Node: Locale-specific behavior implementation, Prev: Architecture implementation, Up: C Implementation
13471 4.16 Locale-specific behavior
13472 =============================
13474 The behavior of these points are dependent on the implementation of the
13475 C library, and are not defined by GCC itself.
13478 File: gcc.info, Node: C Extensions, Next: C++ Extensions, Prev: C Implementation, Up: Top
13480 5 Extensions to the C Language Family
13481 *************************************
13483 GNU C provides several language features not found in ISO standard C.
13484 (The `-pedantic' option directs GCC to print a warning message if any
13485 of these features is used.) To test for the availability of these
13486 features in conditional compilation, check for a predefined macro
13487 `__GNUC__', which is always defined under GCC.
13489 These extensions are available in C and Objective-C. Most of them are
13490 also available in C++. *Note Extensions to the C++ Language: C++
13491 Extensions, for extensions that apply _only_ to C++.
13493 Some features that are in ISO C99 but not C89 or C++ are also, as
13494 extensions, accepted by GCC in C89 mode and in C++.
13498 * Statement Exprs:: Putting statements and declarations inside expressions.
13499 * Local Labels:: Labels local to a block.
13500 * Labels as Values:: Getting pointers to labels, and computed gotos.
13501 * Nested Functions:: As in Algol and Pascal, lexical scoping of functions.
13502 * Constructing Calls:: Dispatching a call to another function.
13503 * Typeof:: `typeof': referring to the type of an expression.
13504 * Conditionals:: Omitting the middle operand of a `?:' expression.
13505 * Long Long:: Double-word integers---`long long int'.
13506 * Complex:: Data types for complex numbers.
13507 * Hex Floats:: Hexadecimal floating-point constants.
13508 * Zero Length:: Zero-length arrays.
13509 * Variable Length:: Arrays whose length is computed at run time.
13510 * Empty Structures:: Structures with no members.
13511 * Variadic Macros:: Macros with a variable number of arguments.
13512 * Escaped Newlines:: Slightly looser rules for escaped newlines.
13513 * Subscripting:: Any array can be subscripted, even if not an lvalue.
13514 * Pointer Arith:: Arithmetic on `void'-pointers and function pointers.
13515 * Initializers:: Non-constant initializers.
13516 * Compound Literals:: Compound literals give structures, unions
13517 or arrays as values.
13518 * Designated Inits:: Labeling elements of initializers.
13519 * Cast to Union:: Casting to union type from any member of the union.
13520 * Case Ranges:: `case 1 ... 9' and such.
13521 * Mixed Declarations:: Mixing declarations and code.
13522 * Function Attributes:: Declaring that functions have no side effects,
13523 or that they can never return.
13524 * Attribute Syntax:: Formal syntax for attributes.
13525 * Function Prototypes:: Prototype declarations and old-style definitions.
13526 * C++ Comments:: C++ comments are recognized.
13527 * Dollar Signs:: Dollar sign is allowed in identifiers.
13528 * Character Escapes:: `\e' stands for the character <ESC>.
13529 * Variable Attributes:: Specifying attributes of variables.
13530 * Type Attributes:: Specifying attributes of types.
13531 * Alignment:: Inquiring about the alignment of a type or variable.
13532 * Inline:: Defining inline functions (as fast as macros).
13533 * Extended Asm:: Assembler instructions with C expressions as operands.
13534 (With them you can define ``built-in'' functions.)
13535 * Constraints:: Constraints for asm operands
13536 * Asm Labels:: Specifying the assembler name to use for a C symbol.
13537 * Explicit Reg Vars:: Defining variables residing in specified registers.
13538 * Alternate Keywords:: `__const__', `__asm__', etc., for header files.
13539 * Incomplete Enums:: `enum foo;', with details to follow.
13540 * Function Names:: Printable strings which are the name of the current
13542 * Return Address:: Getting the return or frame address of a function.
13543 * Vector Extensions:: Using vector instructions through built-in functions.
13544 * Offsetof:: Special syntax for implementing `offsetof'.
13545 * Atomic Builtins:: Built-in functions for atomic memory access.
13546 * Object Size Checking:: Built-in functions for limited buffer overflow
13548 * Other Builtins:: Other built-in functions.
13549 * Target Builtins:: Built-in functions specific to particular targets.
13550 * Target Format Checks:: Format checks specific to particular targets.
13551 * Pragmas:: Pragmas accepted by GCC.
13552 * Unnamed Fields:: Unnamed struct/union fields within structs/unions.
13553 * Thread-Local:: Per-thread variables.
13556 File: gcc.info, Node: Statement Exprs, Next: Local Labels, Up: C Extensions
13558 5.1 Statements and Declarations in Expressions
13559 ==============================================
13561 A compound statement enclosed in parentheses may appear as an expression
13562 in GNU C. This allows you to use loops, switches, and local variables
13563 within an expression.
13565 Recall that a compound statement is a sequence of statements surrounded
13566 by braces; in this construct, parentheses go around the braces. For
13569 ({ int y = foo (); int z;
13574 is a valid (though slightly more complex than necessary) expression for
13575 the absolute value of `foo ()'.
13577 The last thing in the compound statement should be an expression
13578 followed by a semicolon; the value of this subexpression serves as the
13579 value of the entire construct. (If you use some other kind of statement
13580 last within the braces, the construct has type `void', and thus
13581 effectively no value.)
13583 This feature is especially useful in making macro definitions "safe"
13584 (so that they evaluate each operand exactly once). For example, the
13585 "maximum" function is commonly defined as a macro in standard C as
13588 #define max(a,b) ((a) > (b) ? (a) : (b))
13590 But this definition computes either A or B twice, with bad results if
13591 the operand has side effects. In GNU C, if you know the type of the
13592 operands (here taken as `int'), you can define the macro safely as
13595 #define maxint(a,b) \
13596 ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
13598 Embedded statements are not allowed in constant expressions, such as
13599 the value of an enumeration constant, the width of a bit-field, or the
13600 initial value of a static variable.
13602 If you don't know the type of the operand, you can still do this, but
13603 you must use `typeof' (*note Typeof::).
13605 In G++, the result value of a statement expression undergoes array and
13606 function pointer decay, and is returned by value to the enclosing
13607 expression. For instance, if `A' is a class, then
13613 will construct a temporary `A' object to hold the result of the
13614 statement expression, and that will be used to invoke `Foo'. Therefore
13615 the `this' pointer observed by `Foo' will not be the address of `a'.
13617 Any temporaries created within a statement within a statement
13618 expression will be destroyed at the statement's end. This makes
13619 statement expressions inside macros slightly different from function
13620 calls. In the latter case temporaries introduced during argument
13621 evaluation will be destroyed at the end of the statement that includes
13622 the function call. In the statement expression case they will be
13623 destroyed during the statement expression. For instance,
13625 #define macro(a) ({__typeof__(a) b = (a); b + 3; })
13626 template<typename T> T function(T a) { T b = a; return b + 3; }
13634 will have different places where temporaries are destroyed. For the
13635 `macro' case, the temporary `X' will be destroyed just after the
13636 initialization of `b'. In the `function' case that temporary will be
13637 destroyed when the function returns.
13639 These considerations mean that it is probably a bad idea to use
13640 statement-expressions of this form in header files that are designed to
13641 work with C++. (Note that some versions of the GNU C Library contained
13642 header files using statement-expression that lead to precisely this
13645 Jumping into a statement expression with `goto' or using a `switch'
13646 statement outside the statement expression with a `case' or `default'
13647 label inside the statement expression is not permitted. Jumping into a
13648 statement expression with a computed `goto' (*note Labels as Values::)
13649 yields undefined behavior. Jumping out of a statement expression is
13650 permitted, but if the statement expression is part of a larger
13651 expression then it is unspecified which other subexpressions of that
13652 expression have been evaluated except where the language definition
13653 requires certain subexpressions to be evaluated before or after the
13654 statement expression. In any case, as with a function call the
13655 evaluation of a statement expression is not interleaved with the
13656 evaluation of other parts of the containing expression. For example,
13658 foo (), (({ bar1 (); goto a; 0; }) + bar2 ()), baz();
13660 will call `foo' and `bar1' and will not call `baz' but may or may not
13661 call `bar2'. If `bar2' is called, it will be called after `foo' and
13665 File: gcc.info, Node: Local Labels, Next: Labels as Values, Prev: Statement Exprs, Up: C Extensions
13667 5.2 Locally Declared Labels
13668 ===========================
13670 GCC allows you to declare "local labels" in any nested block scope. A
13671 local label is just like an ordinary label, but you can only reference
13672 it (with a `goto' statement, or by taking its address) within the block
13673 in which it was declared.
13675 A local label declaration looks like this:
13681 __label__ LABEL1, LABEL2, /* ... */;
13683 Local label declarations must come at the beginning of the block,
13684 before any ordinary declarations or statements.
13686 The label declaration defines the label _name_, but does not define
13687 the label itself. You must do this in the usual way, with `LABEL:',
13688 within the statements of the statement expression.
13690 The local label feature is useful for complex macros. If a macro
13691 contains nested loops, a `goto' can be useful for breaking out of them.
13692 However, an ordinary label whose scope is the whole function cannot be
13693 used: if the macro can be expanded several times in one function, the
13694 label will be multiply defined in that function. A local label avoids
13695 this problem. For example:
13697 #define SEARCH(value, array, target) \
13700 typeof (target) _SEARCH_target = (target); \
13701 typeof (*(array)) *_SEARCH_array = (array); \
13704 for (i = 0; i < max; i++) \
13705 for (j = 0; j < max; j++) \
13706 if (_SEARCH_array[i][j] == _SEARCH_target) \
13707 { (value) = i; goto found; } \
13712 This could also be written using a statement-expression:
13714 #define SEARCH(array, target) \
13717 typeof (target) _SEARCH_target = (target); \
13718 typeof (*(array)) *_SEARCH_array = (array); \
13721 for (i = 0; i < max; i++) \
13722 for (j = 0; j < max; j++) \
13723 if (_SEARCH_array[i][j] == _SEARCH_target) \
13724 { value = i; goto found; } \
13730 Local label declarations also make the labels they declare visible to
13731 nested functions, if there are any. *Note Nested Functions::, for
13735 File: gcc.info, Node: Labels as Values, Next: Nested Functions, Prev: Local Labels, Up: C Extensions
13737 5.3 Labels as Values
13738 ====================
13740 You can get the address of a label defined in the current function (or
13741 a containing function) with the unary operator `&&'. The value has
13742 type `void *'. This value is a constant and can be used wherever a
13743 constant of that type is valid. For example:
13749 To use these values, you need to be able to jump to one. This is done
13750 with the computed goto statement(1), `goto *EXP;'. For example,
13754 Any expression of type `void *' is allowed.
13756 One way of using these constants is in initializing a static array that
13757 will serve as a jump table:
13759 static void *array[] = { &&foo, &&bar, &&hack };
13761 Then you can select a label with indexing, like this:
13765 Note that this does not check whether the subscript is in bounds--array
13766 indexing in C never does that.
13768 Such an array of label values serves a purpose much like that of the
13769 `switch' statement. The `switch' statement is cleaner, so use that
13770 rather than an array unless the problem does not fit a `switch'
13771 statement very well.
13773 Another use of label values is in an interpreter for threaded code.
13774 The labels within the interpreter function can be stored in the
13775 threaded code for super-fast dispatching.
13777 You may not use this mechanism to jump to code in a different function.
13778 If you do that, totally unpredictable things will happen. The best way
13779 to avoid this is to store the label address only in automatic variables
13780 and never pass it as an argument.
13782 An alternate way to write the above example is
13784 static const int array[] = { &&foo - &&foo, &&bar - &&foo,
13786 goto *(&&foo + array[i]);
13788 This is more friendly to code living in shared libraries, as it reduces
13789 the number of dynamic relocations that are needed, and by consequence,
13790 allows the data to be read-only.
13792 ---------- Footnotes ----------
13794 (1) The analogous feature in Fortran is called an assigned goto, but
13795 that name seems inappropriate in C, where one can do more than simply
13796 store label addresses in label variables.
13799 File: gcc.info, Node: Nested Functions, Next: Constructing Calls, Prev: Labels as Values, Up: C Extensions
13801 5.4 Nested Functions
13802 ====================
13804 A "nested function" is a function defined inside another function.
13805 (Nested functions are not supported for GNU C++.) The nested function's
13806 name is local to the block where it is defined. For example, here we
13807 define a nested function named `square', and call it twice:
13809 foo (double a, double b)
13811 double square (double z) { return z * z; }
13813 return square (a) + square (b);
13816 The nested function can access all the variables of the containing
13817 function that are visible at the point of its definition. This is
13818 called "lexical scoping". For example, here we show a nested function
13819 which uses an inherited variable named `offset':
13821 bar (int *array, int offset, int size)
13823 int access (int *array, int index)
13824 { return array[index + offset]; }
13827 for (i = 0; i < size; i++)
13828 /* ... */ access (array, i) /* ... */
13831 Nested function definitions are permitted within functions in the
13832 places where variable definitions are allowed; that is, in any block,
13833 mixed with the other declarations and statements in the block.
13835 It is possible to call the nested function from outside the scope of
13836 its name by storing its address or passing the address to another
13839 hack (int *array, int size)
13841 void store (int index, int value)
13842 { array[index] = value; }
13844 intermediate (store, size);
13847 Here, the function `intermediate' receives the address of `store' as
13848 an argument. If `intermediate' calls `store', the arguments given to
13849 `store' are used to store into `array'. But this technique works only
13850 so long as the containing function (`hack', in this example) does not
13853 If you try to call the nested function through its address after the
13854 containing function has exited, all hell will break loose. If you try
13855 to call it after a containing scope level has exited, and if it refers
13856 to some of the variables that are no longer in scope, you may be lucky,
13857 but it's not wise to take the risk. If, however, the nested function
13858 does not refer to anything that has gone out of scope, you should be
13861 GCC implements taking the address of a nested function using a
13862 technique called "trampolines". A paper describing them is available as
13864 `http://people.debian.org/~aaronl/Usenix88-lexic.pdf'.
13866 A nested function can jump to a label inherited from a containing
13867 function, provided the label was explicitly declared in the containing
13868 function (*note Local Labels::). Such a jump returns instantly to the
13869 containing function, exiting the nested function which did the `goto'
13870 and any intermediate functions as well. Here is an example:
13872 bar (int *array, int offset, int size)
13875 int access (int *array, int index)
13879 return array[index + offset];
13883 for (i = 0; i < size; i++)
13884 /* ... */ access (array, i) /* ... */
13888 /* Control comes here from `access'
13889 if it detects an error. */
13894 A nested function always has no linkage. Declaring one with `extern'
13895 or `static' is erroneous. If you need to declare the nested function
13896 before its definition, use `auto' (which is otherwise meaningless for
13897 function declarations).
13899 bar (int *array, int offset, int size)
13902 auto int access (int *, int);
13904 int access (int *array, int index)
13908 return array[index + offset];
13914 File: gcc.info, Node: Constructing Calls, Next: Typeof, Prev: Nested Functions, Up: C Extensions
13916 5.5 Constructing Function Calls
13917 ===============================
13919 Using the built-in functions described below, you can record the
13920 arguments a function received, and call another function with the same
13921 arguments, without knowing the number or types of the arguments.
13923 You can also record the return value of that function call, and later
13924 return that value, without knowing what data type the function tried to
13925 return (as long as your caller expects that data type).
13927 However, these built-in functions may interact badly with some
13928 sophisticated features or other extensions of the language. It is,
13929 therefore, not recommended to use them outside very simple functions
13930 acting as mere forwarders for their arguments.
13932 -- Built-in Function: void * __builtin_apply_args ()
13933 This built-in function returns a pointer to data describing how to
13934 perform a call with the same arguments as were passed to the
13937 The function saves the arg pointer register, structure value
13938 address, and all registers that might be used to pass arguments to
13939 a function into a block of memory allocated on the stack. Then it
13940 returns the address of that block.
13942 -- Built-in Function: void * __builtin_apply (void (*FUNCTION)(), void
13943 *ARGUMENTS, size_t SIZE)
13944 This built-in function invokes FUNCTION with a copy of the
13945 parameters described by ARGUMENTS and SIZE.
13947 The value of ARGUMENTS should be the value returned by
13948 `__builtin_apply_args'. The argument SIZE specifies the size of
13949 the stack argument data, in bytes.
13951 This function returns a pointer to data describing how to return
13952 whatever value was returned by FUNCTION. The data is saved in a
13953 block of memory allocated on the stack.
13955 It is not always simple to compute the proper value for SIZE. The
13956 value is used by `__builtin_apply' to compute the amount of data
13957 that should be pushed on the stack and copied from the incoming
13960 -- Built-in Function: void __builtin_return (void *RESULT)
13961 This built-in function returns the value described by RESULT from
13962 the containing function. You should specify, for RESULT, a value
13963 returned by `__builtin_apply'.
13966 File: gcc.info, Node: Typeof, Next: Conditionals, Prev: Constructing Calls, Up: C Extensions
13968 5.6 Referring to a Type with `typeof'
13969 =====================================
13971 Another way to refer to the type of an expression is with `typeof'.
13972 The syntax of using of this keyword looks like `sizeof', but the
13973 construct acts semantically like a type name defined with `typedef'.
13975 There are two ways of writing the argument to `typeof': with an
13976 expression or with a type. Here is an example with an expression:
13980 This assumes that `x' is an array of pointers to functions; the type
13981 described is that of the values of the functions.
13983 Here is an example with a typename as the argument:
13987 Here the type described is that of pointers to `int'.
13989 If you are writing a header file that must work when included in ISO C
13990 programs, write `__typeof__' instead of `typeof'. *Note Alternate
13993 A `typeof'-construct can be used anywhere a typedef name could be
13994 used. For example, you can use it in a declaration, in a cast, or
13995 inside of `sizeof' or `typeof'.
13997 `typeof' is often useful in conjunction with the
13998 statements-within-expressions feature. Here is how the two together can
13999 be used to define a safe "maximum" macro that operates on any
14000 arithmetic type and evaluates each of its arguments exactly once:
14003 ({ typeof (a) _a = (a); \
14004 typeof (b) _b = (b); \
14005 _a > _b ? _a : _b; })
14007 The reason for using names that start with underscores for the local
14008 variables is to avoid conflicts with variable names that occur within
14009 the expressions that are substituted for `a' and `b'. Eventually we
14010 hope to design a new form of declaration syntax that allows you to
14011 declare variables whose scopes start only after their initializers;
14012 this will be a more reliable way to prevent such conflicts.
14014 Some more examples of the use of `typeof':
14016 * This declares `y' with the type of what `x' points to.
14020 * This declares `y' as an array of such values.
14024 * This declares `y' as an array of pointers to characters:
14026 typeof (typeof (char *)[4]) y;
14028 It is equivalent to the following traditional C declaration:
14032 To see the meaning of the declaration using `typeof', and why it
14033 might be a useful way to write, rewrite it with these macros:
14035 #define pointer(T) typeof(T *)
14036 #define array(T, N) typeof(T [N])
14038 Now the declaration can be rewritten this way:
14040 array (pointer (char), 4) y;
14042 Thus, `array (pointer (char), 4)' is the type of arrays of 4
14043 pointers to `char'.
14045 _Compatibility Note:_ In addition to `typeof', GCC 2 supported a more
14046 limited extension which permitted one to write
14050 with the effect of declaring T to have the type of the expression EXPR.
14051 This extension does not work with GCC 3 (versions between 3.0 and 3.2
14052 will crash; 3.2.1 and later give an error). Code which relies on it
14053 should be rewritten to use `typeof':
14055 typedef typeof(EXPR) T;
14057 This will work with all versions of GCC.
14060 File: gcc.info, Node: Conditionals, Next: Long Long, Prev: Typeof, Up: C Extensions
14062 5.7 Conditionals with Omitted Operands
14063 ======================================
14065 The middle operand in a conditional expression may be omitted. Then if
14066 the first operand is nonzero, its value is the value of the conditional
14069 Therefore, the expression
14073 has the value of `x' if that is nonzero; otherwise, the value of `y'.
14075 This example is perfectly equivalent to
14079 In this simple case, the ability to omit the middle operand is not
14080 especially useful. When it becomes useful is when the first operand
14081 does, or may (if it is a macro argument), contain a side effect. Then
14082 repeating the operand in the middle would perform the side effect
14083 twice. Omitting the middle operand uses the value already computed
14084 without the undesirable effects of recomputing it.
14087 File: gcc.info, Node: Long Long, Next: Complex, Prev: Conditionals, Up: C Extensions
14089 5.8 Double-Word Integers
14090 ========================
14092 ISO C99 supports data types for integers that are at least 64 bits wide,
14093 and as an extension GCC supports them in C89 mode and in C++. Simply
14094 write `long long int' for a signed integer, or `unsigned long long int'
14095 for an unsigned integer. To make an integer constant of type `long
14096 long int', add the suffix `LL' to the integer. To make an integer
14097 constant of type `unsigned long long int', add the suffix `ULL' to the
14100 You can use these types in arithmetic like any other integer types.
14101 Addition, subtraction, and bitwise boolean operations on these types
14102 are open-coded on all types of machines. Multiplication is open-coded
14103 if the machine supports fullword-to-doubleword a widening multiply
14104 instruction. Division and shifts are open-coded only on machines that
14105 provide special support. The operations that are not open-coded use
14106 special library routines that come with GCC.
14108 There may be pitfalls when you use `long long' types for function
14109 arguments, unless you declare function prototypes. If a function
14110 expects type `int' for its argument, and you pass a value of type `long
14111 long int', confusion will result because the caller and the subroutine
14112 will disagree about the number of bytes for the argument. Likewise, if
14113 the function expects `long long int' and you pass `int'. The best way
14114 to avoid such problems is to use prototypes.
14117 File: gcc.info, Node: Complex, Next: Hex Floats, Prev: Long Long, Up: C Extensions
14119 5.9 Complex Numbers
14120 ===================
14122 ISO C99 supports complex floating data types, and as an extension GCC
14123 supports them in C89 mode and in C++, and supports complex integer data
14124 types which are not part of ISO C99. You can declare complex types
14125 using the keyword `_Complex'. As an extension, the older GNU keyword
14126 `__complex__' is also supported.
14128 For example, `_Complex double x;' declares `x' as a variable whose
14129 real part and imaginary part are both of type `double'. `_Complex
14130 short int y;' declares `y' to have real and imaginary parts of type
14131 `short int'; this is not likely to be useful, but it shows that the set
14132 of complex types is complete.
14134 To write a constant with a complex data type, use the suffix `i' or
14135 `j' (either one; they are equivalent). For example, `2.5fi' has type
14136 `_Complex float' and `3i' has type `_Complex int'. Such a constant
14137 always has a pure imaginary value, but you can form any complex value
14138 you like by adding one to a real constant. This is a GNU extension; if
14139 you have an ISO C99 conforming C library (such as GNU libc), and want
14140 to construct complex constants of floating type, you should include
14141 `<complex.h>' and use the macros `I' or `_Complex_I' instead.
14143 To extract the real part of a complex-valued expression EXP, write
14144 `__real__ EXP'. Likewise, use `__imag__' to extract the imaginary
14145 part. This is a GNU extension; for values of floating type, you should
14146 use the ISO C99 functions `crealf', `creal', `creall', `cimagf',
14147 `cimag' and `cimagl', declared in `<complex.h>' and also provided as
14148 built-in functions by GCC.
14150 The operator `~' performs complex conjugation when used on a value
14151 with a complex type. This is a GNU extension; for values of floating
14152 type, you should use the ISO C99 functions `conjf', `conj' and `conjl',
14153 declared in `<complex.h>' and also provided as built-in functions by
14156 GCC can allocate complex automatic variables in a noncontiguous
14157 fashion; it's even possible for the real part to be in a register while
14158 the imaginary part is on the stack (or vice-versa). Only the DWARF2
14159 debug info format can represent this, so use of DWARF2 is recommended.
14160 If you are using the stabs debug info format, GCC describes a
14161 noncontiguous complex variable as if it were two separate variables of
14162 noncomplex type. If the variable's actual name is `foo', the two
14163 fictitious variables are named `foo$real' and `foo$imag'. You can
14164 examine and set these two fictitious variables with your debugger.
14167 File: gcc.info, Node: Hex Floats, Next: Zero Length, Prev: Complex, Up: C Extensions
14172 ISO C99 supports floating-point numbers written not only in the usual
14173 decimal notation, such as `1.55e1', but also numbers such as `0x1.fp3'
14174 written in hexadecimal format. As a GNU extension, GCC supports this
14175 in C89 mode (except in some cases when strictly conforming) and in C++.
14176 In that format the `0x' hex introducer and the `p' or `P' exponent
14177 field are mandatory. The exponent is a decimal number that indicates
14178 the power of 2 by which the significant part will be multiplied. Thus
14179 `0x1.f' is 1 15/16, `p3' multiplies it by 8, and the value of `0x1.fp3'
14180 is the same as `1.55e1'.
14182 Unlike for floating-point numbers in the decimal notation the exponent
14183 is always required in the hexadecimal notation. Otherwise the compiler
14184 would not be able to resolve the ambiguity of, e.g., `0x1.f'. This
14185 could mean `1.0f' or `1.9375' since `f' is also the extension for
14186 floating-point constants of type `float'.
14189 File: gcc.info, Node: Zero Length, Next: Variable Length, Prev: Hex Floats, Up: C Extensions
14191 5.11 Arrays of Length Zero
14192 ==========================
14194 Zero-length arrays are allowed in GNU C. They are very useful as the
14195 last element of a structure which is really a header for a
14196 variable-length object:
14203 struct line *thisline = (struct line *)
14204 malloc (sizeof (struct line) + this_length);
14205 thisline->length = this_length;
14207 In ISO C90, you would have to give `contents' a length of 1, which
14208 means either you waste space or complicate the argument to `malloc'.
14210 In ISO C99, you would use a "flexible array member", which is slightly
14211 different in syntax and semantics:
14213 * Flexible array members are written as `contents[]' without the `0'.
14215 * Flexible array members have incomplete type, and so the `sizeof'
14216 operator may not be applied. As a quirk of the original
14217 implementation of zero-length arrays, `sizeof' evaluates to zero.
14219 * Flexible array members may only appear as the last member of a
14220 `struct' that is otherwise non-empty.
14222 * A structure containing a flexible array member, or a union
14223 containing such a structure (possibly recursively), may not be a
14224 member of a structure or an element of an array. (However, these
14225 uses are permitted by GCC as extensions.)
14227 GCC versions before 3.0 allowed zero-length arrays to be statically
14228 initialized, as if they were flexible arrays. In addition to those
14229 cases that were useful, it also allowed initializations in situations
14230 that would corrupt later data. Non-empty initialization of zero-length
14231 arrays is now treated like any case where there are more initializer
14232 elements than the array holds, in that a suitable warning about "excess
14233 elements in array" is given, and the excess elements (all of them, in
14234 this case) are ignored.
14236 Instead GCC allows static initialization of flexible array members.
14237 This is equivalent to defining a new structure containing the original
14238 structure followed by an array of sufficient size to contain the data.
14239 I.e. in the following, `f1' is constructed as if it were declared like
14244 } f1 = { 1, { 2, 3, 4 } };
14247 struct f1 f1; int data[3];
14248 } f2 = { { 1 }, { 2, 3, 4 } };
14250 The convenience of this extension is that `f1' has the desired type,
14251 eliminating the need to consistently refer to `f2.f1'.
14253 This has symmetry with normal static arrays, in that an array of
14254 unknown size is also written with `[]'.
14256 Of course, this extension only makes sense if the extra data comes at
14257 the end of a top-level object, as otherwise we would be overwriting
14258 data at subsequent offsets. To avoid undue complication and confusion
14259 with initialization of deeply nested arrays, we simply disallow any
14260 non-empty initialization except when the structure is the top-level
14261 object. For example:
14263 struct foo { int x; int y[]; };
14264 struct bar { struct foo z; };
14266 struct foo a = { 1, { 2, 3, 4 } }; // Valid.
14267 struct bar b = { { 1, { 2, 3, 4 } } }; // Invalid.
14268 struct bar c = { { 1, { } } }; // Valid.
14269 struct foo d[1] = { { 1 { 2, 3, 4 } } }; // Invalid.
14272 File: gcc.info, Node: Empty Structures, Next: Variadic Macros, Prev: Variable Length, Up: C Extensions
14274 5.12 Structures With No Members
14275 ===============================
14277 GCC permits a C structure to have no members:
14282 The structure will have size zero. In C++, empty structures are part
14283 of the language. G++ treats empty structures as if they had a single
14284 member of type `char'.
14287 File: gcc.info, Node: Variable Length, Next: Empty Structures, Prev: Zero Length, Up: C Extensions
14289 5.13 Arrays of Variable Length
14290 ==============================
14292 Variable-length automatic arrays are allowed in ISO C99, and as an
14293 extension GCC accepts them in C89 mode and in C++. (However, GCC's
14294 implementation of variable-length arrays does not yet conform in detail
14295 to the ISO C99 standard.) These arrays are declared like any other
14296 automatic arrays, but with a length that is not a constant expression.
14297 The storage is allocated at the point of declaration and deallocated
14298 when the brace-level is exited. For example:
14301 concat_fopen (char *s1, char *s2, char *mode)
14303 char str[strlen (s1) + strlen (s2) + 1];
14306 return fopen (str, mode);
14309 Jumping or breaking out of the scope of the array name deallocates the
14310 storage. Jumping into the scope is not allowed; you get an error
14313 You can use the function `alloca' to get an effect much like
14314 variable-length arrays. The function `alloca' is available in many
14315 other C implementations (but not in all). On the other hand,
14316 variable-length arrays are more elegant.
14318 There are other differences between these two methods. Space allocated
14319 with `alloca' exists until the containing _function_ returns. The
14320 space for a variable-length array is deallocated as soon as the array
14321 name's scope ends. (If you use both variable-length arrays and
14322 `alloca' in the same function, deallocation of a variable-length array
14323 will also deallocate anything more recently allocated with `alloca'.)
14325 You can also use variable-length arrays as arguments to functions:
14328 tester (int len, char data[len][len])
14333 The length of an array is computed once when the storage is allocated
14334 and is remembered for the scope of the array in case you access it with
14337 If you want to pass the array first and the length afterward, you can
14338 use a forward declaration in the parameter list--another GNU extension.
14341 tester (int len; char data[len][len], int len)
14346 The `int len' before the semicolon is a "parameter forward
14347 declaration", and it serves the purpose of making the name `len' known
14348 when the declaration of `data' is parsed.
14350 You can write any number of such parameter forward declarations in the
14351 parameter list. They can be separated by commas or semicolons, but the
14352 last one must end with a semicolon, which is followed by the "real"
14353 parameter declarations. Each forward declaration must match a "real"
14354 declaration in parameter name and data type. ISO C99 does not support
14355 parameter forward declarations.
14358 File: gcc.info, Node: Variadic Macros, Next: Escaped Newlines, Prev: Empty Structures, Up: C Extensions
14360 5.14 Macros with a Variable Number of Arguments.
14361 ================================================
14363 In the ISO C standard of 1999, a macro can be declared to accept a
14364 variable number of arguments much as a function can. The syntax for
14365 defining the macro is similar to that of a function. Here is an
14368 #define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
14370 Here `...' is a "variable argument". In the invocation of such a
14371 macro, it represents the zero or more tokens until the closing
14372 parenthesis that ends the invocation, including any commas. This set of
14373 tokens replaces the identifier `__VA_ARGS__' in the macro body wherever
14374 it appears. See the CPP manual for more information.
14376 GCC has long supported variadic macros, and used a different syntax
14377 that allowed you to give a name to the variable arguments just like any
14378 other argument. Here is an example:
14380 #define debug(format, args...) fprintf (stderr, format, args)
14382 This is in all ways equivalent to the ISO C example above, but arguably
14383 more readable and descriptive.
14385 GNU CPP has two further variadic macro extensions, and permits them to
14386 be used with either of the above forms of macro definition.
14388 In standard C, you are not allowed to leave the variable argument out
14389 entirely; but you are allowed to pass an empty argument. For example,
14390 this invocation is invalid in ISO C, because there is no comma after
14393 debug ("A message")
14395 GNU CPP permits you to completely omit the variable arguments in this
14396 way. In the above examples, the compiler would complain, though since
14397 the expansion of the macro still has the extra comma after the format
14400 To help solve this problem, CPP behaves specially for variable
14401 arguments used with the token paste operator, `##'. If instead you
14404 #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
14406 and if the variable arguments are omitted or empty, the `##' operator
14407 causes the preprocessor to remove the comma before it. If you do
14408 provide some variable arguments in your macro invocation, GNU CPP does
14409 not complain about the paste operation and instead places the variable
14410 arguments after the comma. Just like any other pasted macro argument,
14411 these arguments are not macro expanded.
14414 File: gcc.info, Node: Escaped Newlines, Next: Subscripting, Prev: Variadic Macros, Up: C Extensions
14416 5.15 Slightly Looser Rules for Escaped Newlines
14417 ===============================================
14419 Recently, the preprocessor has relaxed its treatment of escaped
14420 newlines. Previously, the newline had to immediately follow a
14421 backslash. The current implementation allows whitespace in the form of
14422 spaces, horizontal and vertical tabs, and form feeds between the
14423 backslash and the subsequent newline. The preprocessor issues a
14424 warning, but treats it as a valid escaped newline and combines the two
14425 lines to form a single logical line. This works within comments and
14426 tokens, as well as between tokens. Comments are _not_ treated as
14427 whitespace for the purposes of this relaxation, since they have not yet
14428 been replaced with spaces.
14431 File: gcc.info, Node: Subscripting, Next: Pointer Arith, Prev: Escaped Newlines, Up: C Extensions
14433 5.16 Non-Lvalue Arrays May Have Subscripts
14434 ==========================================
14436 In ISO C99, arrays that are not lvalues still decay to pointers, and
14437 may be subscripted, although they may not be modified or used after the
14438 next sequence point and the unary `&' operator may not be applied to
14439 them. As an extension, GCC allows such arrays to be subscripted in C89
14440 mode, though otherwise they do not decay to pointers outside C99 mode.
14441 For example, this is valid in GNU C though not valid in C89:
14443 struct foo {int a[4];};
14449 return f().a[index];
14453 File: gcc.info, Node: Pointer Arith, Next: Initializers, Prev: Subscripting, Up: C Extensions
14455 5.17 Arithmetic on `void'- and Function-Pointers
14456 ================================================
14458 In GNU C, addition and subtraction operations are supported on pointers
14459 to `void' and on pointers to functions. This is done by treating the
14460 size of a `void' or of a function as 1.
14462 A consequence of this is that `sizeof' is also allowed on `void' and
14463 on function types, and returns 1.
14465 The option `-Wpointer-arith' requests a warning if these extensions
14469 File: gcc.info, Node: Initializers, Next: Compound Literals, Prev: Pointer Arith, Up: C Extensions
14471 5.18 Non-Constant Initializers
14472 ==============================
14474 As in standard C++ and ISO C99, the elements of an aggregate
14475 initializer for an automatic variable are not required to be constant
14476 expressions in GNU C. Here is an example of an initializer with
14477 run-time varying elements:
14479 foo (float f, float g)
14481 float beat_freqs[2] = { f-g, f+g };
14486 File: gcc.info, Node: Compound Literals, Next: Designated Inits, Prev: Initializers, Up: C Extensions
14488 5.19 Compound Literals
14489 ======================
14491 ISO C99 supports compound literals. A compound literal looks like a
14492 cast containing an initializer. Its value is an object of the type
14493 specified in the cast, containing the elements specified in the
14494 initializer; it is an lvalue. As an extension, GCC supports compound
14495 literals in C89 mode and in C++.
14497 Usually, the specified type is a structure. Assume that `struct foo'
14498 and `structure' are declared as shown:
14500 struct foo {int a; char b[2];} structure;
14502 Here is an example of constructing a `struct foo' with a compound
14505 structure = ((struct foo) {x + y, 'a', 0});
14507 This is equivalent to writing the following:
14510 struct foo temp = {x + y, 'a', 0};
14514 You can also construct an array. If all the elements of the compound
14515 literal are (made up of) simple constant expressions, suitable for use
14516 in initializers of objects of static storage duration, then the compound
14517 literal can be coerced to a pointer to its first element and used in
14518 such an initializer, as shown here:
14520 char **foo = (char *[]) { "x", "y", "z" };
14522 Compound literals for scalar types and union types are is also
14523 allowed, but then the compound literal is equivalent to a cast.
14525 As a GNU extension, GCC allows initialization of objects with static
14526 storage duration by compound literals (which is not possible in ISO
14527 C99, because the initializer is not a constant). It is handled as if
14528 the object was initialized only with the bracket enclosed list if
14529 compound literal's and object types match. The initializer list of the
14530 compound literal must be constant. If the object being initialized has
14531 array type of unknown size, the size is determined by compound literal
14534 static struct foo x = (struct foo) {1, 'a', 'b'};
14535 static int y[] = (int []) {1, 2, 3};
14536 static int z[] = (int [3]) {1};
14538 The above lines are equivalent to the following:
14539 static struct foo x = {1, 'a', 'b'};
14540 static int y[] = {1, 2, 3};
14541 static int z[] = {1, 0, 0};
14544 File: gcc.info, Node: Designated Inits, Next: Cast to Union, Prev: Compound Literals, Up: C Extensions
14546 5.20 Designated Initializers
14547 ============================
14549 Standard C89 requires the elements of an initializer to appear in a
14550 fixed order, the same as the order of the elements in the array or
14551 structure being initialized.
14553 In ISO C99 you can give the elements in any order, specifying the array
14554 indices or structure field names they apply to, and GNU C allows this as
14555 an extension in C89 mode as well. This extension is not implemented in
14558 To specify an array index, write `[INDEX] =' before the element value.
14561 int a[6] = { [4] = 29, [2] = 15 };
14565 int a[6] = { 0, 0, 15, 0, 29, 0 };
14567 The index values must be constant expressions, even if the array being
14568 initialized is automatic.
14570 An alternative syntax for this which has been obsolete since GCC 2.5
14571 but GCC still accepts is to write `[INDEX]' before the element value,
14574 To initialize a range of elements to the same value, write `[FIRST ...
14575 LAST] = VALUE'. This is a GNU extension. For example,
14577 int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
14579 If the value in it has side-effects, the side-effects will happen only
14580 once, not for each initialized field by the range initializer.
14582 Note that the length of the array is the highest value specified plus
14585 In a structure initializer, specify the name of a field to initialize
14586 with `.FIELDNAME =' before the element value. For example, given the
14587 following structure,
14589 struct point { int x, y; };
14591 the following initialization
14593 struct point p = { .y = yvalue, .x = xvalue };
14597 struct point p = { xvalue, yvalue };
14599 Another syntax which has the same meaning, obsolete since GCC 2.5, is
14600 `FIELDNAME:', as shown here:
14602 struct point p = { y: yvalue, x: xvalue };
14604 The `[INDEX]' or `.FIELDNAME' is known as a "designator". You can
14605 also use a designator (or the obsolete colon syntax) when initializing
14606 a union, to specify which element of the union should be used. For
14609 union foo { int i; double d; };
14611 union foo f = { .d = 4 };
14613 will convert 4 to a `double' to store it in the union using the second
14614 element. By contrast, casting 4 to type `union foo' would store it
14615 into the union as the integer `i', since it is an integer. (*Note Cast
14618 You can combine this technique of naming elements with ordinary C
14619 initialization of successive elements. Each initializer element that
14620 does not have a designator applies to the next consecutive element of
14621 the array or structure. For example,
14623 int a[6] = { [1] = v1, v2, [4] = v4 };
14627 int a[6] = { 0, v1, v2, 0, v4, 0 };
14629 Labeling the elements of an array initializer is especially useful
14630 when the indices are characters or belong to an `enum' type. For
14633 int whitespace[256]
14634 = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
14635 ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
14637 You can also write a series of `.FIELDNAME' and `[INDEX]' designators
14638 before an `=' to specify a nested subobject to initialize; the list is
14639 taken relative to the subobject corresponding to the closest
14640 surrounding brace pair. For example, with the `struct point'
14643 struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
14645 If the same field is initialized multiple times, it will have value from
14646 the last initialization. If any such overridden initialization has
14647 side-effect, it is unspecified whether the side-effect happens or not.
14648 Currently, GCC will discard them and issue a warning.
14651 File: gcc.info, Node: Case Ranges, Next: Mixed Declarations, Prev: Cast to Union, Up: C Extensions
14656 You can specify a range of consecutive values in a single `case' label,
14661 This has the same effect as the proper number of individual `case'
14662 labels, one for each integer value from LOW to HIGH, inclusive.
14664 This feature is especially useful for ranges of ASCII character codes:
14668 *Be careful:* Write spaces around the `...', for otherwise it may be
14669 parsed wrong when you use it with integer values. For example, write
14679 File: gcc.info, Node: Cast to Union, Next: Case Ranges, Prev: Designated Inits, Up: C Extensions
14681 5.22 Cast to a Union Type
14682 =========================
14684 A cast to union type is similar to other casts, except that the type
14685 specified is a union type. You can specify the type either with `union
14686 TAG' or with a typedef name. A cast to union is actually a constructor
14687 though, not a cast, and hence does not yield an lvalue like normal
14688 casts. (*Note Compound Literals::.)
14690 The types that may be cast to the union type are those of the members
14691 of the union. Thus, given the following union and variables:
14693 union foo { int i; double d; };
14697 both `x' and `y' can be cast to type `union foo'.
14699 Using the cast as the right-hand side of an assignment to a variable of
14700 union type is equivalent to storing in a member of the union:
14704 u = (union foo) x == u.i = x
14705 u = (union foo) y == u.d = y
14707 You can also use the union cast as a function argument:
14709 void hack (union foo);
14711 hack ((union foo) x);
14714 File: gcc.info, Node: Mixed Declarations, Next: Function Attributes, Prev: Case Ranges, Up: C Extensions
14716 5.23 Mixed Declarations and Code
14717 ================================
14719 ISO C99 and ISO C++ allow declarations and code to be freely mixed
14720 within compound statements. As an extension, GCC also allows this in
14721 C89 mode. For example, you could do:
14728 Each identifier is visible from where it is declared until the end of
14729 the enclosing block.
14732 File: gcc.info, Node: Function Attributes, Next: Attribute Syntax, Prev: Mixed Declarations, Up: C Extensions
14734 5.24 Declaring Attributes of Functions
14735 ======================================
14737 In GNU C, you declare certain things about functions called in your
14738 program which help the compiler optimize function calls and check your
14739 code more carefully.
14741 The keyword `__attribute__' allows you to specify special attributes
14742 when making a declaration. This keyword is followed by an attribute
14743 specification inside double parentheses. The following attributes are
14744 currently defined for functions on all targets: `noreturn',
14745 `returns_twice', `noinline', `always_inline', `flatten', `pure',
14746 `const', `nothrow', `sentinel', `format', `format_arg',
14747 `no_instrument_function', `section', `constructor', `destructor',
14748 `used', `unused', `deprecated', `weak', `malloc', `alias',
14749 `warn_unused_result', `nonnull' and `externally_visible'. Several other
14750 attributes are defined for functions on particular target systems.
14751 Other attributes, including `section' are supported for variables
14752 declarations (*note Variable Attributes::) and for types (*note Type
14755 You may also specify attributes with `__' preceding and following each
14756 keyword. This allows you to use them in header files without being
14757 concerned about a possible macro of the same name. For example, you
14758 may use `__noreturn__' instead of `noreturn'.
14760 *Note Attribute Syntax::, for details of the exact syntax for using
14764 The `alias' attribute causes the declaration to be emitted as an
14765 alias for another symbol, which must be specified. For instance,
14767 void __f () { /* Do something. */; }
14768 void f () __attribute__ ((weak, alias ("__f")));
14770 declares `f' to be a weak alias for `__f'. In C++, the mangled
14771 name for the target must be used. It is an error if `__f' is not
14772 defined in the same translation unit.
14774 Not all target machines support this attribute.
14777 Generally, functions are not inlined unless optimization is
14778 specified. For functions declared inline, this attribute inlines
14779 the function even if no optimization level was specified.
14782 Generally, inlining into a function is limited. For a function
14783 marked with this attribute, every call inside this function will
14784 be inlined, if possible. Whether the function itself is
14785 considered for inlining depends on its size and the current
14786 inlining parameters. The `flatten' attribute only works reliably
14787 in unit-at-a-time mode.
14790 On the Intel 386, the `cdecl' attribute causes the compiler to
14791 assume that the calling function will pop off the stack space used
14792 to pass arguments. This is useful to override the effects of the
14796 Many functions do not examine any values except their arguments,
14797 and have no effects except the return value. Basically this is
14798 just slightly more strict class than the `pure' attribute below,
14799 since function is not allowed to read global memory.
14801 Note that a function that has pointer arguments and examines the
14802 data pointed to must _not_ be declared `const'. Likewise, a
14803 function that calls a non-`const' function usually must not be
14804 `const'. It does not make sense for a `const' function to return
14807 The attribute `const' is not implemented in GCC versions earlier
14808 than 2.5. An alternative way to declare that a function has no
14809 side effects, which works in the current version and in some older
14810 versions, is as follows:
14812 typedef int intfn ();
14814 extern const intfn square;
14816 This approach does not work in GNU C++ from 2.6.0 on, since the
14817 language specifies that the `const' must be attached to the return
14822 The `constructor' attribute causes the function to be called
14823 automatically before execution enters `main ()'. Similarly, the
14824 `destructor' attribute causes the function to be called
14825 automatically after `main ()' has completed or `exit ()' has been
14826 called. Functions with these attributes are useful for
14827 initializing data that will be used implicitly during the
14828 execution of the program.
14830 These attributes are not currently implemented for Objective-C.
14833 The `deprecated' attribute results in a warning if the function is
14834 used anywhere in the source file. This is useful when identifying
14835 functions that are expected to be removed in a future version of a
14836 program. The warning also includes the location of the declaration
14837 of the deprecated function, to enable users to easily find further
14838 information about why the function is deprecated, or what they
14839 should do instead. Note that the warnings only occurs for uses:
14841 int old_fn () __attribute__ ((deprecated));
14843 int (*fn_ptr)() = old_fn;
14845 results in a warning on line 3 but not line 2.
14847 The `deprecated' attribute can also be used for variables and
14848 types (*note Variable Attributes::, *note Type Attributes::.)
14851 On Microsoft Windows targets and Symbian OS targets the
14852 `dllexport' attribute causes the compiler to provide a global
14853 pointer to a pointer in a DLL, so that it can be referenced with
14854 the `dllimport' attribute. On Microsoft Windows targets, the
14855 pointer name is formed by combining `_imp__' and the function or
14858 You can use `__declspec(dllexport)' as a synonym for
14859 `__attribute__ ((dllexport))' for compatibility with other
14862 On systems that support the `visibility' attribute, this attribute
14863 also implies "default" visibility, unless a `visibility' attribute
14864 is explicitly specified. You should avoid the use of `dllexport'
14865 with "hidden" or "internal" visibility; in the future GCC may
14866 issue an error for those cases.
14868 Currently, the `dllexport' attribute is ignored for inlined
14869 functions, unless the `-fkeep-inline-functions' flag has been
14870 used. The attribute is also ignored for undefined symbols.
14872 When applied to C++ classes, the attribute marks defined
14873 non-inlined member functions and static data members as exports.
14874 Static consts initialized in-class are not marked unless they are
14875 also defined out-of-class.
14877 For Microsoft Windows targets there are alternative methods for
14878 including the symbol in the DLL's export table such as using a
14879 `.def' file with an `EXPORTS' section or, with GNU ld, using the
14880 `--export-all' linker flag.
14883 On Microsoft Windows and Symbian OS targets, the `dllimport'
14884 attribute causes the compiler to reference a function or variable
14885 via a global pointer to a pointer that is set up by the DLL
14886 exporting the symbol. The attribute implies `extern' storage. On
14887 Microsoft Windows targets, the pointer name is formed by combining
14888 `_imp__' and the function or variable name.
14890 You can use `__declspec(dllimport)' as a synonym for
14891 `__attribute__ ((dllimport))' for compatibility with other
14894 Currently, the attribute is ignored for inlined functions. If the
14895 attribute is applied to a symbol _definition_, an error is
14896 reported. If a symbol previously declared `dllimport' is later
14897 defined, the attribute is ignored in subsequent references, and a
14898 warning is emitted. The attribute is also overridden by a
14899 subsequent declaration as `dllexport'.
14901 When applied to C++ classes, the attribute marks non-inlined
14902 member functions and static data members as imports. However, the
14903 attribute is ignored for virtual methods to allow creation of
14904 vtables using thunks.
14906 On the SH Symbian OS target the `dllimport' attribute also has
14907 another affect--it can cause the vtable and run-time type
14908 information for a class to be exported. This happens when the
14909 class has a dllimport'ed constructor or a non-inline, non-pure
14910 virtual function and, for either of those two conditions, the
14911 class also has a inline constructor or destructor and has a key
14912 function that is defined in the current translation unit.
14914 For Microsoft Windows based targets the use of the `dllimport'
14915 attribute on functions is not necessary, but provides a small
14916 performance benefit by eliminating a thunk in the DLL. The use of
14917 the `dllimport' attribute on imported variables was required on
14918 older versions of the GNU linker, but can now be avoided by
14919 passing the `--enable-auto-import' switch to the GNU linker. As
14920 with functions, using the attribute for a variable eliminates a
14923 One drawback to using this attribute is that a pointer to a
14924 function or variable marked as `dllimport' cannot be used as a
14925 constant address. On Microsoft Windows targets, the attribute can
14926 be disabled for functions by setting the `-mnop-fun-dllimport'
14930 Use this attribute on the H8/300, H8/300H, and H8S to indicate
14931 that the specified variable should be placed into the eight bit
14932 data section. The compiler will generate more efficient code for
14933 certain operations on data in the eight bit data area. Note the
14934 eight bit data area is limited to 256 bytes of data.
14936 You must use GAS and GLD from GNU binutils version 2.7 or later for
14937 this attribute to work correctly.
14939 `exception_handler'
14940 Use this attribute on the Blackfin to indicate that the specified
14941 function is an exception handler. The compiler will generate
14942 function entry and exit sequences suitable for use in an exception
14943 handler when this attribute is present.
14946 On 68HC11 and 68HC12 the `far' attribute causes the compiler to
14947 use a calling convention that takes care of switching memory banks
14948 when entering and leaving a function. This calling convention is
14949 also the default when using the `-mlong-calls' option.
14951 On 68HC12 the compiler will use the `call' and `rtc' instructions
14952 to call and return from a function.
14954 On 68HC11 the compiler will generate a sequence of instructions to
14955 invoke a board-specific routine to switch the memory bank and call
14956 the real function. The board-specific routine simulates a `call'.
14957 At the end of a function, it will jump to a board-specific routine
14958 instead of using `rts'. The board-specific return routine
14959 simulates the `rtc'.
14962 On the Intel 386, the `fastcall' attribute causes the compiler to
14963 pass the first argument (if of integral type) in the register ECX
14964 and the second argument (if of integral type) in the register EDX.
14965 Subsequent and other typed arguments are passed on the stack.
14966 The called function will pop the arguments off the stack. If the
14967 number of arguments is variable all arguments are pushed on the
14970 `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
14971 The `format' attribute specifies that a function takes `printf',
14972 `scanf', `strftime' or `strfmon' style arguments which should be
14973 type-checked against a format string. For example, the
14977 my_printf (void *my_object, const char *my_format, ...)
14978 __attribute__ ((format (printf, 2, 3)));
14980 causes the compiler to check the arguments in calls to `my_printf'
14981 for consistency with the `printf' style format string argument
14984 The parameter ARCHETYPE determines how the format string is
14985 interpreted, and should be `printf', `scanf', `strftime' or
14986 `strfmon'. (You can also use `__printf__', `__scanf__',
14987 `__strftime__' or `__strfmon__'.) The parameter STRING-INDEX
14988 specifies which argument is the format string argument (starting
14989 from 1), while FIRST-TO-CHECK is the number of the first argument
14990 to check against the format string. For functions where the
14991 arguments are not available to be checked (such as `vprintf'),
14992 specify the third parameter as zero. In this case the compiler
14993 only checks the format string for consistency. For `strftime'
14994 formats, the third parameter is required to be zero. Since
14995 non-static C++ methods have an implicit `this' argument, the
14996 arguments of such methods should be counted from two, not one, when
14997 giving values for STRING-INDEX and FIRST-TO-CHECK.
14999 In the example above, the format string (`my_format') is the second
15000 argument of the function `my_print', and the arguments to check
15001 start with the third argument, so the correct parameters for the
15002 format attribute are 2 and 3.
15004 The `format' attribute allows you to identify your own functions
15005 which take format strings as arguments, so that GCC can check the
15006 calls to these functions for errors. The compiler always (unless
15007 `-ffreestanding' or `-fno-builtin' is used) checks formats for the
15008 standard library functions `printf', `fprintf', `sprintf',
15009 `scanf', `fscanf', `sscanf', `strftime', `vprintf', `vfprintf' and
15010 `vsprintf' whenever such warnings are requested (using
15011 `-Wformat'), so there is no need to modify the header file
15012 `stdio.h'. In C99 mode, the functions `snprintf', `vsnprintf',
15013 `vscanf', `vfscanf' and `vsscanf' are also checked. Except in
15014 strictly conforming C standard modes, the X/Open function
15015 `strfmon' is also checked as are `printf_unlocked' and
15016 `fprintf_unlocked'. *Note Options Controlling C Dialect: C
15019 The target may provide additional types of format checks. *Note
15020 Format Checks Specific to Particular Target Machines: Target
15023 `format_arg (STRING-INDEX)'
15024 The `format_arg' attribute specifies that a function takes a format
15025 string for a `printf', `scanf', `strftime' or `strfmon' style
15026 function and modifies it (for example, to translate it into
15027 another language), so the result can be passed to a `printf',
15028 `scanf', `strftime' or `strfmon' style function (with the
15029 remaining arguments to the format function the same as they would
15030 have been for the unmodified string). For example, the
15034 my_dgettext (char *my_domain, const char *my_format)
15035 __attribute__ ((format_arg (2)));
15037 causes the compiler to check the arguments in calls to a `printf',
15038 `scanf', `strftime' or `strfmon' type function, whose format
15039 string argument is a call to the `my_dgettext' function, for
15040 consistency with the format string argument `my_format'. If the
15041 `format_arg' attribute had not been specified, all the compiler
15042 could tell in such calls to format functions would be that the
15043 format string argument is not constant; this would generate a
15044 warning when `-Wformat-nonliteral' is used, but the calls could
15045 not be checked without the attribute.
15047 The parameter STRING-INDEX specifies which argument is the format
15048 string argument (starting from one). Since non-static C++ methods
15049 have an implicit `this' argument, the arguments of such methods
15050 should be counted from two.
15052 The `format-arg' attribute allows you to identify your own
15053 functions which modify format strings, so that GCC can check the
15054 calls to `printf', `scanf', `strftime' or `strfmon' type function
15055 whose operands are a call to one of your own function. The
15056 compiler always treats `gettext', `dgettext', and `dcgettext' in
15057 this manner except when strict ISO C support is requested by
15058 `-ansi' or an appropriate `-std' option, or `-ffreestanding' or
15059 `-fno-builtin' is used. *Note Options Controlling C Dialect: C
15063 Use this attribute on the H8/300, H8/300H, and H8S to indicate
15064 that the specified function should be called through the function
15065 vector. Calling a function through the function vector will
15066 reduce code size, however; the function vector has a limited size
15067 (maximum 128 entries on the H8/300 and 64 entries on the H8/300H
15068 and H8S) and shares space with the interrupt vector.
15070 You must use GAS and GLD from GNU binutils version 2.7 or later for
15071 this attribute to work correctly.
15074 Use this attribute on the ARM, AVR, C4x, CRX, M32C, M32R/D, MS1,
15075 and Xstormy16 ports to indicate that the specified function is an
15076 interrupt handler. The compiler will generate function entry and
15077 exit sequences suitable for use in an interrupt handler when this
15078 attribute is present.
15080 Note, interrupt handlers for the Blackfin, m68k, H8/300, H8/300H,
15081 H8S, and SH processors can be specified via the
15082 `interrupt_handler' attribute.
15084 Note, on the AVR, interrupts will be enabled inside the function.
15086 Note, for the ARM, you can specify the kind of interrupt to be
15087 handled by adding an optional parameter to the interrupt attribute
15090 void f () __attribute__ ((interrupt ("IRQ")));
15092 Permissible values for this parameter are: IRQ, FIQ, SWI, ABORT
15095 `interrupt_handler'
15096 Use this attribute on the Blackfin, m68k, H8/300, H8/300H, H8S,
15097 and SH to indicate that the specified function is an interrupt
15098 handler. The compiler will generate function entry and exit
15099 sequences suitable for use in an interrupt handler when this
15100 attribute is present.
15103 When used together with `interrupt_handler', `exception_handler'
15104 or `nmi_handler', code will be generated to load the stack pointer
15105 from the USP register in the function prologue.
15107 `long_call/short_call'
15108 This attribute specifies how a particular function is called on
15109 ARM. Both attributes override the `-mlong-calls' (*note ARM
15110 Options::) command line switch and `#pragma long_calls' settings.
15111 The `long_call' attribute causes the compiler to always call the
15112 function by first loading its address into a register and then
15113 using the contents of that register. The `short_call' attribute
15114 always places the offset to the function from the call site into
15115 the `BL' instruction directly.
15117 `longcall/shortcall'
15118 On the Blackfin, RS/6000 and PowerPC, the `longcall' attribute
15119 causes the compiler to always call this function via a pointer,
15120 just as it would if the `-mlongcall' option had been specified.
15121 The `shortcall' attribute causes the compiler not to do this.
15122 These attributes override both the `-mlongcall' switch and, on the
15123 RS/6000 and PowerPC, the `#pragma longcall' setting.
15125 *Note RS/6000 and PowerPC Options::, for more information on
15126 whether long calls are necessary.
15129 This attribute specifies how a particular function is called on
15130 MIPS. The attribute overrides the `-mlong-calls' (*note MIPS
15131 Options::) command line switch. This attribute causes the
15132 compiler to always call the function by first loading its address
15133 into a register, and then using the contents of that register.
15136 The `malloc' attribute is used to tell the compiler that a function
15137 may be treated as if any non-`NULL' pointer it returns cannot
15138 alias any other pointer valid when the function returns. This
15139 will often improve optimization. Standard functions with this
15140 property include `malloc' and `calloc'. `realloc'-like functions
15141 have this property as long as the old pointer is never referred to
15142 (including comparing it to the new pointer) after the function
15143 returns a non-`NULL' value.
15145 `model (MODEL-NAME)'
15146 On the M32R/D, use this attribute to set the addressability of an
15147 object, and of the code generated for a function. The identifier
15148 MODEL-NAME is one of `small', `medium', or `large', representing
15149 each of the code models.
15151 Small model objects live in the lower 16MB of memory (so that their
15152 addresses can be loaded with the `ld24' instruction), and are
15153 callable with the `bl' instruction.
15155 Medium model objects may live anywhere in the 32-bit address space
15156 (the compiler will generate `seth/add3' instructions to load their
15157 addresses), and are callable with the `bl' instruction.
15159 Large model objects may live anywhere in the 32-bit address space
15160 (the compiler will generate `seth/add3' instructions to load their
15161 addresses), and may not be reachable with the `bl' instruction
15162 (the compiler will generate the much slower `seth/add3/jl'
15163 instruction sequence).
15165 On IA-64, use this attribute to set the addressability of an
15166 object. At present, the only supported identifier for MODEL-NAME
15167 is `small', indicating addressability via "small" (22-bit)
15168 addresses (so that their addresses can be loaded with the `addl'
15169 instruction). Caveat: such addressing is by definition not
15170 position independent and hence this attribute must not be used for
15171 objects defined by shared libraries.
15174 Use this attribute on the ARM, AVR, C4x and IP2K ports to indicate
15175 that the specified function does not need prologue/epilogue
15176 sequences generated by the compiler. It is up to the programmer
15177 to provide these sequences.
15180 On 68HC11 and 68HC12 the `near' attribute causes the compiler to
15181 use the normal calling convention based on `jsr' and `rts'. This
15182 attribute can be used to cancel the effect of the `-mlong-calls'
15186 Use this attribute together with `interrupt_handler',
15187 `exception_handler' or `nmi_handler' to indicate that the function
15188 entry code should enable nested interrupts or exceptions.
15191 Use this attribute on the Blackfin to indicate that the specified
15192 function is an NMI handler. The compiler will generate function
15193 entry and exit sequences suitable for use in an NMI handler when
15194 this attribute is present.
15196 `no_instrument_function'
15197 If `-finstrument-functions' is given, profiling function calls will
15198 be generated at entry and exit of most user-compiled functions.
15199 Functions with this attribute will not be so instrumented.
15202 This function attribute prevents a function from being considered
15205 `nonnull (ARG-INDEX, ...)'
15206 The `nonnull' attribute specifies that some function parameters
15207 should be non-null pointers. For instance, the declaration:
15210 my_memcpy (void *dest, const void *src, size_t len)
15211 __attribute__((nonnull (1, 2)));
15213 causes the compiler to check that, in calls to `my_memcpy',
15214 arguments DEST and SRC are non-null. If the compiler determines
15215 that a null pointer is passed in an argument slot marked as
15216 non-null, and the `-Wnonnull' option is enabled, a warning is
15217 issued. The compiler may also choose to make optimizations based
15218 on the knowledge that certain function arguments will not be null.
15220 If no argument index list is given to the `nonnull' attribute, all
15221 pointer arguments are marked as non-null. To illustrate, the
15222 following declaration is equivalent to the previous example:
15225 my_memcpy (void *dest, const void *src, size_t len)
15226 __attribute__((nonnull));
15229 A few standard library functions, such as `abort' and `exit',
15230 cannot return. GCC knows this automatically. Some programs define
15231 their own functions that never return. You can declare them
15232 `noreturn' to tell the compiler this fact. For example,
15234 void fatal () __attribute__ ((noreturn));
15239 /* ... */ /* Print error message. */ /* ... */
15243 The `noreturn' keyword tells the compiler to assume that `fatal'
15244 cannot return. It can then optimize without regard to what would
15245 happen if `fatal' ever did return. This makes slightly better
15246 code. More importantly, it helps avoid spurious warnings of
15247 uninitialized variables.
15249 The `noreturn' keyword does not affect the exceptional path when
15250 that applies: a `noreturn'-marked function may still return to the
15251 caller by throwing an exception or calling `longjmp'.
15253 Do not assume that registers saved by the calling function are
15254 restored before calling the `noreturn' function.
15256 It does not make sense for a `noreturn' function to have a return
15257 type other than `void'.
15259 The attribute `noreturn' is not implemented in GCC versions
15260 earlier than 2.5. An alternative way to declare that a function
15261 does not return, which works in the current version and in some
15262 older versions, is as follows:
15264 typedef void voidfn ();
15266 volatile voidfn fatal;
15268 This approach does not work in GNU C++.
15271 The `nothrow' attribute is used to inform the compiler that a
15272 function cannot throw an exception. For example, most functions in
15273 the standard C library can be guaranteed not to throw an exception
15274 with the notable exceptions of `qsort' and `bsearch' that take
15275 function pointer arguments. The `nothrow' attribute is not
15276 implemented in GCC versions earlier than 3.3.
15279 Many functions have no effects except the return value and their
15280 return value depends only on the parameters and/or global
15281 variables. Such a function can be subject to common subexpression
15282 elimination and loop optimization just as an arithmetic operator
15283 would be. These functions should be declared with the attribute
15284 `pure'. For example,
15286 int square (int) __attribute__ ((pure));
15288 says that the hypothetical function `square' is safe to call fewer
15289 times than the program says.
15291 Some of common examples of pure functions are `strlen' or `memcmp'.
15292 Interesting non-pure functions are functions with infinite loops
15293 or those depending on volatile memory or other system resource,
15294 that may change between two consecutive calls (such as `feof' in a
15295 multithreading environment).
15297 The attribute `pure' is not implemented in GCC versions earlier
15301 On the Intel 386, the `regparm' attribute causes the compiler to
15302 pass arguments number one to NUMBER if they are of integral type
15303 in registers EAX, EDX, and ECX instead of on the stack. Functions
15304 that take a variable number of arguments will continue to be
15305 passed all of their arguments on the stack.
15307 Beware that on some ELF systems this attribute is unsuitable for
15308 global functions in shared libraries with lazy binding (which is
15309 the default). Lazy binding will send the first call via resolving
15310 code in the loader, which might assume EAX, EDX and ECX can be
15311 clobbered, as per the standard calling conventions. Solaris 8 is
15312 affected by this. GNU systems with GLIBC 2.1 or higher, and
15313 FreeBSD, are believed to be safe since the loaders there save all
15314 registers. (Lazy binding can be disabled with the linker or the
15315 loader if desired, to avoid the problem.)
15318 On the Intel 386 with SSE support, the `sseregparm' attribute
15319 causes the compiler to pass up to 8 floating point arguments in
15320 SSE registers instead of on the stack. Functions that take a
15321 variable number of arguments will continue to pass all of their
15322 floating point arguments on the stack.
15325 The `returns_twice' attribute tells the compiler that a function
15326 may return more than one time. The compiler will ensure that all
15327 registers are dead before calling such a function and will emit a
15328 warning about the variables that may be clobbered after the second
15329 return from the function. Examples of such functions are `setjmp'
15330 and `vfork'. The `longjmp'-like counterpart of such function, if
15331 any, might need to be marked with the `noreturn' attribute.
15334 Use this attribute on the Blackfin, H8/300, H8/300H, and H8S to
15335 indicate that all registers except the stack pointer should be
15336 saved in the prologue regardless of whether they are used or not.
15338 `section ("SECTION-NAME")'
15339 Normally, the compiler places the code it generates in the `text'
15340 section. Sometimes, however, you need additional sections, or you
15341 need certain particular functions to appear in special sections.
15342 The `section' attribute specifies that a function lives in a
15343 particular section. For example, the declaration:
15345 extern void foobar (void) __attribute__ ((section ("bar")));
15347 puts the function `foobar' in the `bar' section.
15349 Some file formats do not support arbitrary sections so the
15350 `section' attribute is not available on all platforms. If you
15351 need to map the entire contents of a module to a particular
15352 section, consider using the facilities of the linker instead.
15355 This function attribute ensures that a parameter in a function
15356 call is an explicit `NULL'. The attribute is only valid on
15357 variadic functions. By default, the sentinel is located at
15358 position zero, the last parameter of the function call. If an
15359 optional integer position argument P is supplied to the attribute,
15360 the sentinel must be located at position P counting backwards from
15361 the end of the argument list.
15363 __attribute__ ((sentinel))
15365 __attribute__ ((sentinel(0)))
15367 The attribute is automatically set with a position of 0 for the
15368 built-in functions `execl' and `execlp'. The built-in function
15369 `execle' has the attribute set with a position of 1.
15371 A valid `NULL' in this context is defined as zero with any pointer
15372 type. If your system defines the `NULL' macro with an integer type
15373 then you need to add an explicit cast. GCC replaces `stddef.h'
15374 with a copy that redefines NULL appropriately.
15376 The warnings for missing or incorrect sentinels are enabled with
15380 See long_call/short_call.
15383 See longcall/shortcall.
15386 Use this attribute on the AVR to indicate that the specified
15387 function is a signal handler. The compiler will generate function
15388 entry and exit sequences suitable for use in a signal handler when
15389 this attribute is present. Interrupts will be disabled inside the
15393 Use this attribute on the SH to indicate an `interrupt_handler'
15394 function should switch to an alternate stack. It expects a string
15395 argument that names a global variable holding the address of the
15399 void f () __attribute__ ((interrupt_handler,
15400 sp_switch ("alt_stack")));
15403 On the Intel 386, the `stdcall' attribute causes the compiler to
15404 assume that the called function will pop off the stack space used
15405 to pass arguments, unless it takes a variable number of arguments.
15408 Use this attribute on the H8/300H and H8S to indicate that the
15409 specified variable should be placed into the tiny data section.
15410 The compiler will generate more efficient code for loads and stores
15411 on data in the tiny data section. Note the tiny data area is
15412 limited to slightly under 32kbytes of data.
15415 Use this attribute on the SH for an `interrupt_handler' to return
15416 using `trapa' instead of `rte'. This attribute expects an integer
15417 argument specifying the trap number to be used.
15420 This attribute, attached to a function, means that the function is
15421 meant to be possibly unused. GCC will not produce a warning for
15425 This attribute, attached to a function, means that code must be
15426 emitted for the function even if it appears that the function is
15427 not referenced. This is useful, for example, when the function is
15428 referenced only in inline assembly.
15430 `visibility ("VISIBILITY_TYPE")'
15431 The `visibility' attribute on ELF targets causes the declaration
15432 to be emitted with default, hidden, protected or internal
15435 void __attribute__ ((visibility ("protected")))
15436 f () { /* Do something. */; }
15437 int i __attribute__ ((visibility ("hidden")));
15439 See the ELF gABI for complete details, but the short story is:
15442 Default visibility is the normal case for ELF. This value is
15443 available for the visibility attribute to override other
15444 options that may change the assumed visibility of symbols.
15447 Hidden visibility indicates that the symbol will not be
15448 placed into the dynamic symbol table, so no other "module"
15449 (executable or shared library) can reference it directly.
15452 Internal visibility is like hidden visibility, but with
15453 additional processor specific semantics. Unless otherwise
15454 specified by the psABI, GCC defines internal visibility to
15455 mean that the function is _never_ called from another module.
15456 Note that hidden symbols, while they cannot be referenced
15457 directly by other modules, can be referenced indirectly via
15458 function pointers. By indicating that a symbol cannot be
15459 called from outside the module, GCC may for instance omit the
15460 load of a PIC register since it is known that the calling
15461 function loaded the correct value.
15464 Protected visibility indicates that the symbol will be placed
15465 in the dynamic symbol table, but that references within the
15466 defining module will bind to the local symbol. That is, the
15467 symbol cannot be overridden by another module.
15470 Not all ELF targets support this attribute.
15472 `warn_unused_result'
15473 The `warn_unused_result' attribute causes a warning to be emitted
15474 if a caller of the function with this attribute does not use its
15475 return value. This is useful for functions where not checking the
15476 result is either a security problem or always a bug, such as
15479 int fn () __attribute__ ((warn_unused_result));
15482 if (fn () < 0) return -1;
15487 results in warning on line 5.
15490 The `weak' attribute causes the declaration to be emitted as a weak
15491 symbol rather than a global. This is primarily useful in defining
15492 library functions which can be overridden in user code, though it
15493 can also be used with non-function declarations. Weak symbols are
15494 supported for ELF targets, and also for a.out targets when using
15495 the GNU assembler and linker.
15498 `weakref ("TARGET")'
15499 The `weakref' attribute marks a declaration as a weak reference.
15500 Without arguments, it should be accompanied by an `alias' attribute
15501 naming the target symbol. Optionally, the TARGET may be given as
15502 an argument to `weakref' itself. In either case, `weakref'
15503 implicitly marks the declaration as `weak'. Without a TARGET,
15504 given as an argument to `weakref' or to `alias', `weakref' is
15505 equivalent to `weak'.
15507 extern int x() __attribute__ ((weakref ("y")));
15508 /* is equivalent to... */
15509 extern int x() __attribute__ ((weak, weakref, alias ("y")));
15511 extern int x() __attribute__ ((weakref));
15512 extern int x() __attribute__ ((alias ("y")));
15514 A weak reference is an alias that does not by itself require a
15515 definition to be given for the target symbol. If the target
15516 symbol is only referenced through weak references, then the
15517 becomes a `weak' undefined symbol. If it is directly referenced,
15518 however, then such strong references prevail, and a definition
15519 will be required for the symbol, not necessarily in the same
15522 The effect is equivalent to moving all references to the alias to a
15523 separate translation unit, renaming the alias to the aliased
15524 symbol, declaring it as weak, compiling the two separate
15525 translation units and performing a reloadable link on them.
15527 `externally_visible'
15528 This attribute, attached to a global variable or function nullify
15529 effect of `-fwhole-program' command line option, so the object
15530 remain visible outside the current compilation unit
15533 You can specify multiple attributes in a declaration by separating them
15534 by commas within the double parentheses or by immediately following an
15535 attribute declaration with another attribute declaration.
15537 Some people object to the `__attribute__' feature, suggesting that ISO
15538 C's `#pragma' should be used instead. At the time `__attribute__' was
15539 designed, there were two reasons for not doing this.
15541 1. It is impossible to generate `#pragma' commands from a macro.
15543 2. There is no telling what the same `#pragma' might mean in another
15546 These two reasons applied to almost any application that might have
15547 been proposed for `#pragma'. It was basically a mistake to use
15548 `#pragma' for _anything_.
15550 The ISO C99 standard includes `_Pragma', which now allows pragmas to
15551 be generated from macros. In addition, a `#pragma GCC' namespace is
15552 now in use for GCC-specific pragmas. However, it has been found
15553 convenient to use `__attribute__' to achieve a natural attachment of
15554 attributes to their corresponding declarations, whereas `#pragma GCC'
15555 is of use for constructs that do not naturally form part of the
15556 grammar. *Note Miscellaneous Preprocessing Directives: (cpp)Other
15560 File: gcc.info, Node: Attribute Syntax, Next: Function Prototypes, Prev: Function Attributes, Up: C Extensions
15562 5.25 Attribute Syntax
15563 =====================
15565 This section describes the syntax with which `__attribute__' may be
15566 used, and the constructs to which attribute specifiers bind, for the C
15567 language. Some details may vary for C++ and Objective-C. Because of
15568 infelicities in the grammar for attributes, some forms described here
15569 may not be successfully parsed in all cases.
15571 There are some problems with the semantics of attributes in C++. For
15572 example, there are no manglings for attributes, although they may affect
15573 code generation, so problems may arise when attributed types are used in
15574 conjunction with templates or overloading. Similarly, `typeid' does
15575 not distinguish between types with different attributes. Support for
15576 attributes in C++ may be restricted in future to attributes on
15577 declarations only, but not on nested declarators.
15579 *Note Function Attributes::, for details of the semantics of attributes
15580 applying to functions. *Note Variable Attributes::, for details of the
15581 semantics of attributes applying to variables. *Note Type Attributes::,
15582 for details of the semantics of attributes applying to structure, union
15583 and enumerated types.
15585 An "attribute specifier" is of the form `__attribute__
15586 ((ATTRIBUTE-LIST))'. An "attribute list" is a possibly empty
15587 comma-separated sequence of "attributes", where each attribute is one
15590 * Empty. Empty attributes are ignored.
15592 * A word (which may be an identifier such as `unused', or a reserved
15593 word such as `const').
15595 * A word, followed by, in parentheses, parameters for the attribute.
15596 These parameters take one of the following forms:
15598 * An identifier. For example, `mode' attributes use this form.
15600 * An identifier followed by a comma and a non-empty
15601 comma-separated list of expressions. For example, `format'
15602 attributes use this form.
15604 * A possibly empty comma-separated list of expressions. For
15605 example, `format_arg' attributes use this form with the list
15606 being a single integer constant expression, and `alias'
15607 attributes use this form with the list being a single string
15610 An "attribute specifier list" is a sequence of one or more attribute
15611 specifiers, not separated by any other tokens.
15613 In GNU C, an attribute specifier list may appear after the colon
15614 following a label, other than a `case' or `default' label. The only
15615 attribute it makes sense to use after a label is `unused'. This
15616 feature is intended for code generated by programs which contains labels
15617 that may be unused but which is compiled with `-Wall'. It would not
15618 normally be appropriate to use in it human-written code, though it
15619 could be useful in cases where the code that jumps to the label is
15620 contained within an `#ifdef' conditional. GNU C++ does not permit such
15621 placement of attribute lists, as it is permissible for a declaration,
15622 which could begin with an attribute list, to be labelled in C++.
15623 Declarations cannot be labelled in C90 or C99, so the ambiguity does
15626 An attribute specifier list may appear as part of a `struct', `union'
15627 or `enum' specifier. It may go either immediately after the `struct',
15628 `union' or `enum' keyword, or after the closing brace. It is ignored
15629 if the content of the structure, union or enumerated type is not
15630 defined in the specifier in which the attribute specifier list is
15631 used--that is, in usages such as `struct __attribute__((foo)) bar' with
15632 no following opening brace. Where attribute specifiers follow the
15633 closing brace, they are considered to relate to the structure, union or
15634 enumerated type defined, not to any enclosing declaration the type
15635 specifier appears in, and the type defined is not complete until after
15636 the attribute specifiers.
15638 Otherwise, an attribute specifier appears as part of a declaration,
15639 counting declarations of unnamed parameters and type names, and relates
15640 to that declaration (which may be nested in another declaration, for
15641 example in the case of a parameter declaration), or to a particular
15642 declarator within a declaration. Where an attribute specifier is
15643 applied to a parameter declared as a function or an array, it should
15644 apply to the function or array rather than the pointer to which the
15645 parameter is implicitly converted, but this is not yet correctly
15648 Any list of specifiers and qualifiers at the start of a declaration may
15649 contain attribute specifiers, whether or not such a list may in that
15650 context contain storage class specifiers. (Some attributes, however,
15651 are essentially in the nature of storage class specifiers, and only make
15652 sense where storage class specifiers may be used; for example,
15653 `section'.) There is one necessary limitation to this syntax: the
15654 first old-style parameter declaration in a function definition cannot
15655 begin with an attribute specifier, because such an attribute applies to
15656 the function instead by syntax described below (which, however, is not
15657 yet implemented in this case). In some other cases, attribute
15658 specifiers are permitted by this grammar but not yet supported by the
15659 compiler. All attribute specifiers in this place relate to the
15660 declaration as a whole. In the obsolescent usage where a type of `int'
15661 is implied by the absence of type specifiers, such a list of specifiers
15662 and qualifiers may be an attribute specifier list with no other
15663 specifiers or qualifiers.
15665 At present, the first parameter in a function prototype must have some
15666 type specifier which is not an attribute specifier; this resolves an
15667 ambiguity in the interpretation of `void f(int (__attribute__((foo))
15668 x))', but is subject to change. At present, if the parentheses of a
15669 function declarator contain only attributes then those attributes are
15670 ignored, rather than yielding an error or warning or implying a single
15671 parameter of type int, but this is subject to change.
15673 An attribute specifier list may appear immediately before a declarator
15674 (other than the first) in a comma-separated list of declarators in a
15675 declaration of more than one identifier using a single list of
15676 specifiers and qualifiers. Such attribute specifiers apply only to the
15677 identifier before whose declarator they appear. For example, in
15679 __attribute__((noreturn)) void d0 (void),
15680 __attribute__((format(printf, 1, 2))) d1 (const char *, ...),
15683 the `noreturn' attribute applies to all the functions declared; the
15684 `format' attribute only applies to `d1'.
15686 An attribute specifier list may appear immediately before the comma,
15687 `=' or semicolon terminating the declaration of an identifier other
15688 than a function definition. At present, such attribute specifiers apply
15689 to the declared object or function, but in future they may attach to the
15690 outermost adjacent declarator. In simple cases there is no difference,
15691 but, for example, in
15693 void (****f)(void) __attribute__((noreturn));
15695 at present the `noreturn' attribute applies to `f', which causes a
15696 warning since `f' is not a function, but in future it may apply to the
15697 function `****f'. The precise semantics of what attributes in such
15698 cases will apply to are not yet specified. Where an assembler name for
15699 an object or function is specified (*note Asm Labels::), at present the
15700 attribute must follow the `asm' specification; in future, attributes
15701 before the `asm' specification may apply to the adjacent declarator,
15702 and those after it to the declared object or function.
15704 An attribute specifier list may, in future, be permitted to appear
15705 after the declarator in a function definition (before any old-style
15706 parameter declarations or the function body).
15708 Attribute specifiers may be mixed with type qualifiers appearing inside
15709 the `[]' of a parameter array declarator, in the C99 construct by which
15710 such qualifiers are applied to the pointer to which the array is
15711 implicitly converted. Such attribute specifiers apply to the pointer,
15712 not to the array, but at present this is not implemented and they are
15715 An attribute specifier list may appear at the start of a nested
15716 declarator. At present, there are some limitations in this usage: the
15717 attributes correctly apply to the declarator, but for most individual
15718 attributes the semantics this implies are not implemented. When
15719 attribute specifiers follow the `*' of a pointer declarator, they may
15720 be mixed with any type qualifiers present. The following describes the
15721 formal semantics of this syntax. It will make the most sense if you
15722 are familiar with the formal specification of declarators in the ISO C
15725 Consider (as in C99 subclause 6.7.5 paragraph 4) a declaration `T D1',
15726 where `T' contains declaration specifiers that specify a type TYPE
15727 (such as `int') and `D1' is a declarator that contains an identifier
15728 IDENT. The type specified for IDENT for derived declarators whose type
15729 does not include an attribute specifier is as in the ISO C standard.
15731 If `D1' has the form `( ATTRIBUTE-SPECIFIER-LIST D )', and the
15732 declaration `T D' specifies the type "DERIVED-DECLARATOR-TYPE-LIST
15733 TYPE" for IDENT, then `T D1' specifies the type
15734 "DERIVED-DECLARATOR-TYPE-LIST ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
15736 If `D1' has the form `* TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST
15737 D', and the declaration `T D' specifies the type
15738 "DERIVED-DECLARATOR-TYPE-LIST TYPE" for IDENT, then `T D1' specifies
15739 the type "DERIVED-DECLARATOR-TYPE-LIST
15740 TYPE-QUALIFIER-AND-ATTRIBUTE-SPECIFIER-LIST TYPE" for IDENT.
15744 void (__attribute__((noreturn)) ****f) (void);
15746 specifies the type "pointer to pointer to pointer to pointer to
15747 non-returning function returning `void'". As another example,
15749 char *__attribute__((aligned(8))) *f;
15751 specifies the type "pointer to 8-byte-aligned pointer to `char'". Note
15752 again that this does not work with most attributes; for example, the
15753 usage of `aligned' and `noreturn' attributes given above is not yet
15756 For compatibility with existing code written for compiler versions that
15757 did not implement attributes on nested declarators, some laxity is
15758 allowed in the placing of attributes. If an attribute that only applies
15759 to types is applied to a declaration, it will be treated as applying to
15760 the type of that declaration. If an attribute that only applies to
15761 declarations is applied to the type of a declaration, it will be treated
15762 as applying to that declaration; and, for compatibility with code
15763 placing the attributes immediately before the identifier declared, such
15764 an attribute applied to a function return type will be treated as
15765 applying to the function type, and such an attribute applied to an array
15766 element type will be treated as applying to the array type. If an
15767 attribute that only applies to function types is applied to a
15768 pointer-to-function type, it will be treated as applying to the pointer
15769 target type; if such an attribute is applied to a function return type
15770 that is not a pointer-to-function type, it will be treated as applying
15771 to the function type.
15774 File: gcc.info, Node: Function Prototypes, Next: C++ Comments, Prev: Attribute Syntax, Up: C Extensions
15776 5.26 Prototypes and Old-Style Function Definitions
15777 ==================================================
15779 GNU C extends ISO C to allow a function prototype to override a later
15780 old-style non-prototype definition. Consider the following example:
15782 /* Use prototypes unless the compiler is old-fashioned. */
15789 /* Prototype function declaration. */
15790 int isroot P((uid_t));
15792 /* Old-style function definition. */
15794 isroot (x) /* ??? lossage here ??? */
15800 Suppose the type `uid_t' happens to be `short'. ISO C does not allow
15801 this example, because subword arguments in old-style non-prototype
15802 definitions are promoted. Therefore in this example the function
15803 definition's argument is really an `int', which does not match the
15804 prototype argument type of `short'.
15806 This restriction of ISO C makes it hard to write code that is portable
15807 to traditional C compilers, because the programmer does not know
15808 whether the `uid_t' type is `short', `int', or `long'. Therefore, in
15809 cases like these GNU C allows a prototype to override a later old-style
15810 definition. More precisely, in GNU C, a function prototype argument
15811 type overrides the argument type specified by a later old-style
15812 definition if the former type is the same as the latter type before
15813 promotion. Thus in GNU C the above example is equivalent to the
15816 int isroot (uid_t);
15824 GNU C++ does not support old-style function definitions, so this
15825 extension is irrelevant.
15828 File: gcc.info, Node: C++ Comments, Next: Dollar Signs, Prev: Function Prototypes, Up: C Extensions
15830 5.27 C++ Style Comments
15831 =======================
15833 In GNU C, you may use C++ style comments, which start with `//' and
15834 continue until the end of the line. Many other C implementations allow
15835 such comments, and they are included in the 1999 C standard. However,
15836 C++ style comments are not recognized if you specify an `-std' option
15837 specifying a version of ISO C before C99, or `-ansi' (equivalent to
15841 File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: C++ Comments, Up: C Extensions
15843 5.28 Dollar Signs in Identifier Names
15844 =====================================
15846 In GNU C, you may normally use dollar signs in identifier names. This
15847 is because many traditional C implementations allow such identifiers.
15848 However, dollar signs in identifiers are not supported on a few target
15849 machines, typically because the target assembler does not allow them.
15852 File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: C Extensions
15854 5.29 The Character <ESC> in Constants
15855 =====================================
15857 You can use the sequence `\e' in a string or character constant to
15858 stand for the ASCII character <ESC>.
15861 File: gcc.info, Node: Alignment, Next: Inline, Prev: Type Attributes, Up: C Extensions
15863 5.30 Inquiring on Alignment of Types or Variables
15864 =================================================
15866 The keyword `__alignof__' allows you to inquire about how an object is
15867 aligned, or the minimum alignment usually required by a type. Its
15868 syntax is just like `sizeof'.
15870 For example, if the target machine requires a `double' value to be
15871 aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This
15872 is true on many RISC machines. On more traditional machine designs,
15873 `__alignof__ (double)' is 4 or even 2.
15875 Some machines never actually require alignment; they allow reference
15876 to any data type even at an odd address. For these machines,
15877 `__alignof__' reports the _recommended_ alignment of a type.
15879 If the operand of `__alignof__' is an lvalue rather than a type, its
15880 value is the required alignment for its type, taking into account any
15881 minimum alignment specified with GCC's `__attribute__' extension (*note
15882 Variable Attributes::). For example, after this declaration:
15884 struct foo { int x; char y; } foo1;
15886 the value of `__alignof__ (foo1.y)' is 1, even though its actual
15887 alignment is probably 2 or 4, the same as `__alignof__ (int)'.
15889 It is an error to ask for the alignment of an incomplete type.
15892 File: gcc.info, Node: Variable Attributes, Next: Type Attributes, Prev: Character Escapes, Up: C Extensions
15894 5.31 Specifying Attributes of Variables
15895 =======================================
15897 The keyword `__attribute__' allows you to specify special attributes of
15898 variables or structure fields. This keyword is followed by an
15899 attribute specification inside double parentheses. Some attributes are
15900 currently defined generically for variables. Other attributes are
15901 defined for variables on particular target systems. Other attributes
15902 are available for functions (*note Function Attributes::) and for types
15903 (*note Type Attributes::). Other front ends might define more
15904 attributes (*note Extensions to the C++ Language: C++ Extensions.).
15906 You may also specify attributes with `__' preceding and following each
15907 keyword. This allows you to use them in header files without being
15908 concerned about a possible macro of the same name. For example, you
15909 may use `__aligned__' instead of `aligned'.
15911 *Note Attribute Syntax::, for details of the exact syntax for using
15914 `aligned (ALIGNMENT)'
15915 This attribute specifies a minimum alignment for the variable or
15916 structure field, measured in bytes. For example, the declaration:
15918 int x __attribute__ ((aligned (16))) = 0;
15920 causes the compiler to allocate the global variable `x' on a
15921 16-byte boundary. On a 68040, this could be used in conjunction
15922 with an `asm' expression to access the `move16' instruction which
15923 requires 16-byte aligned operands.
15925 You can also specify the alignment of structure fields. For
15926 example, to create a double-word aligned `int' pair, you could
15929 struct foo { int x[2] __attribute__ ((aligned (8))); };
15931 This is an alternative to creating a union with a `double' member
15932 that forces the union to be double-word aligned.
15934 As in the preceding examples, you can explicitly specify the
15935 alignment (in bytes) that you wish the compiler to use for a given
15936 variable or structure field. Alternatively, you can leave out the
15937 alignment factor and just ask the compiler to align a variable or
15938 field to the maximum useful alignment for the target machine you
15939 are compiling for. For example, you could write:
15941 short array[3] __attribute__ ((aligned));
15943 Whenever you leave out the alignment factor in an `aligned'
15944 attribute specification, the compiler automatically sets the
15945 alignment for the declared variable or field to the largest
15946 alignment which is ever used for any data type on the target
15947 machine you are compiling for. Doing this can often make copy
15948 operations more efficient, because the compiler can use whatever
15949 instructions copy the biggest chunks of memory when performing
15950 copies to or from the variables or fields that you have aligned
15953 The `aligned' attribute can only increase the alignment; but you
15954 can decrease it by specifying `packed' as well. See below.
15956 Note that the effectiveness of `aligned' attributes may be limited
15957 by inherent limitations in your linker. On many systems, the
15958 linker is only able to arrange for variables to be aligned up to a
15959 certain maximum alignment. (For some linkers, the maximum
15960 supported alignment may be very very small.) If your linker is
15961 only able to align variables up to a maximum of 8 byte alignment,
15962 then specifying `aligned(16)' in an `__attribute__' will still
15963 only provide you with 8 byte alignment. See your linker
15964 documentation for further information.
15966 `cleanup (CLEANUP_FUNCTION)'
15967 The `cleanup' attribute runs a function when the variable goes out
15968 of scope. This attribute can only be applied to auto function
15969 scope variables; it may not be applied to parameters or variables
15970 with static storage duration. The function must take one
15971 parameter, a pointer to a type compatible with the variable. The
15972 return value of the function (if any) is ignored.
15974 If `-fexceptions' is enabled, then CLEANUP_FUNCTION will be run
15975 during the stack unwinding that happens during the processing of
15976 the exception. Note that the `cleanup' attribute does not allow
15977 the exception to be caught, only to perform an action. It is
15978 undefined what happens if CLEANUP_FUNCTION does not return
15983 The `common' attribute requests GCC to place a variable in
15984 "common" storage. The `nocommon' attribute requests the
15985 opposite--to allocate space for it directly.
15987 These attributes override the default chosen by the `-fno-common'
15988 and `-fcommon' flags respectively.
15991 The `deprecated' attribute results in a warning if the variable is
15992 used anywhere in the source file. This is useful when identifying
15993 variables that are expected to be removed in a future version of a
15994 program. The warning also includes the location of the declaration
15995 of the deprecated variable, to enable users to easily find further
15996 information about why the variable is deprecated, or what they
15997 should do instead. Note that the warning only occurs for uses:
15999 extern int old_var __attribute__ ((deprecated));
16000 extern int old_var;
16001 int new_fn () { return old_var; }
16003 results in a warning on line 3 but not line 2.
16005 The `deprecated' attribute can also be used for functions and
16006 types (*note Function Attributes::, *note Type Attributes::.)
16009 This attribute specifies the data type for the
16010 declaration--whichever type corresponds to the mode MODE. This in
16011 effect lets you request an integer or floating point type
16012 according to its width.
16014 You may also specify a mode of `byte' or `__byte__' to indicate
16015 the mode corresponding to a one-byte integer, `word' or `__word__'
16016 for the mode of a one-word integer, and `pointer' or `__pointer__'
16017 for the mode used to represent pointers.
16020 The `packed' attribute specifies that a variable or structure field
16021 should have the smallest possible alignment--one byte for a
16022 variable, and one bit for a field, unless you specify a larger
16023 value with the `aligned' attribute.
16025 Here is a structure in which the field `x' is packed, so that it
16026 immediately follows `a':
16031 int x[2] __attribute__ ((packed));
16034 `section ("SECTION-NAME")'
16035 Normally, the compiler places the objects it generates in sections
16036 like `data' and `bss'. Sometimes, however, you need additional
16037 sections, or you need certain particular variables to appear in
16038 special sections, for example to map to special hardware. The
16039 `section' attribute specifies that a variable (or function) lives
16040 in a particular section. For example, this small program uses
16041 several specific section names:
16043 struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
16044 struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
16045 char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
16046 int init_data __attribute__ ((section ("INITDATA"))) = 0;
16050 /* Initialize stack pointer */
16051 init_sp (stack + sizeof (stack));
16053 /* Initialize initialized data */
16054 memcpy (&init_data, &data, &edata - &data);
16056 /* Turn on the serial ports */
16061 Use the `section' attribute with an _initialized_ definition of a
16062 _global_ variable, as shown in the example. GCC issues a warning
16063 and otherwise ignores the `section' attribute in uninitialized
16064 variable declarations.
16066 You may only use the `section' attribute with a fully initialized
16067 global definition because of the way linkers work. The linker
16068 requires each object be defined once, with the exception that
16069 uninitialized variables tentatively go in the `common' (or `bss')
16070 section and can be multiply "defined". You can force a variable
16071 to be initialized with the `-fno-common' flag or the `nocommon'
16074 Some file formats do not support arbitrary sections so the
16075 `section' attribute is not available on all platforms. If you
16076 need to map the entire contents of a module to a particular
16077 section, consider using the facilities of the linker instead.
16080 On Microsoft Windows, in addition to putting variable definitions
16081 in a named section, the section can also be shared among all
16082 running copies of an executable or DLL. For example, this small
16083 program defines shared data by putting it in a named section
16084 `shared' and marking the section shareable:
16086 int foo __attribute__((section ("shared"), shared)) = 0;
16091 /* Read and write foo. All running
16092 copies see the same value. */
16096 You may only use the `shared' attribute along with `section'
16097 attribute with a fully initialized global definition because of
16098 the way linkers work. See `section' attribute for more
16101 The `shared' attribute is only available on Microsoft Windows.
16103 `tls_model ("TLS_MODEL")'
16104 The `tls_model' attribute sets thread-local storage model (*note
16105 Thread-Local::) of a particular `__thread' variable, overriding
16106 `-ftls-model=' command line switch on a per-variable basis. The
16107 TLS_MODEL argument should be one of `global-dynamic',
16108 `local-dynamic', `initial-exec' or `local-exec'.
16110 Not all targets support this attribute.
16113 This attribute, attached to a variable, means that the variable is
16114 meant to be possibly unused. GCC will not produce a warning for
16117 `vector_size (BYTES)'
16118 This attribute specifies the vector size for the variable,
16119 measured in bytes. For example, the declaration:
16121 int foo __attribute__ ((vector_size (16)));
16123 causes the compiler to set the mode for `foo', to be 16 bytes,
16124 divided into `int' sized units. Assuming a 32-bit int (a vector of
16125 4 units of 4 bytes), the corresponding mode of `foo' will be V4SI.
16127 This attribute is only applicable to integral and float scalars,
16128 although arrays, pointers, and function return values are allowed
16129 in conjunction with this construct.
16131 Aggregates with this attribute are invalid, even if they are of
16132 the same size as a corresponding scalar. For example, the
16135 struct S { int a; };
16136 struct S __attribute__ ((vector_size (16))) foo;
16138 is invalid even if the size of the structure is the same as the
16142 The `selectany' attribute causes an initialized global variable to
16143 have link-once semantics. When multiple definitions of the
16144 variable are encountered by the linker, the first is selected and
16145 the remainder are discarded. Following usage by the Microsoft
16146 compiler, the linker is told _not_ to warn about size or content
16147 differences of the multiple definitions.
16149 Although the primary usage of this attribute is for POD types, the
16150 attribute can also be applied to global C++ objects that are
16151 initialized by a constructor. In this case, the static
16152 initialization and destruction code for the object is emitted in
16153 each translation defining the object, but the calls to the
16154 constructor and destructor are protected by a link-once guard
16157 The `selectany' attribute is only available on Microsoft Windows
16158 targets. You can use `__declspec (selectany)' as a synonym for
16159 `__attribute__ ((selectany))' for compatibility with other
16163 The `weak' attribute is described in *Note Function Attributes::.
16166 The `dllimport' attribute is described in *Note Function
16170 The `dllexport' attribute is described in *Note Function
16174 5.31.1 M32R/D Variable Attributes
16175 ---------------------------------
16177 One attribute is currently defined for the M32R/D.
16179 `model (MODEL-NAME)'
16180 Use this attribute on the M32R/D to set the addressability of an
16181 object. The identifier MODEL-NAME is one of `small', `medium', or
16182 `large', representing each of the code models.
16184 Small model objects live in the lower 16MB of memory (so that their
16185 addresses can be loaded with the `ld24' instruction).
16187 Medium and large model objects may live anywhere in the 32-bit
16188 address space (the compiler will generate `seth/add3' instructions
16189 to load their addresses).
16191 5.31.2 i386 Variable Attributes
16192 -------------------------------
16194 Two attributes are currently defined for i386 configurations:
16195 `ms_struct' and `gcc_struct'
16199 If `packed' is used on a structure, or if bit-fields are used it
16200 may be that the Microsoft ABI packs them differently than GCC
16201 would normally pack them. Particularly when moving packed data
16202 between functions compiled with GCC and the native Microsoft
16203 compiler (either via function call or as data in a file), it may
16204 be necessary to access either format.
16206 Currently `-m[no-]ms-bitfields' is provided for the Microsoft
16207 Windows X86 compilers to match the native Microsoft compiler.
16209 5.31.3 Xstormy16 Variable Attributes
16210 ------------------------------------
16212 One attribute is currently defined for xstormy16 configurations:
16216 If a variable has the `below100' attribute (`BELOW100' is allowed
16217 also), GCC will place the variable in the first 0x100 bytes of
16218 memory and use special opcodes to access it. Such variables will
16219 be placed in either the `.bss_below100' section or the
16220 `.data_below100' section.
16224 File: gcc.info, Node: Type Attributes, Next: Alignment, Prev: Variable Attributes, Up: C Extensions
16226 5.32 Specifying Attributes of Types
16227 ===================================
16229 The keyword `__attribute__' allows you to specify special attributes of
16230 `struct' and `union' types when you define such types. This keyword is
16231 followed by an attribute specification inside double parentheses. Six
16232 attributes are currently defined for types: `aligned', `packed',
16233 `transparent_union', `unused', `deprecated' and `may_alias'. Other
16234 attributes are defined for functions (*note Function Attributes::) and
16235 for variables (*note Variable Attributes::).
16237 You may also specify any one of these attributes with `__' preceding
16238 and following its keyword. This allows you to use these attributes in
16239 header files without being concerned about a possible macro of the same
16240 name. For example, you may use `__aligned__' instead of `aligned'.
16242 You may specify the `aligned' and `transparent_union' attributes
16243 either in a `typedef' declaration or just past the closing curly brace
16244 of a complete enum, struct or union type _definition_ and the `packed'
16245 attribute only past the closing brace of a definition.
16247 You may also specify attributes between the enum, struct or union tag
16248 and the name of the type rather than after the closing brace.
16250 *Note Attribute Syntax::, for details of the exact syntax for using
16253 `aligned (ALIGNMENT)'
16254 This attribute specifies a minimum alignment (in bytes) for
16255 variables of the specified type. For example, the declarations:
16257 struct S { short f[3]; } __attribute__ ((aligned (8)));
16258 typedef int more_aligned_int __attribute__ ((aligned (8)));
16260 force the compiler to insure (as far as it can) that each variable
16261 whose type is `struct S' or `more_aligned_int' will be allocated
16262 and aligned _at least_ on a 8-byte boundary. On a SPARC, having
16263 all variables of type `struct S' aligned to 8-byte boundaries
16264 allows the compiler to use the `ldd' and `std' (doubleword load and
16265 store) instructions when copying one variable of type `struct S' to
16266 another, thus improving run-time efficiency.
16268 Note that the alignment of any given `struct' or `union' type is
16269 required by the ISO C standard to be at least a perfect multiple of
16270 the lowest common multiple of the alignments of all of the members
16271 of the `struct' or `union' in question. This means that you _can_
16272 effectively adjust the alignment of a `struct' or `union' type by
16273 attaching an `aligned' attribute to any one of the members of such
16274 a type, but the notation illustrated in the example above is a
16275 more obvious, intuitive, and readable way to request the compiler
16276 to adjust the alignment of an entire `struct' or `union' type.
16278 As in the preceding example, you can explicitly specify the
16279 alignment (in bytes) that you wish the compiler to use for a given
16280 `struct' or `union' type. Alternatively, you can leave out the
16281 alignment factor and just ask the compiler to align a type to the
16282 maximum useful alignment for the target machine you are compiling
16283 for. For example, you could write:
16285 struct S { short f[3]; } __attribute__ ((aligned));
16287 Whenever you leave out the alignment factor in an `aligned'
16288 attribute specification, the compiler automatically sets the
16289 alignment for the type to the largest alignment which is ever used
16290 for any data type on the target machine you are compiling for.
16291 Doing this can often make copy operations more efficient, because
16292 the compiler can use whatever instructions copy the biggest chunks
16293 of memory when performing copies to or from the variables which
16294 have types that you have aligned this way.
16296 In the example above, if the size of each `short' is 2 bytes, then
16297 the size of the entire `struct S' type is 6 bytes. The smallest
16298 power of two which is greater than or equal to that is 8, so the
16299 compiler sets the alignment for the entire `struct S' type to 8
16302 Note that although you can ask the compiler to select a
16303 time-efficient alignment for a given type and then declare only
16304 individual stand-alone objects of that type, the compiler's
16305 ability to select a time-efficient alignment is primarily useful
16306 only when you plan to create arrays of variables having the
16307 relevant (efficiently aligned) type. If you declare or use arrays
16308 of variables of an efficiently-aligned type, then it is likely
16309 that your program will also be doing pointer arithmetic (or
16310 subscripting, which amounts to the same thing) on pointers to the
16311 relevant type, and the code that the compiler generates for these
16312 pointer arithmetic operations will often be more efficient for
16313 efficiently-aligned types than for other types.
16315 The `aligned' attribute can only increase the alignment; but you
16316 can decrease it by specifying `packed' as well. See below.
16318 Note that the effectiveness of `aligned' attributes may be limited
16319 by inherent limitations in your linker. On many systems, the
16320 linker is only able to arrange for variables to be aligned up to a
16321 certain maximum alignment. (For some linkers, the maximum
16322 supported alignment may be very very small.) If your linker is
16323 only able to align variables up to a maximum of 8 byte alignment,
16324 then specifying `aligned(16)' in an `__attribute__' will still
16325 only provide you with 8 byte alignment. See your linker
16326 documentation for further information.
16329 This attribute, attached to `struct' or `union' type definition,
16330 specifies that each member (other than zero-width bitfields) of
16331 the structure or union is placed to minimize the memory required.
16332 When attached to an `enum' definition, it indicates that the
16333 smallest integral type should be used.
16335 Specifying this attribute for `struct' and `union' types is
16336 equivalent to specifying the `packed' attribute on each of the
16337 structure or union members. Specifying the `-fshort-enums' flag
16338 on the line is equivalent to specifying the `packed' attribute on
16339 all `enum' definitions.
16341 In the following example `struct my_packed_struct''s members are
16342 packed closely together, but the internal layout of its `s' member
16343 is not packed--to do that, `struct my_unpacked_struct' would need
16346 struct my_unpacked_struct
16352 struct __attribute__ ((__packed__)) my_packed_struct
16356 struct my_unpacked_struct s;
16359 You may only specify this attribute on the definition of a `enum',
16360 `struct' or `union', not on a `typedef' which does not also define
16361 the enumerated type, structure or union.
16363 `transparent_union'
16364 This attribute, attached to a `union' type definition, indicates
16365 that any function parameter having that union type causes calls to
16366 that function to be treated in a special way.
16368 First, the argument corresponding to a transparent union type can
16369 be of any type in the union; no cast is required. Also, if the
16370 union contains a pointer type, the corresponding argument can be a
16371 null pointer constant or a void pointer expression; and if the
16372 union contains a void pointer type, the corresponding argument can
16373 be any pointer expression. If the union member type is a pointer,
16374 qualifiers like `const' on the referenced type must be respected,
16375 just as with normal pointer conversions.
16377 Second, the argument is passed to the function using the calling
16378 conventions of the first member of the transparent union, not the
16379 calling conventions of the union itself. All members of the union
16380 must have the same machine representation; this is necessary for
16381 this argument passing to work properly.
16383 Transparent unions are designed for library functions that have
16384 multiple interfaces for compatibility reasons. For example,
16385 suppose the `wait' function must accept either a value of type
16386 `int *' to comply with Posix, or a value of type `union wait *' to
16387 comply with the 4.1BSD interface. If `wait''s parameter were
16388 `void *', `wait' would accept both kinds of arguments, but it
16389 would also accept any other pointer type and this would make
16390 argument type checking less useful. Instead, `<sys/wait.h>' might
16391 define the interface as follows:
16397 } wait_status_ptr_t __attribute__ ((__transparent_union__));
16399 pid_t wait (wait_status_ptr_t);
16401 This interface allows either `int *' or `union wait *' arguments
16402 to be passed, using the `int *' calling convention. The program
16403 can call `wait' with arguments of either type:
16405 int w1 () { int w; return wait (&w); }
16406 int w2 () { union wait w; return wait (&w); }
16408 With this interface, `wait''s implementation might look like this:
16410 pid_t wait (wait_status_ptr_t p)
16412 return waitpid (-1, p.__ip, 0);
16416 When attached to a type (including a `union' or a `struct'), this
16417 attribute means that variables of that type are meant to appear
16418 possibly unused. GCC will not produce a warning for any variables
16419 of that type, even if the variable appears to do nothing. This is
16420 often the case with lock or thread classes, which are usually
16421 defined and then not referenced, but contain constructors and
16422 destructors that have nontrivial bookkeeping functions.
16425 The `deprecated' attribute results in a warning if the type is
16426 used anywhere in the source file. This is useful when identifying
16427 types that are expected to be removed in a future version of a
16428 program. If possible, the warning also includes the location of
16429 the declaration of the deprecated type, to enable users to easily
16430 find further information about why the type is deprecated, or what
16431 they should do instead. Note that the warnings only occur for
16432 uses and then only if the type is being applied to an identifier
16433 that itself is not being declared as deprecated.
16435 typedef int T1 __attribute__ ((deprecated));
16439 typedef T1 T3 __attribute__ ((deprecated));
16440 T3 z __attribute__ ((deprecated));
16442 results in a warning on line 2 and 3 but not lines 4, 5, or 6. No
16443 warning is issued for line 4 because T2 is not explicitly
16444 deprecated. Line 5 has no warning because T3 is explicitly
16445 deprecated. Similarly for line 6.
16447 The `deprecated' attribute can also be used for functions and
16448 variables (*note Function Attributes::, *note Variable
16452 Accesses to objects with types with this attribute are not
16453 subjected to type-based alias analysis, but are instead assumed to
16454 be able to alias any other type of objects, just like the `char'
16455 type. See `-fstrict-aliasing' for more information on aliasing
16460 typedef short __attribute__((__may_alias__)) short_a;
16465 int a = 0x12345678;
16466 short_a *b = (short_a *) &a;
16470 if (a == 0x12345678)
16476 If you replaced `short_a' with `short' in the variable
16477 declaration, the above program would abort when compiled with
16478 `-fstrict-aliasing', which is on by default at `-O2' or above in
16479 recent GCC versions.
16481 5.32.1 ARM Type Attributes
16482 --------------------------
16484 On those ARM targets that support `dllimport' (such as Symbian
16485 OS), you can use the `notshared' attribute to indicate that the virtual
16486 table and other similar data for a class should not be exported from a
16489 class __declspec(notshared) C {
16491 __declspec(dllimport) C();
16495 __declspec(dllexport)
16498 In this code, `C::C' is exported from the current DLL, but the
16499 virtual table for `C' is not exported. (You can use `__attribute__'
16500 instead of `__declspec' if you prefer, but most Symbian OS code uses
16503 5.32.2 i386 Type Attributes
16504 ---------------------------
16506 Two attributes are currently defined for i386 configurations:
16507 `ms_struct' and `gcc_struct'
16511 If `packed' is used on a structure, or if bit-fields are used it
16512 may be that the Microsoft ABI packs them differently than GCC
16513 would normally pack them. Particularly when moving packed data
16514 between functions compiled with GCC and the native Microsoft
16515 compiler (either via function call or as data in a file), it may
16516 be necessary to access either format.
16518 Currently `-m[no-]ms-bitfields' is provided for the Microsoft
16519 Windows X86 compilers to match the native Microsoft compiler.
16521 To specify multiple attributes, separate them by commas within the
16522 double parentheses: for example, `__attribute__ ((aligned (16),
16526 File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: C Extensions
16528 5.33 An Inline Function is As Fast As a Macro
16529 =============================================
16531 By declaring a function `inline', you can direct GCC to integrate that
16532 function's code into the code for its callers. This makes execution
16533 faster by eliminating the function-call overhead; in addition, if any
16534 of the actual argument values are constant, their known values may
16535 permit simplifications at compile time so that not all of the inline
16536 function's code needs to be included. The effect on code size is less
16537 predictable; object code may be larger or smaller with function
16538 inlining, depending on the particular case. Inlining of functions is an
16539 optimization and it really "works" only in optimizing compilation. If
16540 you don't use `-O', no function is really inline.
16542 Inline functions are included in the ISO C99 standard, but there are
16543 currently substantial differences between what GCC implements and what
16544 the ISO C99 standard requires.
16546 To declare a function inline, use the `inline' keyword in its
16547 declaration, like this:
16555 (If you are writing a header file to be included in ISO C programs,
16556 write `__inline__' instead of `inline'. *Note Alternate Keywords::.)
16557 You can also make all "simple enough" functions inline with the option
16558 `-finline-functions'.
16560 Note that certain usages in a function definition can make it
16561 unsuitable for inline substitution. Among these usages are: use of
16562 varargs, use of alloca, use of variable sized data types (*note
16563 Variable Length::), use of computed goto (*note Labels as Values::),
16564 use of nonlocal goto, and nested functions (*note Nested Functions::).
16565 Using `-Winline' will warn when a function marked `inline' could not be
16566 substituted, and will give the reason for the failure.
16568 Note that in C and Objective-C, unlike C++, the `inline' keyword does
16569 not affect the linkage of the function.
16571 GCC automatically inlines member functions defined within the class
16572 body of C++ programs even if they are not explicitly declared `inline'.
16573 (You can override this with `-fno-default-inline'; *note Options
16574 Controlling C++ Dialect: C++ Dialect Options.)
16576 When a function is both inline and `static', if all calls to the
16577 function are integrated into the caller, and the function's address is
16578 never used, then the function's own assembler code is never referenced.
16579 In this case, GCC does not actually output assembler code for the
16580 function, unless you specify the option `-fkeep-inline-functions'.
16581 Some calls cannot be integrated for various reasons (in particular,
16582 calls that precede the function's definition cannot be integrated, and
16583 neither can recursive calls within the definition). If there is a
16584 nonintegrated call, then the function is compiled to assembler code as
16585 usual. The function must also be compiled as usual if the program
16586 refers to its address, because that can't be inlined.
16588 When an inline function is not `static', then the compiler must assume
16589 that there may be calls from other source files; since a global symbol
16590 can be defined only once in any program, the function must not be
16591 defined in the other source files, so the calls therein cannot be
16592 integrated. Therefore, a non-`static' inline function is always
16593 compiled on its own in the usual fashion.
16595 If you specify both `inline' and `extern' in the function definition,
16596 then the definition is used only for inlining. In no case is the
16597 function compiled on its own, not even if you refer to its address
16598 explicitly. Such an address becomes an external reference, as if you
16599 had only declared the function, and had not defined it.
16601 This combination of `inline' and `extern' has almost the effect of a
16602 macro. The way to use it is to put a function definition in a header
16603 file with these keywords, and put another copy of the definition
16604 (lacking `inline' and `extern') in a library file. The definition in
16605 the header file will cause most calls to the function to be inlined.
16606 If any uses of the function remain, they will refer to the single copy
16609 Since GCC eventually will implement ISO C99 semantics for inline
16610 functions, it is best to use `static inline' only to guarantee
16611 compatibility. (The existing semantics will remain available when
16612 `-std=gnu89' is specified, but eventually the default will be
16613 `-std=gnu99' and that will implement the C99 semantics, though it does
16616 GCC does not inline any functions when not optimizing unless you
16617 specify the `always_inline' attribute for the function, like this:
16620 inline void foo (const char) __attribute__((always_inline));
16623 File: gcc.info, Node: Extended Asm, Next: Constraints, Prev: Inline, Up: C Extensions
16625 5.34 Assembler Instructions with C Expression Operands
16626 ======================================================
16628 In an assembler instruction using `asm', you can specify the operands
16629 of the instruction using C expressions. This means you need not guess
16630 which registers or memory locations will contain the data you want to
16633 You must specify an assembler instruction template much like what
16634 appears in a machine description, plus an operand constraint string for
16637 For example, here is how to use the 68881's `fsinx' instruction:
16639 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
16641 Here `angle' is the C expression for the input operand while `result'
16642 is that of the output operand. Each has `"f"' as its operand
16643 constraint, saying that a floating point register is required. The `='
16644 in `=f' indicates that the operand is an output; all output operands'
16645 constraints must use `='. The constraints use the same language used
16646 in the machine description (*note Constraints::).
16648 Each operand is described by an operand-constraint string followed by
16649 the C expression in parentheses. A colon separates the assembler
16650 template from the first output operand and another separates the last
16651 output operand from the first input, if any. Commas separate the
16652 operands within each group. The total number of operands is currently
16653 limited to 30; this limitation may be lifted in some future version of
16656 If there are no output operands but there are input operands, you must
16657 place two consecutive colons surrounding the place where the output
16660 As of GCC version 3.1, it is also possible to specify input and output
16661 operands using symbolic names which can be referenced within the
16662 assembler code. These names are specified inside square brackets
16663 preceding the constraint string, and can be referenced inside the
16664 assembler code using `%[NAME]' instead of a percentage sign followed by
16665 the operand number. Using named operands the above example could look
16668 asm ("fsinx %[angle],%[output]"
16669 : [output] "=f" (result)
16670 : [angle] "f" (angle));
16672 Note that the symbolic operand names have no relation whatsoever to
16673 other C identifiers. You may use any name you like, even those of
16674 existing C symbols, but you must ensure that no two operands within the
16675 same assembler construct use the same symbolic name.
16677 Output operand expressions must be lvalues; the compiler can check
16678 this. The input operands need not be lvalues. The compiler cannot
16679 check whether the operands have data types that are reasonable for the
16680 instruction being executed. It does not parse the assembler instruction
16681 template and does not know what it means or even whether it is valid
16682 assembler input. The extended `asm' feature is most often used for
16683 machine instructions the compiler itself does not know exist. If the
16684 output expression cannot be directly addressed (for example, it is a
16685 bit-field), your constraint must allow a register. In that case, GCC
16686 will use the register as the output of the `asm', and then store that
16687 register into the output.
16689 The ordinary output operands must be write-only; GCC will assume that
16690 the values in these operands before the instruction are dead and need
16691 not be generated. Extended asm supports input-output or read-write
16692 operands. Use the constraint character `+' to indicate such an operand
16693 and list it with the output operands. You should only use read-write
16694 operands when the constraints for the operand (or the operand in which
16695 only some of the bits are to be changed) allow a register.
16697 You may, as an alternative, logically split its function into two
16698 separate operands, one input operand and one write-only output operand.
16699 The connection between them is expressed by constraints which say they
16700 need to be in the same location when the instruction executes. You can
16701 use the same C expression for both operands, or different expressions.
16702 For example, here we write the (fictitious) `combine' instruction with
16703 `bar' as its read-only source operand and `foo' as its read-write
16706 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
16708 The constraint `"0"' for operand 1 says that it must occupy the same
16709 location as operand 0. A number in constraint is allowed only in an
16710 input operand and it must refer to an output operand.
16712 Only a number in the constraint can guarantee that one operand will be
16713 in the same place as another. The mere fact that `foo' is the value of
16714 both operands is not enough to guarantee that they will be in the same
16715 place in the generated assembler code. The following would not work
16718 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
16720 Various optimizations or reloading could cause operands 0 and 1 to be
16721 in different registers; GCC knows no reason not to do so. For example,
16722 the compiler might find a copy of the value of `foo' in one register and
16723 use it for operand 1, but generate the output operand 0 in a different
16724 register (copying it afterward to `foo''s own address). Of course,
16725 since the register for operand 1 is not even mentioned in the assembler
16726 code, the result will not work, but GCC can't tell that.
16728 As of GCC version 3.1, one may write `[NAME]' instead of the operand
16729 number for a matching constraint. For example:
16731 asm ("cmoveq %1,%2,%[result]"
16732 : [result] "=r"(result)
16733 : "r" (test), "r"(new), "[result]"(old));
16735 Sometimes you need to make an `asm' operand be a specific register,
16736 but there's no matching constraint letter for that register _by
16737 itself_. To force the operand into that register, use a local variable
16738 for the operand and specify the register in the variable declaration.
16739 *Note Explicit Reg Vars::. Then for the `asm' operand, use any
16740 register constraint letter that matches the register:
16742 register int *p1 asm ("r0") = ...;
16743 register int *p2 asm ("r1") = ...;
16744 register int *result asm ("r0");
16745 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
16747 In the above example, beware that a register that is call-clobbered by
16748 the target ABI will be overwritten by any function call in the
16749 assignment, including library calls for arithmetic operators. Assuming
16750 it is a call-clobbered register, this may happen to `r0' above by the
16751 assignment to `p2'. If you have to use such a register, use temporary
16752 variables for expressions between the register assignment and use:
16755 register int *p1 asm ("r0") = ...;
16756 register int *p2 asm ("r1") = t1;
16757 register int *result asm ("r0");
16758 asm ("sysint" : "=r" (result) : "0" (p1), "r" (p2));
16760 Some instructions clobber specific hard registers. To describe this,
16761 write a third colon after the input operands, followed by the names of
16762 the clobbered hard registers (given as strings). Here is a realistic
16763 example for the VAX:
16765 asm volatile ("movc3 %0,%1,%2"
16767 : "g" (from), "g" (to), "g" (count)
16768 : "r0", "r1", "r2", "r3", "r4", "r5");
16770 You may not write a clobber description in a way that overlaps with an
16771 input or output operand. For example, you may not have an operand
16772 describing a register class with one member if you mention that register
16773 in the clobber list. Variables declared to live in specific registers
16774 (*note Explicit Reg Vars::), and used as asm input or output operands
16775 must have no part mentioned in the clobber description. There is no
16776 way for you to specify that an input operand is modified without also
16777 specifying it as an output operand. Note that if all the output
16778 operands you specify are for this purpose (and hence unused), you will
16779 then also need to specify `volatile' for the `asm' construct, as
16780 described below, to prevent GCC from deleting the `asm' statement as
16783 If you refer to a particular hardware register from the assembler code,
16784 you will probably have to list the register after the third colon to
16785 tell the compiler the register's value is modified. In some assemblers,
16786 the register names begin with `%'; to produce one `%' in the assembler
16787 code, you must write `%%' in the input.
16789 If your assembler instruction can alter the condition code register,
16790 add `cc' to the list of clobbered registers. GCC on some machines
16791 represents the condition codes as a specific hardware register; `cc'
16792 serves to name this register. On other machines, the condition code is
16793 handled differently, and specifying `cc' has no effect. But it is
16794 valid no matter what the machine.
16796 If your assembler instructions access memory in an unpredictable
16797 fashion, add `memory' to the list of clobbered registers. This will
16798 cause GCC to not keep memory values cached in registers across the
16799 assembler instruction and not optimize stores or loads to that memory.
16800 You will also want to add the `volatile' keyword if the memory affected
16801 is not listed in the inputs or outputs of the `asm', as the `memory'
16802 clobber does not count as a side-effect of the `asm'. If you know how
16803 large the accessed memory is, you can add it as input or output but if
16804 this is not known, you should add `memory'. As an example, if you
16805 access ten bytes of a string, you can use a memory input like:
16807 {"m"( ({ struct { char x[10]; } *p = (void *)ptr ; *p; }) )}.
16809 Note that in the following example the memory input is necessary,
16810 otherwise GCC might optimize the store to `x' away:
16816 asm ("magic stuff accessing an 'int' pointed to by '%1'"
16817 "=&d" (r) : "a" (y), "m" (*y));
16821 You can put multiple assembler instructions together in a single `asm'
16822 template, separated by the characters normally used in assembly code
16823 for the system. A combination that works in most places is a newline
16824 to break the line, plus a tab character to move to the instruction field
16825 (written as `\n\t'). Sometimes semicolons can be used, if the
16826 assembler allows semicolons as a line-breaking character. Note that
16827 some assembler dialects use semicolons to start a comment. The input
16828 operands are guaranteed not to use any of the clobbered registers, and
16829 neither will the output operands' addresses, so you can read and write
16830 the clobbered registers as many times as you like. Here is an example
16831 of multiple instructions in a template; it assumes the subroutine
16832 `_foo' accepts arguments in registers 9 and 10:
16834 asm ("movl %0,r9\n\tmovl %1,r10\n\tcall _foo"
16836 : "g" (from), "g" (to)
16839 Unless an output operand has the `&' constraint modifier, GCC may
16840 allocate it in the same register as an unrelated input operand, on the
16841 assumption the inputs are consumed before the outputs are produced.
16842 This assumption may be false if the assembler code actually consists of
16843 more than one instruction. In such a case, use `&' for each output
16844 operand that may not overlap an input. *Note Modifiers::.
16846 If you want to test the condition code produced by an assembler
16847 instruction, you must include a branch and a label in the `asm'
16848 construct, as follows:
16850 asm ("clr %0\n\tfrob %1\n\tbeq 0f\n\tmov #1,%0\n0:"
16854 This assumes your assembler supports local labels, as the GNU assembler
16855 and most Unix assemblers do.
16857 Speaking of labels, jumps from one `asm' to another are not supported.
16858 The compiler's optimizers do not know about these jumps, and therefore
16859 they cannot take account of them when deciding how to optimize.
16861 Usually the most convenient way to use these `asm' instructions is to
16862 encapsulate them in macros that look like functions. For example,
16865 ({ double __value, __arg = (x); \
16866 asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \
16869 Here the variable `__arg' is used to make sure that the instruction
16870 operates on a proper `double' value, and to accept only those arguments
16871 `x' which can convert automatically to a `double'.
16873 Another way to make sure the instruction operates on the correct data
16874 type is to use a cast in the `asm'. This is different from using a
16875 variable `__arg' in that it converts more different types. For
16876 example, if the desired type were `int', casting the argument to `int'
16877 would accept a pointer with no complaint, while assigning the argument
16878 to an `int' variable named `__arg' would warn about using a pointer
16879 unless the caller explicitly casts it.
16881 If an `asm' has output operands, GCC assumes for optimization purposes
16882 the instruction has no side effects except to change the output
16883 operands. This does not mean instructions with a side effect cannot be
16884 used, but you must be careful, because the compiler may eliminate them
16885 if the output operands aren't used, or move them out of loops, or
16886 replace two with one if they constitute a common subexpression. Also,
16887 if your instruction does have a side effect on a variable that otherwise
16888 appears not to change, the old value of the variable may be reused later
16889 if it happens to be found in a register.
16891 You can prevent an `asm' instruction from being deleted by writing the
16892 keyword `volatile' after the `asm'. For example:
16894 #define get_and_set_priority(new) \
16896 asm volatile ("get_and_set_priority %0, %1" \
16897 : "=g" (__old) : "g" (new)); \
16900 The `volatile' keyword indicates that the instruction has important
16901 side-effects. GCC will not delete a volatile `asm' if it is reachable.
16902 (The instruction can still be deleted if GCC can prove that
16903 control-flow will never reach the location of the instruction.) Note
16904 that even a volatile `asm' instruction can be moved relative to other
16905 code, including across jump instructions. For example, on many targets
16906 there is a system register which can be set to control the rounding
16907 mode of floating point operations. You might try setting it with a
16908 volatile `asm', like this PowerPC example:
16910 asm volatile("mtfsf 255,%0" : : "f" (fpenv));
16913 This will not work reliably, as the compiler may move the addition back
16914 before the volatile `asm'. To make it work you need to add an
16915 artificial dependency to the `asm' referencing a variable in the code
16916 you don't want moved, for example:
16918 asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
16921 Similarly, you can't expect a sequence of volatile `asm' instructions
16922 to remain perfectly consecutive. If you want consecutive output, use a
16923 single `asm'. Also, GCC will perform some optimizations across a
16924 volatile `asm' instruction; GCC does not "forget everything" when it
16925 encounters a volatile `asm' instruction the way some other compilers do.
16927 An `asm' instruction without any output operands will be treated
16928 identically to a volatile `asm' instruction.
16930 It is a natural idea to look for a way to give access to the condition
16931 code left by the assembler instruction. However, when we attempted to
16932 implement this, we found no way to make it work reliably. The problem
16933 is that output operands might need reloading, which would result in
16934 additional following "store" instructions. On most machines, these
16935 instructions would alter the condition code before there was time to
16936 test it. This problem doesn't arise for ordinary "test" and "compare"
16937 instructions because they don't have any output operands.
16939 For reasons similar to those described above, it is not possible to
16940 give an assembler instruction access to the condition code left by
16941 previous instructions.
16943 If you are writing a header file that should be includable in ISO C
16944 programs, write `__asm__' instead of `asm'. *Note Alternate Keywords::.
16946 5.34.1 Size of an `asm'
16947 -----------------------
16949 Some targets require that GCC track the size of each instruction used in
16950 order to generate correct code. Because the final length of an `asm'
16951 is only known by the assembler, GCC must make an estimate as to how big
16952 it will be. The estimate is formed by counting the number of
16953 statements in the pattern of the `asm' and multiplying that by the
16954 length of the longest instruction on that processor. Statements in the
16955 `asm' are identified by newline characters and whatever statement
16956 separator characters are supported by the assembler; on most processors
16957 this is the ``;'' character.
16959 Normally, GCC's estimate is perfectly adequate to ensure that correct
16960 code is generated, but it is possible to confuse the compiler if you use
16961 pseudo instructions or assembler macros that expand into multiple real
16962 instructions or if you use assembler directives that expand to more
16963 space in the object file than would be needed for a single instruction.
16964 If this happens then the assembler will produce a diagnostic saying that
16965 a label is unreachable.
16967 5.34.2 i386 floating point asm operands
16968 ---------------------------------------
16970 There are several rules on the usage of stack-like regs in asm_operands
16971 insns. These rules apply only to the operands that are stack-like regs:
16973 1. Given a set of input regs that die in an asm_operands, it is
16974 necessary to know which are implicitly popped by the asm, and
16975 which must be explicitly popped by gcc.
16977 An input reg that is implicitly popped by the asm must be
16978 explicitly clobbered, unless it is constrained to match an output
16981 2. For any input reg that is implicitly popped by an asm, it is
16982 necessary to know how to adjust the stack to compensate for the
16983 pop. If any non-popped input is closer to the top of the
16984 reg-stack than the implicitly popped reg, it would not be possible
16985 to know what the stack looked like--it's not clear how the rest of
16986 the stack "slides up".
16988 All implicitly popped input regs must be closer to the top of the
16989 reg-stack than any input that is not implicitly popped.
16991 It is possible that if an input dies in an insn, reload might use
16992 the input reg for an output reload. Consider this example:
16994 asm ("foo" : "=t" (a) : "f" (b));
16996 This asm says that input B is not popped by the asm, and that the
16997 asm pushes a result onto the reg-stack, i.e., the stack is one
16998 deeper after the asm than it was before. But, it is possible that
16999 reload will think that it can use the same reg for both the input
17000 and the output, if input B dies in this insn.
17002 If any input operand uses the `f' constraint, all output reg
17003 constraints must use the `&' earlyclobber.
17005 The asm above would be written as
17007 asm ("foo" : "=&t" (a) : "f" (b));
17009 3. Some operands need to be in particular places on the stack. All
17010 output operands fall in this category--there is no other way to
17011 know which regs the outputs appear in unless the user indicates
17012 this in the constraints.
17014 Output operands must specifically indicate which reg an output
17015 appears in after an asm. `=f' is not allowed: the operand
17016 constraints must select a class with a single reg.
17018 4. Output operands may not be "inserted" between existing stack regs.
17019 Since no 387 opcode uses a read/write operand, all output operands
17020 are dead before the asm_operands, and are pushed by the
17021 asm_operands. It makes no sense to push anywhere but the top of
17024 Output operands must start at the top of the reg-stack: output
17025 operands may not "skip" a reg.
17027 5. Some asm statements may need extra stack space for internal
17028 calculations. This can be guaranteed by clobbering stack registers
17029 unrelated to the inputs and outputs.
17032 Here are a couple of reasonable asms to want to write. This asm takes
17033 one input, which is internally popped, and produces two outputs.
17035 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
17037 This asm takes two inputs, which are popped by the `fyl2xp1' opcode,
17038 and replaces them with one output. The user must code the `st(1)'
17039 clobber for reg-stack.c to know that `fyl2xp1' pops both inputs.
17041 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
17044 File: gcc.info, Node: Constraints, Next: Asm Labels, Prev: Extended Asm, Up: C Extensions
17046 5.35 Constraints for `asm' Operands
17047 ===================================
17049 Here are specific details on what constraint letters you can use with
17050 `asm' operands. Constraints can say whether an operand may be in a
17051 register, and which kinds of register; whether the operand can be a
17052 memory reference, and which kinds of address; whether the operand may
17053 be an immediate constant, and which possible values it may have.
17054 Constraints can also require two operands to match.
17058 * Simple Constraints:: Basic use of constraints.
17059 * Multi-Alternative:: When an insn has two alternative constraint-patterns.
17060 * Modifiers:: More precise control over effects of constraints.
17061 * Machine Constraints:: Special constraints for some particular machines.
17064 File: gcc.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints
17066 5.35.1 Simple Constraints
17067 -------------------------
17069 The simplest kind of constraint is a string full of letters, each of
17070 which describes one kind of operand that is permitted. Here are the
17071 letters that are allowed:
17074 Whitespace characters are ignored and can be inserted at any
17075 position except the first. This enables each alternative for
17076 different operands to be visually aligned in the machine
17077 description even if they have different number of constraints and
17081 A memory operand is allowed, with any kind of address that the
17082 machine supports in general.
17085 A memory operand is allowed, but only if the address is
17086 "offsettable". This means that adding a small integer (actually,
17087 the width in bytes of the operand, as determined by its machine
17088 mode) may be added to the address and the result is also a valid
17091 For example, an address which is constant is offsettable; so is an
17092 address that is the sum of a register and a constant (as long as a
17093 slightly larger constant is also within the range of
17094 address-offsets supported by the machine); but an autoincrement or
17095 autodecrement address is not offsettable. More complicated
17096 indirect/indexed addresses may or may not be offsettable depending
17097 on the other addressing modes that the machine supports.
17099 Note that in an output operand which can be matched by another
17100 operand, the constraint letter `o' is valid only when accompanied
17101 by both `<' (if the target machine has predecrement addressing)
17102 and `>' (if the target machine has preincrement addressing).
17105 A memory operand that is not offsettable. In other words,
17106 anything that would fit the `m' constraint but not the `o'
17110 A memory operand with autodecrement addressing (either
17111 predecrement or postdecrement) is allowed.
17114 A memory operand with autoincrement addressing (either
17115 preincrement or postincrement) is allowed.
17118 A register operand is allowed provided that it is in a general
17122 An immediate integer operand (one with constant value) is allowed.
17123 This includes symbolic constants whose values will be known only at
17124 assembly time or later.
17127 An immediate integer operand with a known numeric value is allowed.
17128 Many systems cannot support assembly-time constants for operands
17129 less than a word wide. Constraints for these operands should use
17130 `n' rather than `i'.
17132 `I', `J', `K', ... `P'
17133 Other letters in the range `I' through `P' may be defined in a
17134 machine-dependent fashion to permit immediate integer operands with
17135 explicit integer values in specified ranges. For example, on the
17136 68000, `I' is defined to stand for the range of values 1 to 8.
17137 This is the range permitted as a shift count in the shift
17141 An immediate floating operand (expression code `const_double') is
17142 allowed, but only if the target floating point format is the same
17143 as that of the host machine (on which the compiler is running).
17146 An immediate floating operand (expression code `const_double' or
17147 `const_vector') is allowed.
17150 `G' and `H' may be defined in a machine-dependent fashion to
17151 permit immediate floating operands in particular ranges of values.
17154 An immediate integer operand whose value is not an explicit
17155 integer is allowed.
17157 This might appear strange; if an insn allows a constant operand
17158 with a value not known at compile time, it certainly must allow
17159 any known value. So why use `s' instead of `i'? Sometimes it
17160 allows better code to be generated.
17162 For example, on the 68000 in a fullword instruction it is possible
17163 to use an immediate operand; but if the immediate value is between
17164 -128 and 127, better code results from loading the value into a
17165 register and using the register. This is because the load into
17166 the register can be done with a `moveq' instruction. We arrange
17167 for this to happen by defining the letter `K' to mean "any integer
17168 outside the range -128 to 127", and then specifying `Ks' in the
17169 operand constraints.
17172 Any register, memory or immediate integer operand is allowed,
17173 except for registers that are not general registers.
17176 Any operand whatsoever is allowed.
17178 `0', `1', `2', ... `9'
17179 An operand that matches the specified operand number is allowed.
17180 If a digit is used together with letters within the same
17181 alternative, the digit should come last.
17183 This number is allowed to be more than a single digit. If multiple
17184 digits are encountered consecutively, they are interpreted as a
17185 single decimal integer. There is scant chance for ambiguity,
17186 since to-date it has never been desirable that `10' be interpreted
17187 as matching either operand 1 _or_ operand 0. Should this be
17188 desired, one can use multiple alternatives instead.
17190 This is called a "matching constraint" and what it really means is
17191 that the assembler has only a single operand that fills two roles
17192 which `asm' distinguishes. For example, an add instruction uses
17193 two input operands and an output operand, but on most CISC
17194 machines an add instruction really has only two operands, one of
17195 them an input-output operand:
17199 Matching constraints are used in these circumstances. More
17200 precisely, the two operands that match must include one input-only
17201 operand and one output-only operand. Moreover, the digit must be a
17202 smaller number than the number of the operand that uses it in the
17206 An operand that is a valid memory address is allowed. This is for
17207 "load address" and "push address" instructions.
17209 `p' in the constraint must be accompanied by `address_operand' as
17210 the predicate in the `match_operand'. This predicate interprets
17211 the mode specified in the `match_operand' as the mode of the memory
17212 reference for which the address would be valid.
17215 Other letters can be defined in machine-dependent fashion to stand
17216 for particular classes of registers or other arbitrary operand
17217 types. `d', `a' and `f' are defined on the 68000/68020 to stand
17218 for data, address and floating point registers.
17222 File: gcc.info, Node: Multi-Alternative, Next: Modifiers, Prev: Simple Constraints, Up: Constraints
17224 5.35.2 Multiple Alternative Constraints
17225 ---------------------------------------
17227 Sometimes a single instruction has multiple alternative sets of possible
17228 operands. For example, on the 68000, a logical-or instruction can
17229 combine register or an immediate value into memory, or it can combine
17230 any kind of operand into a register; but it cannot combine one memory
17231 location into another.
17233 These constraints are represented as multiple alternatives. An
17234 alternative can be described by a series of letters for each operand.
17235 The overall constraint for an operand is made from the letters for this
17236 operand from the first alternative, a comma, the letters for this
17237 operand from the second alternative, a comma, and so on until the last
17240 If all the operands fit any one alternative, the instruction is valid.
17241 Otherwise, for each alternative, the compiler counts how many
17242 instructions must be added to copy the operands so that that
17243 alternative applies. The alternative requiring the least copying is
17244 chosen. If two alternatives need the same amount of copying, the one
17245 that comes first is chosen. These choices can be altered with the `?'
17246 and `!' characters:
17249 Disparage slightly the alternative that the `?' appears in, as a
17250 choice when no alternative applies exactly. The compiler regards
17251 this alternative as one unit more costly for each `?' that appears
17255 Disparage severely the alternative that the `!' appears in. This
17256 alternative can still be used if it fits without reloading, but if
17257 reloading is needed, some other alternative will be used.
17260 File: gcc.info, Node: Modifiers, Next: Machine Constraints, Prev: Multi-Alternative, Up: Constraints
17262 5.35.3 Constraint Modifier Characters
17263 -------------------------------------
17265 Here are constraint modifier characters.
17268 Means that this operand is write-only for this instruction: the
17269 previous value is discarded and replaced by output data.
17272 Means that this operand is both read and written by the
17275 When the compiler fixes up the operands to satisfy the constraints,
17276 it needs to know which operands are inputs to the instruction and
17277 which are outputs from it. `=' identifies an output; `+'
17278 identifies an operand that is both input and output; all other
17279 operands are assumed to be input only.
17281 If you specify `=' or `+' in a constraint, you put it in the first
17282 character of the constraint string.
17285 Means (in a particular alternative) that this operand is an
17286 "earlyclobber" operand, which is modified before the instruction is
17287 finished using the input operands. Therefore, this operand may
17288 not lie in a register that is used as an input operand or as part
17289 of any memory address.
17291 `&' applies only to the alternative in which it is written. In
17292 constraints with multiple alternatives, sometimes one alternative
17293 requires `&' while others do not. See, for example, the `movdf'
17296 An input operand can be tied to an earlyclobber operand if its only
17297 use as an input occurs before the early result is written. Adding
17298 alternatives of this form often allows GCC to produce better code
17299 when only some of the inputs can be affected by the earlyclobber.
17300 See, for example, the `mulsi3' insn of the ARM.
17302 `&' does not obviate the need to write `='.
17305 Declares the instruction to be commutative for this operand and the
17306 following operand. This means that the compiler may interchange
17307 the two operands if that is the cheapest way to make all operands
17308 fit the constraints. GCC can only handle one commutative pair in
17309 an asm; if you use more, the compiler may fail. Note that you
17310 need not use the modifier if the two alternatives are strictly
17311 identical; this would only waste time in the reload pass. The
17312 modifier is not operational after register allocation, so the
17313 result of `define_peephole2' and `define_split's performed after
17314 reload cannot rely on `%' to make the intended insn match.
17317 Says that all following characters, up to the next comma, are to be
17318 ignored as a constraint. They are significant only for choosing
17319 register preferences.
17322 Says that the following character should be ignored when choosing
17323 register preferences. `*' has no effect on the meaning of the
17324 constraint as a constraint, and no effect on reloading.
17328 File: gcc.info, Node: Machine Constraints, Prev: Modifiers, Up: Constraints
17330 5.35.4 Constraints for Particular Machines
17331 ------------------------------------------
17333 Whenever possible, you should use the general-purpose constraint letters
17334 in `asm' arguments, since they will convey meaning more readily to
17335 people reading your code. Failing that, use the constraint letters
17336 that usually have very similar meanings across architectures. The most
17337 commonly used constraints are `m' and `r' (for memory and
17338 general-purpose registers respectively; *note Simple Constraints::), and
17339 `I', usually the letter indicating the most common immediate-constant
17342 For each machine architecture, the `config/MACHINE/MACHINE.h' file
17343 defines additional constraints. These constraints are used by the
17344 compiler itself for instruction generation, as well as for `asm'
17345 statements; therefore, some of the constraints are not particularly
17346 interesting for `asm'. The constraints are defined through these
17349 `REG_CLASS_FROM_LETTER'
17350 Register class constraints (usually lowercase).
17352 `CONST_OK_FOR_LETTER_P'
17353 Immediate constant constraints, for non-floating point constants of
17354 word size or smaller precision (usually uppercase).
17356 `CONST_DOUBLE_OK_FOR_LETTER_P'
17357 Immediate constant constraints, for all floating point constants
17358 and for constants of greater than word size precision (usually
17362 Special cases of registers or memory. This macro is not required,
17363 and is only defined for some machines.
17365 Inspecting these macro definitions in the compiler source for your
17366 machine is the best way to be certain you have the right constraints.
17367 However, here is a summary of the machine-dependent constraints
17368 available on some particular machines.
17370 _ARM family--`arm.h'_
17373 Floating-point register
17376 VFP floating-point register
17379 One of the floating-point constants 0.0, 0.5, 1.0, 2.0, 3.0,
17383 Floating-point constant that would satisfy the constraint `F'
17387 Integer that is valid as an immediate operand in a data
17388 processing instruction. That is, an integer in the range 0
17389 to 255 rotated by a multiple of 2
17392 Integer in the range -4095 to 4095
17395 Integer that satisfies constraint `I' when inverted (ones
17399 Integer that satisfies constraint `I' when negated (twos
17403 Integer in the range 0 to 32
17406 A memory reference where the exact address is in a single
17407 register (``m'' is preferable for `asm' statements)
17410 An item in the constant pool
17413 A symbol in the text segment of the current file
17416 A memory reference suitable for VFP load/store insns
17417 (reg+constant offset)
17420 A memory reference suitable for iWMMXt load/store
17424 A memory reference suitable for the ARMv4 ldrsb instruction.
17426 _AVR family--`avr.h'_
17429 Registers from r0 to r15
17432 Registers from r16 to r23
17435 Registers from r16 to r31
17438 Registers from r24 to r31. These registers can be used in
17442 Pointer register (r26-r31)
17445 Base pointer register (r28-r31)
17448 Stack pointer register (SPH:SPL)
17451 Temporary register r0
17454 Register pair X (r27:r26)
17457 Register pair Y (r29:r28)
17460 Register pair Z (r31:r30)
17463 Constant greater than -1, less than 64
17466 Constant greater than -64, less than 1
17475 Constant that fits in 8 bits
17478 Constant integer -1
17481 Constant integer 8, 16, or 24
17487 A floating point constant 0.0
17489 _CRX Architecture--`crx.h'_
17492 Registers from r0 to r14 (registers without stack pointer)
17495 Register r16 (64-bit accumulator lo register)
17498 Register r17 (64-bit accumulator hi register)
17501 Register pair r16-r17. (64-bit accumulator lo-hi pair)
17504 Constant that fits in 3 bits
17507 Constant that fits in 4 bits
17510 Constant that fits in 5 bits
17513 Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48
17516 Floating point constant that is legal for store immediate
17518 _PowerPC and IBM RS6000--`rs6000.h'_
17521 Address base register
17524 Floating point register
17530 `MQ', `CTR', or `LINK' register
17542 `CR' register (condition register) number 0
17545 `CR' register (condition register)
17548 `FPMEM' stack memory for FPR-GPR transfers
17551 Signed 16-bit constant
17554 Unsigned 16-bit constant shifted left 16 bits (use `L'
17555 instead for `SImode' constants)
17558 Unsigned 16-bit constant
17561 Signed 16-bit constant shifted left 16 bits
17564 Constant larger than 31
17573 Constant whose negation is a signed 16-bit constant
17576 Floating point constant that can be loaded into a register
17577 with one instruction per word
17580 Memory operand that is an offset from a register (`m' is
17581 preferable for `asm' statements)
17587 Constant suitable as a 64-bit mask operand
17590 Constant suitable as a 32-bit mask operand
17593 System V Release 4 small data area reference
17595 _MorphoTech family--`mt.h'_
17598 Constant for an arithmetic insn (16-bit signed integer).
17604 Constant for a logical insn (16-bit zero-extended integer).
17607 A constant that can be loaded with `lui' (i.e. the bottom 16
17611 A constant that takes two words to load (i.e. not matched by
17615 Negative 16-bit constants other than -65536.
17618 A 15-bit signed integer constant.
17621 A positive 16-bit constant.
17623 _Intel 386--`i386.h'_
17626 `a', `b', `c', or `d' register for the i386. For x86-64 it
17627 is equivalent to `r' class (for 8-bit instructions that do
17628 not use upper halves).
17631 `a', `b', `c', or `d' register (for 8-bit instructions, that
17632 do use upper halves).
17635 Legacy register--equivalent to `r' class in i386 mode. (for
17636 non-8-bit registers used together with 8-bit upper halves in
17637 a single instruction)
17640 Specifies the `a' or `d' registers. This is primarily useful
17641 for 64-bit integer values (when in 32-bit mode) intended to
17642 be returned with the `d' register holding the most
17643 significant bits and the `a' register holding the least
17647 Floating point register
17650 First (top of stack) floating point register
17653 Second floating point register
17665 Specifies constant that can be easily constructed in SSE
17666 register without loading it from memory.
17684 Constant in range 0 to 31 (for 32-bit shifts)
17687 Constant in range 0 to 63 (for 64-bit shifts)
17696 0, 1, 2, or 3 (shifts for `lea' instruction)
17699 Constant in range 0 to 255 (for `out' instruction)
17702 Constant in range 0 to `0xffffffff' or symbolic reference
17703 known to fit specified range. (for using immediates in zero
17704 extending 32-bit to 64-bit x86-64 instructions)
17707 Constant in range -2147483648 to 2147483647 or symbolic
17708 reference known to fit specified range. (for using
17709 immediates in 64-bit x86-64 instructions)
17712 Standard 80387 floating point constant
17714 _Intel IA-64--`ia64.h'_
17717 General register `r0' to `r3' for `addl' instruction
17723 Predicate register (`c' as in "conditional")
17726 Application register residing in M-unit
17729 Application register residing in I-unit
17732 Floating-point register
17735 Memory operand. Remember that `m' allows postincrement and
17736 postdecrement which require printing with `%Pn' on IA-64.
17737 Use `S' to disallow postincrement and postdecrement.
17740 Floating-point constant 0.0 or 1.0
17743 14-bit signed integer constant
17746 22-bit signed integer constant
17749 8-bit signed integer constant for logical instructions
17752 8-bit adjusted signed integer constant for compare pseudo-ops
17755 6-bit unsigned integer constant for shift counts
17758 9-bit signed integer constant for load and store
17765 0 or -1 for `dep' instruction
17768 Non-volatile memory for floating-point loads and stores
17771 Integer constant in the range 1 to 4 for `shladd' instruction
17774 Memory operand except postincrement and postdecrement
17779 Register in the class `ACC_REGS' (`acc0' to `acc7').
17782 Register in the class `EVEN_ACC_REGS' (`acc0' to `acc7').
17785 Register in the class `CC_REGS' (`fcc0' to `fcc3' and `icc0'
17789 Register in the class `GPR_REGS' (`gr0' to `gr63').
17792 Register in the class `EVEN_REGS' (`gr0' to `gr63'). Odd
17793 registers are excluded not in the class but through the use
17794 of a machine mode larger than 4 bytes.
17797 Register in the class `FPR_REGS' (`fr0' to `fr63').
17800 Register in the class `FEVEN_REGS' (`fr0' to `fr63'). Odd
17801 registers are excluded not in the class but through the use
17802 of a machine mode larger than 4 bytes.
17805 Register in the class `LR_REG' (the `lr' register).
17808 Register in the class `QUAD_REGS' (`gr2' to `gr63').
17809 Register numbers not divisible by 4 are excluded not in the
17810 class but through the use of a machine mode larger than 8
17814 Register in the class `ICC_REGS' (`icc0' to `icc3').
17817 Register in the class `FCC_REGS' (`fcc0' to `fcc3').
17820 Register in the class `ICR_REGS' (`cc4' to `cc7').
17823 Register in the class `FCR_REGS' (`cc0' to `cc3').
17826 Register in the class `QUAD_FPR_REGS' (`fr0' to `fr63').
17827 Register numbers not divisible by 4 are excluded not in the
17828 class but through the use of a machine mode larger than 8
17832 Register in the class `SPR_REGS' (`lcr' and `lr').
17835 Register in the class `QUAD_ACC_REGS' (`acc0' to `acc7').
17838 Register in the class `ACCG_REGS' (`accg0' to `accg7').
17841 Register in the class `CR_REGS' (`cc0' to `cc7').
17844 Floating point constant zero
17847 6-bit signed integer constant
17850 10-bit signed integer constant
17853 16-bit signed integer constant
17856 16-bit unsigned integer constant
17859 12-bit signed integer constant that is negative--i.e. in the
17860 range of -2048 to -1
17866 12-bit signed integer constant that is greater than
17867 zero--i.e. in the range of 1 to 2047.
17870 _Blackfin family--`bfin.h'_
17879 A call clobbered P register.
17882 Even-numbered D register
17885 Odd-numbered D register
17888 Accumulator register.
17891 Even-numbered accumulator register.
17894 Odd-numbered accumulator register.
17906 Registers used for circular buffering, i.e. I, B, or L
17913 Any D, P, B, M, I or L register.
17916 Additional registers typically used only in prologues and
17917 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and
17921 Any register except accumulators or CC.
17924 Signed 16 bit integer (in the range -32768 to 32767)
17927 Unsigned 16 bit integer (in the range 0 to 65535)
17930 Signed 7 bit integer (in the range -64 to 63)
17933 Unsigned 7 bit integer (in the range 0 to 127)
17936 Unsigned 5 bit integer (in the range 0 to 31)
17939 Signed 4 bit integer (in the range -8 to 7)
17942 Signed 3 bit integer (in the range -3 to 4)
17945 Unsigned 3 bit integer (in the range 0 to 7)
17948 Constant N, where N is a single-digit constant in the range 0
17958 An integer constant with exactly a single bit set.
17961 An integer constant with all bits set except exactly one.
17973 `$sp', `$fb', `$sb'.
17976 Any control register, when they're 16 bits wide (nothing if control
17977 registers are 24 bits wide)
17980 Any control register, when they're 24 bits wide.
17986 $r0, $r1, $r2, $r3.
17989 $r0 or $r2, or $r2r0 for 32 bit values.
17992 $r1 or $r3, or $r3r1 for 32 bit values.
17995 A register that can hold a 64 bit value.
17998 $r0 or $r1 (registers with addressable high/low bytes)
18007 Address registers when they're 16 bits wide.
18010 Address registers when they're 24 bits wide.
18013 Registers that can hold QI values.
18016 Registers that can be used with displacements ($a0, $a1, $sb).
18019 Registers that can hold 32 bit values.
18022 Registers that can hold 16 bit values.
18025 Registers chat can hold 16 bit values, including all control
18029 $r0 through R1, plus $a0 and $a1.
18032 The flags register.
18035 The memory-based pseudo-registers $mem0 through $mem15.
18038 Registers that can hold pointers (16 bit registers for r8c, m16c;
18039 24 bit registers for m32cm, m32c).
18042 Matches multiple registers in a PARALLEL to form a larger register.
18043 Used to match function return values.
18058 -8 ... -1 or 1 ... 8
18061 -16 ... -1 or 1 ... 16
18064 -8 ... -1 or 1 ... 8
18070 An 8 bit value with exactly one bit set.
18073 A 16 bit value with exactly one bit set.
18076 The common src/dest memory addressing modes.
18079 Memory addressed using $a0 or $a1.
18082 Memory addressed with immediate addresses.
18085 Memory addressed using the stack pointer ($sp).
18088 Memory addressed using the frame base register ($fb).
18091 Memory addressed using the small base register ($sb).
18099 General-purpose integer register
18102 Floating-point register (if available)
18111 `Hi' or `Lo' register
18114 General-purpose integer register
18117 Floating-point status register
18120 Signed 16-bit constant (for arithmetic instructions)
18126 Zero-extended 16-bit constant (for logic instructions)
18129 Constant with low 16 bits zero (can be loaded with `lui')
18132 32-bit constant which requires two instructions to load (a
18133 constant which is not `I', `K', or `L')
18136 Negative 16-bit constant
18142 Positive 16-bit constant
18145 Floating point zero
18148 Memory reference that can be loaded with more than one
18149 instruction (`m' is preferable for `asm' statements)
18152 Memory reference that can be loaded with one instruction (`m'
18153 is preferable for `asm' statements)
18156 Memory reference in external OSF/rose PIC format (`m' is
18157 preferable for `asm' statements)
18159 _Motorola 680x0--`m68k.h'_
18168 68881 floating-point register, if available
18171 Integer in the range 1 to 8
18174 16-bit signed number
18177 Signed number whose magnitude is greater than 0x80
18180 Integer in the range -8 to -1
18183 Signed number whose magnitude is greater than 0x100
18186 Floating point constant that is not a 68881 constant
18188 _Motorola 68HC11 & 68HC12 families--`m68hc11.h'_
18203 Temporary soft register _.tmp
18206 A soft register _.d1 to _.d31
18209 Stack pointer register
18218 Pseudo register `z' (replaced by `x' or `y' at the end)
18221 An address register: x, y or z
18224 An address register: x or y
18227 Register pair (x:d) to form a 32-bit value
18230 Constants in the range -65536 to 65535
18233 Constants whose 16-bit low part is zero
18236 Constant integer 1 or -1
18239 Constant integer 16
18242 Constants in the range -8 to 2
18248 Floating-point register on the SPARC-V8 architecture and
18249 lower floating-point register on the SPARC-V9 architecture.
18252 Floating-point register. It is equivalent to `f' on the
18253 SPARC-V8 architecture and contains both lower and upper
18254 floating-point registers on the SPARC-V9 architecture.
18257 Floating-point condition code register.
18260 Lower floating-point register. It is only valid on the
18261 SPARC-V9 architecture when the Visual Instruction Set is
18265 Floating-point register. It is only valid on the SPARC-V9
18266 architecture when the Visual Instruction Set is available.
18269 64-bit global or out register for the SPARC-V8+ architecture.
18272 Signed 13-bit constant
18278 32-bit constant with the low 12 bits clear (a constant that
18279 can be loaded with the `sethi' instruction)
18282 A constant in the range supported by `movcc' instructions
18285 A constant in the range supported by `movrcc' instructions
18288 Same as `K', except that it verifies that bits that are not
18289 in the lower 32-bit range are all zero. Must be used instead
18290 of `K' for modes wider than `SImode'
18296 Floating-point zero
18299 Signed 13-bit constant, sign-extended to 32 or 64 bits
18302 Floating-point constant whose integral representation can be
18303 moved into an integer register using a single sethi
18307 Floating-point constant whose integral representation can be
18308 moved into an integer register using a single mov instruction
18311 Floating-point constant whose integral representation can be
18312 moved into an integer register using a high/lo_sum
18313 instruction sequence
18316 Memory address aligned to an 8-byte boundary
18322 Memory address for `e' constraint registers
18328 _TMS320C3x/C4x--`c4x.h'_
18331 Auxiliary (address) register (ar0-ar7)
18334 Stack pointer register (sp)
18337 Standard (32-bit) precision integer register
18340 Extended (40-bit) precision register (r0-r11)
18343 Block count register (bk)
18346 Extended (40-bit) precision low register (r0-r7)
18349 Extended (40-bit) precision register (r0-r1)
18352 Extended (40-bit) precision register (r2-r3)
18355 Repeat count register (rc)
18358 Index register (ir0-ir1)
18361 Status (condition code) register (st)
18364 Data page register (dp)
18367 Floating-point zero
18370 Immediate 16-bit floating-point constant
18373 Signed 16-bit constant
18376 Signed 8-bit constant
18379 Signed 5-bit constant
18382 Unsigned 16-bit constant
18385 Unsigned 8-bit constant
18388 Ones complement of unsigned 16-bit constant
18391 High 16-bit constant (32-bit constant with 16 LSBs zero)
18394 Indirect memory reference with signed 8-bit or index register
18398 Indirect memory reference with unsigned 5-bit displacement
18401 Indirect memory reference with 1 bit or index register
18405 Direct memory reference
18411 _S/390 and zSeries--`s390.h'_
18414 Address register (general purpose register except r0)
18417 Condition code register
18420 Data register (arbitrary general purpose register)
18423 Floating-point register
18426 Unsigned 8-bit constant (0-255)
18429 Unsigned 12-bit constant (0-4095)
18432 Signed 16-bit constant (-32768-32767)
18435 Value appropriate as displacement.
18437 for short displacement
18439 `(-524288..524287)'
18440 for long displacement
18443 Constant integer with a value of 0x7fffffff.
18446 Multiple letter constraint followed by 4 parameter letters.
18448 number of the part counting from most to least
18455 mode of the containing operand
18458 value of the other parts (F--all bits set)
18459 The constraint matches if the specified part of a constant
18460 has a value different from it's other parts.
18463 Memory reference without index register and with short
18467 Memory reference with index register and short displacement.
18470 Memory reference without index register but with long
18474 Memory reference with index register and long displacement.
18477 Pointer with short displacement.
18480 Pointer with long displacement.
18483 Shift count operand.
18486 _Xstormy16--`stormy16.h'_
18501 Registers r0 through r7.
18504 Registers r0 and r1.
18507 The carry register.
18510 Registers r8 and r9.
18513 A constant between 0 and 3 inclusive.
18516 A constant that has exactly one bit set.
18519 A constant that has exactly one bit clear.
18522 A constant between 0 and 255 inclusive.
18525 A constant between -255 and 0 inclusive.
18528 A constant between -3 and 0 inclusive.
18531 A constant between 1 and 4 inclusive.
18534 A constant between -4 and -1 inclusive.
18537 A memory reference that is a stack push.
18540 A memory reference that is a stack pop.
18543 A memory reference that refers to a constant address of known
18547 The register indicated by Rx (not implemented yet).
18550 A constant that is not between 2 and 15 inclusive.
18556 _Xtensa--`xtensa.h'_
18559 General-purpose 32-bit register
18562 One-bit boolean register
18565 MAC16 40-bit accumulator register
18568 Signed 12-bit integer constant, for use in MOVI instructions
18571 Signed 8-bit integer constant, for use in ADDI instructions
18574 Integer constant valid for BccI instructions
18577 Unsigned constant valid for BccUI instructions
18582 File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Constraints, Up: C Extensions
18584 5.36 Controlling Names Used in Assembler Code
18585 =============================================
18587 You can specify the name to be used in the assembler code for a C
18588 function or variable by writing the `asm' (or `__asm__') keyword after
18589 the declarator as follows:
18591 int foo asm ("myfoo") = 2;
18593 This specifies that the name to be used for the variable `foo' in the
18594 assembler code should be `myfoo' rather than the usual `_foo'.
18596 On systems where an underscore is normally prepended to the name of a C
18597 function or variable, this feature allows you to define names for the
18598 linker that do not start with an underscore.
18600 It does not make sense to use this feature with a non-static local
18601 variable since such variables do not have assembler names. If you are
18602 trying to put the variable in a particular register, see *Note Explicit
18603 Reg Vars::. GCC presently accepts such code with a warning, but will
18604 probably be changed to issue an error, rather than a warning, in the
18607 You cannot use `asm' in this way in a function _definition_; but you
18608 can get the same effect by writing a declaration for the function
18609 before its definition and putting `asm' there, like this:
18611 extern func () asm ("FUNC");
18617 It is up to you to make sure that the assembler names you choose do not
18618 conflict with any other assembler symbols. Also, you must not use a
18619 register name; that would produce completely invalid assembler code.
18620 GCC does not as yet have the ability to store static variables in
18621 registers. Perhaps that will be added.
18624 File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: C Extensions
18626 5.37 Variables in Specified Registers
18627 =====================================
18629 GNU C allows you to put a few global variables into specified hardware
18630 registers. You can also specify the register in which an ordinary
18631 register variable should be allocated.
18633 * Global register variables reserve registers throughout the program.
18634 This may be useful in programs such as programming language
18635 interpreters which have a couple of global variables that are
18636 accessed very often.
18638 * Local register variables in specific registers do not reserve the
18639 registers, except at the point where they are used as input or
18640 output operands in an `asm' statement and the `asm' statement
18641 itself is not deleted. The compiler's data flow analysis is
18642 capable of determining where the specified registers contain live
18643 values, and where they are available for other uses. Stores into
18644 local register variables may be deleted when they appear to be
18645 dead according to dataflow analysis. References to local register
18646 variables may be deleted or moved or simplified.
18648 These local variables are sometimes convenient for use with the
18649 extended `asm' feature (*note Extended Asm::), if you want to
18650 write one output of the assembler instruction directly into a
18651 particular register. (This will work provided the register you
18652 specify fits the constraints specified for that operand in the
18657 * Global Reg Vars::
18661 File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars
18663 5.37.1 Defining Global Register Variables
18664 -----------------------------------------
18666 You can define a global register variable in GNU C like this:
18668 register int *foo asm ("a5");
18670 Here `a5' is the name of the register which should be used. Choose a
18671 register which is normally saved and restored by function calls on your
18672 machine, so that library routines will not clobber it.
18674 Naturally the register name is cpu-dependent, so you would need to
18675 conditionalize your program according to cpu type. The register `a5'
18676 would be a good choice on a 68000 for a variable of pointer type. On
18677 machines with register windows, be sure to choose a "global" register
18678 that is not affected magically by the function call mechanism.
18680 In addition, operating systems on one type of cpu may differ in how
18681 they name the registers; then you would need additional conditionals.
18682 For example, some 68000 operating systems call this register `%a5'.
18684 Eventually there may be a way of asking the compiler to choose a
18685 register automatically, but first we need to figure out how it should
18686 choose and how to enable you to guide the choice. No solution is
18689 Defining a global register variable in a certain register reserves that
18690 register entirely for this use, at least within the current compilation.
18691 The register will not be allocated for any other purpose in the
18692 functions in the current compilation. The register will not be saved
18693 and restored by these functions. Stores into this register are never
18694 deleted even if they would appear to be dead, but references may be
18695 deleted or moved or simplified.
18697 It is not safe to access the global register variables from signal
18698 handlers, or from more than one thread of control, because the system
18699 library routines may temporarily use the register for other things
18700 (unless you recompile them specially for the task at hand).
18702 It is not safe for one function that uses a global register variable to
18703 call another such function `foo' by way of a third function `lose' that
18704 was compiled without knowledge of this variable (i.e. in a different
18705 source file in which the variable wasn't declared). This is because
18706 `lose' might save the register and put some other value there. For
18707 example, you can't expect a global register variable to be available in
18708 the comparison-function that you pass to `qsort', since `qsort' might
18709 have put something else in that register. (If you are prepared to
18710 recompile `qsort' with the same global register variable, you can solve
18713 If you want to recompile `qsort' or other source files which do not
18714 actually use your global register variable, so that they will not use
18715 that register for any other purpose, then it suffices to specify the
18716 compiler option `-ffixed-REG'. You need not actually add a global
18717 register declaration to their source code.
18719 A function which can alter the value of a global register variable
18720 cannot safely be called from a function compiled without this variable,
18721 because it could clobber the value the caller expects to find there on
18722 return. Therefore, the function which is the entry point into the part
18723 of the program that uses the global register variable must explicitly
18724 save and restore the value which belongs to its caller.
18726 On most machines, `longjmp' will restore to each global register
18727 variable the value it had at the time of the `setjmp'. On some
18728 machines, however, `longjmp' will not change the value of global
18729 register variables. To be portable, the function that called `setjmp'
18730 should make other arrangements to save the values of the global register
18731 variables, and to restore them in a `longjmp'. This way, the same
18732 thing will happen regardless of what `longjmp' does.
18734 All global register variable declarations must precede all function
18735 definitions. If such a declaration could appear after function
18736 definitions, the declaration would be too late to prevent the register
18737 from being used for other purposes in the preceding functions.
18739 Global register variables may not have initial values, because an
18740 executable file has no means to supply initial contents for a register.
18742 On the SPARC, there are reports that g3 ... g7 are suitable registers,
18743 but certain library functions, such as `getwd', as well as the
18744 subroutines for division and remainder, modify g3 and g4. g1 and g2
18745 are local temporaries.
18747 On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of
18748 course, it will not do to use more than a few of those.
18751 File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars
18753 5.37.2 Specifying Registers for Local Variables
18754 -----------------------------------------------
18756 You can define a local register variable with a specified register like
18759 register int *foo asm ("a5");
18761 Here `a5' is the name of the register which should be used. Note that
18762 this is the same syntax used for defining global register variables,
18763 but for a local variable it would appear within a function.
18765 Naturally the register name is cpu-dependent, but this is not a
18766 problem, since specific registers are most often useful with explicit
18767 assembler instructions (*note Extended Asm::). Both of these things
18768 generally require that you conditionalize your program according to cpu
18771 In addition, operating systems on one type of cpu may differ in how
18772 they name the registers; then you would need additional conditionals.
18773 For example, some 68000 operating systems call this register `%a5'.
18775 Defining such a register variable does not reserve the register; it
18776 remains available for other uses in places where flow control determines
18777 the variable's value is not live.
18779 This option does not guarantee that GCC will generate code that has
18780 this variable in the register you specify at all times. You may not
18781 code an explicit reference to this register in the _assembler
18782 instruction template_ part of an `asm' statement and assume it will
18783 always refer to this variable. However, using the variable as an `asm'
18784 _operand_ guarantees that the specified register is used for the
18787 Stores into local register variables may be deleted when they appear
18788 to be dead according to dataflow analysis. References to local
18789 register variables may be deleted or moved or simplified.
18791 As for global register variables, it's recommended that you choose a
18792 register which is normally saved and restored by function calls on your
18793 machine, so that library routines will not clobber it. A common
18794 pitfall is to initialize multiple call-clobbered registers with
18795 arbitrary expressions, where a function call or library call for an
18796 arithmetic operator will overwrite a register value from a previous
18797 assignment, for example `r0' below:
18798 register int *p1 asm ("r0") = ...;
18799 register int *p2 asm ("r1") = ...;
18800 In those cases, a solution is to use a temporary variable for each
18801 arbitrary expression. *Note Example of asm with clobbered asm reg::.
18804 File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: C Extensions
18806 5.38 Alternate Keywords
18807 =======================
18809 `-ansi' and the various `-std' options disable certain keywords. This
18810 causes trouble when you want to use GNU C extensions, or a
18811 general-purpose header file that should be usable by all programs,
18812 including ISO C programs. The keywords `asm', `typeof' and `inline'
18813 are not available in programs compiled with `-ansi' or `-std' (although
18814 `inline' can be used in a program compiled with `-std=c99'). The ISO
18815 C99 keyword `restrict' is only available when `-std=gnu99' (which will
18816 eventually be the default) or `-std=c99' (or the equivalent
18817 `-std=iso9899:1999') is used.
18819 The way to solve these problems is to put `__' at the beginning and
18820 end of each problematical keyword. For example, use `__asm__' instead
18821 of `asm', and `__inline__' instead of `inline'.
18823 Other C compilers won't accept these alternative keywords; if you want
18824 to compile with another compiler, you can define the alternate keywords
18825 as macros to replace them with the customary keywords. It looks like
18829 #define __asm__ asm
18832 `-pedantic' and other options cause warnings for many GNU C extensions.
18833 You can prevent such warnings within one expression by writing
18834 `__extension__' before the expression. `__extension__' has no effect
18838 File: gcc.info, Node: Incomplete Enums, Next: Function Names, Prev: Alternate Keywords, Up: C Extensions
18840 5.39 Incomplete `enum' Types
18841 ============================
18843 You can define an `enum' tag without specifying its possible values.
18844 This results in an incomplete type, much like what you get if you write
18845 `struct foo' without describing the elements. A later declaration
18846 which does specify the possible values completes the type.
18848 You can't allocate variables or storage using the type while it is
18849 incomplete. However, you can work with pointers to that type.
18851 This extension may not be very useful, but it makes the handling of
18852 `enum' more consistent with the way `struct' and `union' are handled.
18854 This extension is not supported by GNU C++.
18857 File: gcc.info, Node: Function Names, Next: Return Address, Prev: Incomplete Enums, Up: C Extensions
18859 5.40 Function Names as Strings
18860 ==============================
18862 GCC provides three magic variables which hold the name of the current
18863 function, as a string. The first of these is `__func__', which is part
18864 of the C99 standard:
18866 The identifier `__func__' is implicitly declared by the translator
18867 as if, immediately following the opening brace of each function
18868 definition, the declaration
18869 static const char __func__[] = "function-name";
18871 appeared, where function-name is the name of the lexically-enclosing
18872 function. This name is the unadorned name of the function.
18874 `__FUNCTION__' is another name for `__func__'. Older versions of GCC
18875 recognize only this name. However, it is not standardized. For
18876 maximum portability, we recommend you use `__func__', but provide a
18877 fallback definition with the preprocessor:
18879 #if __STDC_VERSION__ < 199901L
18881 # define __func__ __FUNCTION__
18883 # define __func__ "<unknown>"
18887 In C, `__PRETTY_FUNCTION__' is yet another name for `__func__'.
18888 However, in C++, `__PRETTY_FUNCTION__' contains the type signature of
18889 the function as well as its bare name. For example, this program:
18892 extern int printf (char *, ...);
18899 printf ("__FUNCTION__ = %s\n", __FUNCTION__);
18900 printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
18915 __PRETTY_FUNCTION__ = void a::sub(int)
18917 These identifiers are not preprocessor macros. In GCC 3.3 and
18918 earlier, in C only, `__FUNCTION__' and `__PRETTY_FUNCTION__' were
18919 treated as string literals; they could be used to initialize `char'
18920 arrays, and they could be concatenated with other string literals. GCC
18921 3.4 and later treat them as variables, like `__func__'. In C++,
18922 `__FUNCTION__' and `__PRETTY_FUNCTION__' have always been variables.
18925 File: gcc.info, Node: Return Address, Next: Vector Extensions, Prev: Function Names, Up: C Extensions
18927 5.41 Getting the Return or Frame Address of a Function
18928 ======================================================
18930 These functions may be used to get information about the callers of a
18933 -- Built-in Function: void * __builtin_return_address (unsigned int
18935 This function returns the return address of the current function,
18936 or of one of its callers. The LEVEL argument is number of frames
18937 to scan up the call stack. A value of `0' yields the return
18938 address of the current function, a value of `1' yields the return
18939 address of the caller of the current function, and so forth. When
18940 inlining the expected behavior is that the function will return
18941 the address of the function that will be returned to. To work
18942 around this behavior use the `noinline' function attribute.
18944 The LEVEL argument must be a constant integer.
18946 On some machines it may be impossible to determine the return
18947 address of any function other than the current one; in such cases,
18948 or when the top of the stack has been reached, this function will
18949 return `0' or a random value. In addition,
18950 `__builtin_frame_address' may be used to determine if the top of
18951 the stack has been reached.
18953 This function should only be used with a nonzero argument for
18954 debugging purposes.
18956 -- Built-in Function: void * __builtin_frame_address (unsigned int
18958 This function is similar to `__builtin_return_address', but it
18959 returns the address of the function frame rather than the return
18960 address of the function. Calling `__builtin_frame_address' with a
18961 value of `0' yields the frame address of the current function, a
18962 value of `1' yields the frame address of the caller of the current
18963 function, and so forth.
18965 The frame is the area on the stack which holds local variables and
18966 saved registers. The frame address is normally the address of the
18967 first word pushed on to the stack by the function. However, the
18968 exact definition depends upon the processor and the calling
18969 convention. If the processor has a dedicated frame pointer
18970 register, and the function has a frame, then
18971 `__builtin_frame_address' will return the value of the frame
18974 On some machines it may be impossible to determine the frame
18975 address of any function other than the current one; in such cases,
18976 or when the top of the stack has been reached, this function will
18977 return `0' if the first frame pointer is properly initialized by
18980 This function should only be used with a nonzero argument for
18981 debugging purposes.
18984 File: gcc.info, Node: Vector Extensions, Next: Offsetof, Prev: Return Address, Up: C Extensions
18986 5.42 Using vector instructions through built-in functions
18987 =========================================================
18989 On some targets, the instruction set contains SIMD vector instructions
18990 that operate on multiple values contained in one large register at the
18991 same time. For example, on the i386 the MMX, 3Dnow! and SSE extensions
18992 can be used this way.
18994 The first step in using these extensions is to provide the necessary
18995 data types. This should be done using an appropriate `typedef':
18997 typedef int v4si __attribute__ ((vector_size (16)));
18999 The `int' type specifies the base type, while the attribute specifies
19000 the vector size for the variable, measured in bytes. For example, the
19001 declaration above causes the compiler to set the mode for the `v4si'
19002 type to be 16 bytes wide and divided into `int' sized units. For a
19003 32-bit `int' this means a vector of 4 units of 4 bytes, and the
19004 corresponding mode of `foo' will be V4SI.
19006 The `vector_size' attribute is only applicable to integral and float
19007 scalars, although arrays, pointers, and function return values are
19008 allowed in conjunction with this construct.
19010 All the basic integer types can be used as base types, both as signed
19011 and as unsigned: `char', `short', `int', `long', `long long'. In
19012 addition, `float' and `double' can be used to build floating-point
19015 Specifying a combination that is not valid for the current architecture
19016 will cause GCC to synthesize the instructions using a narrower mode.
19017 For example, if you specify a variable of type `V4SI' and your
19018 architecture does not allow for this specific SIMD type, GCC will
19019 produce code that uses 4 `SIs'.
19021 The types defined in this manner can be used with a subset of normal C
19022 operations. Currently, GCC will allow using the following operators on
19023 these types: `+, -, *, /, unary minus, ^, |, &, ~'.
19025 The operations behave like C++ `valarrays'. Addition is defined as
19026 the addition of the corresponding elements of the operands. For
19027 example, in the code below, each of the 4 elements in A will be added
19028 to the corresponding 4 elements in B and the resulting vector will be
19031 typedef int v4si __attribute__ ((vector_size (16)));
19037 Subtraction, multiplication, division, and the logical operations
19038 operate in a similar manner. Likewise, the result of using the unary
19039 minus or complement operators on a vector type is a vector whose
19040 elements are the negative or complemented values of the corresponding
19041 elements in the operand.
19043 You can declare variables and use them in function calls and returns,
19044 as well as in assignments and some casts. You can specify a vector
19045 type as a return type for a function. Vector types can also be used as
19046 function arguments. It is possible to cast from one vector type to
19047 another, provided they are of the same size (in fact, you can also cast
19048 vectors to and from other datatypes of the same size).
19050 You cannot operate between vectors of different lengths or different
19051 signedness without a cast.
19053 A port that supports hardware vector operations, usually provides a set
19054 of built-in functions that can be used to operate on vectors. For
19055 example, a function to add two vectors and multiply the result by a
19056 third could look like this:
19058 v4si f (v4si a, v4si b, v4si c)
19060 v4si tmp = __builtin_addv4si (a, b);
19061 return __builtin_mulv4si (tmp, c);
19065 File: gcc.info, Node: Offsetof, Next: Atomic Builtins, Prev: Vector Extensions, Up: C Extensions
19070 GCC implements for both C and C++ a syntactic extension to implement
19071 the `offsetof' macro.
19074 "__builtin_offsetof" "(" `typename' "," offsetof_member_designator ")"
19076 offsetof_member_designator:
19078 | offsetof_member_designator "." `identifier'
19079 | offsetof_member_designator "[" `expr' "]"
19081 This extension is sufficient such that
19083 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
19085 is a suitable definition of the `offsetof' macro. In C++, TYPE may be
19086 dependent. In either case, MEMBER may consist of a single identifier,
19087 or a sequence of member accesses and array references.
19090 File: gcc.info, Node: Atomic Builtins, Next: Object Size Checking, Prev: Offsetof, Up: C Extensions
19092 5.44 Built-in functions for atomic memory access
19093 ================================================
19095 The following builtins are intended to be compatible with those
19096 described in the `Intel Itanium Processor-specific Application Binary
19097 Interface', section 7.4. As such, they depart from the normal GCC
19098 practice of using the "__builtin_" prefix, and further that they are
19099 overloaded such that they work on multiple types.
19101 The definition given in the Intel documentation allows only for the
19102 use of the types `int', `long', `long long' as well as their unsigned
19103 counterparts. GCC will allow any integral scalar or pointer type that
19104 is 1, 2, 4 or 8 bytes in length.
19106 Not all operations are supported by all target processors. If a
19107 particular operation cannot be implemented on the target processor, a
19108 warning will be generated and a call an external function will be
19109 generated. The external function will carry the same name as the
19110 builtin, with an additional suffix `_N' where N is the size of the data
19113 In most cases, these builtins are considered a "full barrier". That
19114 is, no memory operand will be moved across the operation, either
19115 forward or backward. Further, instructions will be issued as necessary
19116 to prevent the processor from speculating loads across the operation
19117 and from queuing stores after the operation.
19119 All of the routines are are described in the Intel documentation to
19120 take "an optional list of variables protected by the memory barrier".
19121 It's not clear what is meant by that; it could mean that _only_ the
19122 following variables are protected, or it could mean that these variables
19123 should in addition be protected. At present GCC ignores this list and
19124 protects all variables which are globally accessible. If in the future
19125 we make some use of this list, an empty list will continue to mean all
19126 globally accessible variables.
19128 `TYPE __sync_fetch_and_add (TYPE *ptr, TYPE value, ...)'
19129 `TYPE __sync_fetch_and_sub (TYPE *ptr, TYPE value, ...)'
19130 `TYPE __sync_fetch_and_or (TYPE *ptr, TYPE value, ...)'
19131 `TYPE __sync_fetch_and_and (TYPE *ptr, TYPE value, ...)'
19132 `TYPE __sync_fetch_and_xor (TYPE *ptr, TYPE value, ...)'
19133 `TYPE __sync_fetch_and_nand (TYPE *ptr, TYPE value, ...)'
19134 These builtins perform the operation suggested by the name, and
19135 returns the value that had previously been in memory. That is,
19137 { tmp = *ptr; *ptr OP= value; return tmp; }
19138 { tmp = *ptr; *ptr = ~tmp & value; return tmp; } // nand
19140 `TYPE __sync_add_and_fetch (TYPE *ptr, TYPE value, ...)'
19141 `TYPE __sync_sub_and_fetch (TYPE *ptr, TYPE value, ...)'
19142 `TYPE __sync_or_and_fetch (TYPE *ptr, TYPE value, ...)'
19143 `TYPE __sync_and_and_fetch (TYPE *ptr, TYPE value, ...)'
19144 `TYPE __sync_xor_and_fetch (TYPE *ptr, TYPE value, ...)'
19145 `TYPE __sync_nand_and_fetch (TYPE *ptr, TYPE value, ...)'
19146 These builtins perform the operation suggested by the name, and
19147 return the new value. That is,
19149 { *ptr OP= value; return *ptr; }
19150 { *ptr = ~*ptr & value; return *ptr; } // nand
19152 `bool __sync_bool_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
19153 `TYPE __sync_val_compare_and_swap (TYPE *ptr, TYPE oldval TYPE newval, ...)'
19154 These builtins perform an atomic compare and swap. That is, if
19155 the current value of `*PTR' is OLDVAL, then write NEWVAL into
19158 The "bool" version returns true if the comparison is successful and
19159 NEWVAL was written. The "val" version returns the contents of
19160 `*PTR' before the operation.
19162 `__sync_synchronize (...)'
19163 This builtin issues a full memory barrier.
19165 `TYPE __sync_lock_test_and_set (TYPE *ptr, TYPE value, ...)'
19166 This builtin, as described by Intel, is not a traditional
19167 test-and-set operation, but rather an atomic exchange operation.
19168 It writes VALUE into `*PTR', and returns the previous contents of
19171 Many targets have only minimal support for such locks, and do not
19172 support a full exchange operation. In this case, a target may
19173 support reduced functionality here by which the _only_ valid value
19174 to store is the immediate constant 1. The exact value actually
19175 stored in `*PTR' is implementation defined.
19177 This builtin is not a full barrier, but rather an "acquire
19178 barrier". This means that references after the builtin cannot
19179 move to (or be speculated to) before the builtin, but previous
19180 memory stores may not be globally visible yet, and previous memory
19181 loads may not yet be satisfied.
19183 `void __sync_lock_release (TYPE *ptr, ...)'
19184 This builtin releases the lock acquired by
19185 `__sync_lock_test_and_set'. Normally this means writing the
19186 constant 0 to `*PTR'.
19188 This builtin is not a full barrier, but rather a "release barrier".
19189 This means that all previous memory stores are globally visible,
19190 and all previous memory loads have been satisfied, but following
19191 memory reads are not prevented from being speculated to before the
19195 File: gcc.info, Node: Object Size Checking, Next: Other Builtins, Prev: Atomic Builtins, Up: C Extensions
19197 5.45 Object Size Checking Builtins
19198 ==================================
19200 GCC implements a limited buffer overflow protection mechanism that can
19201 prevent some buffer overflow attacks.
19203 -- Built-in Function: size_t __builtin_object_size (void * PTR, int
19205 is a built-in construct that returns a constant number of bytes
19206 from PTR to the end of the object PTR pointer points to (if known
19207 at compile time). `__builtin_object_size' never evaluates its
19208 arguments for side-effects. If there are any side-effects in
19209 them, it returns `(size_t) -1' for TYPE 0 or 1 and `(size_t) 0'
19210 for TYPE 2 or 3. If there are multiple objects PTR can point to
19211 and all of them are known at compile time, the returned number is
19212 the maximum of remaining byte counts in those objects if TYPE & 2
19213 is 0 and minimum if nonzero. If it is not possible to determine
19214 which objects PTR points to at compile time,
19215 `__builtin_object_size' should return `(size_t) -1' for TYPE 0 or
19216 1 and `(size_t) 0' for TYPE 2 or 3.
19218 TYPE is an integer constant from 0 to 3. If the least significant
19219 bit is clear, objects are whole variables, if it is set, a closest
19220 surrounding subobject is considered the object a pointer points to.
19221 The second bit determines if maximum or minimum of remaining bytes
19224 struct V { char buf1[10]; int b; char buf2[10]; } var;
19225 char *p = &var.buf1[1], *q = &var.b;
19227 /* Here the object p points to is var. */
19228 assert (__builtin_object_size (p, 0) == sizeof (var) - 1);
19229 /* The subobject p points to is var.buf1. */
19230 assert (__builtin_object_size (p, 1) == sizeof (var.buf1) - 1);
19231 /* The object q points to is var. */
19232 assert (__builtin_object_size (q, 0)
19233 == (char *) (&var + 1) - (char *) &var.b);
19234 /* The subobject q points to is var.b. */
19235 assert (__builtin_object_size (q, 1) == sizeof (var.b));
19237 There are built-in functions added for many common string operation
19238 functions, e.g. for `memcpy' `__builtin___memcpy_chk' built-in is
19239 provided. This built-in has an additional last argument, which is the
19240 number of bytes remaining in object the DEST argument points to or
19241 `(size_t) -1' if the size is not known.
19243 The built-in functions are optimized into the normal string functions
19244 like `memcpy' if the last argument is `(size_t) -1' or if it is known
19245 at compile time that the destination object will not be overflown. If
19246 the compiler can determine at compile time the object will be always
19247 overflown, it issues a warning.
19249 The intended use can be e.g.
19252 #define bos0(dest) __builtin_object_size (dest, 0)
19253 #define memcpy(dest, src, n) \
19254 __builtin___memcpy_chk (dest, src, n, bos0 (dest))
19258 /* It is unknown what object p points to, so this is optimized
19259 into plain memcpy - no checking is possible. */
19260 memcpy (p, "abcde", n);
19261 /* Destination is known and length too. It is known at compile
19262 time there will be no overflow. */
19263 memcpy (&buf[5], "abcde", 5);
19264 /* Destination is known, but the length is not known at compile time.
19265 This will result in __memcpy_chk call that can check for overflow
19267 memcpy (&buf[5], "abcde", n);
19268 /* Destination is known and it is known at compile time there will
19269 be overflow. There will be a warning and __memcpy_chk call that
19270 will abort the program at runtime. */
19271 memcpy (&buf[6], "abcde", 5);
19273 Such built-in functions are provided for `memcpy', `mempcpy',
19274 `memmove', `memset', `strcpy', `stpcpy', `strncpy', `strcat' and
19277 There are also checking built-in functions for formatted output
19279 int __builtin___sprintf_chk (char *s, int flag, size_t os, const char *fmt, ...);
19280 int __builtin___snprintf_chk (char *s, size_t maxlen, int flag, size_t os,
19281 const char *fmt, ...);
19282 int __builtin___vsprintf_chk (char *s, int flag, size_t os, const char *fmt,
19284 int __builtin___vsnprintf_chk (char *s, size_t maxlen, int flag, size_t os,
19285 const char *fmt, va_list ap);
19287 The added FLAG argument is passed unchanged to `__sprintf_chk' etc.
19288 functions and can contain implementation specific flags on what
19289 additional security measures the checking function might take, such as
19290 handling `%n' differently.
19292 The OS argument is the object size S points to, like in the other
19293 built-in functions. There is a small difference in the behavior
19294 though, if OS is `(size_t) -1', the built-in functions are optimized
19295 into the non-checking functions only if FLAG is 0, otherwise the
19296 checking function is called with OS argument set to `(size_t) -1'.
19298 In addition to this, there are checking built-in functions
19299 `__builtin___printf_chk', `__builtin___vprintf_chk',
19300 `__builtin___fprintf_chk' and `__builtin___vfprintf_chk'. These have
19301 just one additional argument, FLAG, right before format string FMT. If
19302 the compiler is able to optimize them to `fputc' etc. functions, it
19303 will, otherwise the checking function should be called and the FLAG
19304 argument passed to it.
19307 File: gcc.info, Node: Other Builtins, Next: Target Builtins, Prev: Object Size Checking, Up: C Extensions
19309 5.46 Other built-in functions provided by GCC
19310 =============================================
19312 GCC provides a large number of built-in functions other than the ones
19313 mentioned above. Some of these are for internal use in the processing
19314 of exceptions or variable-length argument lists and will not be
19315 documented here because they may change from time to time; we do not
19316 recommend general use of these functions.
19318 The remaining functions are provided for optimization purposes.
19320 GCC includes built-in versions of many of the functions in the standard
19321 C library. The versions prefixed with `__builtin_' will always be
19322 treated as having the same meaning as the C library function even if you
19323 specify the `-fno-builtin' option. (*note C Dialect Options::) Many of
19324 these functions are only optimized in certain cases; if they are not
19325 optimized in a particular case, a call to the library function will be
19328 Outside strict ISO C mode (`-ansi', `-std=c89' or `-std=c99'), the
19329 functions `_exit', `alloca', `bcmp', `bzero', `dcgettext', `dgettext',
19330 `dremf', `dreml', `drem', `exp10f', `exp10l', `exp10', `ffsll', `ffsl',
19331 `ffs', `fprintf_unlocked', `fputs_unlocked', `gammaf', `gammal',
19332 `gamma', `gettext', `index', `isascii', `j0f', `j0l', `j0', `j1f',
19333 `j1l', `j1', `jnf', `jnl', `jn', `mempcpy', `pow10f', `pow10l', `pow10',
19334 `printf_unlocked', `rindex', `scalbf', `scalbl', `scalb', `signbit',
19335 `signbitf', `signbitl', `significandf', `significandl', `significand',
19336 `sincosf', `sincosl', `sincos', `stpcpy', `stpncpy', `strcasecmp',
19337 `strdup', `strfmon', `strncasecmp', `strndup', `toascii', `y0f', `y0l',
19338 `y0', `y1f', `y1l', `y1', `ynf', `ynl' and `yn' may be handled as
19339 built-in functions. All these functions have corresponding versions
19340 prefixed with `__builtin_', which may be used even in strict C89 mode.
19342 The ISO C99 functions `_Exit', `acoshf', `acoshl', `acosh', `asinhf',
19343 `asinhl', `asinh', `atanhf', `atanhl', `atanh', `cabsf', `cabsl',
19344 `cabs', `cacosf', `cacoshf', `cacoshl', `cacosh', `cacosl', `cacos',
19345 `cargf', `cargl', `carg', `casinf', `casinhf', `casinhl', `casinh',
19346 `casinl', `casin', `catanf', `catanhf', `catanhl', `catanh', `catanl',
19347 `catan', `cbrtf', `cbrtl', `cbrt', `ccosf', `ccoshf', `ccoshl',
19348 `ccosh', `ccosl', `ccos', `cexpf', `cexpl', `cexp', `cimagf', `cimagl',
19349 `cimag', `clogf', `clogl', `clog', `conjf', `conjl', `conj',
19350 `copysignf', `copysignl', `copysign', `cpowf', `cpowl', `cpow',
19351 `cprojf', `cprojl', `cproj', `crealf', `creall', `creal', `csinf',
19352 `csinhf', `csinhl', `csinh', `csinl', `csin', `csqrtf', `csqrtl',
19353 `csqrt', `ctanf', `ctanhf', `ctanhl', `ctanh', `ctanl', `ctan',
19354 `erfcf', `erfcl', `erfc', `erff', `erfl', `erf', `exp2f', `exp2l',
19355 `exp2', `expm1f', `expm1l', `expm1', `fdimf', `fdiml', `fdim', `fmaf',
19356 `fmal', `fmaxf', `fmaxl', `fmax', `fma', `fminf', `fminl', `fmin',
19357 `hypotf', `hypotl', `hypot', `ilogbf', `ilogbl', `ilogb', `imaxabs',
19358 `isblank', `iswblank', `lgammaf', `lgammal', `lgamma', `llabs',
19359 `llrintf', `llrintl', `llrint', `llroundf', `llroundl', `llround',
19360 `log1pf', `log1pl', `log1p', `log2f', `log2l', `log2', `logbf',
19361 `logbl', `logb', `lrintf', `lrintl', `lrint', `lroundf', `lroundl',
19362 `lround', `nearbyintf', `nearbyintl', `nearbyint', `nextafterf',
19363 `nextafterl', `nextafter', `nexttowardf', `nexttowardl', `nexttoward',
19364 `remainderf', `remainderl', `remainder', `remquof', `remquol',
19365 `remquo', `rintf', `rintl', `rint', `roundf', `roundl', `round',
19366 `scalblnf', `scalblnl', `scalbln', `scalbnf', `scalbnl', `scalbn',
19367 `snprintf', `tgammaf', `tgammal', `tgamma', `truncf', `truncl', `trunc',
19368 `vfscanf', `vscanf', `vsnprintf' and `vsscanf' are handled as built-in
19369 functions except in strict ISO C90 mode (`-ansi' or `-std=c89').
19371 There are also built-in versions of the ISO C99 functions `acosf',
19372 `acosl', `asinf', `asinl', `atan2f', `atan2l', `atanf', `atanl',
19373 `ceilf', `ceill', `cosf', `coshf', `coshl', `cosl', `expf', `expl',
19374 `fabsf', `fabsl', `floorf', `floorl', `fmodf', `fmodl', `frexpf',
19375 `frexpl', `ldexpf', `ldexpl', `log10f', `log10l', `logf', `logl',
19376 `modfl', `modf', `powf', `powl', `sinf', `sinhf', `sinhl', `sinl',
19377 `sqrtf', `sqrtl', `tanf', `tanhf', `tanhl' and `tanl' that are
19378 recognized in any mode since ISO C90 reserves these names for the
19379 purpose to which ISO C99 puts them. All these functions have
19380 corresponding versions prefixed with `__builtin_'.
19382 The ISO C94 functions `iswalnum', `iswalpha', `iswcntrl', `iswdigit',
19383 `iswgraph', `iswlower', `iswprint', `iswpunct', `iswspace', `iswupper',
19384 `iswxdigit', `towlower' and `towupper' are handled as built-in functions
19385 except in strict ISO C90 mode (`-ansi' or `-std=c89').
19387 The ISO C90 functions `abort', `abs', `acos', `asin', `atan2', `atan',
19388 `calloc', `ceil', `cosh', `cos', `exit', `exp', `fabs', `floor', `fmod',
19389 `fprintf', `fputs', `frexp', `fscanf', `isalnum', `isalpha', `iscntrl',
19390 `isdigit', `isgraph', `islower', `isprint', `ispunct', `isspace',
19391 `isupper', `isxdigit', `tolower', `toupper', `labs', `ldexp', `log10',
19392 `log', `malloc', `memcmp', `memcpy', `memset', `modf', `pow', `printf',
19393 `putchar', `puts', `scanf', `sinh', `sin', `snprintf', `sprintf',
19394 `sqrt', `sscanf', `strcat', `strchr', `strcmp', `strcpy', `strcspn',
19395 `strlen', `strncat', `strncmp', `strncpy', `strpbrk', `strrchr',
19396 `strspn', `strstr', `tanh', `tan', `vfprintf', `vprintf' and `vsprintf'
19397 are all recognized as built-in functions unless `-fno-builtin' is
19398 specified (or `-fno-builtin-FUNCTION' is specified for an individual
19399 function). All of these functions have corresponding versions prefixed
19402 GCC provides built-in versions of the ISO C99 floating point comparison
19403 macros that avoid raising exceptions for unordered operands. They have
19404 the same names as the standard macros ( `isgreater', `isgreaterequal',
19405 `isless', `islessequal', `islessgreater', and `isunordered') , with
19406 `__builtin_' prefixed. We intend for a library implementor to be able
19407 to simply `#define' each standard macro to its built-in equivalent.
19409 -- Built-in Function: int __builtin_types_compatible_p (TYPE1, TYPE2)
19410 You can use the built-in function `__builtin_types_compatible_p' to
19411 determine whether two types are the same.
19413 This built-in function returns 1 if the unqualified versions of the
19414 types TYPE1 and TYPE2 (which are types, not expressions) are
19415 compatible, 0 otherwise. The result of this built-in function can
19416 be used in integer constant expressions.
19418 This built-in function ignores top level qualifiers (e.g., `const',
19419 `volatile'). For example, `int' is equivalent to `const int'.
19421 The type `int[]' and `int[5]' are compatible. On the other hand,
19422 `int' and `char *' are not compatible, even if the size of their
19423 types, on the particular architecture are the same. Also, the
19424 amount of pointer indirection is taken into account when
19425 determining similarity. Consequently, `short *' is not similar to
19426 `short **'. Furthermore, two types that are typedefed are
19427 considered compatible if their underlying types are compatible.
19429 An `enum' type is not considered to be compatible with another
19430 `enum' type even if both are compatible with the same integer
19431 type; this is what the C standard specifies. For example, `enum
19432 {foo, bar}' is not similar to `enum {hot, dog}'.
19434 You would typically use this function in code whose execution
19435 varies depending on the arguments' types. For example:
19440 if (__builtin_types_compatible_p (typeof (x), long double)) \
19441 tmp = foo_long_double (tmp); \
19442 else if (__builtin_types_compatible_p (typeof (x), double)) \
19443 tmp = foo_double (tmp); \
19444 else if (__builtin_types_compatible_p (typeof (x), float)) \
19445 tmp = foo_float (tmp); \
19451 _Note:_ This construct is only available for C.
19454 -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1,
19456 You can use the built-in function `__builtin_choose_expr' to
19457 evaluate code depending on the value of a constant expression.
19458 This built-in function returns EXP1 if CONST_EXP, which is a
19459 constant expression that must be able to be determined at compile
19460 time, is nonzero. Otherwise it returns 0.
19462 This built-in function is analogous to the `? :' operator in C,
19463 except that the expression returned has its type unaltered by
19464 promotion rules. Also, the built-in function does not evaluate
19465 the expression that was not chosen. For example, if CONST_EXP
19466 evaluates to true, EXP2 is not evaluated even if it has
19469 This built-in function can return an lvalue if the chosen argument
19472 If EXP1 is returned, the return type is the same as EXP1's type.
19473 Similarly, if EXP2 is returned, its return type is the same as
19479 __builtin_choose_expr ( \
19480 __builtin_types_compatible_p (typeof (x), double), \
19482 __builtin_choose_expr ( \
19483 __builtin_types_compatible_p (typeof (x), float), \
19485 /* The void expression results in a compile-time error \
19486 when assigning the result to something. */ \
19489 _Note:_ This construct is only available for C. Furthermore, the
19490 unused expression (EXP1 or EXP2 depending on the value of
19491 CONST_EXP) may still generate syntax errors. This may change in
19495 -- Built-in Function: int __builtin_constant_p (EXP)
19496 You can use the built-in function `__builtin_constant_p' to
19497 determine if a value is known to be constant at compile-time and
19498 hence that GCC can perform constant-folding on expressions
19499 involving that value. The argument of the function is the value
19500 to test. The function returns the integer 1 if the argument is
19501 known to be a compile-time constant and 0 if it is not known to be
19502 a compile-time constant. A return of 0 does not indicate that the
19503 value is _not_ a constant, but merely that GCC cannot prove it is
19504 a constant with the specified value of the `-O' option.
19506 You would typically use this function in an embedded application
19507 where memory was a critical resource. If you have some complex
19508 calculation, you may want it to be folded if it involves
19509 constants, but need to call a function if it does not. For
19512 #define Scale_Value(X) \
19513 (__builtin_constant_p (X) \
19514 ? ((X) * SCALE + OFFSET) : Scale (X))
19516 You may use this built-in function in either a macro or an inline
19517 function. However, if you use it in an inlined function and pass
19518 an argument of the function as the argument to the built-in, GCC
19519 will never return 1 when you call the inline function with a
19520 string constant or compound literal (*note Compound Literals::)
19521 and will not return 1 when you pass a constant numeric value to
19522 the inline function unless you specify the `-O' option.
19524 You may also use `__builtin_constant_p' in initializers for static
19525 data. For instance, you can write
19527 static const int table[] = {
19528 __builtin_constant_p (EXPRESSION) ? (EXPRESSION) : -1,
19532 This is an acceptable initializer even if EXPRESSION is not a
19533 constant expression. GCC must be more conservative about
19534 evaluating the built-in in this case, because it has no
19535 opportunity to perform optimization.
19537 Previous versions of GCC did not accept this built-in in data
19538 initializers. The earliest version where it is completely safe is
19541 -- Built-in Function: long __builtin_expect (long EXP, long C)
19542 You may use `__builtin_expect' to provide the compiler with branch
19543 prediction information. In general, you should prefer to use
19544 actual profile feedback for this (`-fprofile-arcs'), as
19545 programmers are notoriously bad at predicting how their programs
19546 actually perform. However, there are applications in which this
19547 data is hard to collect.
19549 The return value is the value of EXP, which should be an integral
19550 expression. The value of C must be a compile-time constant. The
19551 semantics of the built-in are that it is expected that EXP == C.
19554 if (__builtin_expect (x, 0))
19557 would indicate that we do not expect to call `foo', since we
19558 expect `x' to be zero. Since you are limited to integral
19559 expressions for EXP, you should use constructions such as
19561 if (__builtin_expect (ptr != NULL, 1))
19564 when testing pointer or floating-point values.
19566 -- Built-in Function: void __builtin_prefetch (const void *ADDR, ...)
19567 This function is used to minimize cache-miss latency by moving
19568 data into a cache before it is accessed. You can insert calls to
19569 `__builtin_prefetch' into code for which you know addresses of
19570 data in memory that is likely to be accessed soon. If the target
19571 supports them, data prefetch instructions will be generated. If
19572 the prefetch is done early enough before the access then the data
19573 will be in the cache by the time it is accessed.
19575 The value of ADDR is the address of the memory to prefetch. There
19576 are two optional arguments, RW and LOCALITY. The value of RW is a
19577 compile-time constant one or zero; one means that the prefetch is
19578 preparing for a write to the memory address and zero, the default,
19579 means that the prefetch is preparing for a read. The value
19580 LOCALITY must be a compile-time constant integer between zero and
19581 three. A value of zero means that the data has no temporal
19582 locality, so it need not be left in the cache after the access. A
19583 value of three means that the data has a high degree of temporal
19584 locality and should be left in all levels of cache possible.
19585 Values of one and two mean, respectively, a low or moderate degree
19586 of temporal locality. The default is three.
19588 for (i = 0; i < n; i++)
19590 a[i] = a[i] + b[i];
19591 __builtin_prefetch (&a[i+j], 1, 1);
19592 __builtin_prefetch (&b[i+j], 0, 1);
19596 Data prefetch does not generate faults if ADDR is invalid, but the
19597 address expression itself must be valid. For example, a prefetch
19598 of `p->next' will not fault if `p->next' is not a valid address,
19599 but evaluation will fault if `p' is not a valid address.
19601 If the target does not support data prefetch, the address
19602 expression is evaluated if it includes side effects but no other
19603 code is generated and GCC does not issue a warning.
19605 -- Built-in Function: double __builtin_huge_val (void)
19606 Returns a positive infinity, if supported by the floating-point
19607 format, else `DBL_MAX'. This function is suitable for
19608 implementing the ISO C macro `HUGE_VAL'.
19610 -- Built-in Function: float __builtin_huge_valf (void)
19611 Similar to `__builtin_huge_val', except the return type is `float'.
19613 -- Built-in Function: long double __builtin_huge_vall (void)
19614 Similar to `__builtin_huge_val', except the return type is `long
19617 -- Built-in Function: double __builtin_inf (void)
19618 Similar to `__builtin_huge_val', except a warning is generated if
19619 the target floating-point format does not support infinities.
19621 -- Built-in Function: float __builtin_inff (void)
19622 Similar to `__builtin_inf', except the return type is `float'.
19623 This function is suitable for implementing the ISO C99 macro
19626 -- Built-in Function: long double __builtin_infl (void)
19627 Similar to `__builtin_inf', except the return type is `long
19630 -- Built-in Function: double __builtin_nan (const char *str)
19631 This is an implementation of the ISO C99 function `nan'.
19633 Since ISO C99 defines this function in terms of `strtod', which we
19634 do not implement, a description of the parsing is in order. The
19635 string is parsed as by `strtol'; that is, the base is recognized by
19636 leading `0' or `0x' prefixes. The number parsed is placed in the
19637 significand such that the least significant bit of the number is
19638 at the least significant bit of the significand. The number is
19639 truncated to fit the significand field provided. The significand
19640 is forced to be a quiet NaN.
19642 This function, if given a string literal, is evaluated early enough
19643 that it is considered a compile-time constant.
19645 -- Built-in Function: float __builtin_nanf (const char *str)
19646 Similar to `__builtin_nan', except the return type is `float'.
19648 -- Built-in Function: long double __builtin_nanl (const char *str)
19649 Similar to `__builtin_nan', except the return type is `long
19652 -- Built-in Function: double __builtin_nans (const char *str)
19653 Similar to `__builtin_nan', except the significand is forced to be
19654 a signaling NaN. The `nans' function is proposed by WG14 N965.
19656 -- Built-in Function: float __builtin_nansf (const char *str)
19657 Similar to `__builtin_nans', except the return type is `float'.
19659 -- Built-in Function: long double __builtin_nansl (const char *str)
19660 Similar to `__builtin_nans', except the return type is `long
19663 -- Built-in Function: int __builtin_ffs (unsigned int x)
19664 Returns one plus the index of the least significant 1-bit of X, or
19665 if X is zero, returns zero.
19667 -- Built-in Function: int __builtin_clz (unsigned int x)
19668 Returns the number of leading 0-bits in X, starting at the most
19669 significant bit position. If X is 0, the result is undefined.
19671 -- Built-in Function: int __builtin_ctz (unsigned int x)
19672 Returns the number of trailing 0-bits in X, starting at the least
19673 significant bit position. If X is 0, the result is undefined.
19675 -- Built-in Function: int __builtin_popcount (unsigned int x)
19676 Returns the number of 1-bits in X.
19678 -- Built-in Function: int __builtin_parity (unsigned int x)
19679 Returns the parity of X, i.e. the number of 1-bits in X modulo 2.
19681 -- Built-in Function: int __builtin_ffsl (unsigned long)
19682 Similar to `__builtin_ffs', except the argument type is `unsigned
19685 -- Built-in Function: int __builtin_clzl (unsigned long)
19686 Similar to `__builtin_clz', except the argument type is `unsigned
19689 -- Built-in Function: int __builtin_ctzl (unsigned long)
19690 Similar to `__builtin_ctz', except the argument type is `unsigned
19693 -- Built-in Function: int __builtin_popcountl (unsigned long)
19694 Similar to `__builtin_popcount', except the argument type is
19697 -- Built-in Function: int __builtin_parityl (unsigned long)
19698 Similar to `__builtin_parity', except the argument type is
19701 -- Built-in Function: int __builtin_ffsll (unsigned long long)
19702 Similar to `__builtin_ffs', except the argument type is `unsigned
19705 -- Built-in Function: int __builtin_clzll (unsigned long long)
19706 Similar to `__builtin_clz', except the argument type is `unsigned
19709 -- Built-in Function: int __builtin_ctzll (unsigned long long)
19710 Similar to `__builtin_ctz', except the argument type is `unsigned
19713 -- Built-in Function: int __builtin_popcountll (unsigned long long)
19714 Similar to `__builtin_popcount', except the argument type is
19715 `unsigned long long'.
19717 -- Built-in Function: int __builtin_parityll (unsigned long long)
19718 Similar to `__builtin_parity', except the argument type is
19719 `unsigned long long'.
19721 -- Built-in Function: double __builtin_powi (double, int)
19722 Returns the first argument raised to the power of the second.
19723 Unlike the `pow' function no guarantees about precision and
19726 -- Built-in Function: float __builtin_powif (float, int)
19727 Similar to `__builtin_powi', except the argument and return types
19730 -- Built-in Function: long double __builtin_powil (long double, int)
19731 Similar to `__builtin_powi', except the argument and return types
19735 File: gcc.info, Node: Target Builtins, Next: Target Format Checks, Prev: Other Builtins, Up: C Extensions
19737 5.47 Built-in Functions Specific to Particular Target Machines
19738 ==============================================================
19740 On some target machines, GCC supports many built-in functions specific
19741 to those machines. Generally these generate calls to specific machine
19742 instructions, but allow the compiler to schedule those calls.
19746 * Alpha Built-in Functions::
19747 * ARM Built-in Functions::
19748 * Blackfin Built-in Functions::
19749 * FR-V Built-in Functions::
19750 * X86 Built-in Functions::
19751 * MIPS DSP Built-in Functions::
19752 * MIPS Paired-Single Support::
19753 * PowerPC AltiVec Built-in Functions::
19754 * SPARC VIS Built-in Functions::
19757 File: gcc.info, Node: Alpha Built-in Functions, Next: ARM Built-in Functions, Up: Target Builtins
19759 5.47.1 Alpha Built-in Functions
19760 -------------------------------
19762 These built-in functions are available for the Alpha family of
19763 processors, depending on the command-line switches used.
19765 The following built-in functions are always available. They all
19766 generate the machine instruction that is part of the name.
19768 long __builtin_alpha_implver (void)
19769 long __builtin_alpha_rpcc (void)
19770 long __builtin_alpha_amask (long)
19771 long __builtin_alpha_cmpbge (long, long)
19772 long __builtin_alpha_extbl (long, long)
19773 long __builtin_alpha_extwl (long, long)
19774 long __builtin_alpha_extll (long, long)
19775 long __builtin_alpha_extql (long, long)
19776 long __builtin_alpha_extwh (long, long)
19777 long __builtin_alpha_extlh (long, long)
19778 long __builtin_alpha_extqh (long, long)
19779 long __builtin_alpha_insbl (long, long)
19780 long __builtin_alpha_inswl (long, long)
19781 long __builtin_alpha_insll (long, long)
19782 long __builtin_alpha_insql (long, long)
19783 long __builtin_alpha_inswh (long, long)
19784 long __builtin_alpha_inslh (long, long)
19785 long __builtin_alpha_insqh (long, long)
19786 long __builtin_alpha_mskbl (long, long)
19787 long __builtin_alpha_mskwl (long, long)
19788 long __builtin_alpha_mskll (long, long)
19789 long __builtin_alpha_mskql (long, long)
19790 long __builtin_alpha_mskwh (long, long)
19791 long __builtin_alpha_msklh (long, long)
19792 long __builtin_alpha_mskqh (long, long)
19793 long __builtin_alpha_umulh (long, long)
19794 long __builtin_alpha_zap (long, long)
19795 long __builtin_alpha_zapnot (long, long)
19797 The following built-in functions are always with `-mmax' or
19798 `-mcpu=CPU' where CPU is `pca56' or later. They all generate the
19799 machine instruction that is part of the name.
19801 long __builtin_alpha_pklb (long)
19802 long __builtin_alpha_pkwb (long)
19803 long __builtin_alpha_unpkbl (long)
19804 long __builtin_alpha_unpkbw (long)
19805 long __builtin_alpha_minub8 (long, long)
19806 long __builtin_alpha_minsb8 (long, long)
19807 long __builtin_alpha_minuw4 (long, long)
19808 long __builtin_alpha_minsw4 (long, long)
19809 long __builtin_alpha_maxub8 (long, long)
19810 long __builtin_alpha_maxsb8 (long, long)
19811 long __builtin_alpha_maxuw4 (long, long)
19812 long __builtin_alpha_maxsw4 (long, long)
19813 long __builtin_alpha_perr (long, long)
19815 The following built-in functions are always with `-mcix' or
19816 `-mcpu=CPU' where CPU is `ev67' or later. They all generate the
19817 machine instruction that is part of the name.
19819 long __builtin_alpha_cttz (long)
19820 long __builtin_alpha_ctlz (long)
19821 long __builtin_alpha_ctpop (long)
19823 The following builtins are available on systems that use the OSF/1
19824 PALcode. Normally they invoke the `rduniq' and `wruniq' PAL calls, but
19825 when invoked with `-mtls-kernel', they invoke `rdval' and `wrval'.
19827 void *__builtin_thread_pointer (void)
19828 void __builtin_set_thread_pointer (void *)
19831 File: gcc.info, Node: ARM Built-in Functions, Next: Blackfin Built-in Functions, Prev: Alpha Built-in Functions, Up: Target Builtins
19833 5.47.2 ARM Built-in Functions
19834 -----------------------------
19836 These built-in functions are available for the ARM family of
19837 processors, when the `-mcpu=iwmmxt' switch is used:
19839 typedef int v2si __attribute__ ((vector_size (8)));
19840 typedef short v4hi __attribute__ ((vector_size (8)));
19841 typedef char v8qi __attribute__ ((vector_size (8)));
19843 int __builtin_arm_getwcx (int)
19844 void __builtin_arm_setwcx (int, int)
19845 int __builtin_arm_textrmsb (v8qi, int)
19846 int __builtin_arm_textrmsh (v4hi, int)
19847 int __builtin_arm_textrmsw (v2si, int)
19848 int __builtin_arm_textrmub (v8qi, int)
19849 int __builtin_arm_textrmuh (v4hi, int)
19850 int __builtin_arm_textrmuw (v2si, int)
19851 v8qi __builtin_arm_tinsrb (v8qi, int)
19852 v4hi __builtin_arm_tinsrh (v4hi, int)
19853 v2si __builtin_arm_tinsrw (v2si, int)
19854 long long __builtin_arm_tmia (long long, int, int)
19855 long long __builtin_arm_tmiabb (long long, int, int)
19856 long long __builtin_arm_tmiabt (long long, int, int)
19857 long long __builtin_arm_tmiaph (long long, int, int)
19858 long long __builtin_arm_tmiatb (long long, int, int)
19859 long long __builtin_arm_tmiatt (long long, int, int)
19860 int __builtin_arm_tmovmskb (v8qi)
19861 int __builtin_arm_tmovmskh (v4hi)
19862 int __builtin_arm_tmovmskw (v2si)
19863 long long __builtin_arm_waccb (v8qi)
19864 long long __builtin_arm_wacch (v4hi)
19865 long long __builtin_arm_waccw (v2si)
19866 v8qi __builtin_arm_waddb (v8qi, v8qi)
19867 v8qi __builtin_arm_waddbss (v8qi, v8qi)
19868 v8qi __builtin_arm_waddbus (v8qi, v8qi)
19869 v4hi __builtin_arm_waddh (v4hi, v4hi)
19870 v4hi __builtin_arm_waddhss (v4hi, v4hi)
19871 v4hi __builtin_arm_waddhus (v4hi, v4hi)
19872 v2si __builtin_arm_waddw (v2si, v2si)
19873 v2si __builtin_arm_waddwss (v2si, v2si)
19874 v2si __builtin_arm_waddwus (v2si, v2si)
19875 v8qi __builtin_arm_walign (v8qi, v8qi, int)
19876 long long __builtin_arm_wand(long long, long long)
19877 long long __builtin_arm_wandn (long long, long long)
19878 v8qi __builtin_arm_wavg2b (v8qi, v8qi)
19879 v8qi __builtin_arm_wavg2br (v8qi, v8qi)
19880 v4hi __builtin_arm_wavg2h (v4hi, v4hi)
19881 v4hi __builtin_arm_wavg2hr (v4hi, v4hi)
19882 v8qi __builtin_arm_wcmpeqb (v8qi, v8qi)
19883 v4hi __builtin_arm_wcmpeqh (v4hi, v4hi)
19884 v2si __builtin_arm_wcmpeqw (v2si, v2si)
19885 v8qi __builtin_arm_wcmpgtsb (v8qi, v8qi)
19886 v4hi __builtin_arm_wcmpgtsh (v4hi, v4hi)
19887 v2si __builtin_arm_wcmpgtsw (v2si, v2si)
19888 v8qi __builtin_arm_wcmpgtub (v8qi, v8qi)
19889 v4hi __builtin_arm_wcmpgtuh (v4hi, v4hi)
19890 v2si __builtin_arm_wcmpgtuw (v2si, v2si)
19891 long long __builtin_arm_wmacs (long long, v4hi, v4hi)
19892 long long __builtin_arm_wmacsz (v4hi, v4hi)
19893 long long __builtin_arm_wmacu (long long, v4hi, v4hi)
19894 long long __builtin_arm_wmacuz (v4hi, v4hi)
19895 v4hi __builtin_arm_wmadds (v4hi, v4hi)
19896 v4hi __builtin_arm_wmaddu (v4hi, v4hi)
19897 v8qi __builtin_arm_wmaxsb (v8qi, v8qi)
19898 v4hi __builtin_arm_wmaxsh (v4hi, v4hi)
19899 v2si __builtin_arm_wmaxsw (v2si, v2si)
19900 v8qi __builtin_arm_wmaxub (v8qi, v8qi)
19901 v4hi __builtin_arm_wmaxuh (v4hi, v4hi)
19902 v2si __builtin_arm_wmaxuw (v2si, v2si)
19903 v8qi __builtin_arm_wminsb (v8qi, v8qi)
19904 v4hi __builtin_arm_wminsh (v4hi, v4hi)
19905 v2si __builtin_arm_wminsw (v2si, v2si)
19906 v8qi __builtin_arm_wminub (v8qi, v8qi)
19907 v4hi __builtin_arm_wminuh (v4hi, v4hi)
19908 v2si __builtin_arm_wminuw (v2si, v2si)
19909 v4hi __builtin_arm_wmulsm (v4hi, v4hi)
19910 v4hi __builtin_arm_wmulul (v4hi, v4hi)
19911 v4hi __builtin_arm_wmulum (v4hi, v4hi)
19912 long long __builtin_arm_wor (long long, long long)
19913 v2si __builtin_arm_wpackdss (long long, long long)
19914 v2si __builtin_arm_wpackdus (long long, long long)
19915 v8qi __builtin_arm_wpackhss (v4hi, v4hi)
19916 v8qi __builtin_arm_wpackhus (v4hi, v4hi)
19917 v4hi __builtin_arm_wpackwss (v2si, v2si)
19918 v4hi __builtin_arm_wpackwus (v2si, v2si)
19919 long long __builtin_arm_wrord (long long, long long)
19920 long long __builtin_arm_wrordi (long long, int)
19921 v4hi __builtin_arm_wrorh (v4hi, long long)
19922 v4hi __builtin_arm_wrorhi (v4hi, int)
19923 v2si __builtin_arm_wrorw (v2si, long long)
19924 v2si __builtin_arm_wrorwi (v2si, int)
19925 v2si __builtin_arm_wsadb (v8qi, v8qi)
19926 v2si __builtin_arm_wsadbz (v8qi, v8qi)
19927 v2si __builtin_arm_wsadh (v4hi, v4hi)
19928 v2si __builtin_arm_wsadhz (v4hi, v4hi)
19929 v4hi __builtin_arm_wshufh (v4hi, int)
19930 long long __builtin_arm_wslld (long long, long long)
19931 long long __builtin_arm_wslldi (long long, int)
19932 v4hi __builtin_arm_wsllh (v4hi, long long)
19933 v4hi __builtin_arm_wsllhi (v4hi, int)
19934 v2si __builtin_arm_wsllw (v2si, long long)
19935 v2si __builtin_arm_wsllwi (v2si, int)
19936 long long __builtin_arm_wsrad (long long, long long)
19937 long long __builtin_arm_wsradi (long long, int)
19938 v4hi __builtin_arm_wsrah (v4hi, long long)
19939 v4hi __builtin_arm_wsrahi (v4hi, int)
19940 v2si __builtin_arm_wsraw (v2si, long long)
19941 v2si __builtin_arm_wsrawi (v2si, int)
19942 long long __builtin_arm_wsrld (long long, long long)
19943 long long __builtin_arm_wsrldi (long long, int)
19944 v4hi __builtin_arm_wsrlh (v4hi, long long)
19945 v4hi __builtin_arm_wsrlhi (v4hi, int)
19946 v2si __builtin_arm_wsrlw (v2si, long long)
19947 v2si __builtin_arm_wsrlwi (v2si, int)
19948 v8qi __builtin_arm_wsubb (v8qi, v8qi)
19949 v8qi __builtin_arm_wsubbss (v8qi, v8qi)
19950 v8qi __builtin_arm_wsubbus (v8qi, v8qi)
19951 v4hi __builtin_arm_wsubh (v4hi, v4hi)
19952 v4hi __builtin_arm_wsubhss (v4hi, v4hi)
19953 v4hi __builtin_arm_wsubhus (v4hi, v4hi)
19954 v2si __builtin_arm_wsubw (v2si, v2si)
19955 v2si __builtin_arm_wsubwss (v2si, v2si)
19956 v2si __builtin_arm_wsubwus (v2si, v2si)
19957 v4hi __builtin_arm_wunpckehsb (v8qi)
19958 v2si __builtin_arm_wunpckehsh (v4hi)
19959 long long __builtin_arm_wunpckehsw (v2si)
19960 v4hi __builtin_arm_wunpckehub (v8qi)
19961 v2si __builtin_arm_wunpckehuh (v4hi)
19962 long long __builtin_arm_wunpckehuw (v2si)
19963 v4hi __builtin_arm_wunpckelsb (v8qi)
19964 v2si __builtin_arm_wunpckelsh (v4hi)
19965 long long __builtin_arm_wunpckelsw (v2si)
19966 v4hi __builtin_arm_wunpckelub (v8qi)
19967 v2si __builtin_arm_wunpckeluh (v4hi)
19968 long long __builtin_arm_wunpckeluw (v2si)
19969 v8qi __builtin_arm_wunpckihb (v8qi, v8qi)
19970 v4hi __builtin_arm_wunpckihh (v4hi, v4hi)
19971 v2si __builtin_arm_wunpckihw (v2si, v2si)
19972 v8qi __builtin_arm_wunpckilb (v8qi, v8qi)
19973 v4hi __builtin_arm_wunpckilh (v4hi, v4hi)
19974 v2si __builtin_arm_wunpckilw (v2si, v2si)
19975 long long __builtin_arm_wxor (long long, long long)
19976 long long __builtin_arm_wzero ()
19979 File: gcc.info, Node: Blackfin Built-in Functions, Next: FR-V Built-in Functions, Prev: ARM Built-in Functions, Up: Target Builtins
19981 5.47.3 Blackfin Built-in Functions
19982 ----------------------------------
19984 Currently, there are two Blackfin-specific built-in functions. These
19985 are used for generating `CSYNC' and `SSYNC' machine insns without using
19986 inline assembly; by using these built-in functions the compiler can
19987 automatically add workarounds for hardware errata involving these
19988 instructions. These functions are named as follows:
19990 void __builtin_bfin_csync (void)
19991 void __builtin_bfin_ssync (void)
19994 File: gcc.info, Node: FR-V Built-in Functions, Next: X86 Built-in Functions, Prev: Blackfin Built-in Functions, Up: Target Builtins
19996 5.47.4 FR-V Built-in Functions
19997 ------------------------------
19999 GCC provides many FR-V-specific built-in functions. In general, these
20000 functions are intended to be compatible with those described by `FR-V
20001 Family, Softune C/C++ Compiler Manual (V6), Fujitsu Semiconductor'.
20002 The two exceptions are `__MDUNPACKH' and `__MBTOHE', the gcc forms of
20003 which pass 128-bit values by pointer rather than by value.
20005 Most of the functions are named after specific FR-V instructions.
20006 Such functions are said to be "directly mapped" and are summarized here
20012 * Directly-mapped Integer Functions::
20013 * Directly-mapped Media Functions::
20014 * Raw read/write Functions::
20015 * Other Built-in Functions::
20018 File: gcc.info, Node: Argument Types, Next: Directly-mapped Integer Functions, Up: FR-V Built-in Functions
20020 5.47.4.1 Argument Types
20021 .......................
20023 The arguments to the built-in functions can be divided into three
20024 groups: register numbers, compile-time constants and run-time values.
20025 In order to make this classification clear at a glance, the arguments
20026 and return values are given the following pseudo types:
20028 Pseudo type Real C type Constant? Description
20029 `uh' `unsigned short' No an unsigned halfword
20030 `uw1' `unsigned int' No an unsigned word
20031 `sw1' `int' No a signed word
20032 `uw2' `unsigned long long' No an unsigned doubleword
20033 `sw2' `long long' No a signed doubleword
20034 `const' `int' Yes an integer constant
20035 `acc' `int' Yes an ACC register number
20036 `iacc' `int' Yes an IACC register number
20038 These pseudo types are not defined by GCC, they are simply a notational
20039 convenience used in this manual.
20041 Arguments of type `uh', `uw1', `sw1', `uw2' and `sw2' are evaluated at
20042 run time. They correspond to register operands in the underlying FR-V
20045 `const' arguments represent immediate operands in the underlying FR-V
20046 instructions. They must be compile-time constants.
20048 `acc' arguments are evaluated at compile time and specify the number
20049 of an accumulator register. For example, an `acc' argument of 2 will
20050 select the ACC2 register.
20052 `iacc' arguments are similar to `acc' arguments but specify the number
20053 of an IACC register. See *note Other Built-in Functions:: for more
20057 File: gcc.info, Node: Directly-mapped Integer Functions, Next: Directly-mapped Media Functions, Prev: Argument Types, Up: FR-V Built-in Functions
20059 5.47.4.2 Directly-mapped Integer Functions
20060 ..........................................
20062 The functions listed below map directly to FR-V I-type instructions.
20064 Function prototype Example usage Assembly output
20065 `sw1 __ADDSS (sw1, sw1)' `C = __ADDSS (A, B)' `ADDSS A,B,C'
20066 `sw1 __SCAN (sw1, sw1)' `C = __SCAN (A, B)' `SCAN A,B,C'
20067 `sw1 __SCUTSS (sw1)' `B = __SCUTSS (A)' `SCUTSS A,B'
20068 `sw1 __SLASS (sw1, sw1)' `C = __SLASS (A, B)' `SLASS A,B,C'
20069 `void __SMASS (sw1, sw1)' `__SMASS (A, B)' `SMASS A,B'
20070 `void __SMSSS (sw1, sw1)' `__SMSSS (A, B)' `SMSSS A,B'
20071 `void __SMU (sw1, sw1)' `__SMU (A, B)' `SMU A,B'
20072 `sw2 __SMUL (sw1, sw1)' `C = __SMUL (A, B)' `SMUL A,B,C'
20073 `sw1 __SUBSS (sw1, sw1)' `C = __SUBSS (A, B)' `SUBSS A,B,C'
20074 `uw2 __UMUL (uw1, uw1)' `C = __UMUL (A, B)' `UMUL A,B,C'
20077 File: gcc.info, Node: Directly-mapped Media Functions, Next: Raw read/write Functions, Prev: Directly-mapped Integer Functions, Up: FR-V Built-in Functions
20079 5.47.4.3 Directly-mapped Media Functions
20080 ........................................
20082 The functions listed below map directly to FR-V M-type instructions.
20084 Function prototype Example usage Assembly output
20085 `uw1 __MABSHS (sw1)' `B = __MABSHS (A)' `MABSHS A,B'
20086 `void __MADDACCS (acc, acc)' `__MADDACCS (B, A)' `MADDACCS A,B'
20087 `sw1 __MADDHSS (sw1, sw1)' `C = __MADDHSS (A, B)' `MADDHSS A,B,C'
20088 `uw1 __MADDHUS (uw1, uw1)' `C = __MADDHUS (A, B)' `MADDHUS A,B,C'
20089 `uw1 __MAND (uw1, uw1)' `C = __MAND (A, B)' `MAND A,B,C'
20090 `void __MASACCS (acc, acc)' `__MASACCS (B, A)' `MASACCS A,B'
20091 `uw1 __MAVEH (uw1, uw1)' `C = __MAVEH (A, B)' `MAVEH A,B,C'
20092 `uw2 __MBTOH (uw1)' `B = __MBTOH (A)' `MBTOH A,B'
20093 `void __MBTOHE (uw1 *, uw1)' `__MBTOHE (&B, A)' `MBTOHE A,B'
20094 `void __MCLRACC (acc)' `__MCLRACC (A)' `MCLRACC A'
20095 `void __MCLRACCA (void)' `__MCLRACCA ()' `MCLRACCA'
20096 `uw1 __Mcop1 (uw1, uw1)' `C = __Mcop1 (A, B)' `Mcop1 A,B,C'
20097 `uw1 __Mcop2 (uw1, uw1)' `C = __Mcop2 (A, B)' `Mcop2 A,B,C'
20098 `uw1 __MCPLHI (uw2, const)' `C = __MCPLHI (A, B)' `MCPLHI A,#B,C'
20099 `uw1 __MCPLI (uw2, const)' `C = __MCPLI (A, B)' `MCPLI A,#B,C'
20100 `void __MCPXIS (acc, sw1, sw1)' `__MCPXIS (C, A, B)' `MCPXIS A,B,C'
20101 `void __MCPXIU (acc, uw1, uw1)' `__MCPXIU (C, A, B)' `MCPXIU A,B,C'
20102 `void __MCPXRS (acc, sw1, sw1)' `__MCPXRS (C, A, B)' `MCPXRS A,B,C'
20103 `void __MCPXRU (acc, uw1, uw1)' `__MCPXRU (C, A, B)' `MCPXRU A,B,C'
20104 `uw1 __MCUT (acc, uw1)' `C = __MCUT (A, B)' `MCUT A,B,C'
20105 `uw1 __MCUTSS (acc, sw1)' `C = __MCUTSS (A, B)' `MCUTSS A,B,C'
20106 `void __MDADDACCS (acc, acc)' `__MDADDACCS (B, A)' `MDADDACCS A,B'
20107 `void __MDASACCS (acc, acc)' `__MDASACCS (B, A)' `MDASACCS A,B'
20108 `uw2 __MDCUTSSI (acc, const)' `C = __MDCUTSSI (A, B)' `MDCUTSSI A,#B,C'
20109 `uw2 __MDPACKH (uw2, uw2)' `C = __MDPACKH (A, B)' `MDPACKH A,B,C'
20110 `uw2 __MDROTLI (uw2, const)' `C = __MDROTLI (A, B)' `MDROTLI A,#B,C'
20111 `void __MDSUBACCS (acc, acc)' `__MDSUBACCS (B, A)' `MDSUBACCS A,B'
20112 `void __MDUNPACKH (uw1 *, uw2)' `__MDUNPACKH (&B, A)' `MDUNPACKH A,B'
20113 `uw2 __MEXPDHD (uw1, const)' `C = __MEXPDHD (A, B)' `MEXPDHD A,#B,C'
20114 `uw1 __MEXPDHW (uw1, const)' `C = __MEXPDHW (A, B)' `MEXPDHW A,#B,C'
20115 `uw1 __MHDSETH (uw1, const)' `C = __MHDSETH (A, B)' `MHDSETH A,#B,C'
20116 `sw1 __MHDSETS (const)' `B = __MHDSETS (A)' `MHDSETS #A,B'
20117 `uw1 __MHSETHIH (uw1, const)' `B = __MHSETHIH (B, A)' `MHSETHIH #A,B'
20118 `sw1 __MHSETHIS (sw1, const)' `B = __MHSETHIS (B, A)' `MHSETHIS #A,B'
20119 `uw1 __MHSETLOH (uw1, const)' `B = __MHSETLOH (B, A)' `MHSETLOH #A,B'
20120 `sw1 __MHSETLOS (sw1, const)' `B = __MHSETLOS (B, A)' `MHSETLOS #A,B'
20121 `uw1 __MHTOB (uw2)' `B = __MHTOB (A)' `MHTOB A,B'
20122 `void __MMACHS (acc, sw1, sw1)' `__MMACHS (C, A, B)' `MMACHS A,B,C'
20123 `void __MMACHU (acc, uw1, uw1)' `__MMACHU (C, A, B)' `MMACHU A,B,C'
20124 `void __MMRDHS (acc, sw1, sw1)' `__MMRDHS (C, A, B)' `MMRDHS A,B,C'
20125 `void __MMRDHU (acc, uw1, uw1)' `__MMRDHU (C, A, B)' `MMRDHU A,B,C'
20126 `void __MMULHS (acc, sw1, sw1)' `__MMULHS (C, A, B)' `MMULHS A,B,C'
20127 `void __MMULHU (acc, uw1, uw1)' `__MMULHU (C, A, B)' `MMULHU A,B,C'
20128 `void __MMULXHS (acc, sw1, sw1)' `__MMULXHS (C, A, B)' `MMULXHS A,B,C'
20129 `void __MMULXHU (acc, uw1, uw1)' `__MMULXHU (C, A, B)' `MMULXHU A,B,C'
20130 `uw1 __MNOT (uw1)' `B = __MNOT (A)' `MNOT A,B'
20131 `uw1 __MOR (uw1, uw1)' `C = __MOR (A, B)' `MOR A,B,C'
20132 `uw1 __MPACKH (uh, uh)' `C = __MPACKH (A, B)' `MPACKH A,B,C'
20133 `sw2 __MQADDHSS (sw2, sw2)' `C = __MQADDHSS (A, B)' `MQADDHSS A,B,C'
20134 `uw2 __MQADDHUS (uw2, uw2)' `C = __MQADDHUS (A, B)' `MQADDHUS A,B,C'
20135 `void __MQCPXIS (acc, sw2, sw2)' `__MQCPXIS (C, A, B)' `MQCPXIS A,B,C'
20136 `void __MQCPXIU (acc, uw2, uw2)' `__MQCPXIU (C, A, B)' `MQCPXIU A,B,C'
20137 `void __MQCPXRS (acc, sw2, sw2)' `__MQCPXRS (C, A, B)' `MQCPXRS A,B,C'
20138 `void __MQCPXRU (acc, uw2, uw2)' `__MQCPXRU (C, A, B)' `MQCPXRU A,B,C'
20139 `sw2 __MQLCLRHS (sw2, sw2)' `C = __MQLCLRHS (A, B)' `MQLCLRHS A,B,C'
20140 `sw2 __MQLMTHS (sw2, sw2)' `C = __MQLMTHS (A, B)' `MQLMTHS A,B,C'
20141 `void __MQMACHS (acc, sw2, sw2)' `__MQMACHS (C, A, B)' `MQMACHS A,B,C'
20142 `void __MQMACHU (acc, uw2, uw2)' `__MQMACHU (C, A, B)' `MQMACHU A,B,C'
20143 `void __MQMACXHS (acc, sw2, `__MQMACXHS (C, A, B)' `MQMACXHS A,B,C'
20145 `void __MQMULHS (acc, sw2, sw2)' `__MQMULHS (C, A, B)' `MQMULHS A,B,C'
20146 `void __MQMULHU (acc, uw2, uw2)' `__MQMULHU (C, A, B)' `MQMULHU A,B,C'
20147 `void __MQMULXHS (acc, sw2, `__MQMULXHS (C, A, B)' `MQMULXHS A,B,C'
20149 `void __MQMULXHU (acc, uw2, `__MQMULXHU (C, A, B)' `MQMULXHU A,B,C'
20151 `sw2 __MQSATHS (sw2, sw2)' `C = __MQSATHS (A, B)' `MQSATHS A,B,C'
20152 `uw2 __MQSLLHI (uw2, int)' `C = __MQSLLHI (A, B)' `MQSLLHI A,B,C'
20153 `sw2 __MQSRAHI (sw2, int)' `C = __MQSRAHI (A, B)' `MQSRAHI A,B,C'
20154 `sw2 __MQSUBHSS (sw2, sw2)' `C = __MQSUBHSS (A, B)' `MQSUBHSS A,B,C'
20155 `uw2 __MQSUBHUS (uw2, uw2)' `C = __MQSUBHUS (A, B)' `MQSUBHUS A,B,C'
20156 `void __MQXMACHS (acc, sw2, `__MQXMACHS (C, A, B)' `MQXMACHS A,B,C'
20158 `void __MQXMACXHS (acc, sw2, `__MQXMACXHS (C, A, B)' `MQXMACXHS A,B,C'
20160 `uw1 __MRDACC (acc)' `B = __MRDACC (A)' `MRDACC A,B'
20161 `uw1 __MRDACCG (acc)' `B = __MRDACCG (A)' `MRDACCG A,B'
20162 `uw1 __MROTLI (uw1, const)' `C = __MROTLI (A, B)' `MROTLI A,#B,C'
20163 `uw1 __MROTRI (uw1, const)' `C = __MROTRI (A, B)' `MROTRI A,#B,C'
20164 `sw1 __MSATHS (sw1, sw1)' `C = __MSATHS (A, B)' `MSATHS A,B,C'
20165 `uw1 __MSATHU (uw1, uw1)' `C = __MSATHU (A, B)' `MSATHU A,B,C'
20166 `uw1 __MSLLHI (uw1, const)' `C = __MSLLHI (A, B)' `MSLLHI A,#B,C'
20167 `sw1 __MSRAHI (sw1, const)' `C = __MSRAHI (A, B)' `MSRAHI A,#B,C'
20168 `uw1 __MSRLHI (uw1, const)' `C = __MSRLHI (A, B)' `MSRLHI A,#B,C'
20169 `void __MSUBACCS (acc, acc)' `__MSUBACCS (B, A)' `MSUBACCS A,B'
20170 `sw1 __MSUBHSS (sw1, sw1)' `C = __MSUBHSS (A, B)' `MSUBHSS A,B,C'
20171 `uw1 __MSUBHUS (uw1, uw1)' `C = __MSUBHUS (A, B)' `MSUBHUS A,B,C'
20172 `void __MTRAP (void)' `__MTRAP ()' `MTRAP'
20173 `uw2 __MUNPACKH (uw1)' `B = __MUNPACKH (A)' `MUNPACKH A,B'
20174 `uw1 __MWCUT (uw2, uw1)' `C = __MWCUT (A, B)' `MWCUT A,B,C'
20175 `void __MWTACC (acc, uw1)' `__MWTACC (B, A)' `MWTACC A,B'
20176 `void __MWTACCG (acc, uw1)' `__MWTACCG (B, A)' `MWTACCG A,B'
20177 `uw1 __MXOR (uw1, uw1)' `C = __MXOR (A, B)' `MXOR A,B,C'
20180 File: gcc.info, Node: Raw read/write Functions, Next: Other Built-in Functions, Prev: Directly-mapped Media Functions, Up: FR-V Built-in Functions
20182 5.47.4.4 Raw read/write Functions
20183 .................................
20185 This sections describes built-in functions related to read and write
20186 instructions to access memory. These functions generate `membar'
20187 instructions to flush the I/O load and stores where appropriate, as
20188 described in Fujitsu's manual described above.
20190 `unsigned char __builtin_read8 (void *DATA)'
20192 `unsigned short __builtin_read16 (void *DATA)'
20194 `unsigned long __builtin_read32 (void *DATA)'
20196 `unsigned long long __builtin_read64 (void *DATA)'
20198 `void __builtin_write8 (void *DATA, unsigned char DATUM)'
20200 `void __builtin_write16 (void *DATA, unsigned short DATUM)'
20202 `void __builtin_write32 (void *DATA, unsigned long DATUM)'
20204 `void __builtin_write64 (void *DATA, unsigned long long DATUM)'
20207 File: gcc.info, Node: Other Built-in Functions, Prev: Raw read/write Functions, Up: FR-V Built-in Functions
20209 5.47.4.5 Other Built-in Functions
20210 .................................
20212 This section describes built-in functions that are not named after a
20213 specific FR-V instruction.
20215 `sw2 __IACCreadll (iacc REG)'
20216 Return the full 64-bit value of IACC0. The REG argument is
20217 reserved for future expansion and must be 0.
20219 `sw1 __IACCreadl (iacc REG)'
20220 Return the value of IACC0H if REG is 0 and IACC0L if REG is 1.
20221 Other values of REG are rejected as invalid.
20223 `void __IACCsetll (iacc REG, sw2 X)'
20224 Set the full 64-bit value of IACC0 to X. The REG argument is
20225 reserved for future expansion and must be 0.
20227 `void __IACCsetl (iacc REG, sw1 X)'
20228 Set IACC0H to X if REG is 0 and IACC0L to X if REG is 1. Other
20229 values of REG are rejected as invalid.
20231 `void __data_prefetch0 (const void *X)'
20232 Use the `dcpl' instruction to load the contents of address X into
20235 `void __data_prefetch (const void *X)'
20236 Use the `nldub' instruction to load the contents of address X into
20237 the data cache. The instruction will be issued in slot I1.
20240 File: gcc.info, Node: X86 Built-in Functions, Next: MIPS DSP Built-in Functions, Prev: FR-V Built-in Functions, Up: Target Builtins
20242 5.47.5 X86 Built-in Functions
20243 -----------------------------
20245 These built-in functions are available for the i386 and x86-64 family
20246 of computers, depending on the command-line switches used.
20248 Note that, if you specify command-line switches such as `-msse', the
20249 compiler could use the extended instruction sets even if the built-ins
20250 are not used explicitly in the program. For this reason, applications
20251 which perform runtime CPU detection must compile separate files for each
20252 supported architecture, using the appropriate flags. In particular,
20253 the file containing the CPU detection code should be compiled without
20256 The following machine modes are available for use with MMX built-in
20257 functions (*note Vector Extensions::): `V2SI' for a vector of two
20258 32-bit integers, `V4HI' for a vector of four 16-bit integers, and
20259 `V8QI' for a vector of eight 8-bit integers. Some of the built-in
20260 functions operate on MMX registers as a whole 64-bit entity, these use
20261 `DI' as their mode.
20263 If 3Dnow extensions are enabled, `V2SF' is used as a mode for a vector
20264 of two 32-bit floating point values.
20266 If SSE extensions are enabled, `V4SF' is used for a vector of four
20267 32-bit floating point values. Some instructions use a vector of four
20268 32-bit integers, these use `V4SI'. Finally, some instructions operate
20269 on an entire vector register, interpreting it as a 128-bit integer,
20270 these use mode `TI'.
20272 The following built-in functions are made available by `-mmmx'. All
20273 of them generate the machine instruction that is part of the name.
20275 v8qi __builtin_ia32_paddb (v8qi, v8qi)
20276 v4hi __builtin_ia32_paddw (v4hi, v4hi)
20277 v2si __builtin_ia32_paddd (v2si, v2si)
20278 v8qi __builtin_ia32_psubb (v8qi, v8qi)
20279 v4hi __builtin_ia32_psubw (v4hi, v4hi)
20280 v2si __builtin_ia32_psubd (v2si, v2si)
20281 v8qi __builtin_ia32_paddsb (v8qi, v8qi)
20282 v4hi __builtin_ia32_paddsw (v4hi, v4hi)
20283 v8qi __builtin_ia32_psubsb (v8qi, v8qi)
20284 v4hi __builtin_ia32_psubsw (v4hi, v4hi)
20285 v8qi __builtin_ia32_paddusb (v8qi, v8qi)
20286 v4hi __builtin_ia32_paddusw (v4hi, v4hi)
20287 v8qi __builtin_ia32_psubusb (v8qi, v8qi)
20288 v4hi __builtin_ia32_psubusw (v4hi, v4hi)
20289 v4hi __builtin_ia32_pmullw (v4hi, v4hi)
20290 v4hi __builtin_ia32_pmulhw (v4hi, v4hi)
20291 di __builtin_ia32_pand (di, di)
20292 di __builtin_ia32_pandn (di,di)
20293 di __builtin_ia32_por (di, di)
20294 di __builtin_ia32_pxor (di, di)
20295 v8qi __builtin_ia32_pcmpeqb (v8qi, v8qi)
20296 v4hi __builtin_ia32_pcmpeqw (v4hi, v4hi)
20297 v2si __builtin_ia32_pcmpeqd (v2si, v2si)
20298 v8qi __builtin_ia32_pcmpgtb (v8qi, v8qi)
20299 v4hi __builtin_ia32_pcmpgtw (v4hi, v4hi)
20300 v2si __builtin_ia32_pcmpgtd (v2si, v2si)
20301 v8qi __builtin_ia32_punpckhbw (v8qi, v8qi)
20302 v4hi __builtin_ia32_punpckhwd (v4hi, v4hi)
20303 v2si __builtin_ia32_punpckhdq (v2si, v2si)
20304 v8qi __builtin_ia32_punpcklbw (v8qi, v8qi)
20305 v4hi __builtin_ia32_punpcklwd (v4hi, v4hi)
20306 v2si __builtin_ia32_punpckldq (v2si, v2si)
20307 v8qi __builtin_ia32_packsswb (v4hi, v4hi)
20308 v4hi __builtin_ia32_packssdw (v2si, v2si)
20309 v8qi __builtin_ia32_packuswb (v4hi, v4hi)
20311 The following built-in functions are made available either with
20312 `-msse', or with a combination of `-m3dnow' and `-march=athlon'. All
20313 of them generate the machine instruction that is part of the name.
20315 v4hi __builtin_ia32_pmulhuw (v4hi, v4hi)
20316 v8qi __builtin_ia32_pavgb (v8qi, v8qi)
20317 v4hi __builtin_ia32_pavgw (v4hi, v4hi)
20318 v4hi __builtin_ia32_psadbw (v8qi, v8qi)
20319 v8qi __builtin_ia32_pmaxub (v8qi, v8qi)
20320 v4hi __builtin_ia32_pmaxsw (v4hi, v4hi)
20321 v8qi __builtin_ia32_pminub (v8qi, v8qi)
20322 v4hi __builtin_ia32_pminsw (v4hi, v4hi)
20323 int __builtin_ia32_pextrw (v4hi, int)
20324 v4hi __builtin_ia32_pinsrw (v4hi, int, int)
20325 int __builtin_ia32_pmovmskb (v8qi)
20326 void __builtin_ia32_maskmovq (v8qi, v8qi, char *)
20327 void __builtin_ia32_movntq (di *, di)
20328 void __builtin_ia32_sfence (void)
20330 The following built-in functions are available when `-msse' is used.
20331 All of them generate the machine instruction that is part of the name.
20333 int __builtin_ia32_comieq (v4sf, v4sf)
20334 int __builtin_ia32_comineq (v4sf, v4sf)
20335 int __builtin_ia32_comilt (v4sf, v4sf)
20336 int __builtin_ia32_comile (v4sf, v4sf)
20337 int __builtin_ia32_comigt (v4sf, v4sf)
20338 int __builtin_ia32_comige (v4sf, v4sf)
20339 int __builtin_ia32_ucomieq (v4sf, v4sf)
20340 int __builtin_ia32_ucomineq (v4sf, v4sf)
20341 int __builtin_ia32_ucomilt (v4sf, v4sf)
20342 int __builtin_ia32_ucomile (v4sf, v4sf)
20343 int __builtin_ia32_ucomigt (v4sf, v4sf)
20344 int __builtin_ia32_ucomige (v4sf, v4sf)
20345 v4sf __builtin_ia32_addps (v4sf, v4sf)
20346 v4sf __builtin_ia32_subps (v4sf, v4sf)
20347 v4sf __builtin_ia32_mulps (v4sf, v4sf)
20348 v4sf __builtin_ia32_divps (v4sf, v4sf)
20349 v4sf __builtin_ia32_addss (v4sf, v4sf)
20350 v4sf __builtin_ia32_subss (v4sf, v4sf)
20351 v4sf __builtin_ia32_mulss (v4sf, v4sf)
20352 v4sf __builtin_ia32_divss (v4sf, v4sf)
20353 v4si __builtin_ia32_cmpeqps (v4sf, v4sf)
20354 v4si __builtin_ia32_cmpltps (v4sf, v4sf)
20355 v4si __builtin_ia32_cmpleps (v4sf, v4sf)
20356 v4si __builtin_ia32_cmpgtps (v4sf, v4sf)
20357 v4si __builtin_ia32_cmpgeps (v4sf, v4sf)
20358 v4si __builtin_ia32_cmpunordps (v4sf, v4sf)
20359 v4si __builtin_ia32_cmpneqps (v4sf, v4sf)
20360 v4si __builtin_ia32_cmpnltps (v4sf, v4sf)
20361 v4si __builtin_ia32_cmpnleps (v4sf, v4sf)
20362 v4si __builtin_ia32_cmpngtps (v4sf, v4sf)
20363 v4si __builtin_ia32_cmpngeps (v4sf, v4sf)
20364 v4si __builtin_ia32_cmpordps (v4sf, v4sf)
20365 v4si __builtin_ia32_cmpeqss (v4sf, v4sf)
20366 v4si __builtin_ia32_cmpltss (v4sf, v4sf)
20367 v4si __builtin_ia32_cmpless (v4sf, v4sf)
20368 v4si __builtin_ia32_cmpunordss (v4sf, v4sf)
20369 v4si __builtin_ia32_cmpneqss (v4sf, v4sf)
20370 v4si __builtin_ia32_cmpnlts (v4sf, v4sf)
20371 v4si __builtin_ia32_cmpnless (v4sf, v4sf)
20372 v4si __builtin_ia32_cmpordss (v4sf, v4sf)
20373 v4sf __builtin_ia32_maxps (v4sf, v4sf)
20374 v4sf __builtin_ia32_maxss (v4sf, v4sf)
20375 v4sf __builtin_ia32_minps (v4sf, v4sf)
20376 v4sf __builtin_ia32_minss (v4sf, v4sf)
20377 v4sf __builtin_ia32_andps (v4sf, v4sf)
20378 v4sf __builtin_ia32_andnps (v4sf, v4sf)
20379 v4sf __builtin_ia32_orps (v4sf, v4sf)
20380 v4sf __builtin_ia32_xorps (v4sf, v4sf)
20381 v4sf __builtin_ia32_movss (v4sf, v4sf)
20382 v4sf __builtin_ia32_movhlps (v4sf, v4sf)
20383 v4sf __builtin_ia32_movlhps (v4sf, v4sf)
20384 v4sf __builtin_ia32_unpckhps (v4sf, v4sf)
20385 v4sf __builtin_ia32_unpcklps (v4sf, v4sf)
20386 v4sf __builtin_ia32_cvtpi2ps (v4sf, v2si)
20387 v4sf __builtin_ia32_cvtsi2ss (v4sf, int)
20388 v2si __builtin_ia32_cvtps2pi (v4sf)
20389 int __builtin_ia32_cvtss2si (v4sf)
20390 v2si __builtin_ia32_cvttps2pi (v4sf)
20391 int __builtin_ia32_cvttss2si (v4sf)
20392 v4sf __builtin_ia32_rcpps (v4sf)
20393 v4sf __builtin_ia32_rsqrtps (v4sf)
20394 v4sf __builtin_ia32_sqrtps (v4sf)
20395 v4sf __builtin_ia32_rcpss (v4sf)
20396 v4sf __builtin_ia32_rsqrtss (v4sf)
20397 v4sf __builtin_ia32_sqrtss (v4sf)
20398 v4sf __builtin_ia32_shufps (v4sf, v4sf, int)
20399 void __builtin_ia32_movntps (float *, v4sf)
20400 int __builtin_ia32_movmskps (v4sf)
20402 The following built-in functions are available when `-msse' is used.
20404 `v4sf __builtin_ia32_loadaps (float *)'
20405 Generates the `movaps' machine instruction as a load from memory.
20407 `void __builtin_ia32_storeaps (float *, v4sf)'
20408 Generates the `movaps' machine instruction as a store to memory.
20410 `v4sf __builtin_ia32_loadups (float *)'
20411 Generates the `movups' machine instruction as a load from memory.
20413 `void __builtin_ia32_storeups (float *, v4sf)'
20414 Generates the `movups' machine instruction as a store to memory.
20416 `v4sf __builtin_ia32_loadsss (float *)'
20417 Generates the `movss' machine instruction as a load from memory.
20419 `void __builtin_ia32_storess (float *, v4sf)'
20420 Generates the `movss' machine instruction as a store to memory.
20422 `v4sf __builtin_ia32_loadhps (v4sf, v2si *)'
20423 Generates the `movhps' machine instruction as a load from memory.
20425 `v4sf __builtin_ia32_loadlps (v4sf, v2si *)'
20426 Generates the `movlps' machine instruction as a load from memory
20428 `void __builtin_ia32_storehps (v4sf, v2si *)'
20429 Generates the `movhps' machine instruction as a store to memory.
20431 `void __builtin_ia32_storelps (v4sf, v2si *)'
20432 Generates the `movlps' machine instruction as a store to memory.
20434 The following built-in functions are available when `-msse3' is used.
20435 All of them generate the machine instruction that is part of the name.
20437 v2df __builtin_ia32_addsubpd (v2df, v2df)
20438 v2df __builtin_ia32_addsubps (v2df, v2df)
20439 v2df __builtin_ia32_haddpd (v2df, v2df)
20440 v2df __builtin_ia32_haddps (v2df, v2df)
20441 v2df __builtin_ia32_hsubpd (v2df, v2df)
20442 v2df __builtin_ia32_hsubps (v2df, v2df)
20443 v16qi __builtin_ia32_lddqu (char const *)
20444 void __builtin_ia32_monitor (void *, unsigned int, unsigned int)
20445 v2df __builtin_ia32_movddup (v2df)
20446 v4sf __builtin_ia32_movshdup (v4sf)
20447 v4sf __builtin_ia32_movsldup (v4sf)
20448 void __builtin_ia32_mwait (unsigned int, unsigned int)
20450 The following built-in functions are available when `-msse3' is used.
20452 `v2df __builtin_ia32_loadddup (double const *)'
20453 Generates the `movddup' machine instruction as a load from memory.
20455 The following built-in functions are available when `-m3dnow' is used.
20456 All of them generate the machine instruction that is part of the name.
20458 void __builtin_ia32_femms (void)
20459 v8qi __builtin_ia32_pavgusb (v8qi, v8qi)
20460 v2si __builtin_ia32_pf2id (v2sf)
20461 v2sf __builtin_ia32_pfacc (v2sf, v2sf)
20462 v2sf __builtin_ia32_pfadd (v2sf, v2sf)
20463 v2si __builtin_ia32_pfcmpeq (v2sf, v2sf)
20464 v2si __builtin_ia32_pfcmpge (v2sf, v2sf)
20465 v2si __builtin_ia32_pfcmpgt (v2sf, v2sf)
20466 v2sf __builtin_ia32_pfmax (v2sf, v2sf)
20467 v2sf __builtin_ia32_pfmin (v2sf, v2sf)
20468 v2sf __builtin_ia32_pfmul (v2sf, v2sf)
20469 v2sf __builtin_ia32_pfrcp (v2sf)
20470 v2sf __builtin_ia32_pfrcpit1 (v2sf, v2sf)
20471 v2sf __builtin_ia32_pfrcpit2 (v2sf, v2sf)
20472 v2sf __builtin_ia32_pfrsqrt (v2sf)
20473 v2sf __builtin_ia32_pfrsqrtit1 (v2sf, v2sf)
20474 v2sf __builtin_ia32_pfsub (v2sf, v2sf)
20475 v2sf __builtin_ia32_pfsubr (v2sf, v2sf)
20476 v2sf __builtin_ia32_pi2fd (v2si)
20477 v4hi __builtin_ia32_pmulhrw (v4hi, v4hi)
20479 The following built-in functions are available when both `-m3dnow' and
20480 `-march=athlon' are used. All of them generate the machine instruction
20481 that is part of the name.
20483 v2si __builtin_ia32_pf2iw (v2sf)
20484 v2sf __builtin_ia32_pfnacc (v2sf, v2sf)
20485 v2sf __builtin_ia32_pfpnacc (v2sf, v2sf)
20486 v2sf __builtin_ia32_pi2fw (v2si)
20487 v2sf __builtin_ia32_pswapdsf (v2sf)
20488 v2si __builtin_ia32_pswapdsi (v2si)
20491 File: gcc.info, Node: MIPS DSP Built-in Functions, Next: MIPS Paired-Single Support, Prev: X86 Built-in Functions, Up: Target Builtins
20493 5.47.6 MIPS DSP Built-in Functions
20494 ----------------------------------
20496 The MIPS DSP Application-Specific Extension (ASE) includes new
20497 instructions that are designed to improve the performance of DSP and
20498 media applications. It provides instructions that operate on packed
20499 8-bit integer data, Q15 fractional data and Q31 fractional data.
20501 GCC supports MIPS DSP operations using both the generic vector
20502 extensions (*note Vector Extensions::) and a collection of
20503 MIPS-specific built-in functions. Both kinds of support are enabled by
20504 the `-mdsp' command-line option.
20506 At present, GCC only provides support for operations on 32-bit
20507 vectors. The vector type associated with 8-bit integer data is usually
20508 called `v4i8' and the vector type associated with Q15 is usually called
20509 `v2q15'. They can be defined in C as follows:
20511 typedef char v4i8 __attribute__ ((vector_size(4)));
20512 typedef short v2q15 __attribute__ ((vector_size(4)));
20514 `v4i8' and `v2q15' values are initialized in the same way as
20515 aggregates. For example:
20517 v4i8 a = {1, 2, 3, 4};
20519 b = (v4i8) {5, 6, 7, 8};
20521 v2q15 c = {0x0fcb, 0x3a75};
20523 d = (v2q15) {0.1234 * 0x1.0p15, 0.4567 * 0x1.0p15};
20525 _Note:_ The CPU's endianness determines the order in which values are
20526 packed. On little-endian targets, the first value is the least
20527 significant and the last value is the most significant. The opposite
20528 order applies to big-endian targets. For example, the code above will
20529 set the lowest byte of `a' to `1' on little-endian targets and `4' on
20530 big-endian targets.
20532 _Note:_ Q15 and Q31 values must be initialized with their integer
20533 representation. As shown in this example, the integer representation
20534 of a Q15 value can be obtained by multiplying the fractional value by
20535 `0x1.0p15'. The equivalent for Q31 values is to multiply by `0x1.0p31'.
20537 The table below lists the `v4i8' and `v2q15' operations for which
20538 hardware support exists. `a' and `b' are `v4i8' values, and `c' and
20539 `d' are `v2q15' values.
20541 C code MIPS instruction
20547 It is easier to describe the DSP built-in functions if we first define
20548 the following types:
20552 typedef long long a64;
20554 `q31' and `i32' are actually the same as `int', but we use `q31' to
20555 indicate a Q31 fractional value and `i32' to indicate a 32-bit integer
20556 value. Similarly, `a64' is the same as `long long', but we use `a64'
20557 to indicate values that will be placed in one of the four DSP
20558 accumulators (`$ac0', `$ac1', `$ac2' or `$ac3').
20560 Also, some built-in functions prefer or require immediate numbers as
20561 parameters, because the corresponding DSP instructions accept both
20562 immediate numbers and register operands, or accept immediate numbers
20563 only. The immediate parameters are listed as follows.
20569 imm0_255: 0 to 255.
20570 imm_n32_31: -32 to 31.
20571 imm_n512_511: -512 to 511.
20573 The following built-in functions map directly to a particular MIPS DSP
20574 instruction. Please refer to the architecture specification for
20575 details on what each instruction does.
20577 v2q15 __builtin_mips_addq_ph (v2q15, v2q15)
20578 v2q15 __builtin_mips_addq_s_ph (v2q15, v2q15)
20579 q31 __builtin_mips_addq_s_w (q31, q31)
20580 v4i8 __builtin_mips_addu_qb (v4i8, v4i8)
20581 v4i8 __builtin_mips_addu_s_qb (v4i8, v4i8)
20582 v2q15 __builtin_mips_subq_ph (v2q15, v2q15)
20583 v2q15 __builtin_mips_subq_s_ph (v2q15, v2q15)
20584 q31 __builtin_mips_subq_s_w (q31, q31)
20585 v4i8 __builtin_mips_subu_qb (v4i8, v4i8)
20586 v4i8 __builtin_mips_subu_s_qb (v4i8, v4i8)
20587 i32 __builtin_mips_addsc (i32, i32)
20588 i32 __builtin_mips_addwc (i32, i32)
20589 i32 __builtin_mips_modsub (i32, i32)
20590 i32 __builtin_mips_raddu_w_qb (v4i8)
20591 v2q15 __builtin_mips_absq_s_ph (v2q15)
20592 q31 __builtin_mips_absq_s_w (q31)
20593 v4i8 __builtin_mips_precrq_qb_ph (v2q15, v2q15)
20594 v2q15 __builtin_mips_precrq_ph_w (q31, q31)
20595 v2q15 __builtin_mips_precrq_rs_ph_w (q31, q31)
20596 v4i8 __builtin_mips_precrqu_s_qb_ph (v2q15, v2q15)
20597 q31 __builtin_mips_preceq_w_phl (v2q15)
20598 q31 __builtin_mips_preceq_w_phr (v2q15)
20599 v2q15 __builtin_mips_precequ_ph_qbl (v4i8)
20600 v2q15 __builtin_mips_precequ_ph_qbr (v4i8)
20601 v2q15 __builtin_mips_precequ_ph_qbla (v4i8)
20602 v2q15 __builtin_mips_precequ_ph_qbra (v4i8)
20603 v2q15 __builtin_mips_preceu_ph_qbl (v4i8)
20604 v2q15 __builtin_mips_preceu_ph_qbr (v4i8)
20605 v2q15 __builtin_mips_preceu_ph_qbla (v4i8)
20606 v2q15 __builtin_mips_preceu_ph_qbra (v4i8)
20607 v4i8 __builtin_mips_shll_qb (v4i8, imm0_7)
20608 v4i8 __builtin_mips_shll_qb (v4i8, i32)
20609 v2q15 __builtin_mips_shll_ph (v2q15, imm0_15)
20610 v2q15 __builtin_mips_shll_ph (v2q15, i32)
20611 v2q15 __builtin_mips_shll_s_ph (v2q15, imm0_15)
20612 v2q15 __builtin_mips_shll_s_ph (v2q15, i32)
20613 q31 __builtin_mips_shll_s_w (q31, imm0_31)
20614 q31 __builtin_mips_shll_s_w (q31, i32)
20615 v4i8 __builtin_mips_shrl_qb (v4i8, imm0_7)
20616 v4i8 __builtin_mips_shrl_qb (v4i8, i32)
20617 v2q15 __builtin_mips_shra_ph (v2q15, imm0_15)
20618 v2q15 __builtin_mips_shra_ph (v2q15, i32)
20619 v2q15 __builtin_mips_shra_r_ph (v2q15, imm0_15)
20620 v2q15 __builtin_mips_shra_r_ph (v2q15, i32)
20621 q31 __builtin_mips_shra_r_w (q31, imm0_31)
20622 q31 __builtin_mips_shra_r_w (q31, i32)
20623 v2q15 __builtin_mips_muleu_s_ph_qbl (v4i8, v2q15)
20624 v2q15 __builtin_mips_muleu_s_ph_qbr (v4i8, v2q15)
20625 v2q15 __builtin_mips_mulq_rs_ph (v2q15, v2q15)
20626 q31 __builtin_mips_muleq_s_w_phl (v2q15, v2q15)
20627 q31 __builtin_mips_muleq_s_w_phr (v2q15, v2q15)
20628 a64 __builtin_mips_dpau_h_qbl (a64, v4i8, v4i8)
20629 a64 __builtin_mips_dpau_h_qbr (a64, v4i8, v4i8)
20630 a64 __builtin_mips_dpsu_h_qbl (a64, v4i8, v4i8)
20631 a64 __builtin_mips_dpsu_h_qbr (a64, v4i8, v4i8)
20632 a64 __builtin_mips_dpaq_s_w_ph (a64, v2q15, v2q15)
20633 a64 __builtin_mips_dpaq_sa_l_w (a64, q31, q31)
20634 a64 __builtin_mips_dpsq_s_w_ph (a64, v2q15, v2q15)
20635 a64 __builtin_mips_dpsq_sa_l_w (a64, q31, q31)
20636 a64 __builtin_mips_mulsaq_s_w_ph (a64, v2q15, v2q15)
20637 a64 __builtin_mips_maq_s_w_phl (a64, v2q15, v2q15)
20638 a64 __builtin_mips_maq_s_w_phr (a64, v2q15, v2q15)
20639 a64 __builtin_mips_maq_sa_w_phl (a64, v2q15, v2q15)
20640 a64 __builtin_mips_maq_sa_w_phr (a64, v2q15, v2q15)
20641 i32 __builtin_mips_bitrev (i32)
20642 i32 __builtin_mips_insv (i32, i32)
20643 v4i8 __builtin_mips_repl_qb (imm0_255)
20644 v4i8 __builtin_mips_repl_qb (i32)
20645 v2q15 __builtin_mips_repl_ph (imm_n512_511)
20646 v2q15 __builtin_mips_repl_ph (i32)
20647 void __builtin_mips_cmpu_eq_qb (v4i8, v4i8)
20648 void __builtin_mips_cmpu_lt_qb (v4i8, v4i8)
20649 void __builtin_mips_cmpu_le_qb (v4i8, v4i8)
20650 i32 __builtin_mips_cmpgu_eq_qb (v4i8, v4i8)
20651 i32 __builtin_mips_cmpgu_lt_qb (v4i8, v4i8)
20652 i32 __builtin_mips_cmpgu_le_qb (v4i8, v4i8)
20653 void __builtin_mips_cmp_eq_ph (v2q15, v2q15)
20654 void __builtin_mips_cmp_lt_ph (v2q15, v2q15)
20655 void __builtin_mips_cmp_le_ph (v2q15, v2q15)
20656 v4i8 __builtin_mips_pick_qb (v4i8, v4i8)
20657 v2q15 __builtin_mips_pick_ph (v2q15, v2q15)
20658 v2q15 __builtin_mips_packrl_ph (v2q15, v2q15)
20659 i32 __builtin_mips_extr_w (a64, imm0_31)
20660 i32 __builtin_mips_extr_w (a64, i32)
20661 i32 __builtin_mips_extr_r_w (a64, imm0_31)
20662 i32 __builtin_mips_extr_s_h (a64, i32)
20663 i32 __builtin_mips_extr_rs_w (a64, imm0_31)
20664 i32 __builtin_mips_extr_rs_w (a64, i32)
20665 i32 __builtin_mips_extr_s_h (a64, imm0_31)
20666 i32 __builtin_mips_extr_r_w (a64, i32)
20667 i32 __builtin_mips_extp (a64, imm0_31)
20668 i32 __builtin_mips_extp (a64, i32)
20669 i32 __builtin_mips_extpdp (a64, imm0_31)
20670 i32 __builtin_mips_extpdp (a64, i32)
20671 a64 __builtin_mips_shilo (a64, imm_n32_31)
20672 a64 __builtin_mips_shilo (a64, i32)
20673 a64 __builtin_mips_mthlip (a64, i32)
20674 void __builtin_mips_wrdsp (i32, imm0_63)
20675 i32 __builtin_mips_rddsp (imm0_63)
20676 i32 __builtin_mips_lbux (void *, i32)
20677 i32 __builtin_mips_lhx (void *, i32)
20678 i32 __builtin_mips_lwx (void *, i32)
20679 i32 __builtin_mips_bposge32 (void)
20682 File: gcc.info, Node: MIPS Paired-Single Support, Next: PowerPC AltiVec Built-in Functions, Prev: MIPS DSP Built-in Functions, Up: Target Builtins
20684 5.47.7 MIPS Paired-Single Support
20685 ---------------------------------
20687 The MIPS64 architecture includes a number of instructions that operate
20688 on pairs of single-precision floating-point values. Each pair is
20689 packed into a 64-bit floating-point register, with one element being
20690 designated the "upper half" and the other being designated the "lower
20693 GCC supports paired-single operations using both the generic vector
20694 extensions (*note Vector Extensions::) and a collection of
20695 MIPS-specific built-in functions. Both kinds of support are enabled by
20696 the `-mpaired-single' command-line option.
20698 The vector type associated with paired-single values is usually called
20699 `v2sf'. It can be defined in C as follows:
20701 typedef float v2sf __attribute__ ((vector_size (8)));
20703 `v2sf' values are initialized in the same way as aggregates. For
20706 v2sf a = {1.5, 9.1};
20711 _Note:_ The CPU's endianness determines which value is stored in the
20712 upper half of a register and which value is stored in the lower half.
20713 On little-endian targets, the first value is the lower one and the
20714 second value is the upper one. The opposite order applies to
20715 big-endian targets. For example, the code above will set the lower
20716 half of `a' to `1.5' on little-endian targets and `9.1' on big-endian
20721 * Paired-Single Arithmetic::
20722 * Paired-Single Built-in Functions::
20723 * MIPS-3D Built-in Functions::
20726 File: gcc.info, Node: Paired-Single Arithmetic, Next: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support
20728 5.47.7.1 Paired-Single Arithmetic
20729 .................................
20731 The table below lists the `v2sf' operations for which hardware support
20732 exists. `a', `b' and `c' are `v2sf' values and `x' is an integral
20735 C code MIPS instruction
20740 `a * b + c' `madd.ps'
20741 `a * b - c' `msub.ps'
20742 `-(a * b + c)' `nmadd.ps'
20743 `-(a * b - c)' `nmsub.ps'
20744 `x ? a : b' `movn.ps'/`movz.ps'
20746 Note that the multiply-accumulate instructions can be disabled using
20747 the command-line option `-mno-fused-madd'.
20750 File: gcc.info, Node: Paired-Single Built-in Functions, Next: MIPS-3D Built-in Functions, Prev: Paired-Single Arithmetic, Up: MIPS Paired-Single Support
20752 5.47.7.2 Paired-Single Built-in Functions
20753 .........................................
20755 The following paired-single functions map directly to a particular MIPS
20756 instruction. Please refer to the architecture specification for
20757 details on what each instruction does.
20759 `v2sf __builtin_mips_pll_ps (v2sf, v2sf)'
20760 Pair lower lower (`pll.ps').
20762 `v2sf __builtin_mips_pul_ps (v2sf, v2sf)'
20763 Pair upper lower (`pul.ps').
20765 `v2sf __builtin_mips_plu_ps (v2sf, v2sf)'
20766 Pair lower upper (`plu.ps').
20768 `v2sf __builtin_mips_puu_ps (v2sf, v2sf)'
20769 Pair upper upper (`puu.ps').
20771 `v2sf __builtin_mips_cvt_ps_s (float, float)'
20772 Convert pair to paired single (`cvt.ps.s').
20774 `float __builtin_mips_cvt_s_pl (v2sf)'
20775 Convert pair lower to single (`cvt.s.pl').
20777 `float __builtin_mips_cvt_s_pu (v2sf)'
20778 Convert pair upper to single (`cvt.s.pu').
20780 `v2sf __builtin_mips_abs_ps (v2sf)'
20781 Absolute value (`abs.ps').
20783 `v2sf __builtin_mips_alnv_ps (v2sf, v2sf, int)'
20784 Align variable (`alnv.ps').
20786 _Note:_ The value of the third parameter must be 0 or 4 modulo 8,
20787 otherwise the result will be unpredictable. Please read the
20788 instruction description for details.
20790 The following multi-instruction functions are also available. In each
20791 case, COND can be any of the 16 floating-point conditions: `f', `un',
20792 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
20793 `lt', `nge', `le' or `ngt'.
20795 `v2sf __builtin_mips_movt_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
20796 `v2sf __builtin_mips_movf_c_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
20797 Conditional move based on floating point comparison (`c.COND.ps',
20798 `movt.ps'/`movf.ps').
20800 The `movt' functions return the value X computed by:
20806 The `movf' functions are similar but use `movf.ps' instead of
20809 `int __builtin_mips_upper_c_COND_ps (v2sf A, v2sf B)'
20810 `int __builtin_mips_lower_c_COND_ps (v2sf A, v2sf B)'
20811 Comparison of two paired-single values (`c.COND.ps',
20814 These functions compare A and B using `c.COND.ps' and return
20815 either the upper or lower half of the result. For example:
20818 if (__builtin_mips_upper_c_eq_ps (a, b))
20819 upper_halves_are_equal ();
20821 upper_halves_are_unequal ();
20823 if (__builtin_mips_lower_c_eq_ps (a, b))
20824 lower_halves_are_equal ();
20826 lower_halves_are_unequal ();
20829 File: gcc.info, Node: MIPS-3D Built-in Functions, Prev: Paired-Single Built-in Functions, Up: MIPS Paired-Single Support
20831 5.47.7.3 MIPS-3D Built-in Functions
20832 ...................................
20834 The MIPS-3D Application-Specific Extension (ASE) includes additional
20835 paired-single instructions that are designed to improve the performance
20836 of 3D graphics operations. Support for these instructions is controlled
20837 by the `-mips3d' command-line option.
20839 The functions listed below map directly to a particular MIPS-3D
20840 instruction. Please refer to the architecture specification for more
20841 details on what each instruction does.
20843 `v2sf __builtin_mips_addr_ps (v2sf, v2sf)'
20844 Reduction add (`addr.ps').
20846 `v2sf __builtin_mips_mulr_ps (v2sf, v2sf)'
20847 Reduction multiply (`mulr.ps').
20849 `v2sf __builtin_mips_cvt_pw_ps (v2sf)'
20850 Convert paired single to paired word (`cvt.pw.ps').
20852 `v2sf __builtin_mips_cvt_ps_pw (v2sf)'
20853 Convert paired word to paired single (`cvt.ps.pw').
20855 `float __builtin_mips_recip1_s (float)'
20856 `double __builtin_mips_recip1_d (double)'
20857 `v2sf __builtin_mips_recip1_ps (v2sf)'
20858 Reduced precision reciprocal (sequence step 1) (`recip1.FMT').
20860 `float __builtin_mips_recip2_s (float, float)'
20861 `double __builtin_mips_recip2_d (double, double)'
20862 `v2sf __builtin_mips_recip2_ps (v2sf, v2sf)'
20863 Reduced precision reciprocal (sequence step 2) (`recip2.FMT').
20865 `float __builtin_mips_rsqrt1_s (float)'
20866 `double __builtin_mips_rsqrt1_d (double)'
20867 `v2sf __builtin_mips_rsqrt1_ps (v2sf)'
20868 Reduced precision reciprocal square root (sequence step 1)
20871 `float __builtin_mips_rsqrt2_s (float, float)'
20872 `double __builtin_mips_rsqrt2_d (double, double)'
20873 `v2sf __builtin_mips_rsqrt2_ps (v2sf, v2sf)'
20874 Reduced precision reciprocal square root (sequence step 2)
20877 The following multi-instruction functions are also available. In each
20878 case, COND can be any of the 16 floating-point conditions: `f', `un',
20879 `eq', `ueq', `olt', `ult', `ole', `ule', `sf', `ngle', `seq', `ngl',
20880 `lt', `nge', `le' or `ngt'.
20882 `int __builtin_mips_cabs_COND_s (float A, float B)'
20883 `int __builtin_mips_cabs_COND_d (double A, double B)'
20884 Absolute comparison of two scalar values (`cabs.COND.FMT',
20887 These functions compare A and B using `cabs.COND.s' or
20888 `cabs.COND.d' and return the result as a boolean value. For
20892 if (__builtin_mips_cabs_eq_s (a, b))
20897 `int __builtin_mips_upper_cabs_COND_ps (v2sf A, v2sf B)'
20898 `int __builtin_mips_lower_cabs_COND_ps (v2sf A, v2sf B)'
20899 Absolute comparison of two paired-single values (`cabs.COND.ps',
20902 These functions compare A and B using `cabs.COND.ps' and return
20903 either the upper or lower half of the result. For example:
20906 if (__builtin_mips_upper_cabs_eq_ps (a, b))
20907 upper_halves_are_equal ();
20909 upper_halves_are_unequal ();
20911 if (__builtin_mips_lower_cabs_eq_ps (a, b))
20912 lower_halves_are_equal ();
20914 lower_halves_are_unequal ();
20916 `v2sf __builtin_mips_movt_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
20917 `v2sf __builtin_mips_movf_cabs_COND_ps (v2sf A, v2sf B, v2sf C, v2sf D)'
20918 Conditional move based on absolute comparison (`cabs.COND.ps',
20919 `movt.ps'/`movf.ps').
20921 The `movt' functions return the value X computed by:
20923 cabs.COND.ps CC,A,B
20927 The `movf' functions are similar but use `movf.ps' instead of
20930 `int __builtin_mips_any_c_COND_ps (v2sf A, v2sf B)'
20931 `int __builtin_mips_all_c_COND_ps (v2sf A, v2sf B)'
20932 `int __builtin_mips_any_cabs_COND_ps (v2sf A, v2sf B)'
20933 `int __builtin_mips_all_cabs_COND_ps (v2sf A, v2sf B)'
20934 Comparison of two paired-single values (`c.COND.ps'/`cabs.COND.ps',
20935 `bc1any2t'/`bc1any2f').
20937 These functions compare A and B using `c.COND.ps' or
20938 `cabs.COND.ps'. The `any' forms return true if either result is
20939 true and the `all' forms return true if both results are true.
20943 if (__builtin_mips_any_c_eq_ps (a, b))
20948 if (__builtin_mips_all_c_eq_ps (a, b))
20953 `int __builtin_mips_any_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
20954 `int __builtin_mips_all_c_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
20955 `int __builtin_mips_any_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
20956 `int __builtin_mips_all_cabs_COND_4s (v2sf A, v2sf B, v2sf C, v2sf D)'
20957 Comparison of four paired-single values
20958 (`c.COND.ps'/`cabs.COND.ps', `bc1any4t'/`bc1any4f').
20960 These functions use `c.COND.ps' or `cabs.COND.ps' to compare A
20961 with B and to compare C with D. The `any' forms return true if
20962 any of the four results are true and the `all' forms return true
20963 if all four results are true. For example:
20966 if (__builtin_mips_any_c_eq_4s (a, b, c, d))
20971 if (__builtin_mips_all_c_eq_4s (a, b, c, d))
20977 File: gcc.info, Node: PowerPC AltiVec Built-in Functions, Next: SPARC VIS Built-in Functions, Prev: MIPS Paired-Single Support, Up: Target Builtins
20979 5.47.8 PowerPC AltiVec Built-in Functions
20980 -----------------------------------------
20982 GCC provides an interface for the PowerPC family of processors to access
20983 the AltiVec operations described in Motorola's AltiVec Programming
20984 Interface Manual. The interface is made available by including
20985 `<altivec.h>' and using `-maltivec' and `-mabi=altivec'. The interface
20986 supports the following vector types.
20988 vector unsigned char
20992 vector unsigned short
20993 vector signed short
20997 vector unsigned int
21002 GCC's implementation of the high-level language interface available
21003 from C and C++ code differs from Motorola's documentation in several
21006 * A vector constant is a list of constant expressions within curly
21009 * A vector initializer requires no cast if the vector constant is of
21010 the same type as the variable it is initializing.
21012 * If `signed' or `unsigned' is omitted, the signedness of the vector
21013 type is the default signedness of the base type. The default
21014 varies depending on the operating system, so a portable program
21015 should always specify the signedness.
21017 * Compiling with `-maltivec' adds keywords `__vector', `__pixel',
21018 and `__bool'. Macros `vector', `pixel', and `bool' are defined in
21019 `<altivec.h>' and can be undefined.
21021 * GCC allows using a `typedef' name as the type specifier for a
21024 * For C, overloaded functions are implemented with macros so the
21025 following does not work:
21027 vec_add ((vector signed int){1, 2, 3, 4}, foo);
21029 Since `vec_add' is a macro, the vector constant in the example is
21030 treated as four separate arguments. Wrap the entire argument in
21031 parentheses for this to work.
21033 _Note:_ Only the `<altivec.h>' interface is supported. Internally,
21034 GCC uses built-in functions to achieve the functionality in the
21035 aforementioned header file, but they are not supported and are subject
21036 to change without notice.
21038 The following interfaces are supported for the generic and specific
21039 AltiVec operations and the AltiVec predicates. In cases where there is
21040 a direct mapping between generic and specific operations, only the
21041 generic names are shown here, although the specific operations can also
21044 Arguments that are documented as `const int' require literal integral
21045 values within the range required for that operation.
21047 vector signed char vec_abs (vector signed char);
21048 vector signed short vec_abs (vector signed short);
21049 vector signed int vec_abs (vector signed int);
21050 vector float vec_abs (vector float);
21052 vector signed char vec_abss (vector signed char);
21053 vector signed short vec_abss (vector signed short);
21054 vector signed int vec_abss (vector signed int);
21056 vector signed char vec_add (vector bool char, vector signed char);
21057 vector signed char vec_add (vector signed char, vector bool char);
21058 vector signed char vec_add (vector signed char, vector signed char);
21059 vector unsigned char vec_add (vector bool char, vector unsigned char);
21060 vector unsigned char vec_add (vector unsigned char, vector bool char);
21061 vector unsigned char vec_add (vector unsigned char,
21062 vector unsigned char);
21063 vector signed short vec_add (vector bool short, vector signed short);
21064 vector signed short vec_add (vector signed short, vector bool short);
21065 vector signed short vec_add (vector signed short, vector signed short);
21066 vector unsigned short vec_add (vector bool short,
21067 vector unsigned short);
21068 vector unsigned short vec_add (vector unsigned short,
21069 vector bool short);
21070 vector unsigned short vec_add (vector unsigned short,
21071 vector unsigned short);
21072 vector signed int vec_add (vector bool int, vector signed int);
21073 vector signed int vec_add (vector signed int, vector bool int);
21074 vector signed int vec_add (vector signed int, vector signed int);
21075 vector unsigned int vec_add (vector bool int, vector unsigned int);
21076 vector unsigned int vec_add (vector unsigned int, vector bool int);
21077 vector unsigned int vec_add (vector unsigned int, vector unsigned int);
21078 vector float vec_add (vector float, vector float);
21080 vector float vec_vaddfp (vector float, vector float);
21082 vector signed int vec_vadduwm (vector bool int, vector signed int);
21083 vector signed int vec_vadduwm (vector signed int, vector bool int);
21084 vector signed int vec_vadduwm (vector signed int, vector signed int);
21085 vector unsigned int vec_vadduwm (vector bool int, vector unsigned int);
21086 vector unsigned int vec_vadduwm (vector unsigned int, vector bool int);
21087 vector unsigned int vec_vadduwm (vector unsigned int,
21088 vector unsigned int);
21090 vector signed short vec_vadduhm (vector bool short,
21091 vector signed short);
21092 vector signed short vec_vadduhm (vector signed short,
21093 vector bool short);
21094 vector signed short vec_vadduhm (vector signed short,
21095 vector signed short);
21096 vector unsigned short vec_vadduhm (vector bool short,
21097 vector unsigned short);
21098 vector unsigned short vec_vadduhm (vector unsigned short,
21099 vector bool short);
21100 vector unsigned short vec_vadduhm (vector unsigned short,
21101 vector unsigned short);
21103 vector signed char vec_vaddubm (vector bool char, vector signed char);
21104 vector signed char vec_vaddubm (vector signed char, vector bool char);
21105 vector signed char vec_vaddubm (vector signed char, vector signed char);
21106 vector unsigned char vec_vaddubm (vector bool char,
21107 vector unsigned char);
21108 vector unsigned char vec_vaddubm (vector unsigned char,
21110 vector unsigned char vec_vaddubm (vector unsigned char,
21111 vector unsigned char);
21113 vector unsigned int vec_addc (vector unsigned int, vector unsigned int);
21115 vector unsigned char vec_adds (vector bool char, vector unsigned char);
21116 vector unsigned char vec_adds (vector unsigned char, vector bool char);
21117 vector unsigned char vec_adds (vector unsigned char,
21118 vector unsigned char);
21119 vector signed char vec_adds (vector bool char, vector signed char);
21120 vector signed char vec_adds (vector signed char, vector bool char);
21121 vector signed char vec_adds (vector signed char, vector signed char);
21122 vector unsigned short vec_adds (vector bool short,
21123 vector unsigned short);
21124 vector unsigned short vec_adds (vector unsigned short,
21125 vector bool short);
21126 vector unsigned short vec_adds (vector unsigned short,
21127 vector unsigned short);
21128 vector signed short vec_adds (vector bool short, vector signed short);
21129 vector signed short vec_adds (vector signed short, vector bool short);
21130 vector signed short vec_adds (vector signed short, vector signed short);
21131 vector unsigned int vec_adds (vector bool int, vector unsigned int);
21132 vector unsigned int vec_adds (vector unsigned int, vector bool int);
21133 vector unsigned int vec_adds (vector unsigned int, vector unsigned int);
21134 vector signed int vec_adds (vector bool int, vector signed int);
21135 vector signed int vec_adds (vector signed int, vector bool int);
21136 vector signed int vec_adds (vector signed int, vector signed int);
21138 vector signed int vec_vaddsws (vector bool int, vector signed int);
21139 vector signed int vec_vaddsws (vector signed int, vector bool int);
21140 vector signed int vec_vaddsws (vector signed int, vector signed int);
21142 vector unsigned int vec_vadduws (vector bool int, vector unsigned int);
21143 vector unsigned int vec_vadduws (vector unsigned int, vector bool int);
21144 vector unsigned int vec_vadduws (vector unsigned int,
21145 vector unsigned int);
21147 vector signed short vec_vaddshs (vector bool short,
21148 vector signed short);
21149 vector signed short vec_vaddshs (vector signed short,
21150 vector bool short);
21151 vector signed short vec_vaddshs (vector signed short,
21152 vector signed short);
21154 vector unsigned short vec_vadduhs (vector bool short,
21155 vector unsigned short);
21156 vector unsigned short vec_vadduhs (vector unsigned short,
21157 vector bool short);
21158 vector unsigned short vec_vadduhs (vector unsigned short,
21159 vector unsigned short);
21161 vector signed char vec_vaddsbs (vector bool char, vector signed char);
21162 vector signed char vec_vaddsbs (vector signed char, vector bool char);
21163 vector signed char vec_vaddsbs (vector signed char, vector signed char);
21165 vector unsigned char vec_vaddubs (vector bool char,
21166 vector unsigned char);
21167 vector unsigned char vec_vaddubs (vector unsigned char,
21169 vector unsigned char vec_vaddubs (vector unsigned char,
21170 vector unsigned char);
21172 vector float vec_and (vector float, vector float);
21173 vector float vec_and (vector float, vector bool int);
21174 vector float vec_and (vector bool int, vector float);
21175 vector bool int vec_and (vector bool int, vector bool int);
21176 vector signed int vec_and (vector bool int, vector signed int);
21177 vector signed int vec_and (vector signed int, vector bool int);
21178 vector signed int vec_and (vector signed int, vector signed int);
21179 vector unsigned int vec_and (vector bool int, vector unsigned int);
21180 vector unsigned int vec_and (vector unsigned int, vector bool int);
21181 vector unsigned int vec_and (vector unsigned int, vector unsigned int);
21182 vector bool short vec_and (vector bool short, vector bool short);
21183 vector signed short vec_and (vector bool short, vector signed short);
21184 vector signed short vec_and (vector signed short, vector bool short);
21185 vector signed short vec_and (vector signed short, vector signed short);
21186 vector unsigned short vec_and (vector bool short,
21187 vector unsigned short);
21188 vector unsigned short vec_and (vector unsigned short,
21189 vector bool short);
21190 vector unsigned short vec_and (vector unsigned short,
21191 vector unsigned short);
21192 vector signed char vec_and (vector bool char, vector signed char);
21193 vector bool char vec_and (vector bool char, vector bool char);
21194 vector signed char vec_and (vector signed char, vector bool char);
21195 vector signed char vec_and (vector signed char, vector signed char);
21196 vector unsigned char vec_and (vector bool char, vector unsigned char);
21197 vector unsigned char vec_and (vector unsigned char, vector bool char);
21198 vector unsigned char vec_and (vector unsigned char,
21199 vector unsigned char);
21201 vector float vec_andc (vector float, vector float);
21202 vector float vec_andc (vector float, vector bool int);
21203 vector float vec_andc (vector bool int, vector float);
21204 vector bool int vec_andc (vector bool int, vector bool int);
21205 vector signed int vec_andc (vector bool int, vector signed int);
21206 vector signed int vec_andc (vector signed int, vector bool int);
21207 vector signed int vec_andc (vector signed int, vector signed int);
21208 vector unsigned int vec_andc (vector bool int, vector unsigned int);
21209 vector unsigned int vec_andc (vector unsigned int, vector bool int);
21210 vector unsigned int vec_andc (vector unsigned int, vector unsigned int);
21211 vector bool short vec_andc (vector bool short, vector bool short);
21212 vector signed short vec_andc (vector bool short, vector signed short);
21213 vector signed short vec_andc (vector signed short, vector bool short);
21214 vector signed short vec_andc (vector signed short, vector signed short);
21215 vector unsigned short vec_andc (vector bool short,
21216 vector unsigned short);
21217 vector unsigned short vec_andc (vector unsigned short,
21218 vector bool short);
21219 vector unsigned short vec_andc (vector unsigned short,
21220 vector unsigned short);
21221 vector signed char vec_andc (vector bool char, vector signed char);
21222 vector bool char vec_andc (vector bool char, vector bool char);
21223 vector signed char vec_andc (vector signed char, vector bool char);
21224 vector signed char vec_andc (vector signed char, vector signed char);
21225 vector unsigned char vec_andc (vector bool char, vector unsigned char);
21226 vector unsigned char vec_andc (vector unsigned char, vector bool char);
21227 vector unsigned char vec_andc (vector unsigned char,
21228 vector unsigned char);
21230 vector unsigned char vec_avg (vector unsigned char,
21231 vector unsigned char);
21232 vector signed char vec_avg (vector signed char, vector signed char);
21233 vector unsigned short vec_avg (vector unsigned short,
21234 vector unsigned short);
21235 vector signed short vec_avg (vector signed short, vector signed short);
21236 vector unsigned int vec_avg (vector unsigned int, vector unsigned int);
21237 vector signed int vec_avg (vector signed int, vector signed int);
21239 vector signed int vec_vavgsw (vector signed int, vector signed int);
21241 vector unsigned int vec_vavguw (vector unsigned int,
21242 vector unsigned int);
21244 vector signed short vec_vavgsh (vector signed short,
21245 vector signed short);
21247 vector unsigned short vec_vavguh (vector unsigned short,
21248 vector unsigned short);
21250 vector signed char vec_vavgsb (vector signed char, vector signed char);
21252 vector unsigned char vec_vavgub (vector unsigned char,
21253 vector unsigned char);
21255 vector float vec_ceil (vector float);
21257 vector signed int vec_cmpb (vector float, vector float);
21259 vector bool char vec_cmpeq (vector signed char, vector signed char);
21260 vector bool char vec_cmpeq (vector unsigned char, vector unsigned char);
21261 vector bool short vec_cmpeq (vector signed short, vector signed short);
21262 vector bool short vec_cmpeq (vector unsigned short,
21263 vector unsigned short);
21264 vector bool int vec_cmpeq (vector signed int, vector signed int);
21265 vector bool int vec_cmpeq (vector unsigned int, vector unsigned int);
21266 vector bool int vec_cmpeq (vector float, vector float);
21268 vector bool int vec_vcmpeqfp (vector float, vector float);
21270 vector bool int vec_vcmpequw (vector signed int, vector signed int);
21271 vector bool int vec_vcmpequw (vector unsigned int, vector unsigned int);
21273 vector bool short vec_vcmpequh (vector signed short,
21274 vector signed short);
21275 vector bool short vec_vcmpequh (vector unsigned short,
21276 vector unsigned short);
21278 vector bool char vec_vcmpequb (vector signed char, vector signed char);
21279 vector bool char vec_vcmpequb (vector unsigned char,
21280 vector unsigned char);
21282 vector bool int vec_cmpge (vector float, vector float);
21284 vector bool char vec_cmpgt (vector unsigned char, vector unsigned char);
21285 vector bool char vec_cmpgt (vector signed char, vector signed char);
21286 vector bool short vec_cmpgt (vector unsigned short,
21287 vector unsigned short);
21288 vector bool short vec_cmpgt (vector signed short, vector signed short);
21289 vector bool int vec_cmpgt (vector unsigned int, vector unsigned int);
21290 vector bool int vec_cmpgt (vector signed int, vector signed int);
21291 vector bool int vec_cmpgt (vector float, vector float);
21293 vector bool int vec_vcmpgtfp (vector float, vector float);
21295 vector bool int vec_vcmpgtsw (vector signed int, vector signed int);
21297 vector bool int vec_vcmpgtuw (vector unsigned int, vector unsigned int);
21299 vector bool short vec_vcmpgtsh (vector signed short,
21300 vector signed short);
21302 vector bool short vec_vcmpgtuh (vector unsigned short,
21303 vector unsigned short);
21305 vector bool char vec_vcmpgtsb (vector signed char, vector signed char);
21307 vector bool char vec_vcmpgtub (vector unsigned char,
21308 vector unsigned char);
21310 vector bool int vec_cmple (vector float, vector float);
21312 vector bool char vec_cmplt (vector unsigned char, vector unsigned char);
21313 vector bool char vec_cmplt (vector signed char, vector signed char);
21314 vector bool short vec_cmplt (vector unsigned short,
21315 vector unsigned short);
21316 vector bool short vec_cmplt (vector signed short, vector signed short);
21317 vector bool int vec_cmplt (vector unsigned int, vector unsigned int);
21318 vector bool int vec_cmplt (vector signed int, vector signed int);
21319 vector bool int vec_cmplt (vector float, vector float);
21321 vector float vec_ctf (vector unsigned int, const int);
21322 vector float vec_ctf (vector signed int, const int);
21324 vector float vec_vcfsx (vector signed int, const int);
21326 vector float vec_vcfux (vector unsigned int, const int);
21328 vector signed int vec_cts (vector float, const int);
21330 vector unsigned int vec_ctu (vector float, const int);
21332 void vec_dss (const int);
21334 void vec_dssall (void);
21336 void vec_dst (const vector unsigned char *, int, const int);
21337 void vec_dst (const vector signed char *, int, const int);
21338 void vec_dst (const vector bool char *, int, const int);
21339 void vec_dst (const vector unsigned short *, int, const int);
21340 void vec_dst (const vector signed short *, int, const int);
21341 void vec_dst (const vector bool short *, int, const int);
21342 void vec_dst (const vector pixel *, int, const int);
21343 void vec_dst (const vector unsigned int *, int, const int);
21344 void vec_dst (const vector signed int *, int, const int);
21345 void vec_dst (const vector bool int *, int, const int);
21346 void vec_dst (const vector float *, int, const int);
21347 void vec_dst (const unsigned char *, int, const int);
21348 void vec_dst (const signed char *, int, const int);
21349 void vec_dst (const unsigned short *, int, const int);
21350 void vec_dst (const short *, int, const int);
21351 void vec_dst (const unsigned int *, int, const int);
21352 void vec_dst (const int *, int, const int);
21353 void vec_dst (const unsigned long *, int, const int);
21354 void vec_dst (const long *, int, const int);
21355 void vec_dst (const float *, int, const int);
21357 void vec_dstst (const vector unsigned char *, int, const int);
21358 void vec_dstst (const vector signed char *, int, const int);
21359 void vec_dstst (const vector bool char *, int, const int);
21360 void vec_dstst (const vector unsigned short *, int, const int);
21361 void vec_dstst (const vector signed short *, int, const int);
21362 void vec_dstst (const vector bool short *, int, const int);
21363 void vec_dstst (const vector pixel *, int, const int);
21364 void vec_dstst (const vector unsigned int *, int, const int);
21365 void vec_dstst (const vector signed int *, int, const int);
21366 void vec_dstst (const vector bool int *, int, const int);
21367 void vec_dstst (const vector float *, int, const int);
21368 void vec_dstst (const unsigned char *, int, const int);
21369 void vec_dstst (const signed char *, int, const int);
21370 void vec_dstst (const unsigned short *, int, const int);
21371 void vec_dstst (const short *, int, const int);
21372 void vec_dstst (const unsigned int *, int, const int);
21373 void vec_dstst (const int *, int, const int);
21374 void vec_dstst (const unsigned long *, int, const int);
21375 void vec_dstst (const long *, int, const int);
21376 void vec_dstst (const float *, int, const int);
21378 void vec_dststt (const vector unsigned char *, int, const int);
21379 void vec_dststt (const vector signed char *, int, const int);
21380 void vec_dststt (const vector bool char *, int, const int);
21381 void vec_dststt (const vector unsigned short *, int, const int);
21382 void vec_dststt (const vector signed short *, int, const int);
21383 void vec_dststt (const vector bool short *, int, const int);
21384 void vec_dststt (const vector pixel *, int, const int);
21385 void vec_dststt (const vector unsigned int *, int, const int);
21386 void vec_dststt (const vector signed int *, int, const int);
21387 void vec_dststt (const vector bool int *, int, const int);
21388 void vec_dststt (const vector float *, int, const int);
21389 void vec_dststt (const unsigned char *, int, const int);
21390 void vec_dststt (const signed char *, int, const int);
21391 void vec_dststt (const unsigned short *, int, const int);
21392 void vec_dststt (const short *, int, const int);
21393 void vec_dststt (const unsigned int *, int, const int);
21394 void vec_dststt (const int *, int, const int);
21395 void vec_dststt (const unsigned long *, int, const int);
21396 void vec_dststt (const long *, int, const int);
21397 void vec_dststt (const float *, int, const int);
21399 void vec_dstt (const vector unsigned char *, int, const int);
21400 void vec_dstt (const vector signed char *, int, const int);
21401 void vec_dstt (const vector bool char *, int, const int);
21402 void vec_dstt (const vector unsigned short *, int, const int);
21403 void vec_dstt (const vector signed short *, int, const int);
21404 void vec_dstt (const vector bool short *, int, const int);
21405 void vec_dstt (const vector pixel *, int, const int);
21406 void vec_dstt (const vector unsigned int *, int, const int);
21407 void vec_dstt (const vector signed int *, int, const int);
21408 void vec_dstt (const vector bool int *, int, const int);
21409 void vec_dstt (const vector float *, int, const int);
21410 void vec_dstt (const unsigned char *, int, const int);
21411 void vec_dstt (const signed char *, int, const int);
21412 void vec_dstt (const unsigned short *, int, const int);
21413 void vec_dstt (const short *, int, const int);
21414 void vec_dstt (const unsigned int *, int, const int);
21415 void vec_dstt (const int *, int, const int);
21416 void vec_dstt (const unsigned long *, int, const int);
21417 void vec_dstt (const long *, int, const int);
21418 void vec_dstt (const float *, int, const int);
21420 vector float vec_expte (vector float);
21422 vector float vec_floor (vector float);
21424 vector float vec_ld (int, const vector float *);
21425 vector float vec_ld (int, const float *);
21426 vector bool int vec_ld (int, const vector bool int *);
21427 vector signed int vec_ld (int, const vector signed int *);
21428 vector signed int vec_ld (int, const int *);
21429 vector signed int vec_ld (int, const long *);
21430 vector unsigned int vec_ld (int, const vector unsigned int *);
21431 vector unsigned int vec_ld (int, const unsigned int *);
21432 vector unsigned int vec_ld (int, const unsigned long *);
21433 vector bool short vec_ld (int, const vector bool short *);
21434 vector pixel vec_ld (int, const vector pixel *);
21435 vector signed short vec_ld (int, const vector signed short *);
21436 vector signed short vec_ld (int, const short *);
21437 vector unsigned short vec_ld (int, const vector unsigned short *);
21438 vector unsigned short vec_ld (int, const unsigned short *);
21439 vector bool char vec_ld (int, const vector bool char *);
21440 vector signed char vec_ld (int, const vector signed char *);
21441 vector signed char vec_ld (int, const signed char *);
21442 vector unsigned char vec_ld (int, const vector unsigned char *);
21443 vector unsigned char vec_ld (int, const unsigned char *);
21445 vector signed char vec_lde (int, const signed char *);
21446 vector unsigned char vec_lde (int, const unsigned char *);
21447 vector signed short vec_lde (int, const short *);
21448 vector unsigned short vec_lde (int, const unsigned short *);
21449 vector float vec_lde (int, const float *);
21450 vector signed int vec_lde (int, const int *);
21451 vector unsigned int vec_lde (int, const unsigned int *);
21452 vector signed int vec_lde (int, const long *);
21453 vector unsigned int vec_lde (int, const unsigned long *);
21455 vector float vec_lvewx (int, float *);
21456 vector signed int vec_lvewx (int, int *);
21457 vector unsigned int vec_lvewx (int, unsigned int *);
21458 vector signed int vec_lvewx (int, long *);
21459 vector unsigned int vec_lvewx (int, unsigned long *);
21461 vector signed short vec_lvehx (int, short *);
21462 vector unsigned short vec_lvehx (int, unsigned short *);
21464 vector signed char vec_lvebx (int, char *);
21465 vector unsigned char vec_lvebx (int, unsigned char *);
21467 vector float vec_ldl (int, const vector float *);
21468 vector float vec_ldl (int, const float *);
21469 vector bool int vec_ldl (int, const vector bool int *);
21470 vector signed int vec_ldl (int, const vector signed int *);
21471 vector signed int vec_ldl (int, const int *);
21472 vector signed int vec_ldl (int, const long *);
21473 vector unsigned int vec_ldl (int, const vector unsigned int *);
21474 vector unsigned int vec_ldl (int, const unsigned int *);
21475 vector unsigned int vec_ldl (int, const unsigned long *);
21476 vector bool short vec_ldl (int, const vector bool short *);
21477 vector pixel vec_ldl (int, const vector pixel *);
21478 vector signed short vec_ldl (int, const vector signed short *);
21479 vector signed short vec_ldl (int, const short *);
21480 vector unsigned short vec_ldl (int, const vector unsigned short *);
21481 vector unsigned short vec_ldl (int, const unsigned short *);
21482 vector bool char vec_ldl (int, const vector bool char *);
21483 vector signed char vec_ldl (int, const vector signed char *);
21484 vector signed char vec_ldl (int, const signed char *);
21485 vector unsigned char vec_ldl (int, const vector unsigned char *);
21486 vector unsigned char vec_ldl (int, const unsigned char *);
21488 vector float vec_loge (vector float);
21490 vector unsigned char vec_lvsl (int, const volatile unsigned char *);
21491 vector unsigned char vec_lvsl (int, const volatile signed char *);
21492 vector unsigned char vec_lvsl (int, const volatile unsigned short *);
21493 vector unsigned char vec_lvsl (int, const volatile short *);
21494 vector unsigned char vec_lvsl (int, const volatile unsigned int *);
21495 vector unsigned char vec_lvsl (int, const volatile int *);
21496 vector unsigned char vec_lvsl (int, const volatile unsigned long *);
21497 vector unsigned char vec_lvsl (int, const volatile long *);
21498 vector unsigned char vec_lvsl (int, const volatile float *);
21500 vector unsigned char vec_lvsr (int, const volatile unsigned char *);
21501 vector unsigned char vec_lvsr (int, const volatile signed char *);
21502 vector unsigned char vec_lvsr (int, const volatile unsigned short *);
21503 vector unsigned char vec_lvsr (int, const volatile short *);
21504 vector unsigned char vec_lvsr (int, const volatile unsigned int *);
21505 vector unsigned char vec_lvsr (int, const volatile int *);
21506 vector unsigned char vec_lvsr (int, const volatile unsigned long *);
21507 vector unsigned char vec_lvsr (int, const volatile long *);
21508 vector unsigned char vec_lvsr (int, const volatile float *);
21510 vector float vec_madd (vector float, vector float, vector float);
21512 vector signed short vec_madds (vector signed short,
21513 vector signed short,
21514 vector signed short);
21516 vector unsigned char vec_max (vector bool char, vector unsigned char);
21517 vector unsigned char vec_max (vector unsigned char, vector bool char);
21518 vector unsigned char vec_max (vector unsigned char,
21519 vector unsigned char);
21520 vector signed char vec_max (vector bool char, vector signed char);
21521 vector signed char vec_max (vector signed char, vector bool char);
21522 vector signed char vec_max (vector signed char, vector signed char);
21523 vector unsigned short vec_max (vector bool short,
21524 vector unsigned short);
21525 vector unsigned short vec_max (vector unsigned short,
21526 vector bool short);
21527 vector unsigned short vec_max (vector unsigned short,
21528 vector unsigned short);
21529 vector signed short vec_max (vector bool short, vector signed short);
21530 vector signed short vec_max (vector signed short, vector bool short);
21531 vector signed short vec_max (vector signed short, vector signed short);
21532 vector unsigned int vec_max (vector bool int, vector unsigned int);
21533 vector unsigned int vec_max (vector unsigned int, vector bool int);
21534 vector unsigned int vec_max (vector unsigned int, vector unsigned int);
21535 vector signed int vec_max (vector bool int, vector signed int);
21536 vector signed int vec_max (vector signed int, vector bool int);
21537 vector signed int vec_max (vector signed int, vector signed int);
21538 vector float vec_max (vector float, vector float);
21540 vector float vec_vmaxfp (vector float, vector float);
21542 vector signed int vec_vmaxsw (vector bool int, vector signed int);
21543 vector signed int vec_vmaxsw (vector signed int, vector bool int);
21544 vector signed int vec_vmaxsw (vector signed int, vector signed int);
21546 vector unsigned int vec_vmaxuw (vector bool int, vector unsigned int);
21547 vector unsigned int vec_vmaxuw (vector unsigned int, vector bool int);
21548 vector unsigned int vec_vmaxuw (vector unsigned int,
21549 vector unsigned int);
21551 vector signed short vec_vmaxsh (vector bool short, vector signed short);
21552 vector signed short vec_vmaxsh (vector signed short, vector bool short);
21553 vector signed short vec_vmaxsh (vector signed short,
21554 vector signed short);
21556 vector unsigned short vec_vmaxuh (vector bool short,
21557 vector unsigned short);
21558 vector unsigned short vec_vmaxuh (vector unsigned short,
21559 vector bool short);
21560 vector unsigned short vec_vmaxuh (vector unsigned short,
21561 vector unsigned short);
21563 vector signed char vec_vmaxsb (vector bool char, vector signed char);
21564 vector signed char vec_vmaxsb (vector signed char, vector bool char);
21565 vector signed char vec_vmaxsb (vector signed char, vector signed char);
21567 vector unsigned char vec_vmaxub (vector bool char,
21568 vector unsigned char);
21569 vector unsigned char vec_vmaxub (vector unsigned char,
21571 vector unsigned char vec_vmaxub (vector unsigned char,
21572 vector unsigned char);
21574 vector bool char vec_mergeh (vector bool char, vector bool char);
21575 vector signed char vec_mergeh (vector signed char, vector signed char);
21576 vector unsigned char vec_mergeh (vector unsigned char,
21577 vector unsigned char);
21578 vector bool short vec_mergeh (vector bool short, vector bool short);
21579 vector pixel vec_mergeh (vector pixel, vector pixel);
21580 vector signed short vec_mergeh (vector signed short,
21581 vector signed short);
21582 vector unsigned short vec_mergeh (vector unsigned short,
21583 vector unsigned short);
21584 vector float vec_mergeh (vector float, vector float);
21585 vector bool int vec_mergeh (vector bool int, vector bool int);
21586 vector signed int vec_mergeh (vector signed int, vector signed int);
21587 vector unsigned int vec_mergeh (vector unsigned int,
21588 vector unsigned int);
21590 vector float vec_vmrghw (vector float, vector float);
21591 vector bool int vec_vmrghw (vector bool int, vector bool int);
21592 vector signed int vec_vmrghw (vector signed int, vector signed int);
21593 vector unsigned int vec_vmrghw (vector unsigned int,
21594 vector unsigned int);
21596 vector bool short vec_vmrghh (vector bool short, vector bool short);
21597 vector signed short vec_vmrghh (vector signed short,
21598 vector signed short);
21599 vector unsigned short vec_vmrghh (vector unsigned short,
21600 vector unsigned short);
21601 vector pixel vec_vmrghh (vector pixel, vector pixel);
21603 vector bool char vec_vmrghb (vector bool char, vector bool char);
21604 vector signed char vec_vmrghb (vector signed char, vector signed char);
21605 vector unsigned char vec_vmrghb (vector unsigned char,
21606 vector unsigned char);
21608 vector bool char vec_mergel (vector bool char, vector bool char);
21609 vector signed char vec_mergel (vector signed char, vector signed char);
21610 vector unsigned char vec_mergel (vector unsigned char,
21611 vector unsigned char);
21612 vector bool short vec_mergel (vector bool short, vector bool short);
21613 vector pixel vec_mergel (vector pixel, vector pixel);
21614 vector signed short vec_mergel (vector signed short,
21615 vector signed short);
21616 vector unsigned short vec_mergel (vector unsigned short,
21617 vector unsigned short);
21618 vector float vec_mergel (vector float, vector float);
21619 vector bool int vec_mergel (vector bool int, vector bool int);
21620 vector signed int vec_mergel (vector signed int, vector signed int);
21621 vector unsigned int vec_mergel (vector unsigned int,
21622 vector unsigned int);
21624 vector float vec_vmrglw (vector float, vector float);
21625 vector signed int vec_vmrglw (vector signed int, vector signed int);
21626 vector unsigned int vec_vmrglw (vector unsigned int,
21627 vector unsigned int);
21628 vector bool int vec_vmrglw (vector bool int, vector bool int);
21630 vector bool short vec_vmrglh (vector bool short, vector bool short);
21631 vector signed short vec_vmrglh (vector signed short,
21632 vector signed short);
21633 vector unsigned short vec_vmrglh (vector unsigned short,
21634 vector unsigned short);
21635 vector pixel vec_vmrglh (vector pixel, vector pixel);
21637 vector bool char vec_vmrglb (vector bool char, vector bool char);
21638 vector signed char vec_vmrglb (vector signed char, vector signed char);
21639 vector unsigned char vec_vmrglb (vector unsigned char,
21640 vector unsigned char);
21642 vector unsigned short vec_mfvscr (void);
21644 vector unsigned char vec_min (vector bool char, vector unsigned char);
21645 vector unsigned char vec_min (vector unsigned char, vector bool char);
21646 vector unsigned char vec_min (vector unsigned char,
21647 vector unsigned char);
21648 vector signed char vec_min (vector bool char, vector signed char);
21649 vector signed char vec_min (vector signed char, vector bool char);
21650 vector signed char vec_min (vector signed char, vector signed char);
21651 vector unsigned short vec_min (vector bool short,
21652 vector unsigned short);
21653 vector unsigned short vec_min (vector unsigned short,
21654 vector bool short);
21655 vector unsigned short vec_min (vector unsigned short,
21656 vector unsigned short);
21657 vector signed short vec_min (vector bool short, vector signed short);
21658 vector signed short vec_min (vector signed short, vector bool short);
21659 vector signed short vec_min (vector signed short, vector signed short);
21660 vector unsigned int vec_min (vector bool int, vector unsigned int);
21661 vector unsigned int vec_min (vector unsigned int, vector bool int);
21662 vector unsigned int vec_min (vector unsigned int, vector unsigned int);
21663 vector signed int vec_min (vector bool int, vector signed int);
21664 vector signed int vec_min (vector signed int, vector bool int);
21665 vector signed int vec_min (vector signed int, vector signed int);
21666 vector float vec_min (vector float, vector float);
21668 vector float vec_vminfp (vector float, vector float);
21670 vector signed int vec_vminsw (vector bool int, vector signed int);
21671 vector signed int vec_vminsw (vector signed int, vector bool int);
21672 vector signed int vec_vminsw (vector signed int, vector signed int);
21674 vector unsigned int vec_vminuw (vector bool int, vector unsigned int);
21675 vector unsigned int vec_vminuw (vector unsigned int, vector bool int);
21676 vector unsigned int vec_vminuw (vector unsigned int,
21677 vector unsigned int);
21679 vector signed short vec_vminsh (vector bool short, vector signed short);
21680 vector signed short vec_vminsh (vector signed short, vector bool short);
21681 vector signed short vec_vminsh (vector signed short,
21682 vector signed short);
21684 vector unsigned short vec_vminuh (vector bool short,
21685 vector unsigned short);
21686 vector unsigned short vec_vminuh (vector unsigned short,
21687 vector bool short);
21688 vector unsigned short vec_vminuh (vector unsigned short,
21689 vector unsigned short);
21691 vector signed char vec_vminsb (vector bool char, vector signed char);
21692 vector signed char vec_vminsb (vector signed char, vector bool char);
21693 vector signed char vec_vminsb (vector signed char, vector signed char);
21695 vector unsigned char vec_vminub (vector bool char,
21696 vector unsigned char);
21697 vector unsigned char vec_vminub (vector unsigned char,
21699 vector unsigned char vec_vminub (vector unsigned char,
21700 vector unsigned char);
21702 vector signed short vec_mladd (vector signed short,
21703 vector signed short,
21704 vector signed short);
21705 vector signed short vec_mladd (vector signed short,
21706 vector unsigned short,
21707 vector unsigned short);
21708 vector signed short vec_mladd (vector unsigned short,
21709 vector signed short,
21710 vector signed short);
21711 vector unsigned short vec_mladd (vector unsigned short,
21712 vector unsigned short,
21713 vector unsigned short);
21715 vector signed short vec_mradds (vector signed short,
21716 vector signed short,
21717 vector signed short);
21719 vector unsigned int vec_msum (vector unsigned char,
21720 vector unsigned char,
21721 vector unsigned int);
21722 vector signed int vec_msum (vector signed char,
21723 vector unsigned char,
21724 vector signed int);
21725 vector unsigned int vec_msum (vector unsigned short,
21726 vector unsigned short,
21727 vector unsigned int);
21728 vector signed int vec_msum (vector signed short,
21729 vector signed short,
21730 vector signed int);
21732 vector signed int vec_vmsumshm (vector signed short,
21733 vector signed short,
21734 vector signed int);
21736 vector unsigned int vec_vmsumuhm (vector unsigned short,
21737 vector unsigned short,
21738 vector unsigned int);
21740 vector signed int vec_vmsummbm (vector signed char,
21741 vector unsigned char,
21742 vector signed int);
21744 vector unsigned int vec_vmsumubm (vector unsigned char,
21745 vector unsigned char,
21746 vector unsigned int);
21748 vector unsigned int vec_msums (vector unsigned short,
21749 vector unsigned short,
21750 vector unsigned int);
21751 vector signed int vec_msums (vector signed short,
21752 vector signed short,
21753 vector signed int);
21755 vector signed int vec_vmsumshs (vector signed short,
21756 vector signed short,
21757 vector signed int);
21759 vector unsigned int vec_vmsumuhs (vector unsigned short,
21760 vector unsigned short,
21761 vector unsigned int);
21763 void vec_mtvscr (vector signed int);
21764 void vec_mtvscr (vector unsigned int);
21765 void vec_mtvscr (vector bool int);
21766 void vec_mtvscr (vector signed short);
21767 void vec_mtvscr (vector unsigned short);
21768 void vec_mtvscr (vector bool short);
21769 void vec_mtvscr (vector pixel);
21770 void vec_mtvscr (vector signed char);
21771 void vec_mtvscr (vector unsigned char);
21772 void vec_mtvscr (vector bool char);
21774 vector unsigned short vec_mule (vector unsigned char,
21775 vector unsigned char);
21776 vector signed short vec_mule (vector signed char,
21777 vector signed char);
21778 vector unsigned int vec_mule (vector unsigned short,
21779 vector unsigned short);
21780 vector signed int vec_mule (vector signed short, vector signed short);
21782 vector signed int vec_vmulesh (vector signed short,
21783 vector signed short);
21785 vector unsigned int vec_vmuleuh (vector unsigned short,
21786 vector unsigned short);
21788 vector signed short vec_vmulesb (vector signed char,
21789 vector signed char);
21791 vector unsigned short vec_vmuleub (vector unsigned char,
21792 vector unsigned char);
21794 vector unsigned short vec_mulo (vector unsigned char,
21795 vector unsigned char);
21796 vector signed short vec_mulo (vector signed char, vector signed char);
21797 vector unsigned int vec_mulo (vector unsigned short,
21798 vector unsigned short);
21799 vector signed int vec_mulo (vector signed short, vector signed short);
21801 vector signed int vec_vmulosh (vector signed short,
21802 vector signed short);
21804 vector unsigned int vec_vmulouh (vector unsigned short,
21805 vector unsigned short);
21807 vector signed short vec_vmulosb (vector signed char,
21808 vector signed char);
21810 vector unsigned short vec_vmuloub (vector unsigned char,
21811 vector unsigned char);
21813 vector float vec_nmsub (vector float, vector float, vector float);
21815 vector float vec_nor (vector float, vector float);
21816 vector signed int vec_nor (vector signed int, vector signed int);
21817 vector unsigned int vec_nor (vector unsigned int, vector unsigned int);
21818 vector bool int vec_nor (vector bool int, vector bool int);
21819 vector signed short vec_nor (vector signed short, vector signed short);
21820 vector unsigned short vec_nor (vector unsigned short,
21821 vector unsigned short);
21822 vector bool short vec_nor (vector bool short, vector bool short);
21823 vector signed char vec_nor (vector signed char, vector signed char);
21824 vector unsigned char vec_nor (vector unsigned char,
21825 vector unsigned char);
21826 vector bool char vec_nor (vector bool char, vector bool char);
21828 vector float vec_or (vector float, vector float);
21829 vector float vec_or (vector float, vector bool int);
21830 vector float vec_or (vector bool int, vector float);
21831 vector bool int vec_or (vector bool int, vector bool int);
21832 vector signed int vec_or (vector bool int, vector signed int);
21833 vector signed int vec_or (vector signed int, vector bool int);
21834 vector signed int vec_or (vector signed int, vector signed int);
21835 vector unsigned int vec_or (vector bool int, vector unsigned int);
21836 vector unsigned int vec_or (vector unsigned int, vector bool int);
21837 vector unsigned int vec_or (vector unsigned int, vector unsigned int);
21838 vector bool short vec_or (vector bool short, vector bool short);
21839 vector signed short vec_or (vector bool short, vector signed short);
21840 vector signed short vec_or (vector signed short, vector bool short);
21841 vector signed short vec_or (vector signed short, vector signed short);
21842 vector unsigned short vec_or (vector bool short, vector unsigned short);
21843 vector unsigned short vec_or (vector unsigned short, vector bool short);
21844 vector unsigned short vec_or (vector unsigned short,
21845 vector unsigned short);
21846 vector signed char vec_or (vector bool char, vector signed char);
21847 vector bool char vec_or (vector bool char, vector bool char);
21848 vector signed char vec_or (vector signed char, vector bool char);
21849 vector signed char vec_or (vector signed char, vector signed char);
21850 vector unsigned char vec_or (vector bool char, vector unsigned char);
21851 vector unsigned char vec_or (vector unsigned char, vector bool char);
21852 vector unsigned char vec_or (vector unsigned char,
21853 vector unsigned char);
21855 vector signed char vec_pack (vector signed short, vector signed short);
21856 vector unsigned char vec_pack (vector unsigned short,
21857 vector unsigned short);
21858 vector bool char vec_pack (vector bool short, vector bool short);
21859 vector signed short vec_pack (vector signed int, vector signed int);
21860 vector unsigned short vec_pack (vector unsigned int,
21861 vector unsigned int);
21862 vector bool short vec_pack (vector bool int, vector bool int);
21864 vector bool short vec_vpkuwum (vector bool int, vector bool int);
21865 vector signed short vec_vpkuwum (vector signed int, vector signed int);
21866 vector unsigned short vec_vpkuwum (vector unsigned int,
21867 vector unsigned int);
21869 vector bool char vec_vpkuhum (vector bool short, vector bool short);
21870 vector signed char vec_vpkuhum (vector signed short,
21871 vector signed short);
21872 vector unsigned char vec_vpkuhum (vector unsigned short,
21873 vector unsigned short);
21875 vector pixel vec_packpx (vector unsigned int, vector unsigned int);
21877 vector unsigned char vec_packs (vector unsigned short,
21878 vector unsigned short);
21879 vector signed char vec_packs (vector signed short, vector signed short);
21880 vector unsigned short vec_packs (vector unsigned int,
21881 vector unsigned int);
21882 vector signed short vec_packs (vector signed int, vector signed int);
21884 vector signed short vec_vpkswss (vector signed int, vector signed int);
21886 vector unsigned short vec_vpkuwus (vector unsigned int,
21887 vector unsigned int);
21889 vector signed char vec_vpkshss (vector signed short,
21890 vector signed short);
21892 vector unsigned char vec_vpkuhus (vector unsigned short,
21893 vector unsigned short);
21895 vector unsigned char vec_packsu (vector unsigned short,
21896 vector unsigned short);
21897 vector unsigned char vec_packsu (vector signed short,
21898 vector signed short);
21899 vector unsigned short vec_packsu (vector unsigned int,
21900 vector unsigned int);
21901 vector unsigned short vec_packsu (vector signed int, vector signed int);
21903 vector unsigned short vec_vpkswus (vector signed int,
21904 vector signed int);
21906 vector unsigned char vec_vpkshus (vector signed short,
21907 vector signed short);
21909 vector float vec_perm (vector float,
21911 vector unsigned char);
21912 vector signed int vec_perm (vector signed int,
21914 vector unsigned char);
21915 vector unsigned int vec_perm (vector unsigned int,
21916 vector unsigned int,
21917 vector unsigned char);
21918 vector bool int vec_perm (vector bool int,
21920 vector unsigned char);
21921 vector signed short vec_perm (vector signed short,
21922 vector signed short,
21923 vector unsigned char);
21924 vector unsigned short vec_perm (vector unsigned short,
21925 vector unsigned short,
21926 vector unsigned char);
21927 vector bool short vec_perm (vector bool short,
21929 vector unsigned char);
21930 vector pixel vec_perm (vector pixel,
21932 vector unsigned char);
21933 vector signed char vec_perm (vector signed char,
21934 vector signed char,
21935 vector unsigned char);
21936 vector unsigned char vec_perm (vector unsigned char,
21937 vector unsigned char,
21938 vector unsigned char);
21939 vector bool char vec_perm (vector bool char,
21941 vector unsigned char);
21943 vector float vec_re (vector float);
21945 vector signed char vec_rl (vector signed char,
21946 vector unsigned char);
21947 vector unsigned char vec_rl (vector unsigned char,
21948 vector unsigned char);
21949 vector signed short vec_rl (vector signed short, vector unsigned short);
21950 vector unsigned short vec_rl (vector unsigned short,
21951 vector unsigned short);
21952 vector signed int vec_rl (vector signed int, vector unsigned int);
21953 vector unsigned int vec_rl (vector unsigned int, vector unsigned int);
21955 vector signed int vec_vrlw (vector signed int, vector unsigned int);
21956 vector unsigned int vec_vrlw (vector unsigned int, vector unsigned int);
21958 vector signed short vec_vrlh (vector signed short,
21959 vector unsigned short);
21960 vector unsigned short vec_vrlh (vector unsigned short,
21961 vector unsigned short);
21963 vector signed char vec_vrlb (vector signed char, vector unsigned char);
21964 vector unsigned char vec_vrlb (vector unsigned char,
21965 vector unsigned char);
21967 vector float vec_round (vector float);
21969 vector float vec_rsqrte (vector float);
21971 vector float vec_sel (vector float, vector float, vector bool int);
21972 vector float vec_sel (vector float, vector float, vector unsigned int);
21973 vector signed int vec_sel (vector signed int,
21976 vector signed int vec_sel (vector signed int,
21978 vector unsigned int);
21979 vector unsigned int vec_sel (vector unsigned int,
21980 vector unsigned int,
21982 vector unsigned int vec_sel (vector unsigned int,
21983 vector unsigned int,
21984 vector unsigned int);
21985 vector bool int vec_sel (vector bool int,
21988 vector bool int vec_sel (vector bool int,
21990 vector unsigned int);
21991 vector signed short vec_sel (vector signed short,
21992 vector signed short,
21993 vector bool short);
21994 vector signed short vec_sel (vector signed short,
21995 vector signed short,
21996 vector unsigned short);
21997 vector unsigned short vec_sel (vector unsigned short,
21998 vector unsigned short,
21999 vector bool short);
22000 vector unsigned short vec_sel (vector unsigned short,
22001 vector unsigned short,
22002 vector unsigned short);
22003 vector bool short vec_sel (vector bool short,
22005 vector bool short);
22006 vector bool short vec_sel (vector bool short,
22008 vector unsigned short);
22009 vector signed char vec_sel (vector signed char,
22010 vector signed char,
22012 vector signed char vec_sel (vector signed char,
22013 vector signed char,
22014 vector unsigned char);
22015 vector unsigned char vec_sel (vector unsigned char,
22016 vector unsigned char,
22018 vector unsigned char vec_sel (vector unsigned char,
22019 vector unsigned char,
22020 vector unsigned char);
22021 vector bool char vec_sel (vector bool char,
22024 vector bool char vec_sel (vector bool char,
22026 vector unsigned char);
22028 vector signed char vec_sl (vector signed char,
22029 vector unsigned char);
22030 vector unsigned char vec_sl (vector unsigned char,
22031 vector unsigned char);
22032 vector signed short vec_sl (vector signed short, vector unsigned short);
22033 vector unsigned short vec_sl (vector unsigned short,
22034 vector unsigned short);
22035 vector signed int vec_sl (vector signed int, vector unsigned int);
22036 vector unsigned int vec_sl (vector unsigned int, vector unsigned int);
22038 vector signed int vec_vslw (vector signed int, vector unsigned int);
22039 vector unsigned int vec_vslw (vector unsigned int, vector unsigned int);
22041 vector signed short vec_vslh (vector signed short,
22042 vector unsigned short);
22043 vector unsigned short vec_vslh (vector unsigned short,
22044 vector unsigned short);
22046 vector signed char vec_vslb (vector signed char, vector unsigned char);
22047 vector unsigned char vec_vslb (vector unsigned char,
22048 vector unsigned char);
22050 vector float vec_sld (vector float, vector float, const int);
22051 vector signed int vec_sld (vector signed int,
22054 vector unsigned int vec_sld (vector unsigned int,
22055 vector unsigned int,
22057 vector bool int vec_sld (vector bool int,
22060 vector signed short vec_sld (vector signed short,
22061 vector signed short,
22063 vector unsigned short vec_sld (vector unsigned short,
22064 vector unsigned short,
22066 vector bool short vec_sld (vector bool short,
22069 vector pixel vec_sld (vector pixel,
22072 vector signed char vec_sld (vector signed char,
22073 vector signed char,
22075 vector unsigned char vec_sld (vector unsigned char,
22076 vector unsigned char,
22078 vector bool char vec_sld (vector bool char,
22082 vector signed int vec_sll (vector signed int,
22083 vector unsigned int);
22084 vector signed int vec_sll (vector signed int,
22085 vector unsigned short);
22086 vector signed int vec_sll (vector signed int,
22087 vector unsigned char);
22088 vector unsigned int vec_sll (vector unsigned int,
22089 vector unsigned int);
22090 vector unsigned int vec_sll (vector unsigned int,
22091 vector unsigned short);
22092 vector unsigned int vec_sll (vector unsigned int,
22093 vector unsigned char);
22094 vector bool int vec_sll (vector bool int,
22095 vector unsigned int);
22096 vector bool int vec_sll (vector bool int,
22097 vector unsigned short);
22098 vector bool int vec_sll (vector bool int,
22099 vector unsigned char);
22100 vector signed short vec_sll (vector signed short,
22101 vector unsigned int);
22102 vector signed short vec_sll (vector signed short,
22103 vector unsigned short);
22104 vector signed short vec_sll (vector signed short,
22105 vector unsigned char);
22106 vector unsigned short vec_sll (vector unsigned short,
22107 vector unsigned int);
22108 vector unsigned short vec_sll (vector unsigned short,
22109 vector unsigned short);
22110 vector unsigned short vec_sll (vector unsigned short,
22111 vector unsigned char);
22112 vector bool short vec_sll (vector bool short, vector unsigned int);
22113 vector bool short vec_sll (vector bool short, vector unsigned short);
22114 vector bool short vec_sll (vector bool short, vector unsigned char);
22115 vector pixel vec_sll (vector pixel, vector unsigned int);
22116 vector pixel vec_sll (vector pixel, vector unsigned short);
22117 vector pixel vec_sll (vector pixel, vector unsigned char);
22118 vector signed char vec_sll (vector signed char, vector unsigned int);
22119 vector signed char vec_sll (vector signed char, vector unsigned short);
22120 vector signed char vec_sll (vector signed char, vector unsigned char);
22121 vector unsigned char vec_sll (vector unsigned char,
22122 vector unsigned int);
22123 vector unsigned char vec_sll (vector unsigned char,
22124 vector unsigned short);
22125 vector unsigned char vec_sll (vector unsigned char,
22126 vector unsigned char);
22127 vector bool char vec_sll (vector bool char, vector unsigned int);
22128 vector bool char vec_sll (vector bool char, vector unsigned short);
22129 vector bool char vec_sll (vector bool char, vector unsigned char);
22131 vector float vec_slo (vector float, vector signed char);
22132 vector float vec_slo (vector float, vector unsigned char);
22133 vector signed int vec_slo (vector signed int, vector signed char);
22134 vector signed int vec_slo (vector signed int, vector unsigned char);
22135 vector unsigned int vec_slo (vector unsigned int, vector signed char);
22136 vector unsigned int vec_slo (vector unsigned int, vector unsigned char);
22137 vector signed short vec_slo (vector signed short, vector signed char);
22138 vector signed short vec_slo (vector signed short, vector unsigned char);
22139 vector unsigned short vec_slo (vector unsigned short,
22140 vector signed char);
22141 vector unsigned short vec_slo (vector unsigned short,
22142 vector unsigned char);
22143 vector pixel vec_slo (vector pixel, vector signed char);
22144 vector pixel vec_slo (vector pixel, vector unsigned char);
22145 vector signed char vec_slo (vector signed char, vector signed char);
22146 vector signed char vec_slo (vector signed char, vector unsigned char);
22147 vector unsigned char vec_slo (vector unsigned char, vector signed char);
22148 vector unsigned char vec_slo (vector unsigned char,
22149 vector unsigned char);
22151 vector signed char vec_splat (vector signed char, const int);
22152 vector unsigned char vec_splat (vector unsigned char, const int);
22153 vector bool char vec_splat (vector bool char, const int);
22154 vector signed short vec_splat (vector signed short, const int);
22155 vector unsigned short vec_splat (vector unsigned short, const int);
22156 vector bool short vec_splat (vector bool short, const int);
22157 vector pixel vec_splat (vector pixel, const int);
22158 vector float vec_splat (vector float, const int);
22159 vector signed int vec_splat (vector signed int, const int);
22160 vector unsigned int vec_splat (vector unsigned int, const int);
22161 vector bool int vec_splat (vector bool int, const int);
22163 vector float vec_vspltw (vector float, const int);
22164 vector signed int vec_vspltw (vector signed int, const int);
22165 vector unsigned int vec_vspltw (vector unsigned int, const int);
22166 vector bool int vec_vspltw (vector bool int, const int);
22168 vector bool short vec_vsplth (vector bool short, const int);
22169 vector signed short vec_vsplth (vector signed short, const int);
22170 vector unsigned short vec_vsplth (vector unsigned short, const int);
22171 vector pixel vec_vsplth (vector pixel, const int);
22173 vector signed char vec_vspltb (vector signed char, const int);
22174 vector unsigned char vec_vspltb (vector unsigned char, const int);
22175 vector bool char vec_vspltb (vector bool char, const int);
22177 vector signed char vec_splat_s8 (const int);
22179 vector signed short vec_splat_s16 (const int);
22181 vector signed int vec_splat_s32 (const int);
22183 vector unsigned char vec_splat_u8 (const int);
22185 vector unsigned short vec_splat_u16 (const int);
22187 vector unsigned int vec_splat_u32 (const int);
22189 vector signed char vec_sr (vector signed char, vector unsigned char);
22190 vector unsigned char vec_sr (vector unsigned char,
22191 vector unsigned char);
22192 vector signed short vec_sr (vector signed short,
22193 vector unsigned short);
22194 vector unsigned short vec_sr (vector unsigned short,
22195 vector unsigned short);
22196 vector signed int vec_sr (vector signed int, vector unsigned int);
22197 vector unsigned int vec_sr (vector unsigned int, vector unsigned int);
22199 vector signed int vec_vsrw (vector signed int, vector unsigned int);
22200 vector unsigned int vec_vsrw (vector unsigned int, vector unsigned int);
22202 vector signed short vec_vsrh (vector signed short,
22203 vector unsigned short);
22204 vector unsigned short vec_vsrh (vector unsigned short,
22205 vector unsigned short);
22207 vector signed char vec_vsrb (vector signed char, vector unsigned char);
22208 vector unsigned char vec_vsrb (vector unsigned char,
22209 vector unsigned char);
22211 vector signed char vec_sra (vector signed char, vector unsigned char);
22212 vector unsigned char vec_sra (vector unsigned char,
22213 vector unsigned char);
22214 vector signed short vec_sra (vector signed short,
22215 vector unsigned short);
22216 vector unsigned short vec_sra (vector unsigned short,
22217 vector unsigned short);
22218 vector signed int vec_sra (vector signed int, vector unsigned int);
22219 vector unsigned int vec_sra (vector unsigned int, vector unsigned int);
22221 vector signed int vec_vsraw (vector signed int, vector unsigned int);
22222 vector unsigned int vec_vsraw (vector unsigned int,
22223 vector unsigned int);
22225 vector signed short vec_vsrah (vector signed short,
22226 vector unsigned short);
22227 vector unsigned short vec_vsrah (vector unsigned short,
22228 vector unsigned short);
22230 vector signed char vec_vsrab (vector signed char, vector unsigned char);
22231 vector unsigned char vec_vsrab (vector unsigned char,
22232 vector unsigned char);
22234 vector signed int vec_srl (vector signed int, vector unsigned int);
22235 vector signed int vec_srl (vector signed int, vector unsigned short);
22236 vector signed int vec_srl (vector signed int, vector unsigned char);
22237 vector unsigned int vec_srl (vector unsigned int, vector unsigned int);
22238 vector unsigned int vec_srl (vector unsigned int,
22239 vector unsigned short);
22240 vector unsigned int vec_srl (vector unsigned int, vector unsigned char);
22241 vector bool int vec_srl (vector bool int, vector unsigned int);
22242 vector bool int vec_srl (vector bool int, vector unsigned short);
22243 vector bool int vec_srl (vector bool int, vector unsigned char);
22244 vector signed short vec_srl (vector signed short, vector unsigned int);
22245 vector signed short vec_srl (vector signed short,
22246 vector unsigned short);
22247 vector signed short vec_srl (vector signed short, vector unsigned char);
22248 vector unsigned short vec_srl (vector unsigned short,
22249 vector unsigned int);
22250 vector unsigned short vec_srl (vector unsigned short,
22251 vector unsigned short);
22252 vector unsigned short vec_srl (vector unsigned short,
22253 vector unsigned char);
22254 vector bool short vec_srl (vector bool short, vector unsigned int);
22255 vector bool short vec_srl (vector bool short, vector unsigned short);
22256 vector bool short vec_srl (vector bool short, vector unsigned char);
22257 vector pixel vec_srl (vector pixel, vector unsigned int);
22258 vector pixel vec_srl (vector pixel, vector unsigned short);
22259 vector pixel vec_srl (vector pixel, vector unsigned char);
22260 vector signed char vec_srl (vector signed char, vector unsigned int);
22261 vector signed char vec_srl (vector signed char, vector unsigned short);
22262 vector signed char vec_srl (vector signed char, vector unsigned char);
22263 vector unsigned char vec_srl (vector unsigned char,
22264 vector unsigned int);
22265 vector unsigned char vec_srl (vector unsigned char,
22266 vector unsigned short);
22267 vector unsigned char vec_srl (vector unsigned char,
22268 vector unsigned char);
22269 vector bool char vec_srl (vector bool char, vector unsigned int);
22270 vector bool char vec_srl (vector bool char, vector unsigned short);
22271 vector bool char vec_srl (vector bool char, vector unsigned char);
22273 vector float vec_sro (vector float, vector signed char);
22274 vector float vec_sro (vector float, vector unsigned char);
22275 vector signed int vec_sro (vector signed int, vector signed char);
22276 vector signed int vec_sro (vector signed int, vector unsigned char);
22277 vector unsigned int vec_sro (vector unsigned int, vector signed char);
22278 vector unsigned int vec_sro (vector unsigned int, vector unsigned char);
22279 vector signed short vec_sro (vector signed short, vector signed char);
22280 vector signed short vec_sro (vector signed short, vector unsigned char);
22281 vector unsigned short vec_sro (vector unsigned short,
22282 vector signed char);
22283 vector unsigned short vec_sro (vector unsigned short,
22284 vector unsigned char);
22285 vector pixel vec_sro (vector pixel, vector signed char);
22286 vector pixel vec_sro (vector pixel, vector unsigned char);
22287 vector signed char vec_sro (vector signed char, vector signed char);
22288 vector signed char vec_sro (vector signed char, vector unsigned char);
22289 vector unsigned char vec_sro (vector unsigned char, vector signed char);
22290 vector unsigned char vec_sro (vector unsigned char,
22291 vector unsigned char);
22293 void vec_st (vector float, int, vector float *);
22294 void vec_st (vector float, int, float *);
22295 void vec_st (vector signed int, int, vector signed int *);
22296 void vec_st (vector signed int, int, int *);
22297 void vec_st (vector unsigned int, int, vector unsigned int *);
22298 void vec_st (vector unsigned int, int, unsigned int *);
22299 void vec_st (vector bool int, int, vector bool int *);
22300 void vec_st (vector bool int, int, unsigned int *);
22301 void vec_st (vector bool int, int, int *);
22302 void vec_st (vector signed short, int, vector signed short *);
22303 void vec_st (vector signed short, int, short *);
22304 void vec_st (vector unsigned short, int, vector unsigned short *);
22305 void vec_st (vector unsigned short, int, unsigned short *);
22306 void vec_st (vector bool short, int, vector bool short *);
22307 void vec_st (vector bool short, int, unsigned short *);
22308 void vec_st (vector pixel, int, vector pixel *);
22309 void vec_st (vector pixel, int, unsigned short *);
22310 void vec_st (vector pixel, int, short *);
22311 void vec_st (vector bool short, int, short *);
22312 void vec_st (vector signed char, int, vector signed char *);
22313 void vec_st (vector signed char, int, signed char *);
22314 void vec_st (vector unsigned char, int, vector unsigned char *);
22315 void vec_st (vector unsigned char, int, unsigned char *);
22316 void vec_st (vector bool char, int, vector bool char *);
22317 void vec_st (vector bool char, int, unsigned char *);
22318 void vec_st (vector bool char, int, signed char *);
22320 void vec_ste (vector signed char, int, signed char *);
22321 void vec_ste (vector unsigned char, int, unsigned char *);
22322 void vec_ste (vector bool char, int, signed char *);
22323 void vec_ste (vector bool char, int, unsigned char *);
22324 void vec_ste (vector signed short, int, short *);
22325 void vec_ste (vector unsigned short, int, unsigned short *);
22326 void vec_ste (vector bool short, int, short *);
22327 void vec_ste (vector bool short, int, unsigned short *);
22328 void vec_ste (vector pixel, int, short *);
22329 void vec_ste (vector pixel, int, unsigned short *);
22330 void vec_ste (vector float, int, float *);
22331 void vec_ste (vector signed int, int, int *);
22332 void vec_ste (vector unsigned int, int, unsigned int *);
22333 void vec_ste (vector bool int, int, int *);
22334 void vec_ste (vector bool int, int, unsigned int *);
22336 void vec_stvewx (vector float, int, float *);
22337 void vec_stvewx (vector signed int, int, int *);
22338 void vec_stvewx (vector unsigned int, int, unsigned int *);
22339 void vec_stvewx (vector bool int, int, int *);
22340 void vec_stvewx (vector bool int, int, unsigned int *);
22342 void vec_stvehx (vector signed short, int, short *);
22343 void vec_stvehx (vector unsigned short, int, unsigned short *);
22344 void vec_stvehx (vector bool short, int, short *);
22345 void vec_stvehx (vector bool short, int, unsigned short *);
22346 void vec_stvehx (vector pixel, int, short *);
22347 void vec_stvehx (vector pixel, int, unsigned short *);
22349 void vec_stvebx (vector signed char, int, signed char *);
22350 void vec_stvebx (vector unsigned char, int, unsigned char *);
22351 void vec_stvebx (vector bool char, int, signed char *);
22352 void vec_stvebx (vector bool char, int, unsigned char *);
22354 void vec_stl (vector float, int, vector float *);
22355 void vec_stl (vector float, int, float *);
22356 void vec_stl (vector signed int, int, vector signed int *);
22357 void vec_stl (vector signed int, int, int *);
22358 void vec_stl (vector unsigned int, int, vector unsigned int *);
22359 void vec_stl (vector unsigned int, int, unsigned int *);
22360 void vec_stl (vector bool int, int, vector bool int *);
22361 void vec_stl (vector bool int, int, unsigned int *);
22362 void vec_stl (vector bool int, int, int *);
22363 void vec_stl (vector signed short, int, vector signed short *);
22364 void vec_stl (vector signed short, int, short *);
22365 void vec_stl (vector unsigned short, int, vector unsigned short *);
22366 void vec_stl (vector unsigned short, int, unsigned short *);
22367 void vec_stl (vector bool short, int, vector bool short *);
22368 void vec_stl (vector bool short, int, unsigned short *);
22369 void vec_stl (vector bool short, int, short *);
22370 void vec_stl (vector pixel, int, vector pixel *);
22371 void vec_stl (vector pixel, int, unsigned short *);
22372 void vec_stl (vector pixel, int, short *);
22373 void vec_stl (vector signed char, int, vector signed char *);
22374 void vec_stl (vector signed char, int, signed char *);
22375 void vec_stl (vector unsigned char, int, vector unsigned char *);
22376 void vec_stl (vector unsigned char, int, unsigned char *);
22377 void vec_stl (vector bool char, int, vector bool char *);
22378 void vec_stl (vector bool char, int, unsigned char *);
22379 void vec_stl (vector bool char, int, signed char *);
22381 vector signed char vec_sub (vector bool char, vector signed char);
22382 vector signed char vec_sub (vector signed char, vector bool char);
22383 vector signed char vec_sub (vector signed char, vector signed char);
22384 vector unsigned char vec_sub (vector bool char, vector unsigned char);
22385 vector unsigned char vec_sub (vector unsigned char, vector bool char);
22386 vector unsigned char vec_sub (vector unsigned char,
22387 vector unsigned char);
22388 vector signed short vec_sub (vector bool short, vector signed short);
22389 vector signed short vec_sub (vector signed short, vector bool short);
22390 vector signed short vec_sub (vector signed short, vector signed short);
22391 vector unsigned short vec_sub (vector bool short,
22392 vector unsigned short);
22393 vector unsigned short vec_sub (vector unsigned short,
22394 vector bool short);
22395 vector unsigned short vec_sub (vector unsigned short,
22396 vector unsigned short);
22397 vector signed int vec_sub (vector bool int, vector signed int);
22398 vector signed int vec_sub (vector signed int, vector bool int);
22399 vector signed int vec_sub (vector signed int, vector signed int);
22400 vector unsigned int vec_sub (vector bool int, vector unsigned int);
22401 vector unsigned int vec_sub (vector unsigned int, vector bool int);
22402 vector unsigned int vec_sub (vector unsigned int, vector unsigned int);
22403 vector float vec_sub (vector float, vector float);
22405 vector float vec_vsubfp (vector float, vector float);
22407 vector signed int vec_vsubuwm (vector bool int, vector signed int);
22408 vector signed int vec_vsubuwm (vector signed int, vector bool int);
22409 vector signed int vec_vsubuwm (vector signed int, vector signed int);
22410 vector unsigned int vec_vsubuwm (vector bool int, vector unsigned int);
22411 vector unsigned int vec_vsubuwm (vector unsigned int, vector bool int);
22412 vector unsigned int vec_vsubuwm (vector unsigned int,
22413 vector unsigned int);
22415 vector signed short vec_vsubuhm (vector bool short,
22416 vector signed short);
22417 vector signed short vec_vsubuhm (vector signed short,
22418 vector bool short);
22419 vector signed short vec_vsubuhm (vector signed short,
22420 vector signed short);
22421 vector unsigned short vec_vsubuhm (vector bool short,
22422 vector unsigned short);
22423 vector unsigned short vec_vsubuhm (vector unsigned short,
22424 vector bool short);
22425 vector unsigned short vec_vsubuhm (vector unsigned short,
22426 vector unsigned short);
22428 vector signed char vec_vsububm (vector bool char, vector signed char);
22429 vector signed char vec_vsububm (vector signed char, vector bool char);
22430 vector signed char vec_vsububm (vector signed char, vector signed char);
22431 vector unsigned char vec_vsububm (vector bool char,
22432 vector unsigned char);
22433 vector unsigned char vec_vsububm (vector unsigned char,
22435 vector unsigned char vec_vsububm (vector unsigned char,
22436 vector unsigned char);
22438 vector unsigned int vec_subc (vector unsigned int, vector unsigned int);
22440 vector unsigned char vec_subs (vector bool char, vector unsigned char);
22441 vector unsigned char vec_subs (vector unsigned char, vector bool char);
22442 vector unsigned char vec_subs (vector unsigned char,
22443 vector unsigned char);
22444 vector signed char vec_subs (vector bool char, vector signed char);
22445 vector signed char vec_subs (vector signed char, vector bool char);
22446 vector signed char vec_subs (vector signed char, vector signed char);
22447 vector unsigned short vec_subs (vector bool short,
22448 vector unsigned short);
22449 vector unsigned short vec_subs (vector unsigned short,
22450 vector bool short);
22451 vector unsigned short vec_subs (vector unsigned short,
22452 vector unsigned short);
22453 vector signed short vec_subs (vector bool short, vector signed short);
22454 vector signed short vec_subs (vector signed short, vector bool short);
22455 vector signed short vec_subs (vector signed short, vector signed short);
22456 vector unsigned int vec_subs (vector bool int, vector unsigned int);
22457 vector unsigned int vec_subs (vector unsigned int, vector bool int);
22458 vector unsigned int vec_subs (vector unsigned int, vector unsigned int);
22459 vector signed int vec_subs (vector bool int, vector signed int);
22460 vector signed int vec_subs (vector signed int, vector bool int);
22461 vector signed int vec_subs (vector signed int, vector signed int);
22463 vector signed int vec_vsubsws (vector bool int, vector signed int);
22464 vector signed int vec_vsubsws (vector signed int, vector bool int);
22465 vector signed int vec_vsubsws (vector signed int, vector signed int);
22467 vector unsigned int vec_vsubuws (vector bool int, vector unsigned int);
22468 vector unsigned int vec_vsubuws (vector unsigned int, vector bool int);
22469 vector unsigned int vec_vsubuws (vector unsigned int,
22470 vector unsigned int);
22472 vector signed short vec_vsubshs (vector bool short,
22473 vector signed short);
22474 vector signed short vec_vsubshs (vector signed short,
22475 vector bool short);
22476 vector signed short vec_vsubshs (vector signed short,
22477 vector signed short);
22479 vector unsigned short vec_vsubuhs (vector bool short,
22480 vector unsigned short);
22481 vector unsigned short vec_vsubuhs (vector unsigned short,
22482 vector bool short);
22483 vector unsigned short vec_vsubuhs (vector unsigned short,
22484 vector unsigned short);
22486 vector signed char vec_vsubsbs (vector bool char, vector signed char);
22487 vector signed char vec_vsubsbs (vector signed char, vector bool char);
22488 vector signed char vec_vsubsbs (vector signed char, vector signed char);
22490 vector unsigned char vec_vsububs (vector bool char,
22491 vector unsigned char);
22492 vector unsigned char vec_vsububs (vector unsigned char,
22494 vector unsigned char vec_vsububs (vector unsigned char,
22495 vector unsigned char);
22497 vector unsigned int vec_sum4s (vector unsigned char,
22498 vector unsigned int);
22499 vector signed int vec_sum4s (vector signed char, vector signed int);
22500 vector signed int vec_sum4s (vector signed short, vector signed int);
22502 vector signed int vec_vsum4shs (vector signed short, vector signed int);
22504 vector signed int vec_vsum4sbs (vector signed char, vector signed int);
22506 vector unsigned int vec_vsum4ubs (vector unsigned char,
22507 vector unsigned int);
22509 vector signed int vec_sum2s (vector signed int, vector signed int);
22511 vector signed int vec_sums (vector signed int, vector signed int);
22513 vector float vec_trunc (vector float);
22515 vector signed short vec_unpackh (vector signed char);
22516 vector bool short vec_unpackh (vector bool char);
22517 vector signed int vec_unpackh (vector signed short);
22518 vector bool int vec_unpackh (vector bool short);
22519 vector unsigned int vec_unpackh (vector pixel);
22521 vector bool int vec_vupkhsh (vector bool short);
22522 vector signed int vec_vupkhsh (vector signed short);
22524 vector unsigned int vec_vupkhpx (vector pixel);
22526 vector bool short vec_vupkhsb (vector bool char);
22527 vector signed short vec_vupkhsb (vector signed char);
22529 vector signed short vec_unpackl (vector signed char);
22530 vector bool short vec_unpackl (vector bool char);
22531 vector unsigned int vec_unpackl (vector pixel);
22532 vector signed int vec_unpackl (vector signed short);
22533 vector bool int vec_unpackl (vector bool short);
22535 vector unsigned int vec_vupklpx (vector pixel);
22537 vector bool int vec_vupklsh (vector bool short);
22538 vector signed int vec_vupklsh (vector signed short);
22540 vector bool short vec_vupklsb (vector bool char);
22541 vector signed short vec_vupklsb (vector signed char);
22543 vector float vec_xor (vector float, vector float);
22544 vector float vec_xor (vector float, vector bool int);
22545 vector float vec_xor (vector bool int, vector float);
22546 vector bool int vec_xor (vector bool int, vector bool int);
22547 vector signed int vec_xor (vector bool int, vector signed int);
22548 vector signed int vec_xor (vector signed int, vector bool int);
22549 vector signed int vec_xor (vector signed int, vector signed int);
22550 vector unsigned int vec_xor (vector bool int, vector unsigned int);
22551 vector unsigned int vec_xor (vector unsigned int, vector bool int);
22552 vector unsigned int vec_xor (vector unsigned int, vector unsigned int);
22553 vector bool short vec_xor (vector bool short, vector bool short);
22554 vector signed short vec_xor (vector bool short, vector signed short);
22555 vector signed short vec_xor (vector signed short, vector bool short);
22556 vector signed short vec_xor (vector signed short, vector signed short);
22557 vector unsigned short vec_xor (vector bool short,
22558 vector unsigned short);
22559 vector unsigned short vec_xor (vector unsigned short,
22560 vector bool short);
22561 vector unsigned short vec_xor (vector unsigned short,
22562 vector unsigned short);
22563 vector signed char vec_xor (vector bool char, vector signed char);
22564 vector bool char vec_xor (vector bool char, vector bool char);
22565 vector signed char vec_xor (vector signed char, vector bool char);
22566 vector signed char vec_xor (vector signed char, vector signed char);
22567 vector unsigned char vec_xor (vector bool char, vector unsigned char);
22568 vector unsigned char vec_xor (vector unsigned char, vector bool char);
22569 vector unsigned char vec_xor (vector unsigned char,
22570 vector unsigned char);
22572 int vec_all_eq (vector signed char, vector bool char);
22573 int vec_all_eq (vector signed char, vector signed char);
22574 int vec_all_eq (vector unsigned char, vector bool char);
22575 int vec_all_eq (vector unsigned char, vector unsigned char);
22576 int vec_all_eq (vector bool char, vector bool char);
22577 int vec_all_eq (vector bool char, vector unsigned char);
22578 int vec_all_eq (vector bool char, vector signed char);
22579 int vec_all_eq (vector signed short, vector bool short);
22580 int vec_all_eq (vector signed short, vector signed short);
22581 int vec_all_eq (vector unsigned short, vector bool short);
22582 int vec_all_eq (vector unsigned short, vector unsigned short);
22583 int vec_all_eq (vector bool short, vector bool short);
22584 int vec_all_eq (vector bool short, vector unsigned short);
22585 int vec_all_eq (vector bool short, vector signed short);
22586 int vec_all_eq (vector pixel, vector pixel);
22587 int vec_all_eq (vector signed int, vector bool int);
22588 int vec_all_eq (vector signed int, vector signed int);
22589 int vec_all_eq (vector unsigned int, vector bool int);
22590 int vec_all_eq (vector unsigned int, vector unsigned int);
22591 int vec_all_eq (vector bool int, vector bool int);
22592 int vec_all_eq (vector bool int, vector unsigned int);
22593 int vec_all_eq (vector bool int, vector signed int);
22594 int vec_all_eq (vector float, vector float);
22596 int vec_all_ge (vector bool char, vector unsigned char);
22597 int vec_all_ge (vector unsigned char, vector bool char);
22598 int vec_all_ge (vector unsigned char, vector unsigned char);
22599 int vec_all_ge (vector bool char, vector signed char);
22600 int vec_all_ge (vector signed char, vector bool char);
22601 int vec_all_ge (vector signed char, vector signed char);
22602 int vec_all_ge (vector bool short, vector unsigned short);
22603 int vec_all_ge (vector unsigned short, vector bool short);
22604 int vec_all_ge (vector unsigned short, vector unsigned short);
22605 int vec_all_ge (vector signed short, vector signed short);
22606 int vec_all_ge (vector bool short, vector signed short);
22607 int vec_all_ge (vector signed short, vector bool short);
22608 int vec_all_ge (vector bool int, vector unsigned int);
22609 int vec_all_ge (vector unsigned int, vector bool int);
22610 int vec_all_ge (vector unsigned int, vector unsigned int);
22611 int vec_all_ge (vector bool int, vector signed int);
22612 int vec_all_ge (vector signed int, vector bool int);
22613 int vec_all_ge (vector signed int, vector signed int);
22614 int vec_all_ge (vector float, vector float);
22616 int vec_all_gt (vector bool char, vector unsigned char);
22617 int vec_all_gt (vector unsigned char, vector bool char);
22618 int vec_all_gt (vector unsigned char, vector unsigned char);
22619 int vec_all_gt (vector bool char, vector signed char);
22620 int vec_all_gt (vector signed char, vector bool char);
22621 int vec_all_gt (vector signed char, vector signed char);
22622 int vec_all_gt (vector bool short, vector unsigned short);
22623 int vec_all_gt (vector unsigned short, vector bool short);
22624 int vec_all_gt (vector unsigned short, vector unsigned short);
22625 int vec_all_gt (vector bool short, vector signed short);
22626 int vec_all_gt (vector signed short, vector bool short);
22627 int vec_all_gt (vector signed short, vector signed short);
22628 int vec_all_gt (vector bool int, vector unsigned int);
22629 int vec_all_gt (vector unsigned int, vector bool int);
22630 int vec_all_gt (vector unsigned int, vector unsigned int);
22631 int vec_all_gt (vector bool int, vector signed int);
22632 int vec_all_gt (vector signed int, vector bool int);
22633 int vec_all_gt (vector signed int, vector signed int);
22634 int vec_all_gt (vector float, vector float);
22636 int vec_all_in (vector float, vector float);
22638 int vec_all_le (vector bool char, vector unsigned char);
22639 int vec_all_le (vector unsigned char, vector bool char);
22640 int vec_all_le (vector unsigned char, vector unsigned char);
22641 int vec_all_le (vector bool char, vector signed char);
22642 int vec_all_le (vector signed char, vector bool char);
22643 int vec_all_le (vector signed char, vector signed char);
22644 int vec_all_le (vector bool short, vector unsigned short);
22645 int vec_all_le (vector unsigned short, vector bool short);
22646 int vec_all_le (vector unsigned short, vector unsigned short);
22647 int vec_all_le (vector bool short, vector signed short);
22648 int vec_all_le (vector signed short, vector bool short);
22649 int vec_all_le (vector signed short, vector signed short);
22650 int vec_all_le (vector bool int, vector unsigned int);
22651 int vec_all_le (vector unsigned int, vector bool int);
22652 int vec_all_le (vector unsigned int, vector unsigned int);
22653 int vec_all_le (vector bool int, vector signed int);
22654 int vec_all_le (vector signed int, vector bool int);
22655 int vec_all_le (vector signed int, vector signed int);
22656 int vec_all_le (vector float, vector float);
22658 int vec_all_lt (vector bool char, vector unsigned char);
22659 int vec_all_lt (vector unsigned char, vector bool char);
22660 int vec_all_lt (vector unsigned char, vector unsigned char);
22661 int vec_all_lt (vector bool char, vector signed char);
22662 int vec_all_lt (vector signed char, vector bool char);
22663 int vec_all_lt (vector signed char, vector signed char);
22664 int vec_all_lt (vector bool short, vector unsigned short);
22665 int vec_all_lt (vector unsigned short, vector bool short);
22666 int vec_all_lt (vector unsigned short, vector unsigned short);
22667 int vec_all_lt (vector bool short, vector signed short);
22668 int vec_all_lt (vector signed short, vector bool short);
22669 int vec_all_lt (vector signed short, vector signed short);
22670 int vec_all_lt (vector bool int, vector unsigned int);
22671 int vec_all_lt (vector unsigned int, vector bool int);
22672 int vec_all_lt (vector unsigned int, vector unsigned int);
22673 int vec_all_lt (vector bool int, vector signed int);
22674 int vec_all_lt (vector signed int, vector bool int);
22675 int vec_all_lt (vector signed int, vector signed int);
22676 int vec_all_lt (vector float, vector float);
22678 int vec_all_nan (vector float);
22680 int vec_all_ne (vector signed char, vector bool char);
22681 int vec_all_ne (vector signed char, vector signed char);
22682 int vec_all_ne (vector unsigned char, vector bool char);
22683 int vec_all_ne (vector unsigned char, vector unsigned char);
22684 int vec_all_ne (vector bool char, vector bool char);
22685 int vec_all_ne (vector bool char, vector unsigned char);
22686 int vec_all_ne (vector bool char, vector signed char);
22687 int vec_all_ne (vector signed short, vector bool short);
22688 int vec_all_ne (vector signed short, vector signed short);
22689 int vec_all_ne (vector unsigned short, vector bool short);
22690 int vec_all_ne (vector unsigned short, vector unsigned short);
22691 int vec_all_ne (vector bool short, vector bool short);
22692 int vec_all_ne (vector bool short, vector unsigned short);
22693 int vec_all_ne (vector bool short, vector signed short);
22694 int vec_all_ne (vector pixel, vector pixel);
22695 int vec_all_ne (vector signed int, vector bool int);
22696 int vec_all_ne (vector signed int, vector signed int);
22697 int vec_all_ne (vector unsigned int, vector bool int);
22698 int vec_all_ne (vector unsigned int, vector unsigned int);
22699 int vec_all_ne (vector bool int, vector bool int);
22700 int vec_all_ne (vector bool int, vector unsigned int);
22701 int vec_all_ne (vector bool int, vector signed int);
22702 int vec_all_ne (vector float, vector float);
22704 int vec_all_nge (vector float, vector float);
22706 int vec_all_ngt (vector float, vector float);
22708 int vec_all_nle (vector float, vector float);
22710 int vec_all_nlt (vector float, vector float);
22712 int vec_all_numeric (vector float);
22714 int vec_any_eq (vector signed char, vector bool char);
22715 int vec_any_eq (vector signed char, vector signed char);
22716 int vec_any_eq (vector unsigned char, vector bool char);
22717 int vec_any_eq (vector unsigned char, vector unsigned char);
22718 int vec_any_eq (vector bool char, vector bool char);
22719 int vec_any_eq (vector bool char, vector unsigned char);
22720 int vec_any_eq (vector bool char, vector signed char);
22721 int vec_any_eq (vector signed short, vector bool short);
22722 int vec_any_eq (vector signed short, vector signed short);
22723 int vec_any_eq (vector unsigned short, vector bool short);
22724 int vec_any_eq (vector unsigned short, vector unsigned short);
22725 int vec_any_eq (vector bool short, vector bool short);
22726 int vec_any_eq (vector bool short, vector unsigned short);
22727 int vec_any_eq (vector bool short, vector signed short);
22728 int vec_any_eq (vector pixel, vector pixel);
22729 int vec_any_eq (vector signed int, vector bool int);
22730 int vec_any_eq (vector signed int, vector signed int);
22731 int vec_any_eq (vector unsigned int, vector bool int);
22732 int vec_any_eq (vector unsigned int, vector unsigned int);
22733 int vec_any_eq (vector bool int, vector bool int);
22734 int vec_any_eq (vector bool int, vector unsigned int);
22735 int vec_any_eq (vector bool int, vector signed int);
22736 int vec_any_eq (vector float, vector float);
22738 int vec_any_ge (vector signed char, vector bool char);
22739 int vec_any_ge (vector unsigned char, vector bool char);
22740 int vec_any_ge (vector unsigned char, vector unsigned char);
22741 int vec_any_ge (vector signed char, vector signed char);
22742 int vec_any_ge (vector bool char, vector unsigned char);
22743 int vec_any_ge (vector bool char, vector signed char);
22744 int vec_any_ge (vector unsigned short, vector bool short);
22745 int vec_any_ge (vector unsigned short, vector unsigned short);
22746 int vec_any_ge (vector signed short, vector signed short);
22747 int vec_any_ge (vector signed short, vector bool short);
22748 int vec_any_ge (vector bool short, vector unsigned short);
22749 int vec_any_ge (vector bool short, vector signed short);
22750 int vec_any_ge (vector signed int, vector bool int);
22751 int vec_any_ge (vector unsigned int, vector bool int);
22752 int vec_any_ge (vector unsigned int, vector unsigned int);
22753 int vec_any_ge (vector signed int, vector signed int);
22754 int vec_any_ge (vector bool int, vector unsigned int);
22755 int vec_any_ge (vector bool int, vector signed int);
22756 int vec_any_ge (vector float, vector float);
22758 int vec_any_gt (vector bool char, vector unsigned char);
22759 int vec_any_gt (vector unsigned char, vector bool char);
22760 int vec_any_gt (vector unsigned char, vector unsigned char);
22761 int vec_any_gt (vector bool char, vector signed char);
22762 int vec_any_gt (vector signed char, vector bool char);
22763 int vec_any_gt (vector signed char, vector signed char);
22764 int vec_any_gt (vector bool short, vector unsigned short);
22765 int vec_any_gt (vector unsigned short, vector bool short);
22766 int vec_any_gt (vector unsigned short, vector unsigned short);
22767 int vec_any_gt (vector bool short, vector signed short);
22768 int vec_any_gt (vector signed short, vector bool short);
22769 int vec_any_gt (vector signed short, vector signed short);
22770 int vec_any_gt (vector bool int, vector unsigned int);
22771 int vec_any_gt (vector unsigned int, vector bool int);
22772 int vec_any_gt (vector unsigned int, vector unsigned int);
22773 int vec_any_gt (vector bool int, vector signed int);
22774 int vec_any_gt (vector signed int, vector bool int);
22775 int vec_any_gt (vector signed int, vector signed int);
22776 int vec_any_gt (vector float, vector float);
22778 int vec_any_le (vector bool char, vector unsigned char);
22779 int vec_any_le (vector unsigned char, vector bool char);
22780 int vec_any_le (vector unsigned char, vector unsigned char);
22781 int vec_any_le (vector bool char, vector signed char);
22782 int vec_any_le (vector signed char, vector bool char);
22783 int vec_any_le (vector signed char, vector signed char);
22784 int vec_any_le (vector bool short, vector unsigned short);
22785 int vec_any_le (vector unsigned short, vector bool short);
22786 int vec_any_le (vector unsigned short, vector unsigned short);
22787 int vec_any_le (vector bool short, vector signed short);
22788 int vec_any_le (vector signed short, vector bool short);
22789 int vec_any_le (vector signed short, vector signed short);
22790 int vec_any_le (vector bool int, vector unsigned int);
22791 int vec_any_le (vector unsigned int, vector bool int);
22792 int vec_any_le (vector unsigned int, vector unsigned int);
22793 int vec_any_le (vector bool int, vector signed int);
22794 int vec_any_le (vector signed int, vector bool int);
22795 int vec_any_le (vector signed int, vector signed int);
22796 int vec_any_le (vector float, vector float);
22798 int vec_any_lt (vector bool char, vector unsigned char);
22799 int vec_any_lt (vector unsigned char, vector bool char);
22800 int vec_any_lt (vector unsigned char, vector unsigned char);
22801 int vec_any_lt (vector bool char, vector signed char);
22802 int vec_any_lt (vector signed char, vector bool char);
22803 int vec_any_lt (vector signed char, vector signed char);
22804 int vec_any_lt (vector bool short, vector unsigned short);
22805 int vec_any_lt (vector unsigned short, vector bool short);
22806 int vec_any_lt (vector unsigned short, vector unsigned short);
22807 int vec_any_lt (vector bool short, vector signed short);
22808 int vec_any_lt (vector signed short, vector bool short);
22809 int vec_any_lt (vector signed short, vector signed short);
22810 int vec_any_lt (vector bool int, vector unsigned int);
22811 int vec_any_lt (vector unsigned int, vector bool int);
22812 int vec_any_lt (vector unsigned int, vector unsigned int);
22813 int vec_any_lt (vector bool int, vector signed int);
22814 int vec_any_lt (vector signed int, vector bool int);
22815 int vec_any_lt (vector signed int, vector signed int);
22816 int vec_any_lt (vector float, vector float);
22818 int vec_any_nan (vector float);
22820 int vec_any_ne (vector signed char, vector bool char);
22821 int vec_any_ne (vector signed char, vector signed char);
22822 int vec_any_ne (vector unsigned char, vector bool char);
22823 int vec_any_ne (vector unsigned char, vector unsigned char);
22824 int vec_any_ne (vector bool char, vector bool char);
22825 int vec_any_ne (vector bool char, vector unsigned char);
22826 int vec_any_ne (vector bool char, vector signed char);
22827 int vec_any_ne (vector signed short, vector bool short);
22828 int vec_any_ne (vector signed short, vector signed short);
22829 int vec_any_ne (vector unsigned short, vector bool short);
22830 int vec_any_ne (vector unsigned short, vector unsigned short);
22831 int vec_any_ne (vector bool short, vector bool short);
22832 int vec_any_ne (vector bool short, vector unsigned short);
22833 int vec_any_ne (vector bool short, vector signed short);
22834 int vec_any_ne (vector pixel, vector pixel);
22835 int vec_any_ne (vector signed int, vector bool int);
22836 int vec_any_ne (vector signed int, vector signed int);
22837 int vec_any_ne (vector unsigned int, vector bool int);
22838 int vec_any_ne (vector unsigned int, vector unsigned int);
22839 int vec_any_ne (vector bool int, vector bool int);
22840 int vec_any_ne (vector bool int, vector unsigned int);
22841 int vec_any_ne (vector bool int, vector signed int);
22842 int vec_any_ne (vector float, vector float);
22844 int vec_any_nge (vector float, vector float);
22846 int vec_any_ngt (vector float, vector float);
22848 int vec_any_nle (vector float, vector float);
22850 int vec_any_nlt (vector float, vector float);
22852 int vec_any_numeric (vector float);
22854 int vec_any_out (vector float, vector float);
22857 File: gcc.info, Node: SPARC VIS Built-in Functions, Prev: PowerPC AltiVec Built-in Functions, Up: Target Builtins
22859 5.47.9 SPARC VIS Built-in Functions
22860 -----------------------------------
22862 GCC supports SIMD operations on the SPARC using both the generic vector
22863 extensions (*note Vector Extensions::) as well as built-in functions for
22864 the SPARC Visual Instruction Set (VIS). When you use the `-mvis'
22865 switch, the VIS extension is exposed as the following built-in
22868 typedef int v2si __attribute__ ((vector_size (8)));
22869 typedef short v4hi __attribute__ ((vector_size (8)));
22870 typedef short v2hi __attribute__ ((vector_size (4)));
22871 typedef char v8qi __attribute__ ((vector_size (8)));
22872 typedef char v4qi __attribute__ ((vector_size (4)));
22874 void * __builtin_vis_alignaddr (void *, long);
22875 int64_t __builtin_vis_faligndatadi (int64_t, int64_t);
22876 v2si __builtin_vis_faligndatav2si (v2si, v2si);
22877 v4hi __builtin_vis_faligndatav4hi (v4si, v4si);
22878 v8qi __builtin_vis_faligndatav8qi (v8qi, v8qi);
22880 v4hi __builtin_vis_fexpand (v4qi);
22882 v4hi __builtin_vis_fmul8x16 (v4qi, v4hi);
22883 v4hi __builtin_vis_fmul8x16au (v4qi, v4hi);
22884 v4hi __builtin_vis_fmul8x16al (v4qi, v4hi);
22885 v4hi __builtin_vis_fmul8sux16 (v8qi, v4hi);
22886 v4hi __builtin_vis_fmul8ulx16 (v8qi, v4hi);
22887 v2si __builtin_vis_fmuld8sux16 (v4qi, v2hi);
22888 v2si __builtin_vis_fmuld8ulx16 (v4qi, v2hi);
22890 v4qi __builtin_vis_fpack16 (v4hi);
22891 v8qi __builtin_vis_fpack32 (v2si, v2si);
22892 v2hi __builtin_vis_fpackfix (v2si);
22893 v8qi __builtin_vis_fpmerge (v4qi, v4qi);
22895 int64_t __builtin_vis_pdist (v8qi, v8qi, int64_t);
22898 File: gcc.info, Node: Target Format Checks, Next: Pragmas, Prev: Target Builtins, Up: C Extensions
22900 5.48 Format Checks Specific to Particular Target Machines
22901 =========================================================
22903 For some target machines, GCC supports additional options to the format
22904 attribute (*note Declaring Attributes of Functions: Function
22909 * Solaris Format Checks::
22912 File: gcc.info, Node: Solaris Format Checks, Up: Target Format Checks
22914 5.48.1 Solaris Format Checks
22915 ----------------------------
22917 Solaris targets support the `cmn_err' (or `__cmn_err__') format check.
22918 `cmn_err' accepts a subset of the standard `printf' conversions, and
22919 the two-argument `%b' conversion for displaying bit-fields. See the
22920 Solaris man page for `cmn_err' for more information.
22923 File: gcc.info, Node: Pragmas, Next: Unnamed Fields, Prev: Target Format Checks, Up: C Extensions
22925 5.49 Pragmas Accepted by GCC
22926 ============================
22928 GCC supports several types of pragmas, primarily in order to compile
22929 code originally written for other compilers. Note that in general we
22930 do not recommend the use of pragmas; *Note Function Attributes::, for
22931 further explanation.
22937 * RS/6000 and PowerPC Pragmas::
22939 * Solaris Pragmas::
22940 * Symbol-Renaming Pragmas::
22941 * Structure-Packing Pragmas::
22945 File: gcc.info, Node: ARM Pragmas, Next: M32C Pragmas, Up: Pragmas
22950 The ARM target defines pragmas for controlling the default addition of
22951 `long_call' and `short_call' attributes to functions. *Note Function
22952 Attributes::, for information about the effects of these attributes.
22955 Set all subsequent functions to have the `long_call' attribute.
22958 Set all subsequent functions to have the `short_call' attribute.
22961 Do not affect the `long_call' or `short_call' attributes of
22962 subsequent functions.
22965 File: gcc.info, Node: M32C Pragmas, Next: RS/6000 and PowerPC Pragmas, Prev: ARM Pragmas, Up: Pragmas
22967 5.49.2 M32C Pragmas
22968 -------------------
22971 Overrides the command line option `-memregs=' for the current
22972 file. Use with care! This pragma must be before any function in
22973 the file, and mixing different memregs values in different objects
22974 may make them incompatible. This pragma is useful when a
22975 performance-critical function uses a memreg for temporary values,
22976 as it may allow you to reduce the number of memregs used.
22980 File: gcc.info, Node: RS/6000 and PowerPC Pragmas, Next: Darwin Pragmas, Prev: M32C Pragmas, Up: Pragmas
22982 5.49.3 RS/6000 and PowerPC Pragmas
22983 ----------------------------------
22985 The RS/6000 and PowerPC targets define one pragma for controlling
22986 whether or not the `longcall' attribute is added to function
22987 declarations by default. This pragma overrides the `-mlongcall'
22988 option, but not the `longcall' and `shortcall' attributes. *Note
22989 RS/6000 and PowerPC Options::, for more information about when long
22990 calls are and are not necessary.
22993 Apply the `longcall' attribute to all subsequent function
22997 Do not apply the `longcall' attribute to subsequent function
23001 File: gcc.info, Node: Darwin Pragmas, Next: Solaris Pragmas, Prev: RS/6000 and PowerPC Pragmas, Up: Pragmas
23003 5.49.4 Darwin Pragmas
23004 ---------------------
23006 The following pragmas are available for all architectures running the
23007 Darwin operating system. These are useful for compatibility with other
23011 This pragma is accepted, but has no effect.
23013 `options align=ALIGNMENT'
23014 This pragma sets the alignment of fields in structures. The
23015 values of ALIGNMENT may be `mac68k', to emulate m68k alignment, or
23016 `power', to emulate PowerPC alignment. Uses of this pragma nest
23017 properly; to restore the previous setting, use `reset' for the
23020 `segment TOKENS...'
23021 This pragma is accepted, but has no effect.
23023 `unused (VAR [, VAR]...)'
23024 This pragma declares variables to be possibly unused. GCC will not
23025 produce warnings for the listed variables. The effect is similar
23026 to that of the `unused' attribute, except that this pragma may
23027 appear anywhere within the variables' scopes.
23030 File: gcc.info, Node: Solaris Pragmas, Next: Symbol-Renaming Pragmas, Prev: Darwin Pragmas, Up: Pragmas
23032 5.49.5 Solaris Pragmas
23033 ----------------------
23035 The Solaris target supports `#pragma redefine_extname' (*note
23036 Symbol-Renaming Pragmas::). It also supports additional `#pragma'
23037 directives for compatibility with the system compiler.
23039 `align ALIGNMENT (VARIABLE [, VARIABLE]...)'
23040 Increase the minimum alignment of each VARIABLE to ALIGNMENT.
23041 This is the same as GCC's `aligned' attribute *note Variable
23042 Attributes::). Macro expansion occurs on the arguments to this
23043 pragma when compiling C and Objective-C. It does not currently
23044 occur when compiling C++, but this is a bug which may be fixed in
23047 `fini (FUNCTION [, FUNCTION]...)'
23048 This pragma causes each listed FUNCTION to be called after main,
23049 or during shared module unloading, by adding a call to the `.fini'
23052 `init (FUNCTION [, FUNCTION]...)'
23053 This pragma causes each listed FUNCTION to be called during
23054 initialization (before `main') or during shared module loading, by
23055 adding a call to the `.init' section.
23059 File: gcc.info, Node: Symbol-Renaming Pragmas, Next: Structure-Packing Pragmas, Prev: Solaris Pragmas, Up: Pragmas
23061 5.49.6 Symbol-Renaming Pragmas
23062 ------------------------------
23064 For compatibility with the Solaris and Tru64 UNIX system headers, GCC
23065 supports two `#pragma' directives which change the name used in
23066 assembly for a given declaration. These pragmas are only available on
23067 platforms whose system headers need them. To get this effect on all
23068 platforms supported by GCC, use the asm labels extension (*note Asm
23071 `redefine_extname OLDNAME NEWNAME'
23072 This pragma gives the C function OLDNAME the assembly symbol
23073 NEWNAME. The preprocessor macro `__PRAGMA_REDEFINE_EXTNAME' will
23074 be defined if this pragma is available (currently only on Solaris).
23076 `extern_prefix STRING'
23077 This pragma causes all subsequent external function and variable
23078 declarations to have STRING prepended to their assembly symbols.
23079 This effect may be terminated with another `extern_prefix' pragma
23080 whose argument is an empty string. The preprocessor macro
23081 `__PRAGMA_EXTERN_PREFIX' will be defined if this pragma is
23082 available (currently only on Tru64 UNIX).
23084 These pragmas and the asm labels extension interact in a complicated
23085 manner. Here are some corner cases you may want to be aware of.
23087 1. Both pragmas silently apply only to declarations with external
23088 linkage. Asm labels do not have this restriction.
23090 2. In C++, both pragmas silently apply only to declarations with "C"
23091 linkage. Again, asm labels do not have this restriction.
23093 3. If any of the three ways of changing the assembly name of a
23094 declaration is applied to a declaration whose assembly name has
23095 already been determined (either by a previous use of one of these
23096 features, or because the compiler needed the assembly name in
23097 order to generate code), and the new name is different, a warning
23098 issues and the name does not change.
23100 4. The OLDNAME used by `#pragma redefine_extname' is always the
23103 5. If `#pragma extern_prefix' is in effect, and a declaration occurs
23104 with an asm label attached, the prefix is silently ignored for
23107 6. If `#pragma extern_prefix' and `#pragma redefine_extname' apply to
23108 the same declaration, whichever triggered first wins, and a
23109 warning issues if they contradict each other. (We would like to
23110 have `#pragma redefine_extname' always win, for consistency with
23111 asm labels, but if `#pragma extern_prefix' triggers first we have
23112 no way of knowing that that happened.)
23115 File: gcc.info, Node: Structure-Packing Pragmas, Next: Weak Pragmas, Prev: Symbol-Renaming Pragmas, Up: Pragmas
23117 5.49.7 Structure-Packing Pragmas
23118 --------------------------------
23120 For compatibility with Win32, GCC supports a set of `#pragma'
23121 directives which change the maximum alignment of members of structures
23122 (other than zero-width bitfields), unions, and classes subsequently
23123 defined. The N value below always is required to be a small power of
23124 two and specifies the new alignment in bytes.
23126 1. `#pragma pack(N)' simply sets the new alignment.
23128 2. `#pragma pack()' sets the alignment to the one that was in effect
23129 when compilation started (see also command line option
23130 `-fpack-struct[=<n>]' *note Code Gen Options::).
23132 3. `#pragma pack(push[,N])' pushes the current alignment setting on
23133 an internal stack and then optionally sets the new alignment.
23135 4. `#pragma pack(pop)' restores the alignment setting to the one
23136 saved at the top of the internal stack (and removes that stack
23137 entry). Note that `#pragma pack([N])' does not influence this
23138 internal stack; thus it is possible to have `#pragma pack(push)'
23139 followed by multiple `#pragma pack(N)' instances and finalized by
23140 a single `#pragma pack(pop)'.
23143 File: gcc.info, Node: Weak Pragmas, Prev: Structure-Packing Pragmas, Up: Pragmas
23145 5.49.8 Weak Pragmas
23146 -------------------
23148 For compatibility with SVR4, GCC supports a set of `#pragma' directives
23149 for declaring symbols to be weak, and defining weak aliases.
23151 `#pragma weak SYMBOL'
23152 This pragma declares SYMBOL to be weak, as if the declaration had
23153 the attribute of the same name. The pragma may appear before or
23154 after the declaration of SYMBOL, but must appear before either its
23155 first use or its definition. It is not an error for SYMBOL to
23156 never be defined at all.
23158 `#pragma weak SYMBOL1 = SYMBOL2'
23159 This pragma declares SYMBOL1 to be a weak alias of SYMBOL2. It is
23160 an error if SYMBOL2 is not defined in the current translation unit.
23163 File: gcc.info, Node: Unnamed Fields, Next: Thread-Local, Prev: Pragmas, Up: C Extensions
23165 5.50 Unnamed struct/union fields within structs/unions
23166 ======================================================
23168 For compatibility with other compilers, GCC allows you to define a
23169 structure or union that contains, as fields, structures and unions
23170 without names. For example:
23181 In this example, the user would be able to access members of the
23182 unnamed union with code like `foo.b'. Note that only unnamed structs
23183 and unions are allowed, you may not have, for example, an unnamed `int'.
23185 You must never create such structures that cause ambiguous field
23186 definitions. For example, this structure:
23195 It is ambiguous which `a' is being referred to with `foo.a'. Such
23196 constructs are not supported and must be avoided. In the future, such
23197 constructs may be detected and treated as compilation errors.
23199 Unless `-fms-extensions' is used, the unnamed field must be a
23200 structure or union definition without a tag (for example, `struct { int
23201 a; };'). If `-fms-extensions' is used, the field may also be a
23202 definition with a tag such as `struct foo { int a; };', a reference to
23203 a previously defined structure or union such as `struct foo;', or a
23204 reference to a `typedef' name for a previously defined structure or
23208 File: gcc.info, Node: Thread-Local, Prev: Unnamed Fields, Up: C Extensions
23210 5.51 Thread-Local Storage
23211 =========================
23213 Thread-local storage (TLS) is a mechanism by which variables are
23214 allocated such that there is one instance of the variable per extant
23215 thread. The run-time model GCC uses to implement this originates in
23216 the IA-64 processor-specific ABI, but has since been migrated to other
23217 processors as well. It requires significant support from the linker
23218 (`ld'), dynamic linker (`ld.so'), and system libraries (`libc.so' and
23219 `libpthread.so'), so it is not available everywhere.
23221 At the user level, the extension is visible with a new storage class
23222 keyword: `__thread'. For example:
23225 extern __thread struct state s;
23226 static __thread char *p;
23228 The `__thread' specifier may be used alone, with the `extern' or
23229 `static' specifiers, but with no other storage class specifier. When
23230 used with `extern' or `static', `__thread' must appear immediately
23231 after the other storage class specifier.
23233 The `__thread' specifier may be applied to any global, file-scoped
23234 static, function-scoped static, or static data member of a class. It
23235 may not be applied to block-scoped automatic or non-static data member.
23237 When the address-of operator is applied to a thread-local variable, it
23238 is evaluated at run-time and returns the address of the current thread's
23239 instance of that variable. An address so obtained may be used by any
23240 thread. When a thread terminates, any pointers to thread-local
23241 variables in that thread become invalid.
23243 No static initialization may refer to the address of a thread-local
23246 In C++, if an initializer is present for a thread-local variable, it
23247 must be a CONSTANT-EXPRESSION, as defined in 5.19.2 of the ANSI/ISO C++
23250 See ELF Handling For Thread-Local Storage
23251 (http://people.redhat.com/drepper/tls.pdf) for a detailed explanation of
23252 the four thread-local storage addressing models, and how the run-time
23253 is expected to function.
23257 * C99 Thread-Local Edits::
23258 * C++98 Thread-Local Edits::
23261 File: gcc.info, Node: C99 Thread-Local Edits, Next: C++98 Thread-Local Edits, Up: Thread-Local
23263 5.51.1 ISO/IEC 9899:1999 Edits for Thread-Local Storage
23264 -------------------------------------------------------
23266 The following are a set of changes to ISO/IEC 9899:1999 (aka C99) that
23267 document the exact semantics of the language extension.
23269 * `5.1.2 Execution environments'
23271 Add new text after paragraph 1
23273 Within either execution environment, a "thread" is a flow of
23274 control within a program. It is implementation defined
23275 whether or not there may be more than one thread associated
23276 with a program. It is implementation defined how threads
23277 beyond the first are created, the name and type of the
23278 function called at thread startup, and how threads may be
23279 terminated. However, objects with thread storage duration
23280 shall be initialized before thread startup.
23282 * `6.2.4 Storage durations of objects'
23284 Add new text before paragraph 3
23286 An object whose identifier is declared with the storage-class
23287 specifier `__thread' has "thread storage duration". Its
23288 lifetime is the entire execution of the thread, and its
23289 stored value is initialized only once, prior to thread
23296 * `6.7.1 Storage-class specifiers'
23298 Add `__thread' to the list of storage class specifiers in
23301 Change paragraph 2 to
23303 With the exception of `__thread', at most one storage-class
23304 specifier may be given [...]. The `__thread' specifier may
23305 be used alone, or immediately following `extern' or `static'.
23307 Add new text after paragraph 6
23309 The declaration of an identifier for a variable that has
23310 block scope that specifies `__thread' shall also specify
23311 either `extern' or `static'.
23313 The `__thread' specifier shall be used only with variables.
23316 File: gcc.info, Node: C++98 Thread-Local Edits, Prev: C99 Thread-Local Edits, Up: Thread-Local
23318 5.51.2 ISO/IEC 14882:1998 Edits for Thread-Local Storage
23319 --------------------------------------------------------
23321 The following are a set of changes to ISO/IEC 14882:1998 (aka C++98)
23322 that document the exact semantics of the language extension.
23324 * [intro.execution]
23326 New text after paragraph 4
23328 A "thread" is a flow of control within the abstract machine.
23329 It is implementation defined whether or not there may be more
23332 New text after paragraph 7
23334 It is unspecified whether additional action must be taken to
23335 ensure when and whether side effects are visible to other
23342 * [basic.start.main]
23344 Add after paragraph 5
23346 The thread that begins execution at the `main' function is
23347 called the "main thread". It is implementation defined how
23348 functions beginning threads other than the main thread are
23349 designated or typed. A function so designated, as well as
23350 the `main' function, is called a "thread startup function".
23351 It is implementation defined what happens if a thread startup
23352 function returns. It is implementation defined what happens
23353 to other threads when any thread calls `exit'.
23355 * [basic.start.init]
23357 Add after paragraph 4
23359 The storage for an object of thread storage duration shall be
23360 statically initialized before the first statement of the
23361 thread startup function. An object of thread storage
23362 duration shall not require dynamic initialization.
23364 * [basic.start.term]
23366 Add after paragraph 3
23368 The type of an object with thread storage duration shall not
23369 have a non-trivial destructor, nor shall it be an array type
23370 whose elements (directly or indirectly) have non-trivial
23375 Add "thread storage duration" to the list in paragraph 1.
23379 Thread, static, and automatic storage durations are
23380 associated with objects introduced by declarations [...].
23382 Add `__thread' to the list of specifiers in paragraph 3.
23384 * [basic.stc.thread]
23386 New section before [basic.stc.static]
23388 The keyword `__thread' applied to a non-local object gives the
23389 object thread storage duration.
23391 A local variable or class data member declared both `static'
23392 and `__thread' gives the variable or member thread storage
23395 * [basic.stc.static]
23399 All objects which have neither thread storage duration,
23400 dynamic storage duration nor are local [...].
23404 Add `__thread' to the list in paragraph 1.
23408 With the exception of `__thread', at most one
23409 STORAGE-CLASS-SPECIFIER shall appear in a given
23410 DECL-SPECIFIER-SEQ. The `__thread' specifier may be used
23411 alone, or immediately following the `extern' or `static'
23414 Add after paragraph 5
23416 The `__thread' specifier can be applied only to the names of
23417 objects and to anonymous unions.
23421 Add after paragraph 6
23423 Non-`static' members shall not be `__thread'.
23426 File: gcc.info, Node: C++ Extensions, Next: Objective-C, Prev: C Extensions, Up: Top
23428 6 Extensions to the C++ Language
23429 ********************************
23431 The GNU compiler provides these extensions to the C++ language (and you
23432 can also use most of the C language extensions in your C++ programs).
23433 If you want to write code that checks whether these features are
23434 available, you can test for the GNU compiler the same way as for C
23435 programs: check for a predefined macro `__GNUC__'. You can also use
23436 `__GNUG__' to test specifically for GNU C++ (*note Predefined Macros:
23437 (cpp)Common Predefined Macros.).
23441 * Volatiles:: What constitutes an access to a volatile object.
23442 * Restricted Pointers:: C99 restricted pointers and references.
23443 * Vague Linkage:: Where G++ puts inlines, vtables and such.
23444 * C++ Interface:: You can use a single C++ header file for both
23445 declarations and definitions.
23446 * Template Instantiation:: Methods for ensuring that exactly one copy of
23447 each needed template instantiation is emitted.
23448 * Bound member functions:: You can extract a function pointer to the
23449 method denoted by a `->*' or `.*' expression.
23450 * C++ Attributes:: Variable, function, and type attributes for C++ only.
23451 * Strong Using:: Strong using-directives for namespace composition.
23452 * Java Exceptions:: Tweaking exception handling to work with Java.
23453 * Deprecated Features:: Things will disappear from g++.
23454 * Backwards Compatibility:: Compatibilities with earlier definitions of C++.
23457 File: gcc.info, Node: Volatiles, Next: Restricted Pointers, Up: C++ Extensions
23459 6.1 When is a Volatile Object Accessed?
23460 =======================================
23462 Both the C and C++ standard have the concept of volatile objects. These
23463 are normally accessed by pointers and used for accessing hardware. The
23464 standards encourage compilers to refrain from optimizations concerning
23465 accesses to volatile objects that it might perform on non-volatile
23466 objects. The C standard leaves it implementation defined as to what
23467 constitutes a volatile access. The C++ standard omits to specify this,
23468 except to say that C++ should behave in a similar manner to C with
23469 respect to volatiles, where possible. The minimum either standard
23470 specifies is that at a sequence point all previous accesses to volatile
23471 objects have stabilized and no subsequent accesses have occurred. Thus
23472 an implementation is free to reorder and combine volatile accesses
23473 which occur between sequence points, but cannot do so for accesses
23474 across a sequence point. The use of volatiles does not allow you to
23475 violate the restriction on updating objects multiple times within a
23478 In most expressions, it is intuitively obvious what is a read and what
23479 is a write. For instance
23481 volatile int *dst = SOMEVALUE;
23482 volatile int *src = SOMEOTHERVALUE;
23485 will cause a read of the volatile object pointed to by SRC and stores
23486 the value into the volatile object pointed to by DST. There is no
23487 guarantee that these reads and writes are atomic, especially for objects
23490 Less obvious expressions are where something which looks like an access
23491 is used in a void context. An example would be,
23493 volatile int *src = SOMEVALUE;
23496 With C, such expressions are rvalues, and as rvalues cause a read of
23497 the object, GCC interprets this as a read of the volatile being pointed
23498 to. The C++ standard specifies that such expressions do not undergo
23499 lvalue to rvalue conversion, and that the type of the dereferenced
23500 object may be incomplete. The C++ standard does not specify explicitly
23501 that it is this lvalue to rvalue conversion which is responsible for
23502 causing an access. However, there is reason to believe that it is,
23503 because otherwise certain simple expressions become undefined. However,
23504 because it would surprise most programmers, G++ treats dereferencing a
23505 pointer to volatile object of complete type in a void context as a read
23506 of the object. When the object has incomplete type, G++ issues a
23511 volatile S *ptr1 = SOMEVALUE;
23512 volatile T *ptr2 = SOMEVALUE;
23516 In this example, a warning is issued for `*ptr1', and `*ptr2' causes a
23517 read of the object pointed to. If you wish to force an error on the
23518 first case, you must force a conversion to rvalue with, for instance a
23519 static cast, `static_cast<S>(*ptr1)'.
23521 When using a reference to volatile, G++ does not treat equivalent
23522 expressions as accesses to volatiles, but instead issues a warning that
23523 no volatile is accessed. The rationale for this is that otherwise it
23524 becomes difficult to determine where volatile access occur, and not
23525 possible to ignore the return value from functions returning volatile
23526 references. Again, if you wish to force a read, cast the reference to
23530 File: gcc.info, Node: Restricted Pointers, Next: Vague Linkage, Prev: Volatiles, Up: C++ Extensions
23532 6.2 Restricting Pointer Aliasing
23533 ================================
23535 As with the C front end, G++ understands the C99 feature of restricted
23536 pointers, specified with the `__restrict__', or `__restrict' type
23537 qualifier. Because you cannot compile C++ by specifying the `-std=c99'
23538 language flag, `restrict' is not a keyword in C++.
23540 In addition to allowing restricted pointers, you can specify restricted
23541 references, which indicate that the reference is not aliased in the
23544 void fn (int *__restrict__ rptr, int &__restrict__ rref)
23549 In the body of `fn', RPTR points to an unaliased integer and RREF
23550 refers to a (different) unaliased integer.
23552 You may also specify whether a member function's THIS pointer is
23553 unaliased by using `__restrict__' as a member function qualifier.
23555 void T::fn () __restrict__
23560 Within the body of `T::fn', THIS will have the effective definition `T
23561 *__restrict__ const this'. Notice that the interpretation of a
23562 `__restrict__' member function qualifier is different to that of
23563 `const' or `volatile' qualifier, in that it is applied to the pointer
23564 rather than the object. This is consistent with other compilers which
23565 implement restricted pointers.
23567 As with all outermost parameter qualifiers, `__restrict__' is ignored
23568 in function definition matching. This means you only need to specify
23569 `__restrict__' in a function definition, rather than in a function
23573 File: gcc.info, Node: Vague Linkage, Next: C++ Interface, Prev: Restricted Pointers, Up: C++ Extensions
23578 There are several constructs in C++ which require space in the object
23579 file but are not clearly tied to a single translation unit. We say that
23580 these constructs have "vague linkage". Typically such constructs are
23581 emitted wherever they are needed, though sometimes we can be more
23585 Inline functions are typically defined in a header file which can
23586 be included in many different compilations. Hopefully they can
23587 usually be inlined, but sometimes an out-of-line copy is
23588 necessary, if the address of the function is taken or if inlining
23589 fails. In general, we emit an out-of-line copy in all translation
23590 units where one is needed. As an exception, we only emit inline
23591 virtual functions with the vtable, since it will always require a
23594 Local static variables and string constants used in an inline
23595 function are also considered to have vague linkage, since they
23596 must be shared between all inlined and out-of-line instances of
23600 C++ virtual functions are implemented in most compilers using a
23601 lookup table, known as a vtable. The vtable contains pointers to
23602 the virtual functions provided by a class, and each object of the
23603 class contains a pointer to its vtable (or vtables, in some
23604 multiple-inheritance situations). If the class declares any
23605 non-inline, non-pure virtual functions, the first one is chosen as
23606 the "key method" for the class, and the vtable is only emitted in
23607 the translation unit where the key method is defined.
23609 _Note:_ If the chosen key method is later defined as inline, the
23610 vtable will still be emitted in every translation unit which
23611 defines it. Make sure that any inline virtuals are declared
23612 inline in the class body, even if they are not defined there.
23615 C++ requires information about types to be written out in order to
23616 implement `dynamic_cast', `typeid' and exception handling. For
23617 polymorphic classes (classes with virtual functions), the type_info
23618 object is written out along with the vtable so that `dynamic_cast'
23619 can determine the dynamic type of a class object at runtime. For
23620 all other types, we write out the type_info object when it is
23621 used: when applying `typeid' to an expression, throwing an object,
23622 or referring to a type in a catch clause or exception
23625 Template Instantiations
23626 Most everything in this section also applies to template
23627 instantiations, but there are other options as well. *Note
23628 Where's the Template?: Template Instantiation.
23631 When used with GNU ld version 2.8 or later on an ELF system such as
23632 GNU/Linux or Solaris 2, or on Microsoft Windows, duplicate copies of
23633 these constructs will be discarded at link time. This is known as
23636 On targets that don't support COMDAT, but do support weak symbols, GCC
23637 will use them. This way one copy will override all the others, but the
23638 unused copies will still take up space in the executable.
23640 For targets which do not support either COMDAT or weak symbols, most
23641 entities with vague linkage will be emitted as local symbols to avoid
23642 duplicate definition errors from the linker. This will not happen for
23643 local statics in inlines, however, as having multiple copies will
23644 almost certainly break things.
23646 *Note Declarations and Definitions in One Header: C++ Interface, for
23647 another way to control placement of these constructs.
23650 File: gcc.info, Node: C++ Interface, Next: Template Instantiation, Prev: Vague Linkage, Up: C++ Extensions
23652 6.4 #pragma interface and implementation
23653 ========================================
23655 `#pragma interface' and `#pragma implementation' provide the user with
23656 a way of explicitly directing the compiler to emit entities with vague
23657 linkage (and debugging information) in a particular translation unit.
23659 _Note:_ As of GCC 2.7.2, these `#pragma's are not useful in most
23660 cases, because of COMDAT support and the "key method" heuristic
23661 mentioned in *Note Vague Linkage::. Using them can actually cause your
23662 program to grow due to unnecessary out-of-line copies of inline
23663 functions. Currently (3.4) the only benefit of these `#pragma's is
23664 reduced duplication of debugging information, and that should be
23665 addressed soon on DWARF 2 targets with the use of COMDAT groups.
23667 `#pragma interface'
23668 `#pragma interface "SUBDIR/OBJECTS.h"'
23669 Use this directive in _header files_ that define object classes,
23670 to save space in most of the object files that use those classes.
23671 Normally, local copies of certain information (backup copies of
23672 inline member functions, debugging information, and the internal
23673 tables that implement virtual functions) must be kept in each
23674 object file that includes class definitions. You can use this
23675 pragma to avoid such duplication. When a header file containing
23676 `#pragma interface' is included in a compilation, this auxiliary
23677 information will not be generated (unless the main input source
23678 file itself uses `#pragma implementation'). Instead, the object
23679 files will contain references to be resolved at link time.
23681 The second form of this directive is useful for the case where you
23682 have multiple headers with the same name in different directories.
23683 If you use this form, you must specify the same string to `#pragma
23686 `#pragma implementation'
23687 `#pragma implementation "OBJECTS.h"'
23688 Use this pragma in a _main input file_, when you want full output
23689 from included header files to be generated (and made globally
23690 visible). The included header file, in turn, should use `#pragma
23691 interface'. Backup copies of inline member functions, debugging
23692 information, and the internal tables used to implement virtual
23693 functions are all generated in implementation files.
23695 If you use `#pragma implementation' with no argument, it applies to
23696 an include file with the same basename(1) as your source file.
23697 For example, in `allclass.cc', giving just `#pragma implementation'
23698 by itself is equivalent to `#pragma implementation "allclass.h"'.
23700 In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
23701 an implementation file whenever you would include it from
23702 `allclass.cc' even if you never specified `#pragma
23703 implementation'. This was deemed to be more trouble than it was
23704 worth, however, and disabled.
23706 Use the string argument if you want a single implementation file to
23707 include code from multiple header files. (You must also use
23708 `#include' to include the header file; `#pragma implementation'
23709 only specifies how to use the file--it doesn't actually include
23712 There is no way to split up the contents of a single header file
23713 into multiple implementation files.
23715 `#pragma implementation' and `#pragma interface' also have an effect
23716 on function inlining.
23718 If you define a class in a header file marked with `#pragma
23719 interface', the effect on an inline function defined in that class is
23720 similar to an explicit `extern' declaration--the compiler emits no code
23721 at all to define an independent version of the function. Its
23722 definition is used only for inlining with its callers.
23724 Conversely, when you include the same header file in a main source file
23725 that declares it as `#pragma implementation', the compiler emits code
23726 for the function itself; this defines a version of the function that
23727 can be found via pointers (or by callers compiled without inlining).
23728 If all calls to the function can be inlined, you can avoid emitting the
23729 function by compiling with `-fno-implement-inlines'. If any calls were
23730 not inlined, you will get linker errors.
23732 ---------- Footnotes ----------
23734 (1) A file's "basename" was the name stripped of all leading path
23735 information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
23738 File: gcc.info, Node: Template Instantiation, Next: Bound member functions, Prev: C++ Interface, Up: C++ Extensions
23740 6.5 Where's the Template?
23741 =========================
23743 C++ templates are the first language feature to require more
23744 intelligence from the environment than one usually finds on a UNIX
23745 system. Somehow the compiler and linker have to make sure that each
23746 template instance occurs exactly once in the executable if it is needed,
23747 and not at all otherwise. There are two basic approaches to this
23748 problem, which are referred to as the Borland model and the Cfront
23752 Borland C++ solved the template instantiation problem by adding
23753 the code equivalent of common blocks to their linker; the compiler
23754 emits template instances in each translation unit that uses them,
23755 and the linker collapses them together. The advantage of this
23756 model is that the linker only has to consider the object files
23757 themselves; there is no external complexity to worry about. This
23758 disadvantage is that compilation time is increased because the
23759 template code is being compiled repeatedly. Code written for this
23760 model tends to include definitions of all templates in the header
23761 file, since they must be seen to be instantiated.
23764 The AT&T C++ translator, Cfront, solved the template instantiation
23765 problem by creating the notion of a template repository, an
23766 automatically maintained place where template instances are
23767 stored. A more modern version of the repository works as follows:
23768 As individual object files are built, the compiler places any
23769 template definitions and instantiations encountered in the
23770 repository. At link time, the link wrapper adds in the objects in
23771 the repository and compiles any needed instances that were not
23772 previously emitted. The advantages of this model are more optimal
23773 compilation speed and the ability to use the system linker; to
23774 implement the Borland model a compiler vendor also needs to
23775 replace the linker. The disadvantages are vastly increased
23776 complexity, and thus potential for error; for some code this can be
23777 just as transparent, but in practice it can been very difficult to
23778 build multiple programs in one directory and one program in
23779 multiple directories. Code written for this model tends to
23780 separate definitions of non-inline member templates into a
23781 separate file, which should be compiled separately.
23783 When used with GNU ld version 2.8 or later on an ELF system such as
23784 GNU/Linux or Solaris 2, or on Microsoft Windows, G++ supports the
23785 Borland model. On other systems, G++ implements neither automatic
23788 A future version of G++ will support a hybrid model whereby the
23789 compiler will emit any instantiations for which the template definition
23790 is included in the compile, and store template definitions and
23791 instantiation context information into the object file for the rest.
23792 The link wrapper will extract that information as necessary and invoke
23793 the compiler to produce the remaining instantiations. The linker will
23794 then combine duplicate instantiations.
23796 In the mean time, you have the following options for dealing with
23797 template instantiations:
23799 1. Compile your template-using code with `-frepo'. The compiler will
23800 generate files with the extension `.rpo' listing all of the
23801 template instantiations used in the corresponding object files
23802 which could be instantiated there; the link wrapper, `collect2',
23803 will then update the `.rpo' files to tell the compiler where to
23804 place those instantiations and rebuild any affected object files.
23805 The link-time overhead is negligible after the first pass, as the
23806 compiler will continue to place the instantiations in the same
23809 This is your best option for application code written for the
23810 Borland model, as it will just work. Code written for the Cfront
23811 model will need to be modified so that the template definitions
23812 are available at one or more points of instantiation; usually this
23813 is as simple as adding `#include <tmethods.cc>' to the end of each
23816 For library code, if you want the library to provide all of the
23817 template instantiations it needs, just try to link all of its
23818 object files together; the link will fail, but cause the
23819 instantiations to be generated as a side effect. Be warned,
23820 however, that this may cause conflicts if multiple libraries try
23821 to provide the same instantiations. For greater control, use
23822 explicit instantiation as described in the next option.
23824 2. Compile your code with `-fno-implicit-templates' to disable the
23825 implicit generation of template instances, and explicitly
23826 instantiate all the ones you use. This approach requires more
23827 knowledge of exactly which instances you need than do the others,
23828 but it's less mysterious and allows greater control. You can
23829 scatter the explicit instantiations throughout your program,
23830 perhaps putting them in the translation units where the instances
23831 are used or the translation units that define the templates
23832 themselves; you can put all of the explicit instantiations you
23833 need into one big file; or you can create small files like
23838 template class Foo<int>;
23839 template ostream& operator <<
23840 (ostream&, const Foo<int>&);
23842 for each of the instances you need, and create a template
23843 instantiation library from those.
23845 If you are using Cfront-model code, you can probably get away with
23846 not using `-fno-implicit-templates' when compiling files that don't
23847 `#include' the member template definitions.
23849 If you use one big file to do the instantiations, you may want to
23850 compile it without `-fno-implicit-templates' so you get all of the
23851 instances required by your explicit instantiations (but not by any
23852 other files) without having to specify them as well.
23854 G++ has extended the template instantiation syntax given in the ISO
23855 standard to allow forward declaration of explicit instantiations
23856 (with `extern'), instantiation of the compiler support data for a
23857 template class (i.e. the vtable) without instantiating any of its
23858 members (with `inline'), and instantiation of only the static data
23859 members of a template class, without the support data or member
23860 functions (with (`static'):
23862 extern template int max (int, int);
23863 inline template class Foo<int>;
23864 static template class Foo<int>;
23866 3. Do nothing. Pretend G++ does implement automatic instantiation
23867 management. Code written for the Borland model will work fine, but
23868 each translation unit will contain instances of each of the
23869 templates it uses. In a large program, this can lead to an
23870 unacceptable amount of code duplication.
23873 File: gcc.info, Node: Bound member functions, Next: C++ Attributes, Prev: Template Instantiation, Up: C++ Extensions
23875 6.6 Extracting the function pointer from a bound pointer to member function
23876 ===========================================================================
23878 In C++, pointer to member functions (PMFs) are implemented using a wide
23879 pointer of sorts to handle all the possible call mechanisms; the PMF
23880 needs to store information about how to adjust the `this' pointer, and
23881 if the function pointed to is virtual, where to find the vtable, and
23882 where in the vtable to look for the member function. If you are using
23883 PMFs in an inner loop, you should really reconsider that decision. If
23884 that is not an option, you can extract the pointer to the function that
23885 would be called for a given object/PMF pair and call it directly inside
23886 the inner loop, to save a bit of time.
23888 Note that you will still be paying the penalty for the call through a
23889 function pointer; on most modern architectures, such a call defeats the
23890 branch prediction features of the CPU. This is also true of normal
23891 virtual function calls.
23893 The syntax for this extension is
23896 extern int (A::*fp)();
23897 typedef int (*fptr)(A *);
23899 fptr p = (fptr)(a.*fp);
23901 For PMF constants (i.e. expressions of the form `&Klasse::Member'), no
23902 object is needed to obtain the address of the function. They can be
23903 converted to function pointers directly:
23905 fptr p1 = (fptr)(&A::foo);
23907 You must specify `-Wno-pmf-conversions' to use this extension.
23910 File: gcc.info, Node: C++ Attributes, Next: Strong Using, Prev: Bound member functions, Up: C++ Extensions
23912 6.7 C++-Specific Variable, Function, and Type Attributes
23913 ========================================================
23915 Some attributes only make sense for C++ programs.
23917 `init_priority (PRIORITY)'
23918 In Standard C++, objects defined at namespace scope are guaranteed
23919 to be initialized in an order in strict accordance with that of
23920 their definitions _in a given translation unit_. No guarantee is
23921 made for initializations across translation units. However, GNU
23922 C++ allows users to control the order of initialization of objects
23923 defined at namespace scope with the `init_priority' attribute by
23924 specifying a relative PRIORITY, a constant integral expression
23925 currently bounded between 101 and 65535 inclusive. Lower numbers
23926 indicate a higher priority.
23928 In the following example, `A' would normally be created before
23929 `B', but the `init_priority' attribute has reversed that order:
23931 Some_Class A __attribute__ ((init_priority (2000)));
23932 Some_Class B __attribute__ ((init_priority (543)));
23934 Note that the particular values of PRIORITY do not matter; only
23935 their relative ordering.
23938 This type attribute informs C++ that the class is a Java
23939 interface. It may only be applied to classes declared within an
23940 `extern "Java"' block. Calls to methods declared in this
23941 interface will be dispatched using GCJ's interface table
23942 mechanism, instead of regular virtual table dispatch.
23945 See also *Note Strong Using::.
23948 File: gcc.info, Node: Strong Using, Next: Java Exceptions, Prev: C++ Attributes, Up: C++ Extensions
23953 *Caution:* The semantics of this extension are not fully defined.
23954 Users should refrain from using this extension as its semantics may
23955 change subtly over time. It is possible that this extension wil be
23956 removed in future versions of G++.
23958 A using-directive with `__attribute ((strong))' is stronger than a
23959 normal using-directive in two ways:
23961 * Templates from the used namespace can be specialized as though
23962 they were members of the using namespace.
23964 * The using namespace is considered an associated namespace of all
23965 templates in the used namespace for purposes of argument-dependent
23968 This is useful for composing a namespace transparently from
23969 implementation namespaces. For example:
23973 template <class T> struct A { };
23975 using namespace debug __attribute ((__strong__));
23976 template <> struct A<int> { }; // ok to specialize
23978 template <class T> void f (A<T>);
23983 f (std::A<float>()); // lookup finds std::f
23988 File: gcc.info, Node: Java Exceptions, Next: Deprecated Features, Prev: Strong Using, Up: C++ Extensions
23990 6.9 Java Exceptions
23991 ===================
23993 The Java language uses a slightly different exception handling model
23994 from C++. Normally, GNU C++ will automatically detect when you are
23995 writing C++ code that uses Java exceptions, and handle them
23996 appropriately. However, if C++ code only needs to execute destructors
23997 when Java exceptions are thrown through it, GCC will guess incorrectly.
23998 Sample problematic code is:
24000 struct S { ~S(); };
24001 extern void bar(); // is written in Java, and may throw exceptions
24008 The usual effect of an incorrect guess is a link failure, complaining of
24009 a missing routine called `__gxx_personality_v0'.
24011 You can inform the compiler that Java exceptions are to be used in a
24012 translation unit, irrespective of what it might think, by writing
24013 `#pragma GCC java_exceptions' at the head of the file. This `#pragma'
24014 must appear before any functions that throw or catch exceptions, or run
24015 destructors when exceptions are thrown through them.
24017 You cannot mix Java and C++ exceptions in the same translation unit.
24018 It is believed to be safe to throw a C++ exception from one file through
24019 another file compiled for the Java exception model, or vice versa, but
24020 there may be bugs in this area.
24023 File: gcc.info, Node: Deprecated Features, Next: Backwards Compatibility, Prev: Java Exceptions, Up: C++ Extensions
24025 6.10 Deprecated Features
24026 ========================
24028 In the past, the GNU C++ compiler was extended to experiment with new
24029 features, at a time when the C++ language was still evolving. Now that
24030 the C++ standard is complete, some of those features are superseded by
24031 superior alternatives. Using the old features might cause a warning in
24032 some cases that the feature will be dropped in the future. In other
24033 cases, the feature might be gone already.
24035 While the list below is not exhaustive, it documents some of the
24036 options that are now deprecated:
24038 `-fexternal-templates'
24039 `-falt-external-templates'
24040 These are two of the many ways for G++ to implement template
24041 instantiation. *Note Template Instantiation::. The C++ standard
24042 clearly defines how template definitions have to be organized
24043 across implementation units. G++ has an implicit instantiation
24044 mechanism that should work just fine for standard-conforming code.
24046 `-fstrict-prototype'
24047 `-fno-strict-prototype'
24048 Previously it was possible to use an empty prototype parameter
24049 list to indicate an unspecified number of parameters (like C),
24050 rather than no parameters, as C++ demands. This feature has been
24051 removed, except where it is required for backwards compatibility
24052 *Note Backwards Compatibility::.
24054 G++ allows a virtual function returning `void *' to be overridden by
24055 one returning a different pointer type. This extension to the
24056 covariant return type rules is now deprecated and will be removed from a
24059 The G++ minimum and maximum operators (`<?' and `>?') and their
24060 compound forms (`<?=') and `>?=') have been deprecated and will be
24061 removed in a future version. Code using these operators should be
24062 modified to use `std::min' and `std::max' instead.
24064 The named return value extension has been deprecated, and is now
24067 The use of initializer lists with new expressions has been deprecated,
24068 and is now removed from G++.
24070 Floating and complex non-type template parameters have been deprecated,
24071 and are now removed from G++.
24073 The implicit typename extension has been deprecated and is now removed
24076 The use of default arguments in function pointers, function typedefs
24077 and and other places where they are not permitted by the standard is
24078 deprecated and will be removed from a future version of G++.
24080 G++ allows floating-point literals to appear in integral constant
24081 expressions, e.g. ` enum E { e = int(2.2 * 3.7) } ' This extension is
24082 deprecated and will be removed from a future version.
24084 G++ allows static data members of const floating-point type to be
24085 declared with an initializer in a class definition. The standard only
24086 allows initializers for static members of const integral types and const
24087 enumeration types so this extension has been deprecated and will be
24088 removed from a future version.
24091 File: gcc.info, Node: Backwards Compatibility, Prev: Deprecated Features, Up: C++ Extensions
24093 6.11 Backwards Compatibility
24094 ============================
24096 Now that there is a definitive ISO standard C++, G++ has a specification
24097 to adhere to. The C++ language evolved over time, and features that
24098 used to be acceptable in previous drafts of the standard, such as the
24099 ARM [Annotated C++ Reference Manual], are no longer accepted. In order
24100 to allow compilation of C++ written to such drafts, G++ contains some
24101 backwards compatibilities. _All such backwards compatibility features
24102 are liable to disappear in future versions of G++._ They should be
24103 considered deprecated *Note Deprecated Features::.
24106 If a variable is declared at for scope, it used to remain in scope
24107 until the end of the scope which contained the for statement
24108 (rather than just within the for scope). G++ retains this, but
24109 issues a warning, if such a variable is accessed outside the for
24112 `Implicit C language'
24113 Old C system header files did not contain an `extern "C" {...}'
24114 scope to set the language. On such systems, all header files are
24115 implicitly scoped inside a C language scope. Also, an empty
24116 prototype `()' will be treated as an unspecified number of
24117 arguments, rather than no arguments, as C++ demands.
24120 File: gcc.info, Node: Objective-C, Next: Compatibility, Prev: C++ Extensions, Up: Top
24122 7 GNU Objective-C runtime features
24123 **********************************
24125 This document is meant to describe some of the GNU Objective-C runtime
24126 features. It is not intended to teach you Objective-C, there are
24127 several resources on the Internet that present the language. Questions
24128 and comments about this document to Ovidiu Predescu <ovidiu@cup.hp.com>.
24132 * Executing code before main::
24134 * Garbage Collection::
24135 * Constant string objects::
24136 * compatibility_alias::
24139 File: gcc.info, Node: Executing code before main, Next: Type encoding, Prev: Objective-C, Up: Objective-C
24141 7.1 `+load': Executing code before main
24142 =======================================
24144 The GNU Objective-C runtime provides a way that allows you to execute
24145 code before the execution of the program enters the `main' function.
24146 The code is executed on a per-class and a per-category basis, through a
24147 special class method `+load'.
24149 This facility is very useful if you want to initialize global variables
24150 which can be accessed by the program directly, without sending a message
24151 to the class first. The usual way to initialize global variables, in
24152 the `+initialize' method, might not be useful because `+initialize' is
24153 only called when the first message is sent to a class object, which in
24154 some cases could be too late.
24156 Suppose for example you have a `FileStream' class that declares
24157 `Stdin', `Stdout' and `Stderr' as global variables, like below:
24160 FileStream *Stdin = nil;
24161 FileStream *Stdout = nil;
24162 FileStream *Stderr = nil;
24164 @implementation FileStream
24168 Stdin = [[FileStream new] initWithFd:0];
24169 Stdout = [[FileStream new] initWithFd:1];
24170 Stderr = [[FileStream new] initWithFd:2];
24173 /* Other methods here */
24176 In this example, the initialization of `Stdin', `Stdout' and `Stderr'
24177 in `+initialize' occurs too late. The programmer can send a message to
24178 one of these objects before the variables are actually initialized,
24179 thus sending messages to the `nil' object. The `+initialize' method
24180 which actually initializes the global variables is not invoked until
24181 the first message is sent to the class object. The solution would
24182 require these variables to be initialized just before entering `main'.
24184 The correct solution of the above problem is to use the `+load' method
24185 instead of `+initialize':
24188 @implementation FileStream
24192 Stdin = [[FileStream new] initWithFd:0];
24193 Stdout = [[FileStream new] initWithFd:1];
24194 Stderr = [[FileStream new] initWithFd:2];
24197 /* Other methods here */
24200 The `+load' is a method that is not overridden by categories. If a
24201 class and a category of it both implement `+load', both methods are
24202 invoked. This allows some additional initializations to be performed in
24205 This mechanism is not intended to be a replacement for `+initialize'.
24206 You should be aware of its limitations when you decide to use it
24207 instead of `+initialize'.
24211 * What you can and what you cannot do in +load::
24214 File: gcc.info, Node: What you can and what you cannot do in +load, Prev: Executing code before main, Up: Executing code before main
24216 7.1.1 What you can and what you cannot do in `+load'
24217 ----------------------------------------------------
24219 The `+load' implementation in the GNU runtime guarantees you the
24222 * you can write whatever C code you like;
24224 * you can send messages to Objective-C constant strings (`@"this is a
24225 constant string"');
24227 * you can allocate and send messages to objects whose class is
24228 implemented in the same file;
24230 * the `+load' implementation of all super classes of a class are
24231 executed before the `+load' of that class is executed;
24233 * the `+load' implementation of a class is executed before the
24234 `+load' implementation of any category.
24237 In particular, the following things, even if they can work in a
24238 particular case, are not guaranteed:
24240 * allocation of or sending messages to arbitrary objects;
24242 * allocation of or sending messages to objects whose classes have a
24243 category implemented in the same file;
24246 You should make no assumptions about receiving `+load' in sibling
24247 classes when you write `+load' of a class. The order in which sibling
24248 classes receive `+load' is not guaranteed.
24250 The order in which `+load' and `+initialize' are called could be
24251 problematic if this matters. If you don't allocate objects inside
24252 `+load', it is guaranteed that `+load' is called before `+initialize'.
24253 If you create an object inside `+load' the `+initialize' method of
24254 object's class is invoked even if `+load' was not invoked. Note if you
24255 explicitly call `+load' on a class, `+initialize' will be called first.
24256 To avoid possible problems try to implement only one of these methods.
24258 The `+load' method is also invoked when a bundle is dynamically loaded
24259 into your running program. This happens automatically without any
24260 intervening operation from you. When you write bundles and you need to
24261 write `+load' you can safely create and send messages to objects whose
24262 classes already exist in the running program. The same restrictions as
24263 above apply to classes defined in bundle.
24266 File: gcc.info, Node: Type encoding, Next: Garbage Collection, Prev: Executing code before main, Up: Objective-C
24271 The Objective-C compiler generates type encodings for all the types.
24272 These type encodings are used at runtime to find out information about
24273 selectors and methods and about objects and classes.
24275 The types are encoded in the following way:
24278 `unsigned char' `C'
24280 `unsigned short' `S'
24284 `unsigned long' `L'
24296 bit-fields `b' followed by the starting position of the
24297 bit-field, the type of the bit-field and the size of
24298 the bit-field (the bit-fields encoding was changed
24299 from the NeXT's compiler encoding, see below)
24301 The encoding of bit-fields has changed to allow bit-fields to be
24302 properly handled by the runtime functions that compute sizes and
24303 alignments of types that contain bit-fields. The previous encoding
24304 contained only the size of the bit-field. Using only this information
24305 it is not possible to reliably compute the size occupied by the
24306 bit-field. This is very important in the presence of the Boehm's
24307 garbage collector because the objects are allocated using the typed
24308 memory facility available in this collector. The typed memory
24309 allocation requires information about where the pointers are located
24312 The position in the bit-field is the position, counting in bits, of the
24313 bit closest to the beginning of the structure.
24315 The non-atomic types are encoded as follows:
24317 pointers `^' followed by the pointed type.
24318 arrays `[' followed by the number of elements in the array
24319 followed by the type of the elements followed by `]'
24320 structures `{' followed by the name of the structure (or `?' if the
24321 structure is unnamed), the `=' sign, the type of the
24323 unions `(' followed by the name of the structure (or `?' if the
24324 union is unnamed), the `=' sign, the type of the members
24327 Here are some types and their encodings, as they are generated by the
24328 compiler on an i386 machine:
24331 Objective-C type Compiler encoding
24333 struct { `{?=i[3f]b128i3b131i2c}'
24342 In addition to the types the compiler also encodes the type
24343 specifiers. The table below describes the encoding of the current
24344 Objective-C type specifiers:
24356 The type specifiers are encoded just before the type. Unlike types
24357 however, the type specifiers are only encoded when they appear in method
24361 File: gcc.info, Node: Garbage Collection, Next: Constant string objects, Prev: Type encoding, Up: Objective-C
24363 7.3 Garbage Collection
24364 ======================
24366 Support for a new memory management policy has been added by using a
24367 powerful conservative garbage collector, known as the
24368 Boehm-Demers-Weiser conservative garbage collector. It is available
24369 from `http://www.hpl.hp.com/personal/Hans_Boehm/gc/'.
24371 To enable the support for it you have to configure the compiler using
24372 an additional argument, `--enable-objc-gc'. You need to have garbage
24373 collector installed before building the compiler. This will build an
24374 additional runtime library which has several enhancements to support
24375 the garbage collector. The new library has a new name, `libobjc_gc.a'
24376 to not conflict with the non-garbage-collected library.
24378 When the garbage collector is used, the objects are allocated using the
24379 so-called typed memory allocation mechanism available in the
24380 Boehm-Demers-Weiser collector. This mode requires precise information
24381 on where pointers are located inside objects. This information is
24382 computed once per class, immediately after the class has been
24385 There is a new runtime function `class_ivar_set_gcinvisible()' which
24386 can be used to declare a so-called "weak pointer" reference. Such a
24387 pointer is basically hidden for the garbage collector; this can be
24388 useful in certain situations, especially when you want to keep track of
24389 the allocated objects, yet allow them to be collected. This kind of
24390 pointers can only be members of objects, you cannot declare a global
24391 pointer as a weak reference. Every type which is a pointer type can be
24392 declared a weak pointer, including `id', `Class' and `SEL'.
24394 Here is an example of how to use this feature. Suppose you want to
24395 implement a class whose instances hold a weak pointer reference; the
24396 following class does this:
24399 @interface WeakPointer : Object
24401 const void* weakPointer;
24404 - initWithPointer:(const void*)p;
24405 - (const void*)weakPointer;
24409 @implementation WeakPointer
24413 class_ivar_set_gcinvisible (self, "weakPointer", YES);
24416 - initWithPointer:(const void*)p
24422 - (const void*)weakPointer
24424 return weakPointer;
24429 Weak pointers are supported through a new type character specifier
24430 represented by the `!' character. The `class_ivar_set_gcinvisible()'
24431 function adds or removes this specifier to the string type description
24432 of the instance variable named as argument.
24435 File: gcc.info, Node: Constant string objects, Next: compatibility_alias, Prev: Garbage Collection, Up: Objective-C
24437 7.4 Constant string objects
24438 ===========================
24440 GNU Objective-C provides constant string objects that are generated
24441 directly by the compiler. You declare a constant string object by
24442 prefixing a C constant string with the character `@':
24444 id myString = @"this is a constant string object";
24446 The constant string objects are by default instances of the
24447 `NXConstantString' class which is provided by the GNU Objective-C
24448 runtime. To get the definition of this class you must include the
24449 `objc/NXConstStr.h' header file.
24451 User defined libraries may want to implement their own constant string
24452 class. To be able to support them, the GNU Objective-C compiler
24453 provides a new command line options
24454 `-fconstant-string-class=CLASS-NAME'. The provided class should adhere
24455 to a strict structure, the same as `NXConstantString''s structure:
24458 @interface MyConstantStringClass
24466 `NXConstantString' inherits from `Object'; user class libraries may
24467 choose to inherit the customized constant string class from a different
24468 class than `Object'. There is no requirement in the methods the
24469 constant string class has to implement, but the final ivar layout of
24470 the class must be the compatible with the given structure.
24472 When the compiler creates the statically allocated constant string
24473 object, the `c_string' field will be filled by the compiler with the
24474 string; the `length' field will be filled by the compiler with the
24475 string length; the `isa' pointer will be filled with `NULL' by the
24476 compiler, and it will later be fixed up automatically at runtime by the
24477 GNU Objective-C runtime library to point to the class which was set by
24478 the `-fconstant-string-class' option when the object file is loaded (if
24479 you wonder how it works behind the scenes, the name of the class to
24480 use, and the list of static objects to fixup, are stored by the
24481 compiler in the object file in a place where the GNU runtime library
24482 will find them at runtime).
24484 As a result, when a file is compiled with the
24485 `-fconstant-string-class' option, all the constant string objects will
24486 be instances of the class specified as argument to this option. It is
24487 possible to have multiple compilation units referring to different
24488 constant string classes, neither the compiler nor the linker impose any
24489 restrictions in doing this.
24492 File: gcc.info, Node: compatibility_alias, Prev: Constant string objects, Up: Objective-C
24494 7.5 compatibility_alias
24495 =======================
24497 This is a feature of the Objective-C compiler rather than of the
24498 runtime, anyway since it is documented nowhere and its existence was
24499 forgotten, we are documenting it here.
24501 The keyword `@compatibility_alias' allows you to define a class name
24502 as equivalent to another class name. For example:
24504 @compatibility_alias WOApplication GSWApplication;
24506 tells the compiler that each time it encounters `WOApplication' as a
24507 class name, it should replace it with `GSWApplication' (that is,
24508 `WOApplication' is just an alias for `GSWApplication').
24510 There are some constraints on how this can be used--
24512 * `WOApplication' (the alias) must not be an existing class;
24514 * `GSWApplication' (the real class) must be an existing class.
24518 File: gcc.info, Node: Compatibility, Next: Gcov, Prev: Objective-C, Up: Top
24520 8 Binary Compatibility
24521 **********************
24523 Binary compatibility encompasses several related concepts:
24525 "application binary interface (ABI)"
24526 The set of runtime conventions followed by all of the tools that
24527 deal with binary representations of a program, including
24528 compilers, assemblers, linkers, and language runtime support.
24529 Some ABIs are formal with a written specification, possibly
24530 designed by multiple interested parties. Others are simply the
24531 way things are actually done by a particular set of tools.
24534 A compiler conforms to an ABI if it generates code that follows
24535 all of the specifications enumerated by that ABI. A library
24536 conforms to an ABI if it is implemented according to that ABI. An
24537 application conforms to an ABI if it is built using tools that
24538 conform to that ABI and does not contain source code that
24539 specifically changes behavior specified by the ABI.
24541 "calling conventions"
24542 Calling conventions are a subset of an ABI that specify of how
24543 arguments are passed and function results are returned.
24546 Different sets of tools are interoperable if they generate files
24547 that can be used in the same program. The set of tools includes
24548 compilers, assemblers, linkers, libraries, header files, startup
24549 files, and debuggers. Binaries produced by different sets of
24550 tools are not interoperable unless they implement the same ABI.
24551 This applies to different versions of the same tools as well as
24552 tools from different vendors.
24555 Whether a function in a binary built by one set of tools can call a
24556 function in a binary built by a different set of tools is a subset
24557 of interoperability.
24559 "implementation-defined features"
24560 Language standards include lists of implementation-defined
24561 features whose behavior can vary from one implementation to
24562 another. Some of these features are normally covered by a
24563 platform's ABI and others are not. The features that are not
24564 covered by an ABI generally affect how a program behaves, but not
24568 Conformance to the same ABI and the same behavior of
24569 implementation-defined features are both relevant for
24572 The application binary interface implemented by a C or C++ compiler
24573 affects code generation and runtime support for:
24575 * size and alignment of data types
24577 * layout of structured types
24579 * calling conventions
24581 * register usage conventions
24583 * interfaces for runtime arithmetic support
24585 * object file formats
24587 In addition, the application binary interface implemented by a C++
24588 compiler affects code generation and runtime support for:
24591 * exception handling
24593 * invoking constructors and destructors
24595 * layout, alignment, and padding of classes
24597 * layout and alignment of virtual tables
24599 Some GCC compilation options cause the compiler to generate code that
24600 does not conform to the platform's default ABI. Other options cause
24601 different program behavior for implementation-defined features that are
24602 not covered by an ABI. These options are provided for consistency with
24603 other compilers that do not follow the platform's default ABI or the
24604 usual behavior of implementation-defined features for the platform. Be
24605 very careful about using such options.
24607 Most platforms have a well-defined ABI that covers C code, but ABIs
24608 that cover C++ functionality are not yet common.
24610 Starting with GCC 3.2, GCC binary conventions for C++ are based on a
24611 written, vendor-neutral C++ ABI that was designed to be specific to
24612 64-bit Itanium but also includes generic specifications that apply to
24613 any platform. This C++ ABI is also implemented by other compiler
24614 vendors on some platforms, notably GNU/Linux and BSD systems. We have
24615 tried hard to provide a stable ABI that will be compatible with future
24616 GCC releases, but it is possible that we will encounter problems that
24617 make this difficult. Such problems could include different
24618 interpretations of the C++ ABI by different vendors, bugs in the ABI, or
24619 bugs in the implementation of the ABI in different compilers. GCC's
24620 `-Wabi' switch warns when G++ generates code that is probably not
24621 compatible with the C++ ABI.
24623 The C++ library used with a C++ compiler includes the Standard C++
24624 Library, with functionality defined in the C++ Standard, plus language
24625 runtime support. The runtime support is included in a C++ ABI, but
24626 there is no formal ABI for the Standard C++ Library. Two
24627 implementations of that library are interoperable if one follows the
24628 de-facto ABI of the other and if they are both built with the same
24629 compiler, or with compilers that conform to the same ABI for C++
24630 compiler and runtime support.
24632 When G++ and another C++ compiler conform to the same C++ ABI, but the
24633 implementations of the Standard C++ Library that they normally use do
24634 not follow the same ABI for the Standard C++ Library, object files
24635 built with those compilers can be used in the same program only if they
24636 use the same C++ library. This requires specifying the location of the
24637 C++ library header files when invoking the compiler whose usual library
24638 is not being used. The location of GCC's C++ header files depends on
24639 how the GCC build was configured, but can be seen by using the G++ `-v'
24640 option. With default configuration options for G++ 3.3 the compile
24641 line for a different C++ compiler needs to include
24643 -IGCC_INSTALL_DIRECTORY/include/c++/3.3
24645 Similarly, compiling code with G++ that must use a C++ library other
24646 than the GNU C++ library requires specifying the location of the header
24647 files for that other library.
24649 The most straightforward way to link a program to use a particular C++
24650 library is to use a C++ driver that specifies that C++ library by
24651 default. The `g++' driver, for example, tells the linker where to find
24652 GCC's C++ library (`libstdc++') plus the other libraries and startup
24653 files it needs, in the proper order.
24655 If a program must use a different C++ library and it's not possible to
24656 do the final link using a C++ driver that uses that library by default,
24657 it is necessary to tell `g++' the location and name of that library.
24658 It might also be necessary to specify different startup files and other
24659 runtime support libraries, and to suppress the use of GCC's support
24660 libraries with one or more of the options `-nostdlib', `-nostartfiles',
24661 and `-nodefaultlibs'.
24664 File: gcc.info, Node: Gcov, Next: Trouble, Prev: Compatibility, Up: Top
24666 9 `gcov'--a Test Coverage Program
24667 *********************************
24669 `gcov' is a tool you can use in conjunction with GCC to test code
24670 coverage in your programs.
24674 * Gcov Intro:: Introduction to gcov.
24675 * Invoking Gcov:: How to use gcov.
24676 * Gcov and Optimization:: Using gcov with GCC optimization.
24677 * Gcov Data Files:: The files used by gcov.
24678 * Cross-profiling:: Data file relocation.
24681 File: gcc.info, Node: Gcov Intro, Next: Invoking Gcov, Up: Gcov
24683 9.1 Introduction to `gcov'
24684 ==========================
24686 `gcov' is a test coverage program. Use it in concert with GCC to
24687 analyze your programs to help create more efficient, faster running
24688 code and to discover untested parts of your program. You can use
24689 `gcov' as a profiling tool to help discover where your optimization
24690 efforts will best affect your code. You can also use `gcov' along with
24691 the other profiling tool, `gprof', to assess which parts of your code
24692 use the greatest amount of computing time.
24694 Profiling tools help you analyze your code's performance. Using a
24695 profiler such as `gcov' or `gprof', you can find out some basic
24696 performance statistics, such as:
24698 * how often each line of code executes
24700 * what lines of code are actually executed
24702 * how much computing time each section of code uses
24704 Once you know these things about how your code works when compiled, you
24705 can look at each module to see which modules should be optimized.
24706 `gcov' helps you determine where to work on optimization.
24708 Software developers also use coverage testing in concert with
24709 testsuites, to make sure software is actually good enough for a release.
24710 Testsuites can verify that a program works as expected; a coverage
24711 program tests to see how much of the program is exercised by the
24712 testsuite. Developers can then determine what kinds of test cases need
24713 to be added to the testsuites to create both better testing and a better
24716 You should compile your code without optimization if you plan to use
24717 `gcov' because the optimization, by combining some lines of code into
24718 one function, may not give you as much information as you need to look
24719 for `hot spots' where the code is using a great deal of computer time.
24720 Likewise, because `gcov' accumulates statistics by line (at the lowest
24721 resolution), it works best with a programming style that places only
24722 one statement on each line. If you use complicated macros that expand
24723 to loops or to other control structures, the statistics are less
24724 helpful--they only report on the line where the macro call appears. If
24725 your complex macros behave like functions, you can replace them with
24726 inline functions to solve this problem.
24728 `gcov' creates a logfile called `SOURCEFILE.gcov' which indicates how
24729 many times each line of a source file `SOURCEFILE.c' has executed. You
24730 can use these logfiles along with `gprof' to aid in fine-tuning the
24731 performance of your programs. `gprof' gives timing information you can
24732 use along with the information you get from `gcov'.
24734 `gcov' works only on code compiled with GCC. It is not compatible
24735 with any other profiling or test coverage mechanism.
24738 File: gcc.info, Node: Invoking Gcov, Next: Gcov and Optimization, Prev: Gcov Intro, Up: Gcov
24743 gcov [OPTIONS] SOURCEFILE
24745 `gcov' accepts the following options:
24749 Display help about using `gcov' (on the standard output), and exit
24750 without doing any further processing.
24754 Display the `gcov' version number (on the standard output), and
24755 exit without doing any further processing.
24759 Write individual execution counts for every basic block. Normally
24760 gcov outputs execution counts only for the main blocks of a line.
24761 With this option you can determine if blocks within a single line
24762 are not being executed.
24765 `--branch-probabilities'
24766 Write branch frequencies to the output file, and write branch
24767 summary info to the standard output. This option allows you to
24768 see how often each branch in your program was taken.
24769 Unconditional branches will not be shown, unless the `-u' option
24774 Write branch frequencies as the number of branches taken, rather
24775 than the percentage of branches taken.
24779 Do not create the `gcov' output file.
24782 `--long-file-names'
24783 Create long file names for included source files. For example, if
24784 the header file `x.h' contains code, and was included in the file
24785 `a.c', then running `gcov' on the file `a.c' will produce an
24786 output file called `a.c##x.h.gcov' instead of `x.h.gcov'. This
24787 can be useful if `x.h' is included in multiple source files. If
24788 you use the `-p' option, both the including and included file
24789 names will be complete path names.
24793 Preserve complete path information in the names of generated
24794 `.gcov' files. Without this option, just the filename component is
24795 used. With this option, all directories are used, with `/'
24796 characters translated to `#' characters, `.' directory components
24797 removed and `..' components renamed to `^'. This is useful if
24798 sourcefiles are in several different directories. It also affects
24802 `--function-summaries'
24803 Output summaries for each function in addition to the file level
24806 `-o DIRECTORY|FILE'
24807 `--object-directory DIRECTORY'
24808 `--object-file FILE'
24809 Specify either the directory containing the gcov data files, or the
24810 object path name. The `.gcno', and `.gcda' data files are
24811 searched for using this option. If a directory is specified, the
24812 data files are in that directory and named after the source file
24813 name, without its extension. If a file is specified here, the
24814 data files are named after that file, without its extension. If
24815 this option is not supplied, it defaults to the current directory.
24818 `--unconditional-branches'
24819 When branch probabilities are given, include those of
24820 unconditional branches. Unconditional branches are normally not
24824 `gcov' should be run with the current directory the same as that when
24825 you invoked the compiler. Otherwise it will not be able to locate the
24826 source files. `gcov' produces files called `MANGLEDNAME.gcov' in the
24827 current directory. These contain the coverage information of the
24828 source file they correspond to. One `.gcov' file is produced for each
24829 source file containing code, which was compiled to produce the data
24830 files. The MANGLEDNAME part of the output file name is usually simply
24831 the source file name, but can be something more complicated if the `-l'
24832 or `-p' options are given. Refer to those options for details.
24834 The `.gcov' files contain the `:' separated fields along with program
24835 source code. The format is
24837 EXECUTION_COUNT:LINE_NUMBER:SOURCE LINE TEXT
24839 Additional block information may succeed each line, when requested by
24840 command line option. The EXECUTION_COUNT is `-' for lines containing
24841 no code and `#####' for lines which were never executed. Some lines of
24842 information at the start have LINE_NUMBER of zero.
24844 The preamble lines are of the form
24848 The ordering and number of these preamble lines will be augmented as
24849 `gcov' development progresses -- do not rely on them remaining
24850 unchanged. Use TAG to locate a particular preamble line.
24852 The additional block information is of the form
24856 The INFORMATION is human readable, but designed to be simple enough
24857 for machine parsing too.
24859 When printing percentages, 0% and 100% are only printed when the values
24860 are _exactly_ 0% and 100% respectively. Other values which would
24861 conventionally be rounded to 0% or 100% are instead printed as the
24862 nearest non-boundary value.
24864 When using `gcov', you must first compile your program with two
24865 special GCC options: `-fprofile-arcs -ftest-coverage'. This tells the
24866 compiler to generate additional information needed by gcov (basically a
24867 flow graph of the program) and also includes additional code in the
24868 object files for generating the extra profiling information needed by
24869 gcov. These additional files are placed in the directory where the
24870 object file is located.
24872 Running the program will cause profile output to be generated. For
24873 each source file compiled with `-fprofile-arcs', an accompanying
24874 `.gcda' file will be placed in the object file directory.
24876 Running `gcov' with your program's source file names as arguments will
24877 now produce a listing of the code along with frequency of execution for
24878 each line. For example, if your program is called `tmp.c', this is
24879 what you see when you use the basic `gcov' facility:
24881 $ gcc -fprofile-arcs -ftest-coverage tmp.c
24884 90.00% of 10 source lines executed in file tmp.c
24885 Creating tmp.c.gcov.
24887 The file `tmp.c.gcov' contains output from `gcov'. Here is a sample:
24890 -: 0:Graph:tmp.gcno
24894 -: 1:#include <stdio.h>
24896 -: 3:int main (void)
24898 1: 5: int i, total;
24902 11: 9: for (i = 0; i < 10; i++)
24903 10: 10: total += i;
24905 1: 12: if (total != 45)
24906 #####: 13: printf ("Failure\n");
24908 1: 15: printf ("Success\n");
24912 When you use the `-a' option, you will get individual block counts,
24913 and the output looks like this:
24916 -: 0:Graph:tmp.gcno
24920 -: 1:#include <stdio.h>
24922 -: 3:int main (void)
24925 1: 5: int i, total;
24929 11: 9: for (i = 0; i < 10; i++)
24931 10: 10: total += i;
24934 1: 12: if (total != 45)
24936 #####: 13: printf ("Failure\n");
24939 1: 15: printf ("Success\n");
24945 In this mode, each basic block is only shown on one line - the last
24946 line of the block. A multi-line block will only contribute to the
24947 execution count of that last line, and other lines will not be shown to
24948 contain code, unless previous blocks end on those lines. The total
24949 execution count of a line is shown and subsequent lines show the
24950 execution counts for individual blocks that end on that line. After
24951 each block, the branch and call counts of the block will be shown, if
24952 the `-b' option is given.
24954 Because of the way GCC instruments calls, a call count can be shown
24955 after a line with no individual blocks. As you can see, line 13
24956 contains a basic block that was not executed.
24958 When you use the `-b' option, your output looks like this:
24961 90.00% of 10 source lines executed in file tmp.c
24962 80.00% of 5 branches executed in file tmp.c
24963 80.00% of 5 branches taken at least once in file tmp.c
24964 50.00% of 2 calls executed in file tmp.c
24965 Creating tmp.c.gcov.
24967 Here is a sample of a resulting `tmp.c.gcov' file:
24970 -: 0:Graph:tmp.gcno
24974 -: 1:#include <stdio.h>
24976 -: 3:int main (void)
24977 function main called 1 returned 1 blocks executed 75%
24979 1: 5: int i, total;
24983 11: 9: for (i = 0; i < 10; i++)
24984 branch 0 taken 91% (fallthrough)
24986 10: 10: total += i;
24988 1: 12: if (total != 45)
24989 branch 0 taken 0% (fallthrough)
24990 branch 1 taken 100%
24991 #####: 13: printf ("Failure\n");
24992 call 0 never executed
24994 1: 15: printf ("Success\n");
24995 call 0 called 1 returned 100%
24999 For each function, a line is printed showing how many times the
25000 function is called, how many times it returns and what percentage of the
25001 function's blocks were executed.
25003 For each basic block, a line is printed after the last line of the
25004 basic block describing the branch or call that ends the basic block.
25005 There can be multiple branches and calls listed for a single source
25006 line if there are multiple basic blocks that end on that line. In this
25007 case, the branches and calls are each given a number. There is no
25008 simple way to map these branches and calls back to source constructs.
25009 In general, though, the lowest numbered branch or call will correspond
25010 to the leftmost construct on the source line.
25012 For a branch, if it was executed at least once, then a percentage
25013 indicating the number of times the branch was taken divided by the
25014 number of times the branch was executed will be printed. Otherwise, the
25015 message "never executed" is printed.
25017 For a call, if it was executed at least once, then a percentage
25018 indicating the number of times the call returned divided by the number
25019 of times the call was executed will be printed. This will usually be
25020 100%, but may be less for functions call `exit' or `longjmp', and thus
25021 may not return every time they are called.
25023 The execution counts are cumulative. If the example program were
25024 executed again without removing the `.gcda' file, the count for the
25025 number of times each line in the source was executed would be added to
25026 the results of the previous run(s). This is potentially useful in
25027 several ways. For example, it could be used to accumulate data over a
25028 number of program runs as part of a test verification suite, or to
25029 provide more accurate long-term information over a large number of
25032 The data in the `.gcda' files is saved immediately before the program
25033 exits. For each source file compiled with `-fprofile-arcs', the
25034 profiling code first attempts to read in an existing `.gcda' file; if
25035 the file doesn't match the executable (differing number of basic block
25036 counts) it will ignore the contents of the file. It then adds in the
25037 new execution counts and finally writes the data to the file.
25040 File: gcc.info, Node: Gcov and Optimization, Next: Gcov Data Files, Prev: Invoking Gcov, Up: Gcov
25042 9.3 Using `gcov' with GCC Optimization
25043 ======================================
25045 If you plan to use `gcov' to help optimize your code, you must first
25046 compile your program with two special GCC options: `-fprofile-arcs
25047 -ftest-coverage'. Aside from that, you can use any other GCC options;
25048 but if you want to prove that every single line in your program was
25049 executed, you should not compile with optimization at the same time.
25050 On some machines the optimizer can eliminate some simple code lines by
25051 combining them with other lines. For example, code like this:
25058 can be compiled into one instruction on some machines. In this case,
25059 there is no way for `gcov' to calculate separate execution counts for
25060 each line because there isn't separate code for each line. Hence the
25061 `gcov' output looks like this if you compiled the program with
25064 100: 12:if (a != b)
25069 The output shows that this block of code, combined by optimization,
25070 executed 100 times. In one sense this result is correct, because there
25071 was only one instruction representing all four of these lines. However,
25072 the output does not indicate how many times the result was 0 and how
25073 many times the result was 1.
25075 Inlineable functions can create unexpected line counts. Line counts
25076 are shown for the source code of the inlineable function, but what is
25077 shown depends on where the function is inlined, or if it is not inlined
25080 If the function is not inlined, the compiler must emit an out of line
25081 copy of the function, in any object file that needs it. If `fileA.o'
25082 and `fileB.o' both contain out of line bodies of a particular
25083 inlineable function, they will also both contain coverage counts for
25084 that function. When `fileA.o' and `fileB.o' are linked together, the
25085 linker will, on many systems, select one of those out of line bodies
25086 for all calls to that function, and remove or ignore the other.
25087 Unfortunately, it will not remove the coverage counters for the unused
25088 function body. Hence when instrumented, all but one use of that
25089 function will show zero counts.
25091 If the function is inlined in several places, the block structure in
25092 each location might not be the same. For instance, a condition might
25093 now be calculable at compile time in some instances. Because the
25094 coverage of all the uses of the inline function will be shown for the
25095 same source lines, the line counts themselves might seem inconsistent.
25098 File: gcc.info, Node: Gcov Data Files, Next: Cross-profiling, Prev: Gcov and Optimization, Up: Gcov
25100 9.4 Brief description of `gcov' data files
25101 ==========================================
25103 `gcov' uses two files for profiling. The names of these files are
25104 derived from the original _object_ file by substituting the file suffix
25105 with either `.gcno', or `.gcda'. All of these files are placed in the
25106 same directory as the object file, and contain data stored in a
25107 platform-independent format.
25109 The `.gcno' file is generated when the source file is compiled with
25110 the GCC `-ftest-coverage' option. It contains information to
25111 reconstruct the basic block graphs and assign source line numbers to
25114 The `.gcda' file is generated when a program containing object files
25115 built with the GCC `-fprofile-arcs' option is executed. A separate
25116 `.gcda' file is created for each object file compiled with this option.
25117 It contains arc transition counts, and some summary information.
25119 The full details of the file format is specified in `gcov-io.h', and
25120 functions provided in that header file should be used to access the
25124 File: gcc.info, Node: Cross-profiling, Prev: Gcov Data Files, Up: Gcov
25126 9.5 Data file relocation to support cross-profiling
25127 ===================================================
25129 Running the program will cause profile output to be generated. For each
25130 source file compiled with `-fprofile-arcs', an accompanying `.gcda'
25131 file will be placed in the object file directory. That implicitly
25132 requires running the program on the same system as it was built or
25133 having the same absolute directory structure on the target system. The
25134 program will try to create the needed directory structure, if it is not
25137 To support cross-profiling, a program compiled with `-fprofile-arcs'
25138 can relocate the data files based on two environment variables:
25140 * GCOV_PREFIX contains the prefix to add to the absolute paths in
25141 the object file. Prefix must be absolute as well, otherwise its
25142 value is ignored. The default is no prefix.
25144 * GCOV_PREFIX_STRIP indicates the how many initial directory names
25145 to strip off the hardwired absolute paths. Default value is 0.
25147 _Note:_ GCOV_PREFIX_STRIP has no effect if GCOV_PREFIX is
25148 undefined, empty or non-absolute.
25150 For example, if the object file `/user/build/foo.o' was built with
25151 `-fprofile-arcs', the final executable will try to create the data file
25152 `/user/build/foo.gcda' when running on the target system. This will
25153 fail if the corresponding directory does not exist and it is unable to
25154 create it. This can be overcome by, for example, setting the
25155 environment as `GCOV_PREFIX=/target/run' and `GCOV_PREFIX_STRIP=1'.
25156 Such a setting will name the data file `/target/run/build/foo.gcda'.
25158 You must move the data files to the expected directory tree in order to
25159 use them for profile directed optimizations (`--use-profile'), or to
25160 use the `gcov' tool.
25163 File: gcc.info, Node: Trouble, Next: Bugs, Prev: Gcov, Up: Top
25165 10 Known Causes of Trouble with GCC
25166 ***********************************
25168 This section describes known problems that affect users of GCC. Most
25169 of these are not GCC bugs per se--if they were, we would fix them. But
25170 the result for a user may be like the result of a bug.
25172 Some of these problems are due to bugs in other software, some are
25173 missing features that are too much work to add, and some are places
25174 where people's opinions differ as to what is best.
25178 * Actual Bugs:: Bugs we will fix later.
25179 * Cross-Compiler Problems:: Common problems of cross compiling with GCC.
25180 * Interoperation:: Problems using GCC with other compilers,
25181 and with certain linkers, assemblers and debuggers.
25182 * Incompatibilities:: GCC is incompatible with traditional C.
25183 * Fixed Headers:: GCC uses corrected versions of system header files.
25184 This is necessary, but doesn't always work smoothly.
25185 * Standard Libraries:: GCC uses the system C library, which might not be
25186 compliant with the ISO C standard.
25187 * Disappointments:: Regrettable things we can't change, but not quite bugs.
25188 * C++ Misunderstandings:: Common misunderstandings with GNU C++.
25189 * Protoize Caveats:: Things to watch out for when using `protoize'.
25190 * Non-bugs:: Things we think are right, but some others disagree.
25191 * Warnings and Errors:: Which problems in your code get warnings,
25192 and which get errors.
25195 File: gcc.info, Node: Actual Bugs, Next: Cross-Compiler Problems, Up: Trouble
25197 10.1 Actual Bugs We Haven't Fixed Yet
25198 =====================================
25200 * The `fixincludes' script interacts badly with automounters; if the
25201 directory of system header files is automounted, it tends to be
25202 unmounted while `fixincludes' is running. This would seem to be a
25203 bug in the automounter. We don't know any good way to work around
25206 * The `fixproto' script will sometimes add prototypes for the
25207 `sigsetjmp' and `siglongjmp' functions that reference the
25208 `jmp_buf' type before that type is defined. To work around this,
25209 edit the offending file and place the typedef in front of the
25213 File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Actual Bugs, Up: Trouble
25215 10.2 Cross-Compiler Problems
25216 ============================
25218 You may run into problems with cross compilation on certain machines,
25219 for several reasons.
25221 * At present, the program `mips-tfile' which adds debug support to
25222 object files on MIPS systems does not work in a cross compile
25226 File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble
25228 10.3 Interoperation
25229 ===================
25231 This section lists various difficulties encountered in using GCC
25232 together with other compilers or with the assemblers, linkers,
25233 libraries and debuggers on certain systems.
25235 * On many platforms, GCC supports a different ABI for C++ than do
25236 other compilers, so the object files compiled by GCC cannot be
25237 used with object files generated by another C++ compiler.
25239 An area where the difference is most apparent is name mangling.
25240 The use of different name mangling is intentional, to protect you
25241 from more subtle problems. Compilers differ as to many internal
25242 details of C++ implementation, including: how class instances are
25243 laid out, how multiple inheritance is implemented, and how virtual
25244 function calls are handled. If the name encoding were made the
25245 same, your programs would link against libraries provided from
25246 other compilers--but the programs would then crash when run.
25247 Incompatible libraries are then detected at link time, rather than
25250 * On some BSD systems, including some versions of Ultrix, use of
25251 profiling causes static variable destructors (currently used only
25252 in C++) not to be run.
25254 * On some SGI systems, when you use `-lgl_s' as an option, it gets
25255 translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this
25256 does not happen when you use GCC. You must specify all three
25257 options explicitly.
25259 * On a SPARC, GCC aligns all values of type `double' on an 8-byte
25260 boundary, and it expects every `double' to be so aligned. The Sun
25261 compiler usually gives `double' values 8-byte alignment, with one
25262 exception: function arguments of type `double' may not be aligned.
25264 As a result, if a function compiled with Sun CC takes the address
25265 of an argument of type `double' and passes this pointer of type
25266 `double *' to a function compiled with GCC, dereferencing the
25267 pointer may cause a fatal signal.
25269 One way to solve this problem is to compile your entire program
25270 with GCC. Another solution is to modify the function that is
25271 compiled with Sun CC to copy the argument into a local variable;
25272 local variables are always properly aligned. A third solution is
25273 to modify the function that uses the pointer to dereference it via
25274 the following function `access_double' instead of directly with
25278 access_double (double *unaligned_ptr)
25280 union d2i { double d; int i[2]; };
25282 union d2i *p = (union d2i *) unaligned_ptr;
25291 Storing into the pointer can be done likewise with the same union.
25293 * On Solaris, the `malloc' function in the `libmalloc.a' library may
25294 allocate memory that is only 4 byte aligned. Since GCC on the
25295 SPARC assumes that doubles are 8 byte aligned, this may result in a
25296 fatal signal if doubles are stored in memory allocated by the
25297 `libmalloc.a' library.
25299 The solution is to not use the `libmalloc.a' library. Use instead
25300 `malloc' and related functions from `libc.a'; they do not have
25303 * On the HP PA machine, ADB sometimes fails to work on functions
25304 compiled with GCC. Specifically, it fails to work on functions
25305 that use `alloca' or variable-size arrays. This is because GCC
25306 doesn't generate HP-UX unwind descriptors for such functions. It
25307 may even be impossible to generate them.
25309 * Debugging (`-g') is not supported on the HP PA machine, unless you
25310 use the preliminary GNU tools.
25312 * Taking the address of a label may generate errors from the HP-UX
25313 PA assembler. GAS for the PA does not have this problem.
25315 * Using floating point parameters for indirect calls to static
25316 functions will not work when using the HP assembler. There simply
25317 is no way for GCC to specify what registers hold arguments for
25318 static functions when using the HP assembler. GAS for the PA does
25319 not have this problem.
25321 * In extremely rare cases involving some very large functions you may
25322 receive errors from the HP linker complaining about an out of
25323 bounds unconditional branch offset. This used to occur more often
25324 in previous versions of GCC, but is now exceptionally rare. If
25325 you should run into it, you can work around by making your
25328 * GCC compiled code sometimes emits warnings from the HP-UX
25329 assembler of the form:
25331 (warning) Use of GR3 when
25332 frame >= 8192 may cause conflict.
25334 These warnings are harmless and can be safely ignored.
25336 * In extremely rare cases involving some very large functions you may
25337 receive errors from the AIX Assembler complaining about a
25338 displacement that is too large. If you should run into it, you
25339 can work around by making your function smaller.
25341 * The `libstdc++.a' library in GCC relies on the SVR4 dynamic linker
25342 semantics which merges global symbols between libraries and
25343 applications, especially necessary for C++ streams functionality.
25344 This is not the default behavior of AIX shared libraries and
25345 dynamic linking. `libstdc++.a' is built on AIX with
25346 "runtime-linking" enabled so that symbol merging can occur. To
25347 utilize this feature, the application linked with `libstdc++.a'
25348 must include the `-Wl,-brtl' flag on the link line. G++ cannot
25349 impose this because this option may interfere with the semantics
25350 of the user program and users may not always use `g++' to link his
25351 or her application. Applications are not required to use the
25352 `-Wl,-brtl' flag on the link line--the rest of the `libstdc++.a'
25353 library which is not dependent on the symbol merging semantics
25354 will continue to function correctly.
25356 * An application can interpose its own definition of functions for
25357 functions invoked by `libstdc++.a' with "runtime-linking" enabled
25358 on AIX. To accomplish this the application must be linked with
25359 "runtime-linking" option and the functions explicitly must be
25360 exported by the application (`-Wl,-brtl,-bE:exportfile').
25362 * AIX on the RS/6000 provides support (NLS) for environments outside
25363 of the United States. Compilers and assemblers use NLS to support
25364 locale-specific representations of various objects including
25365 floating-point numbers (`.' vs `,' for separating decimal
25366 fractions). There have been problems reported where the library
25367 linked with GCC does not produce the same floating-point formats
25368 that the assembler accepts. If you have this problem, set the
25369 `LANG' environment variable to `C' or `En_US'.
25371 * Even if you specify `-fdollars-in-identifiers', you cannot
25372 successfully use `$' in identifiers on the RS/6000 due to a
25373 restriction in the IBM assembler. GAS supports these identifiers.
25375 * On Ultrix, the Fortran compiler expects registers 2 through 5 to
25376 be saved by function calls. However, the C compiler uses
25377 conventions compatible with BSD Unix: registers 2 through 5 may be
25378 clobbered by function calls.
25380 GCC uses the same convention as the Ultrix C compiler. You can use
25381 these options to produce code compatible with the Fortran compiler:
25383 -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
25386 File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: Interoperation, Up: Trouble
25388 10.4 Incompatibilities of GCC
25389 =============================
25391 There are several noteworthy incompatibilities between GNU C and K&R
25392 (non-ISO) versions of C.
25394 * GCC normally makes string constants read-only. If several
25395 identical-looking string constants are used, GCC stores only one
25396 copy of the string.
25398 One consequence is that you cannot call `mktemp' with a string
25399 constant argument. The function `mktemp' always alters the string
25400 its argument points to.
25402 Another consequence is that `sscanf' does not work on some very
25403 old systems when passed a string constant as its format control
25404 string or input. This is because `sscanf' incorrectly tries to
25405 write into the string constant. Likewise `fscanf' and `scanf'.
25407 The solution to these problems is to change the program to use
25408 `char'-array variables with initialization strings for these
25409 purposes instead of string constants.
25411 * `-2147483648' is positive.
25413 This is because 2147483648 cannot fit in the type `int', so
25414 (following the ISO C rules) its data type is `unsigned long int'.
25415 Negating this value yields 2147483648 again.
25417 * GCC does not substitute macro arguments when they appear inside of
25418 string constants. For example, the following macro in GCC
25422 will produce output `"a"' regardless of what the argument A is.
25424 * When you use `setjmp' and `longjmp', the only automatic variables
25425 guaranteed to remain valid are those declared `volatile'. This is
25426 a consequence of automatic register allocation. Consider this
25440 /* `longjmp (j)' may occur in `fun3'. */
25441 return a + fun3 ();
25444 Here `a' may or may not be restored to its first value when the
25445 `longjmp' occurs. If `a' is allocated in a register, then its
25446 first value is restored; otherwise, it keeps the last value stored
25449 If you use the `-W' option with the `-O' option, you will get a
25450 warning when GCC thinks such a problem might be possible.
25452 * Programs that use preprocessing directives in the middle of macro
25453 arguments do not work with GCC. For example, a program like this
25460 ISO C does not permit such a construct.
25462 * K&R compilers allow comments to cross over an inclusion boundary
25463 (i.e. started in an include file and ended in the including file).
25465 * Declarations of external variables and functions within a block
25466 apply only to the block containing the declaration. In other
25467 words, they have the same scope as any other declaration in the
25470 In some other C compilers, a `extern' declaration affects all the
25471 rest of the file even if it happens within a block.
25473 * In traditional C, you can combine `long', etc., with a typedef
25474 name, as shown here:
25477 typedef long foo bar;
25479 In ISO C, this is not allowed: `long' and other type modifiers
25480 require an explicit `int'.
25482 * PCC allows typedef names to be used as function parameters.
25484 * Traditional C allows the following erroneous pair of declarations
25485 to appear together in a given scope:
25490 * GCC treats all characters of identifiers as significant.
25491 According to K&R-1 (2.2), "No more than the first eight characters
25492 are significant, although more may be used.". Also according to
25493 K&R-1 (2.2), "An identifier is a sequence of letters and digits;
25494 the first character must be a letter. The underscore _ counts as
25495 a letter.", but GCC also allows dollar signs in identifiers.
25497 * PCC allows whitespace in the middle of compound assignment
25498 operators such as `+='. GCC, following the ISO standard, does not
25501 * GCC complains about unterminated character constants inside of
25502 preprocessing conditionals that fail. Some programs have English
25503 comments enclosed in conditionals that are guaranteed to fail; if
25504 these comments contain apostrophes, GCC will probably report an
25505 error. For example, this code would produce an error:
25508 You can't expect this to work.
25511 The best solution to such a problem is to put the text into an
25512 actual C comment delimited by `/*...*/'.
25514 * Many user programs contain the declaration `long time ();'. In the
25515 past, the system header files on many systems did not actually
25516 declare `time', so it did not matter what type your program
25517 declared it to return. But in systems with ISO C headers, `time'
25518 is declared to return `time_t', and if that is not the same as
25519 `long', then `long time ();' is erroneous.
25521 The solution is to change your program to use appropriate system
25522 headers (`<time.h>' on systems with ISO C headers) and not to
25523 declare `time' if the system header files declare it, or failing
25524 that to use `time_t' as the return type of `time'.
25526 * When compiling functions that return `float', PCC converts it to a
25527 double. GCC actually returns a `float'. If you are concerned
25528 with PCC compatibility, you should declare your functions to return
25529 `double'; you might as well say what you mean.
25531 * When compiling functions that return structures or unions, GCC
25532 output code normally uses a method different from that used on most
25533 versions of Unix. As a result, code compiled with GCC cannot call
25534 a structure-returning function compiled with PCC, and vice versa.
25536 The method used by GCC is as follows: a structure or union which is
25537 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or
25538 union with any other size is stored into an address supplied by
25539 the caller (usually in a special, fixed register, but on some
25540 machines it is passed on the stack). The target hook
25541 `TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address.
25543 By contrast, PCC on most target machines returns structures and
25544 unions of any size by copying the data into an area of static
25545 storage, and then returning the address of that storage as if it
25546 were a pointer value. The caller must copy the data from that
25547 memory area to the place where the value is wanted. GCC does not
25548 use this method because it is slower and nonreentrant.
25550 On some newer machines, PCC uses a reentrant convention for all
25551 structure and union returning. GCC on most of these machines uses
25552 a compatible convention when returning structures and unions in
25553 memory, but still returns small structures and unions in registers.
25555 You can tell GCC to use a compatible convention for all structure
25556 and union returning with the option `-fpcc-struct-return'.
25558 * GCC complains about program fragments such as `0x74ae-0x4000'
25559 which appear to be two hexadecimal constants separated by the minus
25560 operator. Actually, this string is a single "preprocessing token".
25561 Each such token must correspond to one token in C. Since this
25562 does not, GCC prints an error message. Although it may appear
25563 obvious that what is meant is an operator and two values, the ISO
25564 C standard specifically requires that this be treated as erroneous.
25566 A "preprocessing token" is a "preprocessing number" if it begins
25567 with a digit and is followed by letters, underscores, digits,
25568 periods and `e+', `e-', `E+', `E-', `p+', `p-', `P+', or `P-'
25569 character sequences. (In strict C89 mode, the sequences `p+',
25570 `p-', `P+' and `P-' cannot appear in preprocessing numbers.)
25572 To make the above program fragment valid, place whitespace in
25573 front of the minus sign. This whitespace will end the
25574 preprocessing number.
25577 File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble
25579 10.5 Fixed Header Files
25580 =======================
25582 GCC needs to install corrected versions of some system header files.
25583 This is because most target systems have some header files that won't
25584 work with GCC unless they are changed. Some have bugs, some are
25585 incompatible with ISO C, and some depend on special features of other
25588 Installing GCC automatically creates and installs the fixed header
25589 files, by running a program called `fixincludes'. Normally, you don't
25590 need to pay attention to this. But there are cases where it doesn't do
25591 the right thing automatically.
25593 * If you update the system's header files, such as by installing a
25594 new system version, the fixed header files of GCC are not
25595 automatically updated. They can be updated using the `mkheaders'
25596 script installed in `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
25598 * On some systems, header file directories contain machine-specific
25599 symbolic links in certain places. This makes it possible to share
25600 most of the header files among hosts running the same version of
25601 the system on different machine models.
25603 The programs that fix the header files do not understand this
25604 special way of using symbolic links; therefore, the directory of
25605 fixed header files is good only for the machine model used to
25608 It is possible to make separate sets of fixed header files for the
25609 different machine models, and arrange a structure of symbolic
25610 links so as to use the proper set, but you'll have to do this by
25614 File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble
25616 10.6 Standard Libraries
25617 =======================
25619 GCC by itself attempts to be a conforming freestanding implementation.
25620 *Note Language Standards Supported by GCC: Standards, for details of
25621 what this means. Beyond the library facilities required of such an
25622 implementation, the rest of the C library is supplied by the vendor of
25623 the operating system. If that C library doesn't conform to the C
25624 standards, then your programs might get warnings (especially when using
25625 `-Wall') that you don't expect.
25627 For example, the `sprintf' function on SunOS 4.1.3 returns `char *'
25628 while the C standard says that `sprintf' returns an `int'. The
25629 `fixincludes' program could make the prototype for this function match
25630 the Standard, but that would be wrong, since the function will still
25633 If you need a Standard compliant library, then you need to find one, as
25634 GCC does not provide one. The GNU C library (called `glibc') provides
25635 ISO C, POSIX, BSD, SystemV and X/Open compatibility for GNU/Linux and
25636 HURD-based GNU systems; no recent version of it supports other systems,
25637 though some very old versions did. Version 2.2 of the GNU C library
25638 includes nearly complete C99 support. You could also ask your
25639 operating system vendor if newer libraries are available.
25642 File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble
25644 10.7 Disappointments and Misunderstandings
25645 ==========================================
25647 These problems are perhaps regrettable, but we don't know any practical
25650 * Certain local variables aren't recognized by debuggers when you
25651 compile with optimization.
25653 This occurs because sometimes GCC optimizes the variable out of
25654 existence. There is no way to tell the debugger how to compute the
25655 value such a variable "would have had", and it is not clear that
25656 would be desirable anyway. So GCC simply does not mention the
25657 eliminated variable when it writes debugging information.
25659 You have to expect a certain amount of disagreement between the
25660 executable and your source code, when you use optimization.
25662 * Users often think it is a bug when GCC reports an error for code
25665 int foo (struct mumble *);
25667 struct mumble { ... };
25669 int foo (struct mumble *x)
25672 This code really is erroneous, because the scope of `struct
25673 mumble' in the prototype is limited to the argument list
25674 containing it. It does not refer to the `struct mumble' defined
25675 with file scope immediately below--they are two unrelated types
25676 with similar names in different scopes.
25678 But in the definition of `foo', the file-scope type is used
25679 because that is available to be inherited. Thus, the definition
25680 and the prototype do not match, and you get an error.
25682 This behavior may seem silly, but it's what the ISO standard
25683 specifies. It is easy enough for you to make your code work by
25684 moving the definition of `struct mumble' above the prototype.
25685 It's not worth being incompatible with ISO C just to avoid an
25686 error for the example shown above.
25688 * Accesses to bit-fields even in volatile objects works by accessing
25689 larger objects, such as a byte or a word. You cannot rely on what
25690 size of object is accessed in order to read or write the
25691 bit-field; it may even vary for a given bit-field according to the
25694 If you care about controlling the amount of memory that is
25695 accessed, use volatile but do not use bit-fields.
25697 * GCC comes with shell scripts to fix certain known problems in
25698 system header files. They install corrected copies of various
25699 header files in a special directory where only GCC will normally
25700 look for them. The scripts adapt to various systems by searching
25701 all the system header files for the problem cases that we know
25704 If new system header files are installed, nothing automatically
25705 arranges to update the corrected header files. They can be
25706 updated using the `mkheaders' script installed in
25707 `LIBEXECDIR/gcc/TARGET/VERSION/install-tools/'.
25709 * On 68000 and x86 systems, for instance, you can get paradoxical
25710 results if you test the precise values of floating point numbers.
25711 For example, you can find that a floating point value which is not
25712 a NaN is not equal to itself. This results from the fact that the
25713 floating point registers hold a few more bits of precision than
25714 fit in a `double' in memory. Compiled code moves values between
25715 memory and floating point registers at its convenience, and moving
25716 them into memory truncates them.
25718 You can partially avoid this problem by using the `-ffloat-store'
25719 option (*note Optimize Options::).
25721 * On AIX and other platforms without weak symbol support, templates
25722 need to be instantiated explicitly and symbols for static members
25723 of templates will not be generated.
25725 * On AIX, GCC scans object files and library archives for static
25726 constructors and destructors when linking an application before the
25727 linker prunes unreferenced symbols. This is necessary to prevent
25728 the AIX linker from mistakenly assuming that static constructor or
25729 destructor are unused and removing them before the scanning can
25730 occur. All static constructors and destructors found will be
25731 referenced even though the modules in which they occur may not be
25732 used by the program. This may lead to both increased executable
25733 size and unexpected symbol references.
25736 File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble
25738 10.8 Common Misunderstandings with GNU C++
25739 ==========================================
25741 C++ is a complex language and an evolving one, and its standard
25742 definition (the ISO C++ standard) was only recently completed. As a
25743 result, your C++ compiler may occasionally surprise you, even when its
25744 behavior is correct. This section discusses some areas that frequently
25745 give rise to questions of this sort.
25749 * Static Definitions:: Static member declarations are not definitions
25750 * Name lookup:: Name lookup, templates, and accessing members of base classes
25751 * Temporaries:: Temporaries may vanish before you expect
25752 * Copy Assignment:: Copy Assignment operators copy virtual bases twice
25755 File: gcc.info, Node: Static Definitions, Next: Name lookup, Up: C++ Misunderstandings
25757 10.8.1 Declare _and_ Define Static Members
25758 ------------------------------------------
25760 When a class has static data members, it is not enough to _declare_ the
25761 static member; you must also _define_ it. For example:
25770 This declaration only establishes that the class `Foo' has an `int'
25771 named `Foo::bar', and a member function named `Foo::method'. But you
25772 still need to define _both_ `method' and `bar' elsewhere. According to
25773 the ISO standard, you must supply an initializer in one (and only one)
25774 source file, such as:
25778 Other C++ compilers may not correctly implement the standard behavior.
25779 As a result, when you switch to `g++' from one of these compilers, you
25780 may discover that a program that appeared to work correctly in fact
25781 does not conform to the standard: `g++' reports as undefined symbols
25782 any static data members that lack definitions.
25785 File: gcc.info, Node: Name lookup, Next: Temporaries, Prev: Static Definitions, Up: C++ Misunderstandings
25787 10.8.2 Name lookup, templates, and accessing members of base classes
25788 --------------------------------------------------------------------
25790 The C++ standard prescribes that all names that are not dependent on
25791 template parameters are bound to their present definitions when parsing
25792 a template function or class.(1) Only names that are dependent are
25793 looked up at the point of instantiation. For example, consider
25798 template <typename T>
25807 static const int N;
25810 Here, the names `foo' and `N' appear in a context that does not depend
25811 on the type of `T'. The compiler will thus require that they are
25812 defined in the context of use in the template, not only before the
25813 point of instantiation, and will here use `::foo(double)' and `A::N',
25814 respectively. In particular, it will convert the integer value to a
25815 `double' when passing it to `::foo(double)'.
25817 Conversely, `bar' and the call to `foo' in the fourth marked line are
25818 used in contexts that do depend on the type of `T', so they are only
25819 looked up at the point of instantiation, and you can provide
25820 declarations for them after declaring the template, but before
25821 instantiating it. In particular, if you instantiate `A::f<int>', the
25822 last line will call an overloaded `::foo(int)' if one was provided,
25823 even if after the declaration of `struct A'.
25825 This distinction between lookup of dependent and non-dependent names is
25826 called two-stage (or dependent) name lookup. G++ implements it since
25829 Two-stage name lookup sometimes leads to situations with behavior
25830 different from non-template codes. The most common is probably this:
25832 template <typename T> struct Base {
25836 template <typename T> struct Derived : public Base<T> {
25837 int get_i() { return i; }
25840 In `get_i()', `i' is not used in a dependent context, so the compiler
25841 will look for a name declared at the enclosing namespace scope (which
25842 is the global scope here). It will not look into the base class, since
25843 that is dependent and you may declare specializations of `Base' even
25844 after declaring `Derived', so the compiler can't really know what `i'
25845 would refer to. If there is no global variable `i', then you will get
25848 In order to make it clear that you want the member of the base class,
25849 you need to defer lookup until instantiation time, at which the base
25850 class is known. For this, you need to access `i' in a dependent
25851 context, by either using `this->i' (remember that `this' is of type
25852 `Derived<T>*', so is obviously dependent), or using `Base<T>::i'.
25853 Alternatively, `Base<T>::i' might be brought into scope by a
25854 `using'-declaration.
25856 Another, similar example involves calling member functions of a base
25859 template <typename T> struct Base {
25863 template <typename T> struct Derived : Base<T> {
25864 int g() { return f(); };
25867 Again, the call to `f()' is not dependent on template arguments (there
25868 are no arguments that depend on the type `T', and it is also not
25869 otherwise specified that the call should be in a dependent context).
25870 Thus a global declaration of such a function must be available, since
25871 the one in the base class is not visible until instantiation time. The
25872 compiler will consequently produce the following error message:
25874 x.cc: In member function `int Derived<T>::g()':
25875 x.cc:6: error: there are no arguments to `f' that depend on a template
25876 parameter, so a declaration of `f' must be available
25877 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but
25878 allowing the use of an undeclared name is deprecated)
25880 To make the code valid either use `this->f()', or `Base<T>::f()'.
25881 Using the `-fpermissive' flag will also let the compiler accept the
25882 code, by marking all function calls for which no declaration is visible
25883 at the time of definition of the template for later lookup at
25884 instantiation time, as if it were a dependent call. We do not
25885 recommend using `-fpermissive' to work around invalid code, and it will
25886 also only catch cases where functions in base classes are called, not
25887 where variables in base classes are used (as in the example above).
25889 Note that some compilers (including G++ versions prior to 3.4) get
25890 these examples wrong and accept above code without an error. Those
25891 compilers do not implement two-stage name lookup correctly.
25893 ---------- Footnotes ----------
25895 (1) The C++ standard just uses the term "dependent" for names that
25896 depend on the type or value of template parameters. This shorter term
25897 will also be used in the rest of this section.
25900 File: gcc.info, Node: Temporaries, Next: Copy Assignment, Prev: Name lookup, Up: C++ Misunderstandings
25902 10.8.3 Temporaries May Vanish Before You Expect
25903 -----------------------------------------------
25905 It is dangerous to use pointers or references to _portions_ of a
25906 temporary object. The compiler may very well delete the object before
25907 you expect it to, leaving a pointer to garbage. The most common place
25908 where this problem crops up is in classes like string classes,
25909 especially ones that define a conversion function to type `char *' or
25910 `const char *'--which is one reason why the standard `string' class
25911 requires you to call the `c_str' member function. However, any class
25912 that returns a pointer to some internal structure is potentially
25913 subject to this problem.
25915 For example, a program may use a function `strfunc' that returns
25916 `string' objects, and another function `charfunc' that operates on
25917 pointers to `char':
25920 void charfunc (const char *);
25925 const char *p = strfunc().c_str();
25932 In this situation, it may seem reasonable to save a pointer to the C
25933 string returned by the `c_str' member function and use that rather than
25934 call `c_str' repeatedly. However, the temporary string created by the
25935 call to `strfunc' is destroyed after `p' is initialized, at which point
25936 `p' is left pointing to freed memory.
25938 Code like this may run successfully under some other compilers,
25939 particularly obsolete cfront-based compilers that delete temporaries
25940 along with normal local variables. However, the GNU C++ behavior is
25941 standard-conforming, so if your program depends on late destruction of
25942 temporaries it is not portable.
25944 The safe way to write such code is to give the temporary a name, which
25945 forces it to remain until the end of the scope of the name. For
25948 const string& tmp = strfunc ();
25949 charfunc (tmp.c_str ());
25952 File: gcc.info, Node: Copy Assignment, Prev: Temporaries, Up: C++ Misunderstandings
25954 10.8.4 Implicit Copy-Assignment for Virtual Bases
25955 -------------------------------------------------
25957 When a base class is virtual, only one subobject of the base class
25958 belongs to each full object. Also, the constructors and destructors are
25959 invoked only once, and called from the most-derived class. However,
25960 such objects behave unspecified when being assigned. For example:
25964 Base(char *n) : name(strdup(n)){}
25965 Base& operator= (const Base& other){
25967 name = strdup (other.name);
25971 struct A:virtual Base{
25976 struct B:virtual Base{
25981 struct Derived:public A, public B{
25982 Derived():Base("Derived"){}
25985 void func(Derived &d1, Derived &d2)
25990 The C++ standard specifies that `Base::Base' is only called once when
25991 constructing or copy-constructing a Derived object. It is unspecified
25992 whether `Base::operator=' is called more than once when the implicit
25993 copy-assignment for Derived objects is invoked (as it is inside `func'
25996 G++ implements the "intuitive" algorithm for copy-assignment: assign
25997 all direct bases, then assign all members. In that algorithm, the
25998 virtual base subobject can be encountered more than once. In the
25999 example, copying proceeds in the following order: `val', `name' (via
26000 `strdup'), `bval', and `name' again.
26002 If application code relies on copy-assignment, a user-defined
26003 copy-assignment operator removes any uncertainties. With such an
26004 operator, the application can define whether and how the virtual base
26005 subobject is assigned.
26008 File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: C++ Misunderstandings, Up: Trouble
26010 10.9 Caveats of using `protoize'
26011 ================================
26013 The conversion programs `protoize' and `unprotoize' can sometimes
26014 change a source file in a way that won't work unless you rearrange it.
26016 * `protoize' can insert references to a type name or type tag before
26017 the definition, or in a file where they are not defined.
26019 If this happens, compiler error messages should show you where the
26020 new references are, so fixing the file by hand is straightforward.
26022 * There are some C constructs which `protoize' cannot figure out.
26023 For example, it can't determine argument types for declaring a
26024 pointer-to-function variable; this you must do by hand. `protoize'
26025 inserts a comment containing `???' each time it finds such a
26026 variable; so you can find all such variables by searching for this
26027 string. ISO C does not require declaring the argument types of
26028 pointer-to-function types.
26030 * Using `unprotoize' can easily introduce bugs. If the program
26031 relied on prototypes to bring about conversion of arguments, these
26032 conversions will not take place in the program without prototypes.
26033 One case in which you can be sure `unprotoize' is safe is when you
26034 are removing prototypes that were made with `protoize'; if the
26035 program worked before without any prototypes, it will work again
26038 You can find all the places where this problem might occur by
26039 compiling the program with the `-Wconversion' option. It prints a
26040 warning whenever an argument is converted.
26042 * Both conversion programs can be confused if there are macro calls
26043 in and around the text to be converted. In other words, the
26044 standard syntax for a declaration or definition must not result
26045 from expanding a macro. This problem is inherent in the design of
26046 C and cannot be fixed. If only a few functions have confusing
26047 macro calls, you can easily convert them manually.
26049 * `protoize' cannot get the argument types for a function whose
26050 definition was not actually compiled due to preprocessing
26051 conditionals. When this happens, `protoize' changes nothing in
26052 regard to such a function. `protoize' tries to detect such
26053 instances and warn about them.
26055 You can generally work around this problem by using `protoize' step
26056 by step, each time specifying a different set of `-D' options for
26057 compilation, until all of the functions have been converted.
26058 There is no automatic way to verify that you have got them all,
26061 * Confusion may result if there is an occasion to convert a function
26062 declaration or definition in a region of source code where there
26063 is more than one formal parameter list present. Thus, attempts to
26064 convert code containing multiple (conditionally compiled) versions
26065 of a single function header (in the same vicinity) may not produce
26066 the desired (or expected) results.
26068 If you plan on converting source files which contain such code, it
26069 is recommended that you first make sure that each conditionally
26070 compiled region of source code which contains an alternative
26071 function header also contains at least one additional follower
26072 token (past the final right parenthesis of the function header).
26073 This should circumvent the problem.
26075 * `unprotoize' can become confused when trying to convert a function
26076 definition or declaration which contains a declaration for a
26077 pointer-to-function formal argument which has the same name as the
26078 function being defined or declared. We recommend you avoid such
26079 choices of formal parameter names.
26081 * You might also want to correct some of the indentation by hand and
26082 break long lines. (The conversion programs don't write lines
26083 longer than eighty characters in any case.)
26086 File: gcc.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Protoize Caveats, Up: Trouble
26088 10.10 Certain Changes We Don't Want to Make
26089 ===========================================
26091 This section lists changes that people frequently request, but which we
26092 do not make because we think GCC is better without them.
26094 * Checking the number and type of arguments to a function which has
26095 an old-fashioned definition and no prototype.
26097 Such a feature would work only occasionally--only for calls that
26098 appear in the same file as the called function, following the
26099 definition. The only way to check all calls reliably is to add a
26100 prototype for the function. But adding a prototype eliminates the
26101 motivation for this feature. So the feature is not worthwhile.
26103 * Warning about using an expression whose type is signed as a shift
26106 Shift count operands are probably signed more often than unsigned.
26107 Warning about this would cause far more annoyance than good.
26109 * Warning about assigning a signed value to an unsigned variable.
26111 Such assignments must be very common; warning about them would
26112 cause more annoyance than good.
26114 * Warning when a non-void function value is ignored.
26116 C contains many standard functions that return a value that most
26117 programs choose to ignore. One obvious example is `printf'.
26118 Warning about this practice only leads the defensive programmer to
26119 clutter programs with dozens of casts to `void'. Such casts are
26120 required so frequently that they become visual noise. Writing
26121 those casts becomes so automatic that they no longer convey useful
26122 information about the intentions of the programmer. For functions
26123 where the return value should never be ignored, use the
26124 `warn_unused_result' function attribute (*note Function
26127 * Making `-fshort-enums' the default.
26129 This would cause storage layout to be incompatible with most other
26130 C compilers. And it doesn't seem very important, given that you
26131 can get the same result in other ways. The case where it matters
26132 most is when the enumeration-valued object is inside a structure,
26133 and in that case you can specify a field width explicitly.
26135 * Making bit-fields unsigned by default on particular machines where
26136 "the ABI standard" says to do so.
26138 The ISO C standard leaves it up to the implementation whether a
26139 bit-field declared plain `int' is signed or not. This in effect
26140 creates two alternative dialects of C.
26142 The GNU C compiler supports both dialects; you can specify the
26143 signed dialect with `-fsigned-bitfields' and the unsigned dialect
26144 with `-funsigned-bitfields'. However, this leaves open the
26145 question of which dialect to use by default.
26147 Currently, the preferred dialect makes plain bit-fields signed,
26148 because this is simplest. Since `int' is the same as `signed int'
26149 in every other context, it is cleanest for them to be the same in
26150 bit-fields as well.
26152 Some computer manufacturers have published Application Binary
26153 Interface standards which specify that plain bit-fields should be
26154 unsigned. It is a mistake, however, to say anything about this
26155 issue in an ABI. This is because the handling of plain bit-fields
26156 distinguishes two dialects of C. Both dialects are meaningful on
26157 every type of machine. Whether a particular object file was
26158 compiled using signed bit-fields or unsigned is of no concern to
26159 other object files, even if they access the same bit-fields in the
26160 same data structures.
26162 A given program is written in one or the other of these two
26163 dialects. The program stands a chance to work on most any machine
26164 if it is compiled with the proper dialect. It is unlikely to work
26165 at all if compiled with the wrong dialect.
26167 Many users appreciate the GNU C compiler because it provides an
26168 environment that is uniform across machines. These users would be
26169 inconvenienced if the compiler treated plain bit-fields
26170 differently on certain machines.
26172 Occasionally users write programs intended only for a particular
26173 machine type. On these occasions, the users would benefit if the
26174 GNU C compiler were to support by default the same dialect as the
26175 other compilers on that machine. But such applications are rare.
26176 And users writing a program to run on more than one type of
26177 machine cannot possibly benefit from this kind of compatibility.
26179 This is why GCC does and will treat plain bit-fields in the same
26180 fashion on all types of machines (by default).
26182 There are some arguments for making bit-fields unsigned by default
26183 on all machines. If, for example, this becomes a universal de
26184 facto standard, it would make sense for GCC to go along with it.
26185 This is something to be considered in the future.
26187 (Of course, users strongly concerned about portability should
26188 indicate explicitly in each bit-field whether it is signed or not.
26189 In this way, they write programs which have the same meaning in
26192 * Undefining `__STDC__' when `-ansi' is not used.
26194 Currently, GCC defines `__STDC__' unconditionally. This provides
26195 good results in practice.
26197 Programmers normally use conditionals on `__STDC__' to ask whether
26198 it is safe to use certain features of ISO C, such as function
26199 prototypes or ISO token concatenation. Since plain `gcc' supports
26200 all the features of ISO C, the correct answer to these questions is
26203 Some users try to use `__STDC__' to check for the availability of
26204 certain library facilities. This is actually incorrect usage in
26205 an ISO C program, because the ISO C standard says that a conforming
26206 freestanding implementation should define `__STDC__' even though it
26207 does not have the library facilities. `gcc -ansi -pedantic' is a
26208 conforming freestanding implementation, and it is therefore
26209 required to define `__STDC__', even though it does not come with
26212 Sometimes people say that defining `__STDC__' in a compiler that
26213 does not completely conform to the ISO C standard somehow violates
26214 the standard. This is illogical. The standard is a standard for
26215 compilers that claim to support ISO C, such as `gcc -ansi'--not
26216 for other compilers such as plain `gcc'. Whatever the ISO C
26217 standard says is relevant to the design of plain `gcc' without
26218 `-ansi' only for pragmatic reasons, not as a requirement.
26220 GCC normally defines `__STDC__' to be 1, and in addition defines
26221 `__STRICT_ANSI__' if you specify the `-ansi' option, or a `-std'
26222 option for strict conformance to some version of ISO C. On some
26223 hosts, system include files use a different convention, where
26224 `__STDC__' is normally 0, but is 1 if the user specifies strict
26225 conformance to the C Standard. GCC follows the host convention
26226 when processing system include files, but when processing user
26227 files it follows the usual GNU C convention.
26229 * Undefining `__STDC__' in C++.
26231 Programs written to compile with C++-to-C translators get the
26232 value of `__STDC__' that goes with the C compiler that is
26233 subsequently used. These programs must test `__STDC__' to
26234 determine what kind of C preprocessor that compiler uses: whether
26235 they should concatenate tokens in the ISO C fashion or in the
26236 traditional fashion.
26238 These programs work properly with GNU C++ if `__STDC__' is defined.
26239 They would not work otherwise.
26241 In addition, many header files are written to provide prototypes
26242 in ISO C but not in traditional C. Many of these header files can
26243 work without change in C++ provided `__STDC__' is defined. If
26244 `__STDC__' is not defined, they will all fail, and will all need
26245 to be changed to test explicitly for C++ as well.
26247 * Deleting "empty" loops.
26249 Historically, GCC has not deleted "empty" loops under the
26250 assumption that the most likely reason you would put one in a
26251 program is to have a delay, so deleting them will not make real
26252 programs run any faster.
26254 However, the rationale here is that optimization of a nonempty loop
26255 cannot produce an empty one. This held for carefully written C
26256 compiled with less powerful optimizers but is not always the case
26257 for carefully written C++ or with more powerful optimizers. Thus
26258 GCC will remove operations from loops whenever it can determine
26259 those operations are not externally visible (apart from the time
26260 taken to execute them, of course). In case the loop can be proved
26261 to be finite, GCC will also remove the loop itself.
26263 Be aware of this when performing timing tests, for instance the
26264 following loop can be completely removed, provided
26265 `some_expression' can provably not change any global state.
26271 for (ix = 0; ix != 10000; ix++)
26272 sum += some_expression;
26275 Even though `sum' is accumulated in the loop, no use is made of
26276 that summation, so the accumulation can be removed.
26278 * Making side effects happen in the same order as in some other
26281 It is never safe to depend on the order of evaluation of side
26282 effects. For example, a function call like this may very well
26283 behave differently from one compiler to another:
26285 void func (int, int);
26290 There is no guarantee (in either the C or the C++ standard language
26291 definitions) that the increments will be evaluated in any
26292 particular order. Either increment might happen first. `func'
26293 might get the arguments `2, 3', or it might get `3, 2', or even
26296 * Making certain warnings into errors by default.
26298 Some ISO C testsuites report failure when the compiler does not
26299 produce an error message for a certain program.
26301 ISO C requires a "diagnostic" message for certain kinds of invalid
26302 programs, but a warning is defined by GCC to count as a
26303 diagnostic. If GCC produces a warning but not an error, that is
26304 correct ISO C support. If testsuites call this "failure", they
26305 should be run with the GCC option `-pedantic-errors', which will
26306 turn these warnings into errors.
26310 File: gcc.info, Node: Warnings and Errors, Prev: Non-bugs, Up: Trouble
26312 10.11 Warning Messages and Error Messages
26313 =========================================
26315 The GNU compiler can produce two kinds of diagnostics: errors and
26316 warnings. Each kind has a different purpose:
26318 "Errors" report problems that make it impossible to compile your
26319 program. GCC reports errors with the source file name and line
26320 number where the problem is apparent.
26322 "Warnings" report other unusual conditions in your code that _may_
26323 indicate a problem, although compilation can (and does) proceed.
26324 Warning messages also report the source file name and line number,
26325 but include the text `warning:' to distinguish them from error
26328 Warnings may indicate danger points where you should check to make sure
26329 that your program really does what you intend; or the use of obsolete
26330 features; or the use of nonstandard features of GNU C or C++. Many
26331 warnings are issued only if you ask for them, with one of the `-W'
26332 options (for instance, `-Wall' requests a variety of useful warnings).
26334 GCC always tries to compile your program if possible; it never
26335 gratuitously rejects a program whose meaning is clear merely because
26336 (for instance) it fails to conform to a standard. In some cases,
26337 however, the C and C++ standards specify that certain extensions are
26338 forbidden, and a diagnostic _must_ be issued by a conforming compiler.
26339 The `-pedantic' option tells GCC to issue warnings in such cases;
26340 `-pedantic-errors' says to make them errors instead. This does not
26341 mean that _all_ non-ISO constructs get warnings or errors.
26343 *Note Options to Request or Suppress Warnings: Warning Options, for
26344 more detail on these and related command-line options.
26347 File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top
26352 Your bug reports play an essential role in making GCC reliable.
26354 When you encounter a problem, the first thing to do is to see if it is
26355 already known. *Note Trouble::. If it isn't known, then you should
26356 report the problem.
26360 * Criteria: Bug Criteria. Have you really found a bug?
26361 * Reporting: Bug Reporting. How to report a bug effectively.
26362 * Known: Trouble. Known problems.
26363 * Help: Service. Where to ask for help.
26366 File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Up: Bugs
26368 11.1 Have You Found a Bug?
26369 ==========================
26371 If you are not sure whether you have found a bug, here are some
26374 * If the compiler gets a fatal signal, for any input whatever, that
26375 is a compiler bug. Reliable compilers never crash.
26377 * If the compiler produces invalid assembly code, for any input
26378 whatever (except an `asm' statement), that is a compiler bug,
26379 unless the compiler reports errors (not just warnings) which would
26380 ordinarily prevent the assembler from being run.
26382 * If the compiler produces valid assembly code that does not
26383 correctly execute the input source code, that is a compiler bug.
26385 However, you must double-check to make sure, because you may have a
26386 program whose behavior is undefined, which happened by chance to
26387 give the desired results with another C or C++ compiler.
26389 For example, in many nonoptimizing compilers, you can write `x;'
26390 at the end of a function instead of `return x;', with the same
26391 results. But the value of the function is undefined if `return'
26392 is omitted; it is not a bug when GCC produces different results.
26394 Problems often result from expressions with two increment
26395 operators, as in `f (*p++, *p++)'. Your previous compiler might
26396 have interpreted that expression the way you intended; GCC might
26397 interpret it another way. Neither compiler is wrong. The bug is
26400 After you have localized the error to a single source line, it
26401 should be easy to check for these things. If your program is
26402 correct and well defined, you have found a compiler bug.
26404 * If the compiler produces an error message for valid input, that is
26407 * If the compiler does not produce an error message for invalid
26408 input, that is a compiler bug. However, you should note that your
26409 idea of "invalid input" might be someone else's idea of "an
26410 extension" or "support for traditional practice".
26412 * If you are an experienced user of one of the languages GCC
26413 supports, your suggestions for improvement of GCC are welcome in
26417 File: gcc.info, Node: Bug Reporting, Prev: Bug Criteria, Up: Bugs
26419 11.2 How and where to Report Bugs
26420 =================================
26422 Bugs should be reported to the GCC bug database. Please refer to
26423 `http://gcc.gnu.org/bugs.html' for up-to-date instructions how to
26424 submit bug reports. Copies of this file in HTML (`bugs.html') and
26425 plain text (`BUGS') are also part of GCC releases.
26428 File: gcc.info, Node: Service, Next: Contributing, Prev: Bugs, Up: Top
26430 12 How To Get Help with GCC
26431 ***************************
26433 If you need help installing, using or changing GCC, there are two ways
26436 * Send a message to a suitable network mailing list. First try
26437 <gcc-help@gcc.gnu.org> (for help installing or using GCC), and if
26438 that brings no response, try <gcc@gcc.gnu.org>. For help changing
26439 GCC, ask <gcc@gcc.gnu.org>. If you think you have found a bug in
26440 GCC, please report it following the instructions at *note Bug
26443 * Look in the service directory for someone who might help you for a
26444 fee. The service directory is found at
26445 `http://www.gnu.org/prep/service.html'.
26447 For further information, see `http://gcc.gnu.org/faq.html#support'.
26450 File: gcc.info, Node: Contributing, Next: Funding, Prev: Service, Up: Top
26452 13 Contributing to GCC Development
26453 **********************************
26455 If you would like to help pretest GCC releases to assure they work well,
26456 current development sources are available by CVS (see
26457 `http://gcc.gnu.org/cvs.html'). Source and binary snapshots are also
26458 available for FTP; see `http://gcc.gnu.org/snapshots.html'.
26460 If you would like to work on improvements to GCC, please read the
26461 advice at these URLs:
26463 `http://gcc.gnu.org/contribute.html'
26464 `http://gcc.gnu.org/contributewhy.html'
26466 for information on how to make useful contributions and avoid
26467 duplication of effort. Suggested projects are listed at
26468 `http://gcc.gnu.org/projects/'.
26471 File: gcc.info, Node: Funding, Next: GNU Project, Prev: Contributing, Up: Top
26473 Funding Free Software
26474 *********************
26476 If you want to have more free software a few years from now, it makes
26477 sense for you to help encourage people to contribute funds for its
26478 development. The most effective approach known is to encourage
26479 commercial redistributors to donate.
26481 Users of free software systems can boost the pace of development by
26482 encouraging for-a-fee distributors to donate part of their selling price
26483 to free software developers--the Free Software Foundation, and others.
26485 The way to convince distributors to do this is to demand it and expect
26486 it from them. So when you compare distributors, judge them partly by
26487 how much they give to free software development. Show distributors
26488 they must compete to be the one who gives the most.
26490 To make this approach work, you must insist on numbers that you can
26491 compare, such as, "We will donate ten dollars to the Frobnitz project
26492 for each disk sold." Don't be satisfied with a vague promise, such as
26493 "A portion of the profits are donated," since it doesn't give a basis
26496 Even a precise fraction "of the profits from this disk" is not very
26497 meaningful, since creative accounting and unrelated business decisions
26498 can greatly alter what fraction of the sales price counts as profit.
26499 If the price you pay is $50, ten percent of the profit is probably less
26500 than a dollar; it might be a few cents, or nothing at all.
26502 Some redistributors do development work themselves. This is useful
26503 too; but to keep everyone honest, you need to inquire how much they do,
26504 and what kind. Some kinds of development make much more long-term
26505 difference than others. For example, maintaining a separate version of
26506 a program contributes very little; maintaining the standard version of a
26507 program for the whole community contributes much. Easy new ports
26508 contribute little, since someone else would surely do them; difficult
26509 ports such as adding a new CPU to the GNU Compiler Collection
26510 contribute more; major new features or packages contribute the most.
26512 By establishing the idea that supporting further development is "the
26513 proper thing to do" when distributing free software for a fee, we can
26514 assure a steady flow of resources into making more free software.
26516 Copyright (C) 1994 Free Software Foundation, Inc.
26517 Verbatim copying and redistribution of this section is permitted
26518 without royalty; alteration is not permitted.
26521 File: gcc.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top
26523 The GNU Project and GNU/Linux
26524 *****************************
26526 The GNU Project was launched in 1984 to develop a complete Unix-like
26527 operating system which is free software: the GNU system. (GNU is a
26528 recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".)
26529 Variants of the GNU operating system, which use the kernel Linux, are
26530 now widely used; though these systems are often referred to as "Linux",
26531 they are more accurately called GNU/Linux systems.
26533 For more information, see:
26534 `http://www.gnu.org/'
26535 `http://www.gnu.org/gnu/linux-and-gnu.html'
26538 File: gcc.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top
26540 GNU GENERAL PUBLIC LICENSE
26541 **************************
26543 Version 2, June 1991
26545 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
26546 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26548 Everyone is permitted to copy and distribute verbatim copies
26549 of this license document, but changing it is not allowed.
26554 The licenses for most software are designed to take away your freedom
26555 to share and change it. By contrast, the GNU General Public License is
26556 intended to guarantee your freedom to share and change free
26557 software--to make sure the software is free for all its users. This
26558 General Public License applies to most of the Free Software
26559 Foundation's software and to any other program whose authors commit to
26560 using it. (Some other Free Software Foundation software is covered by
26561 the GNU Library General Public License instead.) You can apply it to
26562 your programs, too.
26564 When we speak of free software, we are referring to freedom, not
26565 price. Our General Public Licenses are designed to make sure that you
26566 have the freedom to distribute copies of free software (and charge for
26567 this service if you wish), that you receive source code or can get it
26568 if you want it, that you can change the software or use pieces of it in
26569 new free programs; and that you know you can do these things.
26571 To protect your rights, we need to make restrictions that forbid
26572 anyone to deny you these rights or to ask you to surrender the rights.
26573 These restrictions translate to certain responsibilities for you if you
26574 distribute copies of the software, or if you modify it.
26576 For example, if you distribute copies of such a program, whether
26577 gratis or for a fee, you must give the recipients all the rights that
26578 you have. You must make sure that they, too, receive or can get the
26579 source code. And you must show them these terms so they know their
26582 We protect your rights with two steps: (1) copyright the software, and
26583 (2) offer you this license which gives you legal permission to copy,
26584 distribute and/or modify the software.
26586 Also, for each author's protection and ours, we want to make certain
26587 that everyone understands that there is no warranty for this free
26588 software. If the software is modified by someone else and passed on, we
26589 want its recipients to know that what they have is not the original, so
26590 that any problems introduced by others will not reflect on the original
26591 authors' reputations.
26593 Finally, any free program is threatened constantly by software
26594 patents. We wish to avoid the danger that redistributors of a free
26595 program will individually obtain patent licenses, in effect making the
26596 program proprietary. To prevent this, we have made it clear that any
26597 patent must be licensed for everyone's free use or not licensed at all.
26599 The precise terms and conditions for copying, distribution and
26600 modification follow.
26602 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
26603 0. This License applies to any program or other work which contains a
26604 notice placed by the copyright holder saying it may be distributed
26605 under the terms of this General Public License. The "Program",
26606 below, refers to any such program or work, and a "work based on
26607 the Program" means either the Program or any derivative work under
26608 copyright law: that is to say, a work containing the Program or a
26609 portion of it, either verbatim or with modifications and/or
26610 translated into another language. (Hereinafter, translation is
26611 included without limitation in the term "modification".) Each
26612 licensee is addressed as "you".
26614 Activities other than copying, distribution and modification are
26615 not covered by this License; they are outside its scope. The act
26616 of running the Program is not restricted, and the output from the
26617 Program is covered only if its contents constitute a work based on
26618 the Program (independent of having been made by running the
26619 Program). Whether that is true depends on what the Program does.
26621 1. You may copy and distribute verbatim copies of the Program's
26622 source code as you receive it, in any medium, provided that you
26623 conspicuously and appropriately publish on each copy an appropriate
26624 copyright notice and disclaimer of warranty; keep intact all the
26625 notices that refer to this License and to the absence of any
26626 warranty; and give any other recipients of the Program a copy of
26627 this License along with the Program.
26629 You may charge a fee for the physical act of transferring a copy,
26630 and you may at your option offer warranty protection in exchange
26633 2. You may modify your copy or copies of the Program or any portion
26634 of it, thus forming a work based on the Program, and copy and
26635 distribute such modifications or work under the terms of Section 1
26636 above, provided that you also meet all of these conditions:
26638 a. You must cause the modified files to carry prominent notices
26639 stating that you changed the files and the date of any change.
26641 b. You must cause any work that you distribute or publish, that
26642 in whole or in part contains or is derived from the Program
26643 or any part thereof, to be licensed as a whole at no charge
26644 to all third parties under the terms of this License.
26646 c. If the modified program normally reads commands interactively
26647 when run, you must cause it, when started running for such
26648 interactive use in the most ordinary way, to print or display
26649 an announcement including an appropriate copyright notice and
26650 a notice that there is no warranty (or else, saying that you
26651 provide a warranty) and that users may redistribute the
26652 program under these conditions, and telling the user how to
26653 view a copy of this License. (Exception: if the Program
26654 itself is interactive but does not normally print such an
26655 announcement, your work based on the Program is not required
26656 to print an announcement.)
26658 These requirements apply to the modified work as a whole. If
26659 identifiable sections of that work are not derived from the
26660 Program, and can be reasonably considered independent and separate
26661 works in themselves, then this License, and its terms, do not
26662 apply to those sections when you distribute them as separate
26663 works. But when you distribute the same sections as part of a
26664 whole which is a work based on the Program, the distribution of
26665 the whole must be on the terms of this License, whose permissions
26666 for other licensees extend to the entire whole, and thus to each
26667 and every part regardless of who wrote it.
26669 Thus, it is not the intent of this section to claim rights or
26670 contest your rights to work written entirely by you; rather, the
26671 intent is to exercise the right to control the distribution of
26672 derivative or collective works based on the Program.
26674 In addition, mere aggregation of another work not based on the
26675 Program with the Program (or with a work based on the Program) on
26676 a volume of a storage or distribution medium does not bring the
26677 other work under the scope of this License.
26679 3. You may copy and distribute the Program (or a work based on it,
26680 under Section 2) in object code or executable form under the terms
26681 of Sections 1 and 2 above provided that you also do one of the
26684 a. Accompany it with the complete corresponding machine-readable
26685 source code, which must be distributed under the terms of
26686 Sections 1 and 2 above on a medium customarily used for
26687 software interchange; or,
26689 b. Accompany it with a written offer, valid for at least three
26690 years, to give any third party, for a charge no more than your
26691 cost of physically performing source distribution, a complete
26692 machine-readable copy of the corresponding source code, to be
26693 distributed under the terms of Sections 1 and 2 above on a
26694 medium customarily used for software interchange; or,
26696 c. Accompany it with the information you received as to the offer
26697 to distribute corresponding source code. (This alternative is
26698 allowed only for noncommercial distribution and only if you
26699 received the program in object code or executable form with
26700 such an offer, in accord with Subsection b above.)
26702 The source code for a work means the preferred form of the work for
26703 making modifications to it. For an executable work, complete
26704 source code means all the source code for all modules it contains,
26705 plus any associated interface definition files, plus the scripts
26706 used to control compilation and installation of the executable.
26707 However, as a special exception, the source code distributed need
26708 not include anything that is normally distributed (in either
26709 source or binary form) with the major components (compiler,
26710 kernel, and so on) of the operating system on which the executable
26711 runs, unless that component itself accompanies the executable.
26713 If distribution of executable or object code is made by offering
26714 access to copy from a designated place, then offering equivalent
26715 access to copy the source code from the same place counts as
26716 distribution of the source code, even though third parties are not
26717 compelled to copy the source along with the object code.
26719 4. You may not copy, modify, sublicense, or distribute the Program
26720 except as expressly provided under this License. Any attempt
26721 otherwise to copy, modify, sublicense or distribute the Program is
26722 void, and will automatically terminate your rights under this
26723 License. However, parties who have received copies, or rights,
26724 from you under this License will not have their licenses
26725 terminated so long as such parties remain in full compliance.
26727 5. You are not required to accept this License, since you have not
26728 signed it. However, nothing else grants you permission to modify
26729 or distribute the Program or its derivative works. These actions
26730 are prohibited by law if you do not accept this License.
26731 Therefore, by modifying or distributing the Program (or any work
26732 based on the Program), you indicate your acceptance of this
26733 License to do so, and all its terms and conditions for copying,
26734 distributing or modifying the Program or works based on it.
26736 6. Each time you redistribute the Program (or any work based on the
26737 Program), the recipient automatically receives a license from the
26738 original licensor to copy, distribute or modify the Program
26739 subject to these terms and conditions. You may not impose any
26740 further restrictions on the recipients' exercise of the rights
26741 granted herein. You are not responsible for enforcing compliance
26742 by third parties to this License.
26744 7. If, as a consequence of a court judgment or allegation of patent
26745 infringement or for any other reason (not limited to patent
26746 issues), conditions are imposed on you (whether by court order,
26747 agreement or otherwise) that contradict the conditions of this
26748 License, they do not excuse you from the conditions of this
26749 License. If you cannot distribute so as to satisfy simultaneously
26750 your obligations under this License and any other pertinent
26751 obligations, then as a consequence you may not distribute the
26752 Program at all. For example, if a patent license would not permit
26753 royalty-free redistribution of the Program by all those who
26754 receive copies directly or indirectly through you, then the only
26755 way you could satisfy both it and this License would be to refrain
26756 entirely from distribution of the Program.
26758 If any portion of this section is held invalid or unenforceable
26759 under any particular circumstance, the balance of the section is
26760 intended to apply and the section as a whole is intended to apply
26761 in other circumstances.
26763 It is not the purpose of this section to induce you to infringe any
26764 patents or other property right claims or to contest validity of
26765 any such claims; this section has the sole purpose of protecting
26766 the integrity of the free software distribution system, which is
26767 implemented by public license practices. Many people have made
26768 generous contributions to the wide range of software distributed
26769 through that system in reliance on consistent application of that
26770 system; it is up to the author/donor to decide if he or she is
26771 willing to distribute software through any other system and a
26772 licensee cannot impose that choice.
26774 This section is intended to make thoroughly clear what is believed
26775 to be a consequence of the rest of this License.
26777 8. If the distribution and/or use of the Program is restricted in
26778 certain countries either by patents or by copyrighted interfaces,
26779 the original copyright holder who places the Program under this
26780 License may add an explicit geographical distribution limitation
26781 excluding those countries, so that distribution is permitted only
26782 in or among countries not thus excluded. In such case, this
26783 License incorporates the limitation as if written in the body of
26786 9. The Free Software Foundation may publish revised and/or new
26787 versions of the General Public License from time to time. Such
26788 new versions will be similar in spirit to the present version, but
26789 may differ in detail to address new problems or concerns.
26791 Each version is given a distinguishing version number. If the
26792 Program specifies a version number of this License which applies
26793 to it and "any later version", you have the option of following
26794 the terms and conditions either of that version or of any later
26795 version published by the Free Software Foundation. If the Program
26796 does not specify a version number of this License, you may choose
26797 any version ever published by the Free Software Foundation.
26799 10. If you wish to incorporate parts of the Program into other free
26800 programs whose distribution conditions are different, write to the
26801 author to ask for permission. For software which is copyrighted
26802 by the Free Software Foundation, write to the Free Software
26803 Foundation; we sometimes make exceptions for this. Our decision
26804 will be guided by the two goals of preserving the free status of
26805 all derivatives of our free software and of promoting the sharing
26806 and reuse of software generally.
26809 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
26810 WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
26811 LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
26812 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
26813 WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
26814 NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
26815 FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
26816 QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
26817 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
26818 SERVICING, REPAIR OR CORRECTION.
26820 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
26821 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
26822 MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
26823 LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
26824 INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
26825 INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
26826 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
26827 OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
26828 OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
26829 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
26831 END OF TERMS AND CONDITIONS
26832 Appendix: How to Apply These Terms to Your New Programs
26833 =======================================================
26835 If you develop a new program, and you want it to be of the greatest
26836 possible use to the public, the best way to achieve this is to make it
26837 free software which everyone can redistribute and change under these
26840 To do so, attach the following notices to the program. It is safest
26841 to attach them to the start of each source file to most effectively
26842 convey the exclusion of warranty; and each file should have at least
26843 the "copyright" line and a pointer to where the full notice is found.
26845 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
26846 Copyright (C) YEAR NAME OF AUTHOR
26848 This program is free software; you can redistribute it and/or modify
26849 it under the terms of the GNU General Public License as published by
26850 the Free Software Foundation; either version 2 of the License, or
26851 (at your option) any later version.
26853 This program is distributed in the hope that it will be useful,
26854 but WITHOUT ANY WARRANTY; without even the implied warranty of
26855 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26856 GNU General Public License for more details.
26858 You should have received a copy of the GNU General Public License
26859 along with this program; if not, write to the Free Software
26860 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26862 Also add information on how to contact you by electronic and paper
26865 If the program is interactive, make it output a short notice like this
26866 when it starts in an interactive mode:
26868 Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
26869 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
26871 This is free software, and you are welcome to redistribute it
26872 under certain conditions; type `show c' for details.
26874 The hypothetical commands `show w' and `show c' should show the
26875 appropriate parts of the General Public License. Of course, the
26876 commands you use may be called something other than `show w' and `show
26877 c'; they could even be mouse-clicks or menu items--whatever suits your
26880 You should also get your employer (if you work as a programmer) or your
26881 school, if any, to sign a "copyright disclaimer" for the program, if
26882 necessary. Here is a sample; alter the names:
26884 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
26885 `Gnomovision' (which makes passes at compilers) written by James Hacker.
26887 SIGNATURE OF TY COON, 1 April 1989
26888 Ty Coon, President of Vice
26890 This General Public License does not permit incorporating your program
26891 into proprietary programs. If your program is a subroutine library,
26892 you may consider it more useful to permit linking proprietary
26893 applications with the library. If this is what you want to do, use the
26894 GNU Library General Public License instead of this License.
26897 File: gcc.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top
26899 GNU Free Documentation License
26900 ******************************
26902 Version 1.2, November 2002
26904 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
26905 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26907 Everyone is permitted to copy and distribute verbatim copies
26908 of this license document, but changing it is not allowed.
26912 The purpose of this License is to make a manual, textbook, or other
26913 functional and useful document "free" in the sense of freedom: to
26914 assure everyone the effective freedom to copy and redistribute it,
26915 with or without modifying it, either commercially or
26916 noncommercially. Secondarily, this License preserves for the
26917 author and publisher a way to get credit for their work, while not
26918 being considered responsible for modifications made by others.
26920 This License is a kind of "copyleft", which means that derivative
26921 works of the document must themselves be free in the same sense.
26922 It complements the GNU General Public License, which is a copyleft
26923 license designed for free software.
26925 We have designed this License in order to use it for manuals for
26926 free software, because free software needs free documentation: a
26927 free program should come with manuals providing the same freedoms
26928 that the software does. But this License is not limited to
26929 software manuals; it can be used for any textual work, regardless
26930 of subject matter or whether it is published as a printed book.
26931 We recommend this License principally for works whose purpose is
26932 instruction or reference.
26934 1. APPLICABILITY AND DEFINITIONS
26936 This License applies to any manual or other work, in any medium,
26937 that contains a notice placed by the copyright holder saying it
26938 can be distributed under the terms of this License. Such a notice
26939 grants a world-wide, royalty-free license, unlimited in duration,
26940 to use that work under the conditions stated herein. The
26941 "Document", below, refers to any such manual or work. Any member
26942 of the public is a licensee, and is addressed as "you". You
26943 accept the license if you copy, modify or distribute the work in a
26944 way requiring permission under copyright law.
26946 A "Modified Version" of the Document means any work containing the
26947 Document or a portion of it, either copied verbatim, or with
26948 modifications and/or translated into another language.
26950 A "Secondary Section" is a named appendix or a front-matter section
26951 of the Document that deals exclusively with the relationship of the
26952 publishers or authors of the Document to the Document's overall
26953 subject (or to related matters) and contains nothing that could
26954 fall directly within that overall subject. (Thus, if the Document
26955 is in part a textbook of mathematics, a Secondary Section may not
26956 explain any mathematics.) The relationship could be a matter of
26957 historical connection with the subject or with related matters, or
26958 of legal, commercial, philosophical, ethical or political position
26961 The "Invariant Sections" are certain Secondary Sections whose
26962 titles are designated, as being those of Invariant Sections, in
26963 the notice that says that the Document is released under this
26964 License. If a section does not fit the above definition of
26965 Secondary then it is not allowed to be designated as Invariant.
26966 The Document may contain zero Invariant Sections. If the Document
26967 does not identify any Invariant Sections then there are none.
26969 The "Cover Texts" are certain short passages of text that are
26970 listed, as Front-Cover Texts or Back-Cover Texts, in the notice
26971 that says that the Document is released under this License. A
26972 Front-Cover Text may be at most 5 words, and a Back-Cover Text may
26973 be at most 25 words.
26975 A "Transparent" copy of the Document means a machine-readable copy,
26976 represented in a format whose specification is available to the
26977 general public, that is suitable for revising the document
26978 straightforwardly with generic text editors or (for images
26979 composed of pixels) generic paint programs or (for drawings) some
26980 widely available drawing editor, and that is suitable for input to
26981 text formatters or for automatic translation to a variety of
26982 formats suitable for input to text formatters. A copy made in an
26983 otherwise Transparent file format whose markup, or absence of
26984 markup, has been arranged to thwart or discourage subsequent
26985 modification by readers is not Transparent. An image format is
26986 not Transparent if used for any substantial amount of text. A
26987 copy that is not "Transparent" is called "Opaque".
26989 Examples of suitable formats for Transparent copies include plain
26990 ASCII without markup, Texinfo input format, LaTeX input format,
26991 SGML or XML using a publicly available DTD, and
26992 standard-conforming simple HTML, PostScript or PDF designed for
26993 human modification. Examples of transparent image formats include
26994 PNG, XCF and JPG. Opaque formats include proprietary formats that
26995 can be read and edited only by proprietary word processors, SGML or
26996 XML for which the DTD and/or processing tools are not generally
26997 available, and the machine-generated HTML, PostScript or PDF
26998 produced by some word processors for output purposes only.
27000 The "Title Page" means, for a printed book, the title page itself,
27001 plus such following pages as are needed to hold, legibly, the
27002 material this License requires to appear in the title page. For
27003 works in formats which do not have any title page as such, "Title
27004 Page" means the text near the most prominent appearance of the
27005 work's title, preceding the beginning of the body of the text.
27007 A section "Entitled XYZ" means a named subunit of the Document
27008 whose title either is precisely XYZ or contains XYZ in parentheses
27009 following text that translates XYZ in another language. (Here XYZ
27010 stands for a specific section name mentioned below, such as
27011 "Acknowledgements", "Dedications", "Endorsements", or "History".)
27012 To "Preserve the Title" of such a section when you modify the
27013 Document means that it remains a section "Entitled XYZ" according
27014 to this definition.
27016 The Document may include Warranty Disclaimers next to the notice
27017 which states that this License applies to the Document. These
27018 Warranty Disclaimers are considered to be included by reference in
27019 this License, but only as regards disclaiming warranties: any other
27020 implication that these Warranty Disclaimers may have is void and
27021 has no effect on the meaning of this License.
27023 2. VERBATIM COPYING
27025 You may copy and distribute the Document in any medium, either
27026 commercially or noncommercially, provided that this License, the
27027 copyright notices, and the license notice saying this License
27028 applies to the Document are reproduced in all copies, and that you
27029 add no other conditions whatsoever to those of this License. You
27030 may not use technical measures to obstruct or control the reading
27031 or further copying of the copies you make or distribute. However,
27032 you may accept compensation in exchange for copies. If you
27033 distribute a large enough number of copies you must also follow
27034 the conditions in section 3.
27036 You may also lend copies, under the same conditions stated above,
27037 and you may publicly display copies.
27039 3. COPYING IN QUANTITY
27041 If you publish printed copies (or copies in media that commonly
27042 have printed covers) of the Document, numbering more than 100, and
27043 the Document's license notice requires Cover Texts, you must
27044 enclose the copies in covers that carry, clearly and legibly, all
27045 these Cover Texts: Front-Cover Texts on the front cover, and
27046 Back-Cover Texts on the back cover. Both covers must also clearly
27047 and legibly identify you as the publisher of these copies. The
27048 front cover must present the full title with all words of the
27049 title equally prominent and visible. You may add other material
27050 on the covers in addition. Copying with changes limited to the
27051 covers, as long as they preserve the title of the Document and
27052 satisfy these conditions, can be treated as verbatim copying in
27055 If the required texts for either cover are too voluminous to fit
27056 legibly, you should put the first ones listed (as many as fit
27057 reasonably) on the actual cover, and continue the rest onto
27060 If you publish or distribute Opaque copies of the Document
27061 numbering more than 100, you must either include a
27062 machine-readable Transparent copy along with each Opaque copy, or
27063 state in or with each Opaque copy a computer-network location from
27064 which the general network-using public has access to download
27065 using public-standard network protocols a complete Transparent
27066 copy of the Document, free of added material. If you use the
27067 latter option, you must take reasonably prudent steps, when you
27068 begin distribution of Opaque copies in quantity, to ensure that
27069 this Transparent copy will remain thus accessible at the stated
27070 location until at least one year after the last time you
27071 distribute an Opaque copy (directly or through your agents or
27072 retailers) of that edition to the public.
27074 It is requested, but not required, that you contact the authors of
27075 the Document well before redistributing any large number of
27076 copies, to give them a chance to provide you with an updated
27077 version of the Document.
27081 You may copy and distribute a Modified Version of the Document
27082 under the conditions of sections 2 and 3 above, provided that you
27083 release the Modified Version under precisely this License, with
27084 the Modified Version filling the role of the Document, thus
27085 licensing distribution and modification of the Modified Version to
27086 whoever possesses a copy of it. In addition, you must do these
27087 things in the Modified Version:
27089 A. Use in the Title Page (and on the covers, if any) a title
27090 distinct from that of the Document, and from those of
27091 previous versions (which should, if there were any, be listed
27092 in the History section of the Document). You may use the
27093 same title as a previous version if the original publisher of
27094 that version gives permission.
27096 B. List on the Title Page, as authors, one or more persons or
27097 entities responsible for authorship of the modifications in
27098 the Modified Version, together with at least five of the
27099 principal authors of the Document (all of its principal
27100 authors, if it has fewer than five), unless they release you
27101 from this requirement.
27103 C. State on the Title page the name of the publisher of the
27104 Modified Version, as the publisher.
27106 D. Preserve all the copyright notices of the Document.
27108 E. Add an appropriate copyright notice for your modifications
27109 adjacent to the other copyright notices.
27111 F. Include, immediately after the copyright notices, a license
27112 notice giving the public permission to use the Modified
27113 Version under the terms of this License, in the form shown in
27114 the Addendum below.
27116 G. Preserve in that license notice the full lists of Invariant
27117 Sections and required Cover Texts given in the Document's
27120 H. Include an unaltered copy of this License.
27122 I. Preserve the section Entitled "History", Preserve its Title,
27123 and add to it an item stating at least the title, year, new
27124 authors, and publisher of the Modified Version as given on
27125 the Title Page. If there is no section Entitled "History" in
27126 the Document, create one stating the title, year, authors,
27127 and publisher of the Document as given on its Title Page,
27128 then add an item describing the Modified Version as stated in
27129 the previous sentence.
27131 J. Preserve the network location, if any, given in the Document
27132 for public access to a Transparent copy of the Document, and
27133 likewise the network locations given in the Document for
27134 previous versions it was based on. These may be placed in
27135 the "History" section. You may omit a network location for a
27136 work that was published at least four years before the
27137 Document itself, or if the original publisher of the version
27138 it refers to gives permission.
27140 K. For any section Entitled "Acknowledgements" or "Dedications",
27141 Preserve the Title of the section, and preserve in the
27142 section all the substance and tone of each of the contributor
27143 acknowledgements and/or dedications given therein.
27145 L. Preserve all the Invariant Sections of the Document,
27146 unaltered in their text and in their titles. Section numbers
27147 or the equivalent are not considered part of the section
27150 M. Delete any section Entitled "Endorsements". Such a section
27151 may not be included in the Modified Version.
27153 N. Do not retitle any existing section to be Entitled
27154 "Endorsements" or to conflict in title with any Invariant
27157 O. Preserve any Warranty Disclaimers.
27159 If the Modified Version includes new front-matter sections or
27160 appendices that qualify as Secondary Sections and contain no
27161 material copied from the Document, you may at your option
27162 designate some or all of these sections as invariant. To do this,
27163 add their titles to the list of Invariant Sections in the Modified
27164 Version's license notice. These titles must be distinct from any
27165 other section titles.
27167 You may add a section Entitled "Endorsements", provided it contains
27168 nothing but endorsements of your Modified Version by various
27169 parties--for example, statements of peer review or that the text
27170 has been approved by an organization as the authoritative
27171 definition of a standard.
27173 You may add a passage of up to five words as a Front-Cover Text,
27174 and a passage of up to 25 words as a Back-Cover Text, to the end
27175 of the list of Cover Texts in the Modified Version. Only one
27176 passage of Front-Cover Text and one of Back-Cover Text may be
27177 added by (or through arrangements made by) any one entity. If the
27178 Document already includes a cover text for the same cover,
27179 previously added by you or by arrangement made by the same entity
27180 you are acting on behalf of, you may not add another; but you may
27181 replace the old one, on explicit permission from the previous
27182 publisher that added the old one.
27184 The author(s) and publisher(s) of the Document do not by this
27185 License give permission to use their names for publicity for or to
27186 assert or imply endorsement of any Modified Version.
27188 5. COMBINING DOCUMENTS
27190 You may combine the Document with other documents released under
27191 this License, under the terms defined in section 4 above for
27192 modified versions, provided that you include in the combination
27193 all of the Invariant Sections of all of the original documents,
27194 unmodified, and list them all as Invariant Sections of your
27195 combined work in its license notice, and that you preserve all
27196 their Warranty Disclaimers.
27198 The combined work need only contain one copy of this License, and
27199 multiple identical Invariant Sections may be replaced with a single
27200 copy. If there are multiple Invariant Sections with the same name
27201 but different contents, make the title of each such section unique
27202 by adding at the end of it, in parentheses, the name of the
27203 original author or publisher of that section if known, or else a
27204 unique number. Make the same adjustment to the section titles in
27205 the list of Invariant Sections in the license notice of the
27208 In the combination, you must combine any sections Entitled
27209 "History" in the various original documents, forming one section
27210 Entitled "History"; likewise combine any sections Entitled
27211 "Acknowledgements", and any sections Entitled "Dedications". You
27212 must delete all sections Entitled "Endorsements."
27214 6. COLLECTIONS OF DOCUMENTS
27216 You may make a collection consisting of the Document and other
27217 documents released under this License, and replace the individual
27218 copies of this License in the various documents with a single copy
27219 that is included in the collection, provided that you follow the
27220 rules of this License for verbatim copying of each of the
27221 documents in all other respects.
27223 You may extract a single document from such a collection, and
27224 distribute it individually under this License, provided you insert
27225 a copy of this License into the extracted document, and follow
27226 this License in all other respects regarding verbatim copying of
27229 7. AGGREGATION WITH INDEPENDENT WORKS
27231 A compilation of the Document or its derivatives with other
27232 separate and independent documents or works, in or on a volume of
27233 a storage or distribution medium, is called an "aggregate" if the
27234 copyright resulting from the compilation is not used to limit the
27235 legal rights of the compilation's users beyond what the individual
27236 works permit. When the Document is included in an aggregate, this
27237 License does not apply to the other works in the aggregate which
27238 are not themselves derivative works of the Document.
27240 If the Cover Text requirement of section 3 is applicable to these
27241 copies of the Document, then if the Document is less than one half
27242 of the entire aggregate, the Document's Cover Texts may be placed
27243 on covers that bracket the Document within the aggregate, or the
27244 electronic equivalent of covers if the Document is in electronic
27245 form. Otherwise they must appear on printed covers that bracket
27246 the whole aggregate.
27250 Translation is considered a kind of modification, so you may
27251 distribute translations of the Document under the terms of section
27252 4. Replacing Invariant Sections with translations requires special
27253 permission from their copyright holders, but you may include
27254 translations of some or all Invariant Sections in addition to the
27255 original versions of these Invariant Sections. You may include a
27256 translation of this License, and all the license notices in the
27257 Document, and any Warranty Disclaimers, provided that you also
27258 include the original English version of this License and the
27259 original versions of those notices and disclaimers. In case of a
27260 disagreement between the translation and the original version of
27261 this License or a notice or disclaimer, the original version will
27264 If a section in the Document is Entitled "Acknowledgements",
27265 "Dedications", or "History", the requirement (section 4) to
27266 Preserve its Title (section 1) will typically require changing the
27271 You may not copy, modify, sublicense, or distribute the Document
27272 except as expressly provided for under this License. Any other
27273 attempt to copy, modify, sublicense or distribute the Document is
27274 void, and will automatically terminate your rights under this
27275 License. However, parties who have received copies, or rights,
27276 from you under this License will not have their licenses
27277 terminated so long as such parties remain in full compliance.
27279 10. FUTURE REVISIONS OF THIS LICENSE
27281 The Free Software Foundation may publish new, revised versions of
27282 the GNU Free Documentation License from time to time. Such new
27283 versions will be similar in spirit to the present version, but may
27284 differ in detail to address new problems or concerns. See
27285 `http://www.gnu.org/copyleft/'.
27287 Each version of the License is given a distinguishing version
27288 number. If the Document specifies that a particular numbered
27289 version of this License "or any later version" applies to it, you
27290 have the option of following the terms and conditions either of
27291 that specified version or of any later version that has been
27292 published (not as a draft) by the Free Software Foundation. If
27293 the Document does not specify a version number of this License,
27294 you may choose any version ever published (not as a draft) by the
27295 Free Software Foundation.
27297 ADDENDUM: How to use this License for your documents
27298 ====================================================
27300 To use this License in a document you have written, include a copy of
27301 the License in the document and put the following copyright and license
27302 notices just after the title page:
27304 Copyright (C) YEAR YOUR NAME.
27305 Permission is granted to copy, distribute and/or modify this document
27306 under the terms of the GNU Free Documentation License, Version 1.2
27307 or any later version published by the Free Software Foundation;
27308 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
27309 Texts. A copy of the license is included in the section entitled ``GNU
27310 Free Documentation License''.
27312 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
27313 replace the "with...Texts." line with this:
27315 with the Invariant Sections being LIST THEIR TITLES, with
27316 the Front-Cover Texts being LIST, and with the Back-Cover Texts
27319 If you have Invariant Sections without Cover Texts, or some other
27320 combination of the three, merge those two alternatives to suit the
27323 If your document contains nontrivial examples of program code, we
27324 recommend releasing these examples in parallel under your choice of
27325 free software license, such as the GNU General Public License, to
27326 permit their use in free software.
27329 File: gcc.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top
27331 Contributors to GCC
27332 *******************
27334 The GCC project would like to thank its many contributors. Without
27335 them the project would not have been nearly as successful as it has
27336 been. Any omissions in this list are accidental. Feel free to contact
27337 <law@redhat.com> or <gerald@pfeifer.com> if you have been left out or
27338 some of your contributions are not listed. Please keep this list in
27339 alphabetical order.
27341 * Analog Devices helped implement the support for complex data types
27344 * John David Anglin for threading-related fixes and improvements to
27345 libstdc++-v3, and the HP-UX port.
27347 * James van Artsdalen wrote the code that makes efficient use of the
27348 Intel 80387 register stack.
27350 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta
27353 * Alasdair Baird for various bug fixes.
27355 * Giovanni Bajo for analyzing lots of complicated C++ problem
27358 * Peter Barada for his work to improve code generation for new
27361 * Gerald Baumgartner added the signature extension to the C++ front
27364 * Godmar Back for his Java improvements and encouragement.
27366 * Scott Bambrough for help porting the Java compiler.
27368 * Wolfgang Bangerth for processing tons of bug reports.
27370 * Jon Beniston for his Microsoft Windows port of Java.
27372 * Daniel Berlin for better DWARF2 support, faster/better
27373 optimizations, improved alias analysis, plus migrating GCC to
27376 * Geoff Berry for his Java object serialization work and various
27379 * Eric Blake for helping to make GCJ and libgcj conform to the
27382 * Janne Blomqvist for contributions to gfortran.
27384 * Segher Boessenkool for various fixes.
27386 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and
27389 * Neil Booth for work on cpplib, lang hooks, debug hooks and other
27390 miscellaneous clean-ups.
27392 * Steven Bosscher for integrating the gfortran front end into GCC
27393 and for contributing to the tree-ssa branch.
27395 * Eric Botcazou for fixing middle- and backend bugs left and right.
27397 * Per Bothner for his direction via the steering committee and
27398 various improvements to the infrastructure for supporting new
27399 languages. Chill front end implementation. Initial
27400 implementations of cpplib, fix-header, config.guess, libio, and
27401 past C++ library (libg++) maintainer. Dreaming up, designing and
27402 implementing much of GCJ.
27404 * Devon Bowen helped port GCC to the Tahoe.
27406 * Don Bowman for mips-vxworks contributions.
27408 * Dave Brolley for work on cpplib and Chill.
27410 * Paul Brook for work on the ARM architecture and maintaining
27413 * Robert Brown implemented the support for Encore 32000 systems.
27415 * Christian Bruel for improvements to local store elimination.
27417 * Herman A.J. ten Brugge for various fixes.
27419 * Joerg Brunsmann for Java compiler hacking and help with the GCJ
27422 * Joe Buck for his direction via the steering committee.
27424 * Craig Burley for leadership of the G77 Fortran effort.
27426 * Stephan Buys for contributing Doxygen notes for libstdc++.
27428 * Paolo Carlini for libstdc++ work: lots of efficiency improvements
27429 to the C++ strings, streambufs and formatted I/O, hard detective
27430 work on the frustrating localization issues, and keeping up with
27431 the problem reports.
27433 * John Carr for his alias work, SPARC hacking, infrastructure
27434 improvements, previous contributions to the steering committee,
27435 loop optimizations, etc.
27437 * Stephane Carrez for 68HC11 and 68HC12 ports.
27439 * Steve Chamberlain for support for the Renesas SH and H8 processors
27440 and the PicoJava processor, and for GCJ config fixes.
27442 * Glenn Chambers for help with the GCJ FAQ.
27444 * John-Marc Chandonia for various libgcj patches.
27446 * Scott Christley for his Objective-C contributions.
27448 * Eric Christopher for his Java porting help and clean-ups.
27450 * Branko Cibej for more warning contributions.
27452 * The GNU Classpath project for all of their merged runtime code.
27454 * Nick Clifton for arm, mcore, fr30, v850, m32r work, `--help', and
27455 other random hacking.
27457 * Michael Cook for libstdc++ cleanup patches to reduce warnings.
27459 * R. Kelley Cook for making GCC buildable from a read-only directory
27460 as well as other miscellaneous build process and documentation
27463 * Ralf Corsepius for SH testing and minor bugfixing.
27465 * Stan Cox for care and feeding of the x86 port and lots of behind
27466 the scenes hacking.
27468 * Alex Crain provided changes for the 3b1.
27470 * Ian Dall for major improvements to the NS32k port.
27472 * Paul Dale for his work to add uClinux platform support to the m68k
27475 * Dario Dariol contributed the four varieties of sample programs
27476 that print a copy of their source.
27478 * Russell Davidson for fstream and stringstream fixes in libstdc++.
27480 * Bud Davis for work on the G77 and gfortran compilers.
27482 * Mo DeJong for GCJ and libgcj bug fixes.
27484 * DJ Delorie for the DJGPP port, build and libiberty maintenance,
27485 various bug fixes, and the M32C port.
27487 * Arnaud Desitter for helping to debug gfortran.
27489 * Gabriel Dos Reis for contributions to G++, contributions and
27490 maintenance of GCC diagnostics infrastructure, libstdc++-v3,
27491 including `valarray<>', `complex<>', maintaining the numerics
27492 library (including that pesky `<limits>' :-) and keeping
27493 up-to-date anything to do with numbers.
27495 * Ulrich Drepper for his work on glibc, testing of GCC using glibc,
27496 ISO C99 support, CFG dumping support, etc., plus support of the
27497 C++ runtime libraries including for all kinds of C interface
27498 issues, contributing and maintaining `complex<>', sanity checking
27499 and disbursement, configuration architecture, libio maintenance,
27500 and early math work.
27502 * Zdenek Dvorak for a new loop unroller and various fixes.
27504 * Richard Earnshaw for his ongoing work with the ARM.
27506 * David Edelsohn for his direction via the steering committee,
27507 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa
27508 loop changes, doing the entire AIX port of libstdc++ with his bare
27509 hands, and for ensuring GCC properly keeps working on AIX.
27511 * Kevin Ediger for the floating point formatting of num_put::do_put
27514 * Phil Edwards for libstdc++ work including configuration hackery,
27515 documentation maintainer, chief breaker of the web pages, the
27516 occasional iostream bug fix, and work on shared library symbol
27519 * Paul Eggert for random hacking all over GCC.
27521 * Mark Elbrecht for various DJGPP improvements, and for libstdc++
27522 configuration support for locales and fstream-related fixes.
27524 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and
27527 * Christian Ehrhardt for dealing with bug reports.
27529 * Ben Elliston for his work to move the Objective-C runtime into its
27530 own subdirectory and for his work on autoconf.
27532 * Marc Espie for OpenBSD support.
27534 * Doug Evans for much of the global optimization framework, arc,
27535 m32r, and SPARC work.
27537 * Christopher Faylor for his work on the Cygwin port and for caring
27538 and feeding the gcc.gnu.org box and saving its users tons of spam.
27540 * Fred Fish for BeOS support and Ada fixes.
27542 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ.
27544 * Peter Gerwinski for various bug fixes and the Pascal front end.
27546 * Kaveh R. Ghazi for his direction via the steering committee,
27547 amazing work to make `-W -Wall -W* -Werror' useful, and
27548 continuously testing GCC on a plethora of platforms. Kaveh
27549 extends his gratitude to the CAIP Center at Rutgers University for
27550 providing him with computing resources to work on Free Software
27551 since the late 1980s.
27553 * John Gilmore for a donation to the FSF earmarked improving GNU
27556 * Judy Goldberg for c++ contributions.
27558 * Torbjorn Granlund for various fixes and the c-torture testsuite,
27559 multiply- and divide-by-constant optimization, improved long long
27560 support, improved leaf function register allocation, and his
27561 direction via the steering committee.
27563 * Anthony Green for his `-Os' contributions and Java front end work.
27565 * Stu Grossman for gdb hacking, allowing GCJ developers to debug
27568 * Michael K. Gschwind contributed the port to the PDP-11.
27570 * Ron Guilmette implemented the `protoize' and `unprotoize' tools,
27571 the support for Dwarf symbolic debugging information, and much of
27572 the support for System V Release 4. He has also worked heavily on
27573 the Intel 386 and 860 support.
27575 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload
27578 * Bruno Haible for improvements in the runtime overhead for EH, new
27579 warnings and assorted bug fixes.
27581 * Andrew Haley for his amazing Java compiler and library efforts.
27583 * Chris Hanson assisted in making GCC work on HP-UX for the 9000
27586 * Michael Hayes for various thankless work he's done trying to get
27587 the c30/c40 ports functional. Lots of loop and unroll
27588 improvements and fixes.
27590 * Dara Hazeghi for wading through myriads of target-specific bug
27593 * Kate Hedstrom for staking the G77 folks with an initial testsuite.
27595 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64
27596 work, loop opts, and generally fixing lots of old problems we've
27597 ignored for years, flow rewrite and lots of further stuff,
27598 including reviewing tons of patches.
27600 * Aldy Hernandez for working on the PowerPC port, SIMD support, and
27603 * Nobuyuki Hikichi of Software Research Associates, Tokyo,
27604 contributed the support for the Sony NEWS machine.
27606 * Kazu Hirata for caring and feeding the Renesas H8/300 port and
27609 * Katherine Holcomb for work on gfortran.
27611 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots
27612 of testing and bug fixing, particularly of GCC configury code.
27614 * Steve Holmgren for MachTen patches.
27616 * Jan Hubicka for his x86 port improvements.
27618 * Falk Hueffner for working on C and optimization bug reports.
27620 * Bernardo Innocenti for his m68k work, including merging of
27621 ColdFire improvements and uClinux support.
27623 * Christian Iseli for various bug fixes.
27625 * Kamil Iskra for general m68k hacking.
27627 * Lee Iverson for random fixes and MIPS testing.
27629 * Andreas Jaeger for testing and benchmarking of GCC and various bug
27632 * Jakub Jelinek for his SPARC work and sibling call optimizations as
27633 well as lots of bug fixes and test cases, and for improving the
27636 * Janis Johnson for ia64 testing and fixes, her quality improvement
27637 sidetracks, and web page maintenance.
27639 * Kean Johnston for SCO OpenServer support and various fixes.
27641 * Tim Josling for the sample language treelang based originally on
27642 Richard Kenner's "toy" language.
27644 * Nicolai Josuttis for additional libstdc++ documentation.
27646 * Klaus Kaempf for his ongoing work to make alpha-vms a viable
27649 * Steven G. Kargl for work on gfortran.
27651 * David Kashtan of SRI adapted GCC to VMS.
27653 * Ryszard Kabatek for many, many libstdc++ bug fixes and
27654 optimizations of strings, especially member functions, and for
27657 * Geoffrey Keating for his ongoing work to make the PPC work for
27658 GNU/Linux and his automatic regression tester.
27660 * Brendan Kehoe for his ongoing work with G++ and for a lot of early
27661 work in just about every part of libstdc++.
27663 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
27666 * Richard Kenner of the New York University Ultracomputer Research
27667 Laboratory wrote the machine descriptions for the AMD 29000, the
27668 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the
27669 support for instruction attributes. He also made changes to
27670 better support RISC processors including changes to common
27671 subexpression elimination, strength reduction, function calling
27672 sequence handling, and condition code support, in addition to
27673 generalizing the code for frame pointer elimination and delay slot
27674 scheduling. Richard Kenner was also the head maintainer of GCC
27677 * Mumit Khan for various contributions to the Cygwin and Mingw32
27678 ports and maintaining binary releases for Microsoft Windows hosts,
27679 and for massive libstdc++ porting work to Cygwin/Mingw32.
27681 * Robin Kirkham for cpu32 support.
27683 * Mark Klein for PA improvements.
27685 * Thomas Koenig for various bug fixes.
27687 * Bruce Korb for the new and improved fixincludes code.
27689 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3
27692 * Charles LaBrec contributed the support for the Integrated Solutions
27695 * Asher Langton and Mike Kumbera for contributing Cray pointer
27696 support to gfortran, and for other gfortran improvements.
27698 * Jeff Law for his direction via the steering committee,
27699 coordinating the entire egcs project and GCC 2.95, rolling out
27700 snapshots and releases, handling merges from GCC2, reviewing tons
27701 of patches that might have fallen through the cracks else, and
27702 random but extensive hacking.
27704 * Marc Lehmann for his direction via the steering committee and
27705 helping with analysis and improvements of x86 performance.
27707 * Victor Leikehman for work on gfortran.
27709 * Ted Lemon wrote parts of the RTL reader and printer.
27711 * Kriang Lerdsuwanakij for C++ improvements including template as
27712 template parameter support, and many C++ fixes.
27714 * Warren Levy for tremendous work on libgcj (Java Runtime Library)
27715 and random work on the Java front end.
27717 * Alain Lichnewsky ported GCC to the MIPS CPU.
27719 * Oskar Liljeblad for hacking on AWT and his many Java bug reports
27722 * Robert Lipe for OpenServer support, new testsuites, testing, etc.
27724 * Weiwen Liu for testing and various bug fixes.
27726 * Dave Love for his ongoing work with the Fortran front end and
27729 * Martin von Lo"wis for internal consistency checking infrastructure,
27730 various C++ improvements including namespace support, and tons of
27731 assistance with libstdc++/compiler merges.
27733 * H.J. Lu for his previous contributions to the steering committee,
27734 many x86 bug reports, prototype patches, and keeping the GNU/Linux
27737 * Greg McGary for random fixes and (someday) bounded pointers.
27739 * Andrew MacLeod for his ongoing work in building a real EH system,
27740 various code generation improvements, work on the global
27743 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC
27744 hacking improvements to compile-time performance, overall
27745 knowledge and direction in the area of instruction scheduling, and
27746 design and implementation of the automaton based instruction
27749 * Bob Manson for his behind the scenes work on dejagnu.
27751 * Philip Martin for lots of libstdc++ string and vector iterator
27752 fixes and improvements, and string clean up and testsuites.
27754 * All of the Mauve project contributors, for Java test code.
27756 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements.
27758 * Adam Megacz for his work on the Microsoft Windows port of GCJ.
27760 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS,
27761 powerpc, haifa, ECOFF debug support, and other assorted hacking.
27763 * Jason Merrill for his direction via the steering committee and
27764 leading the G++ effort.
27766 * David Miller for his direction via the steering committee, lots of
27767 SPARC work, improvements in jump.c and interfacing with the Linux
27770 * Gary Miller ported GCC to Charles River Data Systems machines.
27772 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning
27773 the entire libstdc++ testsuite namespace-compatible.
27775 * Mark Mitchell for his direction via the steering committee,
27776 mountains of C++ work, load/store hoisting out of loops, alias
27777 analysis improvements, ISO C `restrict' support, and serving as
27778 release manager for GCC 3.x.
27780 * Alan Modra for various GNU/Linux bits and testing.
27782 * Toon Moene for his direction via the steering committee, Fortran
27783 maintenance, and his ongoing work to make us make Fortran run fast.
27785 * Jason Molenda for major help in the care and feeding of all the
27786 services on the gcc.gnu.org (formerly egcs.cygnus.com)
27787 machine--mail, web services, ftp services, etc etc. Doing all
27788 this work on scrap paper and the backs of envelopes would have
27791 * Catherine Moore for fixing various ugly problems we have sent her
27792 way, including the haifa bug which was killing the Alpha & PowerPC
27795 * Mike Moreton for his various Java patches.
27797 * David Mosberger-Tang for various Alpha improvements, and for the
27798 initial IA-64 port.
27800 * Stephen Moshier contributed the floating point emulator that
27801 assists in cross-compilation and permits support for floating
27802 point numbers wider than 64 bits and for ISO C99 support.
27804 * Bill Moyer for his behind the scenes work on various issues.
27806 * Philippe De Muyter for his work on the m68k port.
27808 * Joseph S. Myers for his work on the PDP-11 port, format checking
27809 and ISO C99 support, and continuous emphasis on (and contributions
27812 * Nathan Myers for his work on libstdc++-v3: architecture and
27813 authorship through the first three snapshots, including
27814 implementation of locale infrastructure, string, shadow C headers,
27815 and the initial project documentation (DESIGN, CHECKLIST, and so
27816 forth). Later, more work on MT-safe string and shadow headers.
27818 * Felix Natter for documentation on porting libstdc++.
27820 * Nathanael Nerode for cleaning up the configuration/build process.
27822 * NeXT, Inc. donated the front end that supports the Objective-C
27825 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to
27826 the search engine setup, various documentation fixes and other
27829 * Geoff Noer for his work on getting cygwin native builds working.
27831 * Diego Novillo for his SPEC performance tracking web pages and
27832 assorted fixes in the middle end and various back ends.
27834 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64,
27835 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and
27836 related infrastructure improvements.
27838 * Alexandre Oliva for various build infrastructure improvements,
27839 scripts and amazing testing work, including keeping libtool issues
27842 * Stefan Olsson for work on mt_alloc.
27844 * Melissa O'Neill for various NeXT fixes.
27846 * Rainer Orth for random MIPS work, including improvements to GCC's
27847 o32 ABI support, improvements to dejagnu's MIPS support, Java
27848 configuration clean-ups and porting work, etc.
27850 * Hartmut Penner for work on the s390 port.
27852 * Paul Petersen wrote the machine description for the Alliant FX/8.
27854 * Alexandre Petit-Bianco for implementing much of the Java compiler
27855 and continued Java maintainership.
27857 * Matthias Pfaller for major improvements to the NS32k port.
27859 * Gerald Pfeifer for his direction via the steering committee,
27860 pointing out lots of problems we need to solve, maintenance of the
27861 web pages, and taking care of documentation maintenance in general.
27863 * Andrew Pinski for processing bug reports by the dozen.
27865 * Ovidiu Predescu for his work on the Objective-C front end and
27868 * Jerry Quinn for major performance improvements in C++ formatted
27871 * Ken Raeburn for various improvements to checker, MIPS ports and
27872 various cleanups in the compiler.
27874 * Rolf W. Rasmussen for hacking on AWT.
27876 * David Reese of Sun Microsystems contributed to the Solaris on
27879 * Volker Reichelt for keeping up with the problem reports.
27881 * Joern Rennecke for maintaining the sh port, loop, regmove & reload
27884 * Loren J. Rittle for improvements to libstdc++-v3 including the
27885 FreeBSD port, threading fixes, thread-related configury changes,
27886 critical threading documentation, and solutions to really tricky
27887 I/O problems, as well as keeping GCC properly working on FreeBSD
27888 and continuous testing.
27890 * Craig Rodrigues for processing tons of bug reports.
27892 * Ola Ro"nnerup for work on mt_alloc.
27894 * Gavin Romig-Koch for lots of behind the scenes MIPS work.
27896 * David Ronis inspired and encouraged Craig to rewrite the G77
27897 documentation in texinfo format by contributing a first pass at a
27898 translation of the old `g77-0.5.16/f/DOC' file.
27900 * Ken Rose for fixes to GCC's delay slot filling code.
27902 * Paul Rubin wrote most of the preprocessor.
27904 * Pe'tur Runo'lfsson for major performance improvements in C++
27905 formatted I/O and large file support in C++ filebuf.
27907 * Chip Salzenberg for libstdc++ patches and improvements to locales,
27908 traits, Makefiles, libio, libtool hackery, and "long long" support.
27910 * Juha Sarlin for improvements to the H8 code generator.
27912 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series
27915 * Roger Sayle for improvements to constant folding and GCC's RTL
27916 optimizers as well as for fixing numerous bugs.
27918 * Bradley Schatz for his work on the GCJ FAQ.
27920 * Peter Schauer wrote the code to allow debugging to work on the
27923 * William Schelter did most of the work on the Intel 80386 support.
27925 * Tobias Schlu"ter for work on gfortran.
27927 * Bernd Schmidt for various code generation improvements and major
27928 work in the reload pass as well a serving as release manager for
27931 * Peter Schmid for constant testing of libstdc++--especially
27932 application testing, going above and beyond what was requested for
27933 the release criteria--and libstdc++ header file tweaks.
27935 * Jason Schroeder for jcf-dump patches.
27937 * Andreas Schwab for his work on the m68k port.
27939 * Lars Segerlund for work on gfortran.
27941 * Joel Sherrill for his direction via the steering committee, RTEMS
27942 contributions and RTEMS testing.
27944 * Nathan Sidwell for many C++ fixes/improvements.
27946 * Jeffrey Siegal for helping RMS with the original design of GCC,
27947 some code which handles the parse tree and RTL data structures,
27948 constant folding and help with the original VAX & m68k ports.
27950 * Kenny Simpson for prompting libstdc++ fixes due to defect reports
27951 from the LWG (thereby keeping GCC in line with updates from the
27954 * Franz Sirl for his ongoing work with making the PPC port stable
27957 * Andrey Slepuhin for assorted AIX hacking.
27959 * Christopher Smith did the port for Convex machines.
27961 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
27963 * Randy Smith finished the Sun FPA support.
27965 * Scott Snyder for queue, iterator, istream, and string fixes and
27966 libstdc++ testsuite entries. Also for providing the patch to G77
27967 to add rudimentary support for `INTEGER*1', `INTEGER*2', and
27970 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique.
27972 * Richard Stallman, for writing the original GCC and launching the
27975 * Jan Stein of the Chalmers Computer Society provided support for
27976 Genix, as well as part of the 32000 machine description.
27978 * Nigel Stephens for various mips16 related fixes/improvements.
27980 * Jonathan Stone wrote the machine description for the Pyramid
27983 * Graham Stott for various infrastructure improvements.
27985 * John Stracke for his Java HTTP protocol fixes.
27987 * Mike Stump for his Elxsi port, G++ contributions over the years
27988 and more recently his vxworks contributions
27990 * Jeff Sturm for Java porting help, bug fixes, and encouragement.
27992 * Shigeya Suzuki for this fixes for the bsdi platforms.
27994 * Ian Lance Taylor for his mips16 work, general configury hacking,
27997 * Holger Teutsch provided the support for the Clipper CPU.
27999 * Gary Thomas for his ongoing work to make the PPC work for
28002 * Philipp Thomas for random bug fixes throughout the compiler
28004 * Jason Thorpe for thread support in libstdc++ on NetBSD.
28006 * Kresten Krab Thorup wrote the run time support for the Objective-C
28007 language and the fantastic Java bytecode interpreter.
28009 * Michael Tiemann for random bug fixes, the first instruction
28010 scheduler, initial C++ support, function integration, NS32k, SPARC
28011 and M88k machine description work, delay slot scheduling.
28013 * Andreas Tobler for his work porting libgcj to Darwin.
28015 * Teemu Torma for thread safe exception handling support.
28017 * Leonard Tower wrote parts of the parser, RTL generator, and RTL
28018 definitions, and of the VAX machine description.
28020 * Tom Tromey for internationalization support and for his many Java
28021 contributions and libgcj maintainership.
28023 * Lassi Tuura for improvements to config.guess to determine HP
28026 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes.
28028 * Andy Vaught for the design and initial implementation of the
28029 gfortran front end.
28031 * Brent Verner for work with the libstdc++ cshadow files and their
28032 associated configure steps.
28034 * Todd Vierling for contributions for NetBSD ports.
28036 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML
28039 * Dean Wakerley for converting the install documentation from HTML
28040 to texinfo in time for GCC 3.0.
28042 * Krister Walfridsson for random bug fixes.
28044 * Feng Wang for contributions to gfortran.
28046 * Stephen M. Webb for time and effort on making libstdc++ shadow
28047 files work with the tricky Solaris 8+ headers, and for pushing the
28048 build-time header tree.
28050 * John Wehle for various improvements for the x86 code generator,
28051 related infrastructure improvements to help x86 code generation,
28052 value range propagation and other work, WE32k port.
28054 * Ulrich Weigand for work on the s390 port.
28056 * Zack Weinberg for major work on cpplib and various other bug fixes.
28058 * Matt Welsh for help with Linux Threads support in GCJ.
28060 * Urban Widmark for help fixing java.io.
28062 * Mark Wielaard for new Java library code and his work integrating
28065 * Dale Wiles helped port GCC to the Tahoe.
28067 * Bob Wilson from Tensilica, Inc. for the Xtensa port.
28069 * Jim Wilson for his direction via the steering committee, tackling
28070 hard problems in various places that nobody else wanted to work
28071 on, strength reduction and other loop optimizations.
28073 * Paul Woegerer and Tal Agmon for the CRX port.
28075 * Carlo Wood for various fixes.
28077 * Tom Wood for work on the m88k port.
28079 * Canqun Yang for work on gfortran.
28081 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine
28082 description for the Tron architecture (specifically, the Gmicro).
28084 * Kevin Zachmann helped port GCC to the Tahoe.
28086 * Ayal Zaks for Swing Modulo Scheduling (SMS).
28088 * Xiaoqiang Zhang for work on gfortran.
28090 * Gilles Zunino for help porting Java to Irix.
28093 The following people are recognized for their contributions to GNAT,
28094 the Ada front end of GCC:
28097 * Romain Berrendonner
28147 * Hristian Kirtchev
28190 The following people are recognized for their contributions of new
28191 features, bug reports, testing and integration of classpath/libgcj for
28193 * Lillian Angel for `JTree' implementation and lots Free Swing
28194 additions and bugfixes.
28196 * Wolfgang Baer for `GapContent' bugfixes.
28198 * Anthony Balkissoon for `JList', Free Swing 1.5 updates and mouse
28199 event fixes, lots of Free Swing work including `JTable' editing.
28201 * Stuart Ballard for RMI constant fixes.
28203 * Goffredo Baroncelli for `HTTPURLConnection' fixes.
28205 * Gary Benson for `MessageFormat' fixes.
28207 * Daniel Bonniot for `Serialization' fixes.
28209 * Chris Burdess for lots of gnu.xml and http protocol fixes, `StAX'
28210 and `DOM xml:id' support.
28212 * Ka-Hing Cheung for `TreePath' and `TreeSelection' fixes.
28214 * Archie Cobbs for build fixes, VM interface updates,
28215 `URLClassLoader' updates.
28217 * Kelley Cook for build fixes.
28219 * Martin Cordova for Suggestions for better `SocketTimeoutException'.
28221 * David Daney for `BitSet' bugfixes, `HttpURLConnection' rewrite and
28224 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo
28225 2D support. Lots of imageio framework additions, lots of AWT and
28226 Free Swing bugfixes.
28228 * Jeroen Frijters for `ClassLoader' and nio cleanups, serialization
28229 fixes, better `Proxy' support, bugfixes and IKVM integration.
28231 * Santiago Gala for `AccessControlContext' fixes.
28233 * Nicolas Geoffray for `VMClassLoader' and `AccessController'
28236 * David Gilbert for `basic' and `metal' icon and plaf support and
28237 lots of documenting, Lots of Free Swing and metal theme additions.
28238 `MetalIconFactory' implementation.
28240 * Anthony Green for `MIDI' framework, `ALSA' and `DSSI' providers.
28242 * Andrew Haley for `Serialization' and `URLClassLoader' fixes, gcj
28245 * Kim Ho for `JFileChooser' implementation.
28247 * Andrew John Hughes for `Locale' and net fixes, URI RFC2986
28248 updates, `Serialization' fixes, `Properties' XML support and
28249 generic branch work, VMIntegration guide update.
28251 * Bastiaan Huisman for `TimeZone' bugfixing.
28253 * Andreas Jaeger for mprec updates.
28255 * Paul Jenner for better `-Werror' support.
28257 * Ito Kazumitsu for `NetworkInterface' implementation and updates.
28259 * Roman Kennke for `BoxLayout', `GrayFilter' and `SplitPane', plus
28260 bugfixes all over. Lots of Free Swing work including styled text.
28262 * Simon Kitching for `String' cleanups and optimization suggestions.
28264 * Michael Koch for configuration fixes, `Locale' updates, bug and
28267 * Guilhem Lavaux for configuration, thread and channel fixes and
28268 Kaffe integration. JCL native `Pointer' updates. Logger bugfixes.
28270 * David Lichteblau for JCL support library global/local reference
28273 * Aaron Luchko for JDWP updates and documentation fixes.
28275 * Ziga Mahkovec for `Graphics2D' upgraded to Cairo 0.5 and new regex
28278 * Sven de Marothy for BMP imageio support, CSS and `TextLayout'
28279 fixes. `GtkImage' rewrite, 2D, awt, free swing and date/time fixes
28280 and implementing the Qt4 peers.
28282 * Casey Marshall for crypto algorithm fixes, `FileChannel' lock,
28283 `SystemLogger' and `FileHandler' rotate implementations, NIO
28284 `FileChannel.map' support, security and policy updates.
28286 * Bryce McKinlay for RMI work.
28288 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus
28289 testing and documenting.
28291 * Kalle Olavi Niemitalo for build fixes.
28293 * Rainer Orth for build fixes.
28295 * Andrew Overholt for `File' locking fixes.
28297 * Ingo Proetel for `Image', `Logger' and `URLClassLoader' updates.
28299 * Olga Rodimina for `MenuSelectionManager' implemenation.
28301 * Jan Roehrich for `BasicTreeUI' and `JTree' fixes.
28303 * Julian Scheid for documentation updates and gjdoc support.
28305 * Christian Schlichtherle for zip fixes and cleanups.
28307 * Robert Schuster for documentation updates and beans fixes,
28308 `TreeNode' enumerations and `ActionCommand' and various fixes, XML
28309 and URL, AWT and Free Swing bugfixes.
28311 * Keith Seitz for lots of JDWP work.
28313 * Christian Thalinger for 64-bit cleanups, Configuration and VM
28314 interface fixes and `CACAO' integration, `fdlibm' updates.
28316 * Gael Thomas for `VMClassLoader' boot packages support sugestions.
28318 * Andreas Tobler for Darwin and Solaris testing and fixing, `Qt4'
28319 support for Darwin/OS X, `Graphics2D' support, `gtk+' updates.
28321 * Dalibor Topic for better `DEBUG' support, build cleanups and Kaffe
28322 integration. `Qt4' build infrastructure, `SHA1PRNG' and
28323 `GdkPixbugDecoder' updates.
28325 * Tom Tromey for Eclipse integration, generics work, lots of bugfixes
28326 and gcj integration including coordinating The Big Merge.
28328 * Mark Wielaard for bugfixes, packaging and release management,
28329 `Clipboard' implementation, system call interrupts and network
28330 timeouts and `GdkPixpufDecoder' fixes.
28333 In addition to the above, all of which also contributed time and
28334 energy in testing GCC, we would like to thank the following for their
28335 contributions to testing:
28337 * Michael Abd-El-Malek
28347 * David Billinghurst
28351 * Stephane Bortzmeyer
28361 * Bradford Castalia
28381 * Charles-Antoine Gauthier
28403 * Kevin B. Hendricks
28407 * Christian Joensson
28415 * Anand Krishnaswamy
28417 * A. O. V. Le Blanc
28481 * Pedro A. M. Vazquez
28491 And finally we'd like to thank everyone who uses the compiler, submits
28492 bug reports and generally reminds us why we're doing this work in the
28496 File: gcc.info, Node: Option Index, Next: Keyword Index, Prev: Contributors, Up: Top
28501 GCC's command line options are indexed here without any initial `-' or
28502 `--'. Where an option has both positive and negative forms (such as
28503 `-fOPTION' and `-fno-OPTION'), relevant entries in the manual are
28504 indexed under the most appropriate form; it may sometimes be useful to
28505 look up both forms.
28510 * ###: Overall Options. (line 192)
28511 * -dynamiclib: Darwin Options. (line 116)
28512 * -force_cpusubtype_ALL: Darwin Options. (line 121)
28513 * -fsplit-ivs-in-unroller: Optimize Options. (line 767)
28514 * -fvariable-expansion-in-unroller: Optimize Options. (line 781)
28515 * -gfull: Darwin Options. (line 64)
28516 * -gused: Darwin Options. (line 59)
28517 * -mone-byte-bool: Darwin Options. (line 75)
28518 * A: Preprocessor Options.
28520 * all_load: Darwin Options. (line 95)
28521 * allowable_client: Darwin Options. (line 182)
28522 * ansi <1>: Non-bugs. (line 107)
28523 * ansi <2>: Other Builtins. (line 22)
28524 * ansi <3>: Preprocessor Options.
28526 * ansi <4>: C Dialect Options. (line 11)
28527 * ansi: Standards. (line 13)
28528 * arch_errors_fatal: Darwin Options. (line 99)
28529 * aux-info: C Dialect Options. (line 98)
28530 * b: Target Options. (line 13)
28531 * B: Directory Options. (line 41)
28532 * bcopy-builtin: PDP-11 Options. (line 32)
28533 * bind_at_load: Darwin Options. (line 103)
28534 * bundle: Darwin Options. (line 108)
28535 * bundle_loader: Darwin Options. (line 112)
28536 * c: Link Options. (line 20)
28537 * C: Preprocessor Options.
28539 * c: Overall Options. (line 147)
28540 * client_name: Darwin Options. (line 182)
28541 * combine: Overall Options. (line 203)
28542 * compatibility_version: Darwin Options. (line 182)
28543 * coverage: Debugging Options. (line 161)
28544 * crossjumping: Optimize Options. (line 461)
28545 * current_version: Darwin Options. (line 182)
28546 * D: Preprocessor Options.
28548 * d: Debugging Options. (line 213)
28549 * da: Debugging Options. (line 384)
28550 * dA: Debugging Options. (line 226)
28551 * dB: Debugging Options. (line 235)
28552 * db: Debugging Options. (line 231)
28553 * dC: Debugging Options. (line 245)
28554 * dc: Debugging Options. (line 239)
28555 * dD <1>: Preprocessor Options.
28557 * dD: Debugging Options. (line 259)
28558 * dd: Debugging Options. (line 253)
28559 * dE: Debugging Options. (line 264)
28560 * dead_strip: Darwin Options. (line 182)
28561 * dependency-file: Darwin Options. (line 182)
28562 * df: Debugging Options. (line 269)
28563 * dG: Debugging Options. (line 281)
28564 * dg: Debugging Options. (line 276)
28565 * dH: Debugging Options. (line 387)
28566 * dh: Debugging Options. (line 288)
28567 * dI: Preprocessor Options.
28569 * di: Debugging Options. (line 292)
28570 * dj: Debugging Options. (line 296)
28571 * dk: Debugging Options. (line 300)
28572 * dL: Debugging Options. (line 310)
28573 * dl: Debugging Options. (line 305)
28574 * dM: Preprocessor Options.
28576 * dm: Debugging Options. (line 390)
28577 * dM: Debugging Options. (line 321)
28578 * dm: Debugging Options. (line 317)
28579 * dN <1>: Preprocessor Options.
28581 * dN: Debugging Options. (line 330)
28582 * dn: Debugging Options. (line 326)
28583 * do: Debugging Options. (line 334)
28584 * dP: Debugging Options. (line 399)
28585 * dp: Debugging Options. (line 394)
28586 * dR: Debugging Options. (line 342)
28587 * dr: Debugging Options. (line 338)
28588 * dS: Debugging Options. (line 351)
28589 * ds: Debugging Options. (line 346)
28590 * dT: Debugging Options. (line 360)
28591 * dt: Debugging Options. (line 355)
28592 * dumpmachine: Debugging Options. (line 741)
28593 * dumpspecs: Debugging Options. (line 749)
28594 * dumpversion: Debugging Options. (line 745)
28595 * dv: Debugging Options. (line 403)
28596 * dV: Debugging Options. (line 365)
28597 * dw: Debugging Options. (line 372)
28598 * dx: Debugging Options. (line 408)
28599 * dy: Debugging Options. (line 412)
28600 * dylib_file: Darwin Options. (line 182)
28601 * dylinker_install_name: Darwin Options. (line 182)
28602 * dynamic: Darwin Options. (line 182)
28603 * dZ: Debugging Options. (line 380)
28604 * dz: Debugging Options. (line 376)
28605 * E <1>: Link Options. (line 20)
28606 * E: Overall Options. (line 168)
28607 * EB <1>: MIPS Options. (line 7)
28608 * EB: ARC Options. (line 12)
28609 * EL <1>: MIPS Options. (line 10)
28610 * EL: ARC Options. (line 9)
28611 * exported_symbols_list: Darwin Options. (line 182)
28612 * F: Darwin Options. (line 32)
28613 * fabi-version: C++ Dialect Options.
28615 * falign-functions: Optimize Options. (line 894)
28616 * falign-jumps: Optimize Options. (line 944)
28617 * falign-labels: Optimize Options. (line 912)
28618 * falign-loops: Optimize Options. (line 930)
28619 * fargument-alias: Code Gen Options. (line 336)
28620 * fargument-noalias: Code Gen Options. (line 336)
28621 * fargument-noalias-global: Code Gen Options. (line 336)
28622 * fasynchronous-unwind-tables: Code Gen Options. (line 64)
28623 * fbounds-check <1>: Code Gen Options. (line 15)
28624 * fbounds-check: Optimize Options. (line 329)
28625 * fbranch-probabilities: Optimize Options. (line 1176)
28626 * fbranch-target-load-optimize: Optimize Options. (line 1291)
28627 * fbranch-target-load-optimize2: Optimize Options. (line 1297)
28628 * fbtr-bb-exclusive: Optimize Options. (line 1301)
28629 * fcall-saved <1>: Interoperation. (line 150)
28630 * fcall-saved: Code Gen Options. (line 238)
28631 * fcall-used: Code Gen Options. (line 224)
28632 * fcaller-saves: Optimize Options. (line 601)
28633 * fcheck-new: C++ Dialect Options.
28635 * fcommon: Variable Attributes.
28637 * fcond-mismatch: C Dialect Options. (line 208)
28638 * fconserve-space: C++ Dialect Options.
28640 * fconstant-string-class: Objective-C and Objective-C++ Dialect Options.
28642 * fcse-follow-jumps: Optimize Options. (line 372)
28643 * fcse-skip-blocks: Optimize Options. (line 381)
28644 * fcx-limited-range: Optimize Options. (line 1162)
28645 * fdata-sections: Optimize Options. (line 1272)
28646 * fdelayed-branch: Optimize Options. (line 514)
28647 * fdelete-null-pointer-checks: Optimize Options. (line 483)
28648 * fdiagnostics-show-location: Language Independent Options.
28650 * fdiagnostics-show-options: Language Independent Options.
28652 * fdollars-in-identifiers <1>: Interoperation. (line 146)
28653 * fdollars-in-identifiers: Preprocessor Options.
28655 * fdump-class-hierarchy: Debugging Options. (line 431)
28656 * fdump-ipa: Debugging Options. (line 438)
28657 * fdump-rtl-all: Debugging Options. (line 384)
28658 * fdump-rtl-bbro: Debugging Options. (line 235)
28659 * fdump-rtl-bp: Debugging Options. (line 231)
28660 * fdump-rtl-btl: Debugging Options. (line 253)
28661 * fdump-rtl-bypass: Debugging Options. (line 281)
28662 * fdump-rtl-ce1: Debugging Options. (line 245)
28663 * fdump-rtl-ce2: Debugging Options. (line 245)
28664 * fdump-rtl-ce3: Debugging Options. (line 264)
28665 * fdump-rtl-cfg: Debugging Options. (line 269)
28666 * fdump-rtl-combine: Debugging Options. (line 239)
28667 * fdump-rtl-cse: Debugging Options. (line 346)
28668 * fdump-rtl-cse2: Debugging Options. (line 355)
28669 * fdump-rtl-dbr: Debugging Options. (line 253)
28670 * fdump-rtl-eh: Debugging Options. (line 288)
28671 * fdump-rtl-expand: Debugging Options. (line 338)
28672 * fdump-rtl-flow2: Debugging Options. (line 372)
28673 * fdump-rtl-gcse: Debugging Options. (line 281)
28674 * fdump-rtl-greg: Debugging Options. (line 276)
28675 * fdump-rtl-jump: Debugging Options. (line 296)
28676 * fdump-rtl-life: Debugging Options. (line 269)
28677 * fdump-rtl-loop: Debugging Options. (line 310)
28678 * fdump-rtl-loop2: Debugging Options. (line 310)
28679 * fdump-rtl-lreg: Debugging Options. (line 305)
28680 * fdump-rtl-mach: Debugging Options. (line 321)
28681 * fdump-rtl-peephole2: Debugging Options. (line 376)
28682 * fdump-rtl-postreload: Debugging Options. (line 334)
28683 * fdump-rtl-regmove: Debugging Options. (line 330)
28684 * fdump-rtl-rnreg: Debugging Options. (line 326)
28685 * fdump-rtl-sched: Debugging Options. (line 351)
28686 * fdump-rtl-sched2: Debugging Options. (line 342)
28687 * fdump-rtl-sibling: Debugging Options. (line 292)
28688 * fdump-rtl-sms: Debugging Options. (line 317)
28689 * fdump-rtl-stack: Debugging Options. (line 300)
28690 * fdump-rtl-tracer: Debugging Options. (line 360)
28691 * fdump-rtl-vartrack: Debugging Options. (line 365)
28692 * fdump-rtl-vpt: Debugging Options. (line 365)
28693 * fdump-rtl-web: Debugging Options. (line 380)
28694 * fdump-translation-unit: Debugging Options. (line 423)
28695 * fdump-tree: Debugging Options. (line 453)
28696 * fdump-tree-alias: Debugging Options. (line 541)
28697 * fdump-tree-all: Debugging Options. (line 626)
28698 * fdump-tree-ccp: Debugging Options. (line 545)
28699 * fdump-tree-cfg: Debugging Options. (line 516)
28700 * fdump-tree-ch: Debugging Options. (line 528)
28701 * fdump-tree-copyprop: Debugging Options. (line 561)
28702 * fdump-tree-copyrename: Debugging Options. (line 607)
28703 * fdump-tree-dce: Debugging Options. (line 569)
28704 * fdump-tree-dom: Debugging Options. (line 587)
28705 * fdump-tree-dse: Debugging Options. (line 592)
28706 * fdump-tree-forwprop: Debugging Options. (line 602)
28707 * fdump-tree-fre: Debugging Options. (line 557)
28708 * fdump-tree-gimple: Debugging Options. (line 511)
28709 * fdump-tree-mudflap: Debugging Options. (line 573)
28710 * fdump-tree-nrv: Debugging Options. (line 612)
28711 * fdump-tree-phiopt: Debugging Options. (line 597)
28712 * fdump-tree-pre: Debugging Options. (line 553)
28713 * fdump-tree-salias: Debugging Options. (line 536)
28714 * fdump-tree-sink: Debugging Options. (line 583)
28715 * fdump-tree-sra: Debugging Options. (line 578)
28716 * fdump-tree-ssa: Debugging Options. (line 532)
28717 * fdump-tree-store_copyprop: Debugging Options. (line 565)
28718 * fdump-tree-storeccp: Debugging Options. (line 549)
28719 * fdump-tree-vcg: Debugging Options. (line 520)
28720 * fdump-tree-vect: Debugging Options. (line 617)
28721 * fdump-tree-vrp: Debugging Options. (line 622)
28722 * fdump-unnumbered: Debugging Options. (line 415)
28723 * fearly-inlining: Optimize Options. (line 206)
28724 * feliminate-dwarf2-dups: Debugging Options. (line 117)
28725 * feliminate-unused-debug-symbols: Debugging Options. (line 52)
28726 * feliminate-unused-debug-types: Debugging Options. (line 753)
28727 * fexceptions: Code Gen Options. (line 34)
28728 * fexec-charset: Preprocessor Options.
28730 * fexpensive-optimizations: Optimize Options. (line 496)
28731 * fextended-identifiers: Preprocessor Options.
28733 * ffast-math: Optimize Options. (line 1053)
28734 * ffinite-math-only: Optimize Options. (line 1097)
28735 * ffix-and-continue: Darwin Options. (line 89)
28736 * ffixed: Code Gen Options. (line 212)
28737 * ffloat-store <1>: Disappointments. (line 77)
28738 * ffloat-store: Optimize Options. (line 1039)
28739 * ffor-scope: C++ Dialect Options.
28741 * fforce-addr: Optimize Options. (line 156)
28742 * fforce-mem: Optimize Options. (line 148)
28743 * ffreestanding <1>: Function Attributes.
28745 * ffreestanding <2>: Warning Options. (line 94)
28746 * ffreestanding <3>: C Dialect Options. (line 169)
28747 * ffreestanding: Standards. (line 81)
28748 * ffriend-injection: C++ Dialect Options.
28750 * ffunction-sections: Optimize Options. (line 1272)
28751 * fgcse: Optimize Options. (line 400)
28752 * fgcse-after-reload: Optimize Options. (line 436)
28753 * fgcse-las: Optimize Options. (line 429)
28754 * fgcse-lm: Optimize Options. (line 411)
28755 * fgcse-sm: Optimize Options. (line 420)
28756 * fgnu-runtime: Objective-C and Objective-C++ Dialect Options.
28758 * fhosted: C Dialect Options. (line 162)
28759 * filelist: Darwin Options. (line 182)
28760 * findirect-data: Darwin Options. (line 89)
28761 * finhibit-size-directive: Code Gen Options. (line 154)
28762 * finline-functions: Optimize Options. (line 187)
28763 * finline-functions-called-once: Optimize Options. (line 198)
28764 * finline-limit: Optimize Options. (line 216)
28765 * finput-charset: Preprocessor Options.
28767 * finstrument-functions <1>: Function Attributes.
28769 * finstrument-functions: Code Gen Options. (line 268)
28770 * fkeep-inline-functions <1>: Inline. (line 51)
28771 * fkeep-inline-functions: Optimize Options. (line 254)
28772 * fkeep-static-consts: Optimize Options. (line 261)
28773 * flat_namespace: Darwin Options. (line 182)
28774 * fleading-underscore: Code Gen Options. (line 351)
28775 * floop-optimize: Optimize Options. (line 441)
28776 * floop-optimize2: Optimize Options. (line 448)
28777 * fmem-report: Debugging Options. (line 142)
28778 * fmessage-length: Language Independent Options.
28780 * fmodulo-sched: Optimize Options. (line 290)
28781 * fmove-loop-invariants: Optimize Options. (line 1255)
28782 * fms-extensions <1>: Unnamed Fields. (line 37)
28783 * fms-extensions <2>: C++ Dialect Options.
28785 * fms-extensions: C Dialect Options. (line 179)
28786 * fmudflap: Optimize Options. (line 336)
28787 * fmudflapir: Optimize Options. (line 336)
28788 * fmudflapth: Optimize Options. (line 336)
28789 * fnext-runtime: Objective-C and Objective-C++ Dialect Options.
28791 * fno-access-control: C++ Dialect Options.
28793 * fno-asm: C Dialect Options. (line 114)
28794 * fno-branch-count-reg: Optimize Options. (line 295)
28795 * fno-builtin <1>: Other Builtins. (line 14)
28796 * fno-builtin <2>: Function Attributes.
28798 * fno-builtin <3>: Warning Options. (line 94)
28799 * fno-builtin: C Dialect Options. (line 128)
28800 * fno-common <1>: Variable Attributes.
28802 * fno-common: Code Gen Options. (line 142)
28803 * fno-const-strings: C++ Dialect Options.
28805 * fno-cprop-registers: Optimize Options. (line 1010)
28806 * fno-cx-limited-range: Optimize Options. (line 1162)
28807 * fno-default-inline <1>: Inline. (line 46)
28808 * fno-default-inline <2>: Optimize Options. (line 133)
28809 * fno-default-inline: C++ Dialect Options.
28811 * fno-defer-pop: Optimize Options. (line 140)
28812 * fno-elide-constructors: C++ Dialect Options.
28814 * fno-enforce-eh-specs: C++ Dialect Options.
28816 * fno-for-scope: C++ Dialect Options.
28818 * fno-function-cse: Optimize Options. (line 306)
28819 * fno-gnu-keywords: C++ Dialect Options.
28821 * fno-guess-branch-probability: Optimize Options. (line 804)
28822 * fno-ident: Code Gen Options. (line 151)
28823 * fno-implement-inlines <1>: C++ Interface. (line 75)
28824 * fno-implement-inlines: C++ Dialect Options.
28826 * fno-implicit-inline-templates: C++ Dialect Options.
28828 * fno-implicit-templates <1>: Template Instantiation.
28830 * fno-implicit-templates: C++ Dialect Options.
28832 * fno-inline: Optimize Options. (line 181)
28833 * fno-jump-tables: Code Gen Options. (line 204)
28834 * fno-math-errno: Optimize Options. (line 1066)
28835 * fno-nil-receivers: Objective-C and Objective-C++ Dialect Options.
28837 * fno-nonansi-builtins: C++ Dialect Options.
28839 * fno-operator-names: C++ Dialect Options.
28841 * fno-optional-diags: C++ Dialect Options.
28843 * fno-peephole: Optimize Options. (line 795)
28844 * fno-peephole2: Optimize Options. (line 795)
28845 * fno-rtti: C++ Dialect Options.
28847 * fno-sched-interblock: Optimize Options. (line 540)
28848 * fno-sched-spec: Optimize Options. (line 545)
28849 * fno-show-column: Preprocessor Options.
28851 * fno-signed-bitfields: C Dialect Options. (line 241)
28852 * fno-stack-limit: Code Gen Options. (line 320)
28853 * fno-threadsafe-statics: C++ Dialect Options.
28855 * fno-trapping-math: Optimize Options. (line 1107)
28856 * fno-unsigned-bitfields: C Dialect Options. (line 241)
28857 * fno-weak: C++ Dialect Options.
28859 * fno-working-directory: Preprocessor Options.
28861 * fno-zero-initialized-in-bss: Optimize Options. (line 317)
28862 * fnon-call-exceptions: Code Gen Options. (line 48)
28863 * fobjc-call-cxx-cdtors: Objective-C and Objective-C++ Dialect Options.
28865 * fobjc-direct-dispatch: Objective-C and Objective-C++ Dialect Options.
28867 * fobjc-exceptions: Objective-C and Objective-C++ Dialect Options.
28869 * fobjc-gc: Objective-C and Objective-C++ Dialect Options.
28871 * fomit-frame-pointer: Optimize Options. (line 160)
28872 * foptimize-register-move: Optimize Options. (line 503)
28873 * foptimize-sibling-calls: Optimize Options. (line 176)
28874 * force_flat_namespace: Darwin Options. (line 182)
28875 * fpack-struct: Code Gen Options. (line 255)
28876 * fpcc-struct-return <1>: Incompatibilities. (line 170)
28877 * fpcc-struct-return: Code Gen Options. (line 70)
28878 * fpch-deps: Preprocessor Options.
28880 * fpch-preprocess: Preprocessor Options.
28882 * fpeel-loops: Optimize Options. (line 1247)
28883 * fpermissive: C++ Dialect Options.
28885 * fPIC: Code Gen Options. (line 188)
28886 * fpic: Code Gen Options. (line 170)
28887 * fPIE: Code Gen Options. (line 198)
28888 * fpie: Code Gen Options. (line 198)
28889 * fprefetch-loop-arrays: Optimize Options. (line 786)
28890 * fpreprocessed: Preprocessor Options.
28892 * fprofile-arcs <1>: Other Builtins. (line 236)
28893 * fprofile-arcs: Debugging Options. (line 146)
28894 * fprofile-generate: Optimize Options. (line 1017)
28895 * fprofile-use: Optimize Options. (line 1026)
28896 * fprofile-values: Optimize Options. (line 1195)
28897 * frandom-string: Debugging Options. (line 636)
28898 * freg-struct-return: Code Gen Options. (line 88)
28899 * fregmove: Optimize Options. (line 503)
28900 * frename-registers: Optimize Options. (line 1214)
28901 * freorder-blocks: Optimize Options. (line 821)
28902 * freorder-blocks-and-partition: Optimize Options. (line 827)
28903 * freorder-functions: Optimize Options. (line 838)
28904 * freplace-objc-classes: Objective-C and Objective-C++ Dialect Options.
28906 * frepo <1>: Template Instantiation.
28908 * frepo: C++ Dialect Options.
28910 * frerun-cse-after-loop: Optimize Options. (line 389)
28911 * frerun-loop-opt: Optimize Options. (line 395)
28912 * frounding-math: Optimize Options. (line 1122)
28913 * fsched-spec-load: Optimize Options. (line 550)
28914 * fsched-spec-load-dangerous: Optimize Options. (line 555)
28915 * fsched-stalled-insns: Optimize Options. (line 560)
28916 * fsched-stalled-insns-dep: Optimize Options. (line 565)
28917 * fsched-verbose: Debugging Options. (line 646)
28918 * fsched2-use-superblocks: Optimize Options. (line 572)
28919 * fsched2-use-traces: Optimize Options. (line 583)
28920 * fschedule-insns: Optimize Options. (line 521)
28921 * fschedule-insns2: Optimize Options. (line 531)
28922 * fscheduling-in-modulo-scheduled-loops: Optimize Options. (line 595)
28923 * fshared-data: Code Gen Options. (line 135)
28924 * fshort-double: Code Gen Options. (line 117)
28925 * fshort-enums <1>: Non-bugs. (line 42)
28926 * fshort-enums <2>: Type Attributes. (line 112)
28927 * fshort-enums <3>: Structures unions enumerations and bit-fields implementation.
28929 * fshort-enums: Code Gen Options. (line 106)
28930 * fshort-wchar: Code Gen Options. (line 125)
28931 * fsignaling-nans: Optimize Options. (line 1142)
28932 * fsigned-bitfields <1>: Non-bugs. (line 57)
28933 * fsigned-bitfields: C Dialect Options. (line 241)
28934 * fsigned-char <1>: Characters implementation.
28936 * fsigned-char: C Dialect Options. (line 231)
28937 * fsingle-precision-constant: Optimize Options. (line 1157)
28938 * fstack-check: Code Gen Options. (line 305)
28939 * fstack-limit-register: Code Gen Options. (line 320)
28940 * fstack-limit-symbol: Code Gen Options. (line 320)
28941 * fstats: C++ Dialect Options.
28943 * fstrength-reduce: Optimize Options. (line 357)
28944 * fstrict-aliasing: Optimize Options. (line 851)
28945 * fsyntax-only: Warning Options. (line 23)
28946 * ftabstop: Preprocessor Options.
28948 * ftemplate-depth: C++ Dialect Options.
28950 * ftest-coverage: Debugging Options. (line 202)
28951 * fthread-jumps: Optimize Options. (line 363)
28952 * ftime-report: Debugging Options. (line 138)
28953 * ftracer: Optimize Options. (line 750)
28954 * ftrapv: Code Gen Options. (line 22)
28955 * ftree-vect-loop-version: Optimize Options. (line 732)
28956 * ftree-vectorizer-verbose: Debugging Options. (line 630)
28957 * funit-at-a-time: Optimize Options. (line 957)
28958 * funroll-all-loops: Optimize Options. (line 761)
28959 * funroll-loops: Optimize Options. (line 755)
28960 * funsafe-loop-optimizations: Optimize Options. (line 453)
28961 * funsafe-math-optimizations: Optimize Options. (line 1083)
28962 * funsigned-bitfields <1>: Non-bugs. (line 57)
28963 * funsigned-bitfields <2>: Structures unions enumerations and bit-fields implementation.
28965 * funsigned-bitfields: C Dialect Options. (line 241)
28966 * funsigned-char <1>: Characters implementation.
28968 * funsigned-char: C Dialect Options. (line 213)
28969 * funswitch-loops: Optimize Options. (line 1259)
28970 * funwind-tables: Code Gen Options. (line 57)
28971 * fuse-cxa-atexit: C++ Dialect Options.
28973 * fvar-tracking: Debugging Options. (line 689)
28974 * fverbose-asm: Code Gen Options. (line 161)
28975 * fvisibility: Code Gen Options. (line 370)
28976 * fvisibility-inlines-hidden: C++ Dialect Options.
28978 * fvpt: Optimize Options. (line 1205)
28979 * fweb: Optimize Options. (line 986)
28980 * fwhole-program: Optimize Options. (line 997)
28981 * fwide-exec-charset: Preprocessor Options.
28983 * fworking-directory: Preprocessor Options.
28985 * fwrapv: Code Gen Options. (line 26)
28986 * fzero-link: Objective-C and Objective-C++ Dialect Options.
28988 * G <1>: System V Options. (line 10)
28989 * G <2>: RS/6000 and PowerPC Options.
28991 * G <3>: MIPS Options. (line 194)
28992 * G: M32R/D Options. (line 57)
28993 * g: Debugging Options. (line 10)
28994 * gcoff: Debugging Options. (line 62)
28995 * gdwarf-2: Debugging Options. (line 80)
28996 * gen-decls: Objective-C and Objective-C++ Dialect Options.
28998 * ggdb: Debugging Options. (line 38)
28999 * gnu-ld: HPPA Options. (line 113)
29000 * gstabs: Debugging Options. (line 44)
29001 * gstabs+: Debugging Options. (line 56)
29002 * gvms: Debugging Options. (line 87)
29003 * gxcoff: Debugging Options. (line 67)
29004 * gxcoff+: Debugging Options. (line 72)
29005 * H: Preprocessor Options.
29007 * headerpad_max_install_names: Darwin Options. (line 182)
29008 * help <1>: Preprocessor Options.
29010 * help: Overall Options. (line 219)
29011 * hp-ld: HPPA Options. (line 125)
29012 * I <1>: Directory Options. (line 10)
29013 * I: Preprocessor Options.
29015 * I- <1>: Directory Options. (line 107)
29016 * I-: Preprocessor Options.
29018 * idirafter: Preprocessor Options.
29020 * if-conversion: Optimize Options. (line 468)
29021 * if-conversion2: Optimize Options. (line 477)
29022 * imacros: Preprocessor Options.
29024 * image_base: Darwin Options. (line 182)
29025 * include: Preprocessor Options.
29027 * init: Darwin Options. (line 182)
29028 * install_name: Darwin Options. (line 182)
29029 * iprefix: Preprocessor Options.
29031 * iquote <1>: Directory Options. (line 31)
29032 * iquote: Preprocessor Options.
29034 * isysroot: Preprocessor Options.
29036 * isystem: Preprocessor Options.
29038 * iwithprefix: Preprocessor Options.
29040 * iwithprefixbefore: Preprocessor Options.
29042 * keep_private_externs: Darwin Options. (line 182)
29043 * L: Directory Options. (line 37)
29044 * l: Link Options. (line 26)
29045 * lobjc: Link Options. (line 53)
29046 * M: Preprocessor Options.
29048 * m1: SH Options. (line 9)
29049 * m10: PDP-11 Options. (line 29)
29050 * m128bit-long-double: i386 and x86-64 Options.
29052 * m16-bit: CRIS Options. (line 69)
29053 * m2: SH Options. (line 12)
29054 * m210: MCore Options. (line 43)
29055 * m3: SH Options. (line 18)
29056 * m31: S/390 and zSeries Options.
29058 * m32 <1>: SPARC Options. (line 187)
29059 * m32 <2>: RS/6000 and PowerPC Options.
29061 * m32: i386 and x86-64 Options.
29063 * m32-bit: CRIS Options. (line 69)
29064 * m32r: M32R/D Options. (line 15)
29065 * m32r2: M32R/D Options. (line 9)
29066 * m32rx: M32R/D Options. (line 12)
29067 * m340: MCore Options. (line 43)
29068 * m386: i386 and x86-64 Options.
29070 * m3dnow: i386 and x86-64 Options.
29072 * m3e: SH Options. (line 21)
29073 * m4: SH Options. (line 35)
29074 * m4-nofpu: SH Options. (line 24)
29075 * m4-single: SH Options. (line 31)
29076 * m4-single-only: SH Options. (line 27)
29077 * m40: PDP-11 Options. (line 23)
29078 * m45: PDP-11 Options. (line 26)
29079 * m486: i386 and x86-64 Options.
29081 * m4a: SH Options. (line 50)
29082 * m4a-nofpu: SH Options. (line 38)
29083 * m4a-single: SH Options. (line 46)
29084 * m4a-single-only: SH Options. (line 42)
29085 * m4al: SH Options. (line 53)
29086 * m4byte-functions: MCore Options. (line 27)
29087 * m5200: M680x0 Options. (line 59)
29088 * m64 <1>: SPARC Options. (line 187)
29089 * m64 <2>: S/390 and zSeries Options.
29091 * m64 <3>: RS/6000 and PowerPC Options.
29093 * m64: i386 and x86-64 Options.
29095 * m68000: M680x0 Options. (line 13)
29096 * m68020: M680x0 Options. (line 21)
29097 * m68020-40: M680x0 Options. (line 66)
29098 * m68020-60: M680x0 Options. (line 73)
29099 * m68030: M680x0 Options. (line 30)
29100 * m68040: M680x0 Options. (line 34)
29101 * m68060: M680x0 Options. (line 42)
29102 * m6811: M68hc1x Options. (line 13)
29103 * m6812: M68hc1x Options. (line 18)
29104 * m68881: M680x0 Options. (line 25)
29105 * m68hc11: M68hc1x Options. (line 13)
29106 * m68hc12: M68hc1x Options. (line 18)
29107 * m68hcs12: M68hc1x Options. (line 23)
29108 * m68S12: M68hc1x Options. (line 23)
29109 * m8-bit: CRIS Options. (line 69)
29110 * m96bit-long-double: i386 and x86-64 Options.
29112 * mabi <1>: RS/6000 and PowerPC Options.
29114 * mabi: ARM Options. (line 10)
29115 * mabi-mmixware: MMIX Options. (line 20)
29116 * mabi=32: MIPS Options. (line 89)
29117 * mabi=64: MIPS Options. (line 89)
29118 * mabi=eabi: MIPS Options. (line 89)
29119 * mabi=gnu: MMIX Options. (line 20)
29120 * mabi=ibmlongdouble: RS/6000 and PowerPC Options.
29122 * mabi=ieeelongdouble: RS/6000 and PowerPC Options.
29124 * mabi=n32: MIPS Options. (line 89)
29125 * mabi=no-spe: RS/6000 and PowerPC Options.
29127 * mabi=o64: MIPS Options. (line 89)
29128 * mabi=spe: RS/6000 and PowerPC Options.
29130 * mabicalls: MIPS Options. (line 100)
29131 * mabort-on-noreturn: ARM Options. (line 144)
29132 * mabshi: PDP-11 Options. (line 55)
29133 * mac0: PDP-11 Options. (line 16)
29134 * macc-4: FRV Options. (line 113)
29135 * macc-8: FRV Options. (line 116)
29136 * maccumulate-outgoing-args: i386 and x86-64 Options.
29138 * madjust-unroll: SH Options. (line 175)
29139 * mads: RS/6000 and PowerPC Options.
29141 * maix-struct-return: RS/6000 and PowerPC Options.
29143 * maix32: RS/6000 and PowerPC Options.
29145 * maix64: RS/6000 and PowerPC Options.
29147 * malign-300: H8/300 Options. (line 31)
29148 * malign-double: i386 and x86-64 Options.
29150 * malign-int: M680x0 Options. (line 128)
29151 * malign-labels: FRV Options. (line 104)
29152 * malign-loops: M32R/D Options. (line 73)
29153 * malign-natural: RS/6000 and PowerPC Options.
29155 * malign-power: RS/6000 and PowerPC Options.
29157 * malloc-cc: FRV Options. (line 25)
29158 * malpha-as: DEC Alpha Options. (line 159)
29159 * maltivec: RS/6000 and PowerPC Options.
29161 * mam33: MN10300 Options. (line 17)
29162 * maout: CRIS Options. (line 92)
29163 * mapcs: ARM Options. (line 22)
29164 * mapcs-frame: ARM Options. (line 14)
29165 * mapp-regs <1>: V850 Options. (line 57)
29166 * mapp-regs: SPARC Options. (line 10)
29167 * march <1>: S/390 and zSeries Options.
29169 * march <2>: MT Options. (line 9)
29170 * march <3>: MIPS Options. (line 14)
29171 * march <4>: i386 and x86-64 Options.
29173 * march <5>: HPPA Options. (line 9)
29174 * march <6>: CRIS Options. (line 10)
29175 * march: ARM Options. (line 109)
29176 * masm=DIALECT: i386 and x86-64 Options.
29178 * mauto-incdec: M68hc1x Options. (line 26)
29179 * mauto-pic: IA-64 Options. (line 50)
29180 * mb: SH Options. (line 58)
29181 * mbacc: MT Options. (line 16)
29182 * mbackchain: S/390 and zSeries Options.
29184 * mbase-addresses: MMIX Options. (line 54)
29185 * mbcopy: PDP-11 Options. (line 36)
29186 * mbig <1>: TMS320C3x/C4x Options.
29188 * mbig: RS/6000 and PowerPC Options.
29190 * mbig-endian <1>: RS/6000 and PowerPC Options.
29192 * mbig-endian <2>: MCore Options. (line 39)
29193 * mbig-endian <3>: IA-64 Options. (line 9)
29194 * mbig-endian: ARM Options. (line 72)
29195 * mbig-memory: TMS320C3x/C4x Options.
29197 * mbig-switch <1>: V850 Options. (line 52)
29198 * mbig-switch: HPPA Options. (line 23)
29199 * mbigtable: SH Options. (line 74)
29200 * mbit-align: RS/6000 and PowerPC Options.
29202 * mbitfield: M680x0 Options. (line 100)
29203 * mbk: TMS320C3x/C4x Options.
29205 * mbranch-cheap: PDP-11 Options. (line 65)
29206 * mbranch-cost=NUMBER: M32R/D Options. (line 82)
29207 * mbranch-expensive: PDP-11 Options. (line 61)
29208 * mbranch-likely: MIPS Options. (line 345)
29209 * mbranch-predict: MMIX Options. (line 49)
29210 * mbss-plt: RS/6000 and PowerPC Options.
29212 * mbuild-constants: DEC Alpha Options. (line 142)
29213 * mbwx: DEC Alpha Options. (line 171)
29214 * mc68000: M680x0 Options. (line 13)
29215 * mc68020: M680x0 Options. (line 21)
29216 * mcall-gnu: RS/6000 and PowerPC Options.
29218 * mcall-linux: RS/6000 and PowerPC Options.
29220 * mcall-netbsd: RS/6000 and PowerPC Options.
29222 * mcall-prologues: AVR Options. (line 43)
29223 * mcall-solaris: RS/6000 and PowerPC Options.
29225 * mcall-sysv: RS/6000 and PowerPC Options.
29227 * mcall-sysv-eabi: RS/6000 and PowerPC Options.
29229 * mcall-sysv-noeabi: RS/6000 and PowerPC Options.
29231 * mcallee-super-interworking: ARM Options. (line 234)
29232 * mcaller-super-interworking: ARM Options. (line 240)
29233 * mcallgraph-data: MCore Options. (line 31)
29234 * mcc-init: CRIS Options. (line 46)
29235 * mcheck-zero-division: MIPS Options. (line 232)
29236 * mcirrus-fix-invalid-insns: ARM Options. (line 187)
29237 * mcix: DEC Alpha Options. (line 171)
29238 * mcmodel=embmedany: SPARC Options. (line 209)
29239 * mcmodel=kernel: i386 and x86-64 Options.
29241 * mcmodel=large: i386 and x86-64 Options.
29243 * mcmodel=medany: SPARC Options. (line 203)
29244 * mcmodel=medium: i386 and x86-64 Options.
29246 * mcmodel=medlow: SPARC Options. (line 192)
29247 * mcmodel=medmid: SPARC Options. (line 197)
29248 * mcmodel=small: i386 and x86-64 Options.
29250 * mcond-exec: FRV Options. (line 152)
29251 * mcond-move: FRV Options. (line 128)
29252 * mconst-align: CRIS Options. (line 60)
29253 * mconst16: Xtensa Options. (line 10)
29254 * mconstant-gp: IA-64 Options. (line 46)
29255 * mcpu <1>: TMS320C3x/C4x Options.
29257 * mcpu <2>: SPARC Options. (line 96)
29258 * mcpu <3>: RS/6000 and PowerPC Options.
29260 * mcpu <4>: i386 and x86-64 Options.
29262 * mcpu <5>: FRV Options. (line 212)
29263 * mcpu <6>: DEC Alpha Options. (line 223)
29264 * mcpu <7>: CRIS Options. (line 10)
29265 * mcpu <8>: ARM Options. (line 84)
29266 * mcpu: ARC Options. (line 23)
29267 * mcpu32: M680x0 Options. (line 51)
29268 * mcpu=: M32C Options. (line 7)
29269 * mcsync-anomaly: Blackfin Options. (line 23)
29270 * MD: Preprocessor Options.
29272 * mdalign: SH Options. (line 64)
29273 * mdata: ARC Options. (line 30)
29274 * mdata-align: CRIS Options. (line 60)
29275 * mdb: TMS320C3x/C4x Options.
29277 * mdebug <1>: S/390 and zSeries Options.
29279 * mdebug: M32R/D Options. (line 69)
29280 * mdec-asm: PDP-11 Options. (line 78)
29281 * mdisable-callt: V850 Options. (line 80)
29282 * mdisable-fpregs: HPPA Options. (line 33)
29283 * mdisable-indexing: HPPA Options. (line 40)
29284 * mdiv: MCore Options. (line 15)
29285 * mdiv=STRATEGY: SH Options. (line 127)
29286 * mdivide-breaks: MIPS Options. (line 237)
29287 * mdivide-traps: MIPS Options. (line 237)
29288 * mdivsi3_libfunc=NAME: SH Options. (line 168)
29289 * mdouble: FRV Options. (line 38)
29290 * mdouble-float: MIPS Options. (line 151)
29291 * mdp-isr-reload: TMS320C3x/C4x Options.
29293 * mdsp: MIPS Options. (line 156)
29294 * mdwarf2-asm: IA-64 Options. (line 79)
29295 * mdword: FRV Options. (line 32)
29296 * mdynamic-no-pic: RS/6000 and PowerPC Options.
29298 * meabi: RS/6000 and PowerPC Options.
29300 * mearly-stop-bits: IA-64 Options. (line 85)
29301 * melf <1>: MMIX Options. (line 44)
29302 * melf: CRIS Options. (line 95)
29303 * melinux: CRIS Options. (line 99)
29304 * melinux-stacksize: CRIS Options. (line 25)
29305 * memb: RS/6000 and PowerPC Options.
29307 * membedded-data: MIPS Options. (line 203)
29308 * memregs=: M32C Options. (line 21)
29309 * mep: V850 Options. (line 16)
29310 * mepsilon: MMIX Options. (line 15)
29311 * mesa: S/390 and zSeries Options.
29313 * metrax100: CRIS Options. (line 31)
29314 * metrax4: CRIS Options. (line 31)
29315 * mexplicit-relocs <1>: MIPS Options. (line 223)
29316 * mexplicit-relocs: DEC Alpha Options. (line 184)
29317 * MF: Preprocessor Options.
29319 * mfast-fix: TMS320C3x/C4x Options.
29321 * mfast-indirect-calls: HPPA Options. (line 52)
29322 * mfaster-structs: SPARC Options. (line 71)
29323 * mfdpic: FRV Options. (line 56)
29324 * mfix: DEC Alpha Options. (line 171)
29325 * mfix-and-continue: Darwin Options. (line 89)
29326 * mfix-r4000: MIPS Options. (line 287)
29327 * mfix-r4400: MIPS Options. (line 301)
29328 * mfix-sb1: MIPS Options. (line 329)
29329 * mfix-vr4120: MIPS Options. (line 308)
29330 * mfix-vr4130: MIPS Options. (line 322)
29331 * mfixed-cc: FRV Options. (line 28)
29332 * mfixed-range <1>: IA-64 Options. (line 90)
29333 * mfixed-range: HPPA Options. (line 59)
29334 * mfloat-abi: ARM Options. (line 59)
29335 * mfloat-gprs: RS/6000 and PowerPC Options.
29337 * mfloat-ieee: DEC Alpha Options. (line 179)
29338 * mfloat-vax: DEC Alpha Options. (line 179)
29339 * mfloat32: PDP-11 Options. (line 52)
29340 * mfloat64: PDP-11 Options. (line 48)
29341 * mflush-func: MIPS Options. (line 335)
29342 * mflush-func=NAME: M32R/D Options. (line 94)
29343 * mflush-trap=NUMBER: M32R/D Options. (line 87)
29344 * mfmovd: SH Options. (line 78)
29345 * mfp: ARM Options. (line 119)
29346 * mfp-exceptions: MIPS Options. (line 356)
29347 * mfp-reg: DEC Alpha Options. (line 25)
29348 * mfp-rounding-mode: DEC Alpha Options. (line 85)
29349 * mfp-trap-mode: DEC Alpha Options. (line 63)
29350 * mfp32: MIPS Options. (line 134)
29351 * mfp64: MIPS Options. (line 137)
29352 * mfpe: ARM Options. (line 119)
29353 * mfpr-32: FRV Options. (line 13)
29354 * mfpr-64: FRV Options. (line 16)
29355 * mfprnd: RS/6000 and PowerPC Options.
29357 * mfpu <1>: SPARC Options. (line 20)
29358 * mfpu <2>: PDP-11 Options. (line 9)
29359 * mfpu: ARM Options. (line 119)
29360 * mfull-toc: RS/6000 and PowerPC Options.
29362 * mfused-madd <1>: Xtensa Options. (line 19)
29363 * mfused-madd <2>: S/390 and zSeries Options.
29365 * mfused-madd <3>: RS/6000 and PowerPC Options.
29367 * mfused-madd: MIPS Options. (line 272)
29368 * mg: VAX Options. (line 17)
29369 * MG: Preprocessor Options.
29371 * mgas <1>: HPPA Options. (line 75)
29372 * mgas: DEC Alpha Options. (line 159)
29373 * mgettrcost=NUMBER: SH Options. (line 190)
29374 * mgnu: VAX Options. (line 13)
29375 * mgnu-as: IA-64 Options. (line 18)
29376 * mgnu-ld: IA-64 Options. (line 23)
29377 * mgotplt: CRIS Options. (line 86)
29378 * mgp32: MIPS Options. (line 128)
29379 * mgp64: MIPS Options. (line 131)
29380 * mgpr-32: FRV Options. (line 7)
29381 * mgpr-64: FRV Options. (line 10)
29382 * mgprel-ro: FRV Options. (line 79)
29383 * mh: H8/300 Options. (line 14)
29384 * mhard-float <1>: SPARC Options. (line 20)
29385 * mhard-float <2>: S/390 and zSeries Options.
29387 * mhard-float <3>: RS/6000 and PowerPC Options.
29389 * mhard-float <4>: MIPS Options. (line 140)
29390 * mhard-float <5>: FRV Options. (line 19)
29391 * mhard-float: ARM Options. (line 41)
29392 * mhard-quad-float: SPARC Options. (line 41)
29393 * mhardlit: MCore Options. (line 10)
29394 * mhitachi: SH Options. (line 81)
29395 * mid-shared-library: Blackfin Options. (line 39)
29396 * mieee <1>: SH Options. (line 96)
29397 * mieee: DEC Alpha Options. (line 39)
29398 * mieee-conformant: DEC Alpha Options. (line 134)
29399 * mieee-fp: i386 and x86-64 Options.
29401 * mieee-with-inexact: DEC Alpha Options. (line 52)
29402 * milp32: IA-64 Options. (line 114)
29403 * mimpure-text: SPARC Options. (line 81)
29404 * mindexed-addressing: SH Options. (line 180)
29405 * minit-stack: AVR Options. (line 35)
29406 * minline-all-stringops: i386 and x86-64 Options.
29408 * minline-float-divide-max-throughput: IA-64 Options. (line 58)
29409 * minline-float-divide-min-latency: IA-64 Options. (line 54)
29410 * minline-int-divide-max-throughput: IA-64 Options. (line 66)
29411 * minline-int-divide-min-latency: IA-64 Options. (line 62)
29412 * minline-plt: FRV Options. (line 64)
29413 * minline-sqrt-max-throughput: IA-64 Options. (line 74)
29414 * minline-sqrt-min-latency: IA-64 Options. (line 70)
29415 * minmax: M68hc1x Options. (line 31)
29416 * minsert-sched-nops: RS/6000 and PowerPC Options.
29418 * mint16: PDP-11 Options. (line 40)
29419 * mint32 <1>: PDP-11 Options. (line 44)
29420 * mint32: H8/300 Options. (line 28)
29421 * mint8: AVR Options. (line 53)
29422 * minvalid-symbols: SH Options. (line 213)
29423 * mips1: MIPS Options. (line 59)
29424 * mips16: MIPS Options. (line 81)
29425 * mips2: MIPS Options. (line 62)
29426 * mips3: MIPS Options. (line 65)
29427 * mips32: MIPS Options. (line 71)
29428 * mips32r2: MIPS Options. (line 74)
29429 * mips3d: MIPS Options. (line 168)
29430 * mips4: MIPS Options. (line 68)
29431 * mips64: MIPS Options. (line 77)
29432 * misel: RS/6000 and PowerPC Options.
29434 * misize: SH Options. (line 103)
29435 * missue-rate=NUMBER: M32R/D Options. (line 79)
29436 * mjump-in-delay: HPPA Options. (line 28)
29437 * mknuthdiv: MMIX Options. (line 33)
29438 * ml: SH Options. (line 61)
29439 * mlarge-data: DEC Alpha Options. (line 195)
29440 * mlarge-data-threshold=NUMBER: i386 and x86-64 Options.
29442 * mlarge-text: DEC Alpha Options. (line 213)
29443 * mlibfuncs: MMIX Options. (line 10)
29444 * mlibrary-pic: FRV Options. (line 110)
29445 * mlinked-fp: FRV Options. (line 94)
29446 * mlinker-opt: HPPA Options. (line 85)
29447 * mlinux: CRIS Options. (line 104)
29448 * mlittle: RS/6000 and PowerPC Options.
29450 * mlittle-endian <1>: SPARC Options. (line 181)
29451 * mlittle-endian <2>: RS/6000 and PowerPC Options.
29453 * mlittle-endian <3>: MCore Options. (line 39)
29454 * mlittle-endian <4>: IA-64 Options. (line 13)
29455 * mlittle-endian: ARM Options. (line 68)
29456 * mlong-calls <1>: V850 Options. (line 10)
29457 * mlong-calls <2>: MIPS Options. (line 258)
29458 * mlong-calls <3>: M68hc1x Options. (line 35)
29459 * mlong-calls <4>: FRV Options. (line 99)
29460 * mlong-calls <5>: Blackfin Options. (line 57)
29461 * mlong-calls: ARM Options. (line 149)
29462 * mlong-double-128: S/390 and zSeries Options.
29464 * mlong-double-64: S/390 and zSeries Options.
29466 * mlong-load-store: HPPA Options. (line 66)
29467 * mlong32: MIPS Options. (line 177)
29468 * mlong64: MIPS Options. (line 172)
29469 * mlongcall: RS/6000 and PowerPC Options.
29471 * mlongcalls: Xtensa Options. (line 60)
29472 * mloop-unsigned: TMS320C3x/C4x Options.
29474 * mlow-64k: Blackfin Options. (line 32)
29475 * mlp64: IA-64 Options. (line 114)
29476 * MM: Preprocessor Options.
29478 * mmac: CRX Options. (line 9)
29479 * mmad: MIPS Options. (line 267)
29480 * mmangle-cpu: ARC Options. (line 15)
29481 * mmax: DEC Alpha Options. (line 171)
29482 * mmax-stack-frame: CRIS Options. (line 22)
29483 * mmcu: AVR Options. (line 9)
29484 * MMD: Preprocessor Options.
29486 * mmedia: FRV Options. (line 44)
29487 * mmemcpy: MIPS Options. (line 252)
29488 * mmemory-latency: DEC Alpha Options. (line 266)
29489 * mmemparm: TMS320C3x/C4x Options.
29491 * mmfcrf: RS/6000 and PowerPC Options.
29493 * mminimal-toc: RS/6000 and PowerPC Options.
29495 * mmmx: i386 and x86-64 Options.
29497 * mmodel=large: M32R/D Options. (line 33)
29498 * mmodel=medium: M32R/D Options. (line 27)
29499 * mmodel=small: M32R/D Options. (line 18)
29500 * mmpyi: TMS320C3x/C4x Options.
29502 * mmul-bug-workaround: CRIS Options. (line 36)
29503 * mmuladd: FRV Options. (line 50)
29504 * mmult-bug: MN10300 Options. (line 9)
29505 * mmulti-cond-exec: FRV Options. (line 176)
29506 * mmultiple: RS/6000 and PowerPC Options.
29508 * mmvcle: S/390 and zSeries Options.
29510 * mmvme: RS/6000 and PowerPC Options.
29512 * mn: H8/300 Options. (line 20)
29513 * mnested-cond-exec: FRV Options. (line 189)
29514 * mnew-mnemonics: RS/6000 and PowerPC Options.
29516 * mno-3dnow: i386 and x86-64 Options.
29518 * mno-4byte-functions: MCore Options. (line 27)
29519 * mno-abicalls: MIPS Options. (line 100)
29520 * mno-abshi: PDP-11 Options. (line 58)
29521 * mno-ac0: PDP-11 Options. (line 20)
29522 * mno-align-double: i386 and x86-64 Options.
29524 * mno-align-int: M680x0 Options. (line 128)
29525 * mno-align-loops: M32R/D Options. (line 76)
29526 * mno-align-stringops: i386 and x86-64 Options.
29528 * mno-altivec: RS/6000 and PowerPC Options.
29530 * mno-am33: MN10300 Options. (line 20)
29531 * mno-app-regs <1>: V850 Options. (line 61)
29532 * mno-app-regs: SPARC Options. (line 10)
29533 * mno-bacc: MT Options. (line 19)
29534 * mno-backchain: S/390 and zSeries Options.
29536 * mno-base-addresses: MMIX Options. (line 54)
29537 * mno-bit-align: RS/6000 and PowerPC Options.
29539 * mno-bk: TMS320C3x/C4x Options.
29541 * mno-branch-likely: MIPS Options. (line 345)
29542 * mno-branch-predict: MMIX Options. (line 49)
29543 * mno-bwx: DEC Alpha Options. (line 171)
29544 * mno-callgraph-data: MCore Options. (line 31)
29545 * mno-check-zero-division: MIPS Options. (line 232)
29546 * mno-cirrus-fix-invalid-insns: ARM Options. (line 187)
29547 * mno-cix: DEC Alpha Options. (line 171)
29548 * mno-cond-exec: FRV Options. (line 158)
29549 * mno-cond-move: FRV Options. (line 134)
29550 * mno-const-align: CRIS Options. (line 60)
29551 * mno-const16: Xtensa Options. (line 10)
29552 * mno-crt0 <1>: MT Options. (line 25)
29553 * mno-crt0: MN10300 Options. (line 31)
29554 * mno-csync-anomaly: Blackfin Options. (line 28)
29555 * mno-data-align: CRIS Options. (line 60)
29556 * mno-db: TMS320C3x/C4x Options.
29558 * mno-debug: S/390 and zSeries Options.
29560 * mno-div: MCore Options. (line 15)
29561 * mno-double: FRV Options. (line 41)
29562 * mno-dsp: MIPS Options. (line 156)
29563 * mno-dwarf2-asm: IA-64 Options. (line 79)
29564 * mno-dword: FRV Options. (line 35)
29565 * mno-eabi: RS/6000 and PowerPC Options.
29567 * mno-early-stop-bits: IA-64 Options. (line 85)
29568 * mno-eflags: FRV Options. (line 125)
29569 * mno-embedded-data: MIPS Options. (line 203)
29570 * mno-ep: V850 Options. (line 16)
29571 * mno-epsilon: MMIX Options. (line 15)
29572 * mno-explicit-relocs <1>: MIPS Options. (line 223)
29573 * mno-explicit-relocs: DEC Alpha Options. (line 184)
29574 * mno-fancy-math-387: i386 and x86-64 Options.
29576 * mno-fast-fix: TMS320C3x/C4x Options.
29578 * mno-faster-structs: SPARC Options. (line 71)
29579 * mno-fix: DEC Alpha Options. (line 171)
29580 * mno-fix-r4000: MIPS Options. (line 287)
29581 * mno-fix-r4400: MIPS Options. (line 301)
29582 * mno-float32: PDP-11 Options. (line 48)
29583 * mno-float64: PDP-11 Options. (line 52)
29584 * mno-flush-func: M32R/D Options. (line 99)
29585 * mno-flush-trap: M32R/D Options. (line 91)
29586 * mno-fp-in-toc: RS/6000 and PowerPC Options.
29588 * mno-fp-regs: DEC Alpha Options. (line 25)
29589 * mno-fp-ret-in-387: i386 and x86-64 Options.
29591 * mno-fprnd: RS/6000 and PowerPC Options.
29593 * mno-fpu: SPARC Options. (line 25)
29594 * mno-fused-madd <1>: Xtensa Options. (line 19)
29595 * mno-fused-madd <2>: S/390 and zSeries Options.
29597 * mno-fused-madd <3>: RS/6000 and PowerPC Options.
29599 * mno-fused-madd: MIPS Options. (line 272)
29600 * mno-gnu-as: IA-64 Options. (line 18)
29601 * mno-gnu-ld: IA-64 Options. (line 23)
29602 * mno-gotplt: CRIS Options. (line 86)
29603 * mno-hardlit: MCore Options. (line 10)
29604 * mno-id-shared-library: Blackfin Options. (line 45)
29605 * mno-ieee-fp: i386 and x86-64 Options.
29607 * mno-int16: PDP-11 Options. (line 44)
29608 * mno-int32: PDP-11 Options. (line 40)
29609 * mno-interrupts: AVR Options. (line 39)
29610 * mno-isel: RS/6000 and PowerPC Options.
29612 * mno-knuthdiv: MMIX Options. (line 33)
29613 * mno-libfuncs: MMIX Options. (line 10)
29614 * mno-long-calls <1>: V850 Options. (line 10)
29615 * mno-long-calls <2>: MIPS Options. (line 258)
29616 * mno-long-calls <3>: M68hc1x Options. (line 35)
29617 * mno-long-calls <4>: HPPA Options. (line 138)
29618 * mno-long-calls <5>: Blackfin Options. (line 57)
29619 * mno-long-calls: ARM Options. (line 149)
29620 * mno-longcall: RS/6000 and PowerPC Options.
29622 * mno-longcalls: Xtensa Options. (line 60)
29623 * mno-loop-unsigned: TMS320C3x/C4x Options.
29625 * mno-low-64k: Blackfin Options. (line 36)
29626 * mno-mad: MIPS Options. (line 267)
29627 * mno-max: DEC Alpha Options. (line 171)
29628 * mno-media: FRV Options. (line 47)
29629 * mno-memcpy: MIPS Options. (line 252)
29630 * mno-mfcrf: RS/6000 and PowerPC Options.
29632 * mno-mips16: MIPS Options. (line 81)
29633 * mno-mips3d: MIPS Options. (line 168)
29634 * mno-mmx: i386 and x86-64 Options.
29636 * mno-mpyi: TMS320C3x/C4x Options.
29638 * mno-mul-bug-workaround: CRIS Options. (line 36)
29639 * mno-muladd: FRV Options. (line 53)
29640 * mno-mult-bug: MN10300 Options. (line 13)
29641 * mno-multi-cond-exec: FRV Options. (line 183)
29642 * mno-multiple: RS/6000 and PowerPC Options.
29644 * mno-mvcle: S/390 and zSeries Options.
29646 * mno-nested-cond-exec: FRV Options. (line 195)
29647 * mno-optimize-membar: FRV Options. (line 205)
29648 * mno-pack: FRV Options. (line 122)
29649 * mno-packed-stack: S/390 and zSeries Options.
29651 * mno-paired-single: MIPS Options. (line 161)
29652 * mno-parallel-insns: TMS320C3x/C4x Options.
29654 * mno-parallel-mpy: TMS320C3x/C4x Options.
29656 * mno-pic: IA-64 Options. (line 26)
29657 * mno-popcntb: RS/6000 and PowerPC Options.
29659 * mno-power: RS/6000 and PowerPC Options.
29661 * mno-power2: RS/6000 and PowerPC Options.
29663 * mno-powerpc: RS/6000 and PowerPC Options.
29665 * mno-powerpc-gfxopt: RS/6000 and PowerPC Options.
29667 * mno-powerpc-gpopt: RS/6000 and PowerPC Options.
29669 * mno-powerpc64: RS/6000 and PowerPC Options.
29671 * mno-prolog-function: V850 Options. (line 23)
29672 * mno-prologue-epilogue: CRIS Options. (line 76)
29673 * mno-prototype: RS/6000 and PowerPC Options.
29675 * mno-push-args: i386 and x86-64 Options.
29677 * mno-register-names: IA-64 Options. (line 37)
29678 * mno-regnames: RS/6000 and PowerPC Options.
29680 * mno-relax-immediate: MCore Options. (line 19)
29681 * mno-relocatable: RS/6000 and PowerPC Options.
29683 * mno-relocatable-lib: RS/6000 and PowerPC Options.
29685 * mno-rptb: TMS320C3x/C4x Options.
29687 * mno-rpts: TMS320C3x/C4x Options.
29689 * mno-scc: FRV Options. (line 146)
29690 * mno-sched-prolog: ARM Options. (line 32)
29691 * mno-sdata <1>: RS/6000 and PowerPC Options.
29693 * mno-sdata: IA-64 Options. (line 42)
29694 * mno-side-effects: CRIS Options. (line 51)
29695 * mno-single-exit: MMIX Options. (line 66)
29696 * mno-slow-bytes: MCore Options. (line 35)
29697 * mno-small-exec: S/390 and zSeries Options.
29699 * mno-soft-float: DEC Alpha Options. (line 10)
29700 * mno-space-regs: HPPA Options. (line 45)
29701 * mno-spe: RS/6000 and PowerPC Options.
29703 * mno-specld-anomaly: Blackfin Options. (line 19)
29704 * mno-split: PDP-11 Options. (line 71)
29705 * mno-split-addresses: MIPS Options. (line 217)
29706 * mno-sse: i386 and x86-64 Options.
29708 * mno-stack-align: CRIS Options. (line 60)
29709 * mno-stack-bias: SPARC Options. (line 218)
29710 * mno-strict-align <1>: RS/6000 and PowerPC Options.
29712 * mno-strict-align: M680x0 Options. (line 148)
29713 * mno-string: RS/6000 and PowerPC Options.
29715 * mno-sum-in-toc: RS/6000 and PowerPC Options.
29717 * mno-svr3-shlib: i386 and x86-64 Options.
29719 * mno-swdiv: RS/6000 and PowerPC Options.
29721 * mno-sym32: MIPS Options. (line 187)
29722 * mno-tablejump: AVR Options. (line 47)
29723 * mno-target-align: Xtensa Options. (line 47)
29724 * mno-text-section-literals: Xtensa Options. (line 35)
29725 * mno-toc: RS/6000 and PowerPC Options.
29727 * mno-toplevel-symbols: MMIX Options. (line 40)
29728 * mno-tpf-trace: S/390 and zSeries Options.
29730 * mno-unaligned-doubles: SPARC Options. (line 59)
29731 * mno-uninit-const-in-rodata: MIPS Options. (line 211)
29732 * mno-update: RS/6000 and PowerPC Options.
29734 * mno-v8plus: SPARC Options. (line 166)
29735 * mno-vis: SPARC Options. (line 173)
29736 * mno-vliw-branch: FRV Options. (line 170)
29737 * mno-volatile-asm-stop: IA-64 Options. (line 32)
29738 * mno-vrsave: RS/6000 and PowerPC Options.
29740 * mno-wide-bitfields: MCore Options. (line 23)
29741 * mno-xgot: MIPS Options. (line 105)
29742 * mno-xl-compat: RS/6000 and PowerPC Options.
29744 * mno-zero-extend: MMIX Options. (line 27)
29745 * mnobitfield: M680x0 Options. (line 96)
29746 * mnomacsave: SH Options. (line 92)
29747 * mnominmax: M68hc1x Options. (line 31)
29748 * mnop-fun-dllimport: ARM Options. (line 174)
29749 * mold-mnemonics: RS/6000 and PowerPC Options.
29751 * momit-leaf-frame-pointer <1>: i386 and x86-64 Options.
29753 * momit-leaf-frame-pointer: Blackfin Options. (line 7)
29754 * moptimize-membar: FRV Options. (line 201)
29755 * MP: Preprocessor Options.
29757 * mpa-risc-1-0: HPPA Options. (line 19)
29758 * mpa-risc-1-1: HPPA Options. (line 19)
29759 * mpa-risc-2-0: HPPA Options. (line 19)
29760 * mpack: FRV Options. (line 119)
29761 * mpacked-stack: S/390 and zSeries Options.
29763 * mpadstruct: SH Options. (line 106)
29764 * mpaired-single: MIPS Options. (line 161)
29765 * mparallel-insns: TMS320C3x/C4x Options.
29767 * mparallel-mpy: TMS320C3x/C4x Options.
29769 * mparanoid: TMS320C3x/C4x Options.
29771 * mpcrel: M680x0 Options. (line 140)
29772 * mpdebug: CRIS Options. (line 40)
29773 * mpe: RS/6000 and PowerPC Options.
29775 * mpentium: i386 and x86-64 Options.
29777 * mpentiumpro: i386 and x86-64 Options.
29779 * mpic-register: ARM Options. (line 183)
29780 * mpoke-function-name: ARM Options. (line 197)
29781 * mpopcntb: RS/6000 and PowerPC Options.
29783 * mportable-runtime: HPPA Options. (line 71)
29784 * mpower: RS/6000 and PowerPC Options.
29786 * mpower2: RS/6000 and PowerPC Options.
29788 * mpowerpc: RS/6000 and PowerPC Options.
29790 * mpowerpc-gfxopt: RS/6000 and PowerPC Options.
29792 * mpowerpc-gpopt: RS/6000 and PowerPC Options.
29794 * mpowerpc64: RS/6000 and PowerPC Options.
29796 * mprefergot: SH Options. (line 113)
29797 * mpreferred-stack-boundary: i386 and x86-64 Options.
29799 * mprioritize-restricted-insns: RS/6000 and PowerPC Options.
29801 * mprolog-function: V850 Options. (line 23)
29802 * mprologue-epilogue: CRIS Options. (line 76)
29803 * mprototype: RS/6000 and PowerPC Options.
29805 * mpt-fixed: SH Options. (line 194)
29806 * mpush-args <1>: i386 and x86-64 Options.
29808 * mpush-args: CRX Options. (line 13)
29809 * MQ: Preprocessor Options.
29811 * mregister-names: IA-64 Options. (line 37)
29812 * mregnames: RS/6000 and PowerPC Options.
29814 * mregparm <1>: TMS320C3x/C4x Options.
29816 * mregparm: i386 and x86-64 Options.
29818 * mrelax <1>: SH Options. (line 70)
29819 * mrelax <2>: MN10300 Options. (line 34)
29820 * mrelax: H8/300 Options. (line 9)
29821 * mrelax-immediate: MCore Options. (line 19)
29822 * mrelocatable: RS/6000 and PowerPC Options.
29824 * mrelocatable-lib: RS/6000 and PowerPC Options.
29826 * mreturn-pointer-on-d0: MN10300 Options. (line 24)
29827 * mrodata: ARC Options. (line 30)
29828 * mrptb: TMS320C3x/C4x Options.
29830 * mrpts: TMS320C3x/C4x Options.
29832 * mrtd <1>: Function Attributes.
29834 * mrtd <2>: M680x0 Options. (line 105)
29835 * mrtd: i386 and x86-64 Options.
29837 * ms: H8/300 Options. (line 17)
29838 * ms2600: H8/300 Options. (line 24)
29839 * mscc: FRV Options. (line 140)
29840 * msched-costly-dep: RS/6000 and PowerPC Options.
29842 * mschedule: HPPA Options. (line 78)
29843 * msda: V850 Options. (line 40)
29844 * msdata <1>: RS/6000 and PowerPC Options.
29846 * msdata: IA-64 Options. (line 42)
29847 * msdata-data: RS/6000 and PowerPC Options.
29849 * msdata=default: RS/6000 and PowerPC Options.
29851 * msdata=eabi: RS/6000 and PowerPC Options.
29853 * msdata=none <1>: RS/6000 and PowerPC Options.
29855 * msdata=none: M32R/D Options. (line 40)
29856 * msdata=sdata: M32R/D Options. (line 49)
29857 * msdata=sysv: RS/6000 and PowerPC Options.
29859 * msdata=use: M32R/D Options. (line 53)
29860 * msecure-plt: RS/6000 and PowerPC Options.
29862 * mshared-library-id: Blackfin Options. (line 49)
29863 * mshort <1>: M68hc1x Options. (line 40)
29864 * mshort: M680x0 Options. (line 90)
29865 * msim <1>: Xstormy16 Options. (line 9)
29866 * msim <2>: RS/6000 and PowerPC Options.
29868 * msim <3>: MT Options. (line 22)
29869 * msim: M32C Options. (line 13)
29870 * msingle-exit: MMIX Options. (line 66)
29871 * msingle-float: MIPS Options. (line 147)
29872 * msingle-pic-base: ARM Options. (line 177)
29873 * msio: HPPA Options. (line 107)
29874 * msize: AVR Options. (line 32)
29875 * mslow-bytes: MCore Options. (line 35)
29876 * msmall: TMS320C3x/C4x Options.
29878 * msmall-data: DEC Alpha Options. (line 195)
29879 * msmall-exec: S/390 and zSeries Options.
29881 * msmall-memory: TMS320C3x/C4x Options.
29883 * msmall-text: DEC Alpha Options. (line 213)
29884 * msoft-float <1>: SPARC Options. (line 25)
29885 * msoft-float <2>: S/390 and zSeries Options.
29887 * msoft-float <3>: RS/6000 and PowerPC Options.
29889 * msoft-float <4>: PDP-11 Options. (line 13)
29890 * msoft-float <5>: MIPS Options. (line 143)
29891 * msoft-float <6>: M680x0 Options. (line 80)
29892 * msoft-float <7>: i386 and x86-64 Options.
29894 * msoft-float <8>: HPPA Options. (line 91)
29895 * msoft-float <9>: FRV Options. (line 22)
29896 * msoft-float <10>: DEC Alpha Options. (line 10)
29897 * msoft-float: ARM Options. (line 45)
29898 * msoft-quad-float: SPARC Options. (line 45)
29899 * msoft-reg-count: M68hc1x Options. (line 43)
29900 * mspace <1>: V850 Options. (line 30)
29901 * mspace: SH Options. (line 110)
29902 * mspe: RS/6000 and PowerPC Options.
29904 * mspecld-anomaly: Blackfin Options. (line 14)
29905 * msplit: PDP-11 Options. (line 68)
29906 * msplit-addresses: MIPS Options. (line 217)
29907 * msse: i386 and x86-64 Options.
29909 * msseregparm: i386 and x86-64 Options.
29911 * mstack-align: CRIS Options. (line 60)
29912 * mstack-bias: SPARC Options. (line 218)
29913 * mstack-guard: S/390 and zSeries Options.
29915 * mstack-size: S/390 and zSeries Options.
29917 * mstrict-align <1>: RS/6000 and PowerPC Options.
29919 * mstrict-align: M680x0 Options. (line 148)
29920 * mstring: RS/6000 and PowerPC Options.
29922 * mstructure-size-boundary: ARM Options. (line 129)
29923 * msvr3-shlib: i386 and x86-64 Options.
29925 * msvr4-struct-return: RS/6000 and PowerPC Options.
29927 * mswdiv: RS/6000 and PowerPC Options.
29929 * msym32: MIPS Options. (line 187)
29930 * mt: IA-64 Options. (line 106)
29931 * MT: Preprocessor Options.
29933 * mtarget-align: Xtensa Options. (line 47)
29934 * mtda: V850 Options. (line 34)
29935 * mtext: ARC Options. (line 30)
29936 * mtext-section-literals: Xtensa Options. (line 35)
29937 * mthreads: i386 and x86-64 Options.
29939 * mthumb: ARM Options. (line 218)
29940 * mthumb-interwork: ARM Options. (line 25)
29941 * mti: TMS320C3x/C4x Options.
29943 * mtiny-stack: AVR Options. (line 50)
29944 * mtls-direct-seg-refs: i386 and x86-64 Options.
29946 * mtls-size: IA-64 Options. (line 97)
29947 * mtoc: RS/6000 and PowerPC Options.
29949 * mtomcat-stats: FRV Options. (line 209)
29950 * mtoplevel-symbols: MMIX Options. (line 40)
29951 * mtp: ARM Options. (line 246)
29952 * mtpcs-frame: ARM Options. (line 222)
29953 * mtpcs-leaf-frame: ARM Options. (line 228)
29954 * mtpf-trace: S/390 and zSeries Options.
29956 * mtrap-precision: DEC Alpha Options. (line 109)
29957 * mtune <1>: SPARC Options. (line 154)
29958 * mtune <2>: S/390 and zSeries Options.
29960 * mtune <3>: RS/6000 and PowerPC Options.
29962 * mtune <4>: MIPS Options. (line 44)
29963 * mtune <5>: IA-64 Options. (line 101)
29964 * mtune <6>: i386 and x86-64 Options.
29966 * mtune <7>: DEC Alpha Options. (line 262)
29967 * mtune <8>: CRIS Options. (line 16)
29968 * mtune: ARM Options. (line 99)
29969 * multcost=NUMBER: SH Options. (line 124)
29970 * multi_module: Darwin Options. (line 182)
29971 * multilib-library-pic: FRV Options. (line 89)
29972 * multiply_defined: Darwin Options. (line 182)
29973 * multiply_defined_unused: Darwin Options. (line 182)
29974 * munaligned-doubles: SPARC Options. (line 59)
29975 * muninit-const-in-rodata: MIPS Options. (line 211)
29976 * munix: VAX Options. (line 9)
29977 * munix-asm: PDP-11 Options. (line 74)
29978 * mupdate: RS/6000 and PowerPC Options.
29980 * musermode: SH Options. (line 118)
29981 * mv850: V850 Options. (line 49)
29982 * mv850e: V850 Options. (line 69)
29983 * mv850e1: V850 Options. (line 64)
29984 * mv8plus: SPARC Options. (line 166)
29985 * mvis: SPARC Options. (line 173)
29986 * mvliw-branch: FRV Options. (line 164)
29987 * mvms-return-codes: DEC Alpha/VMS Options.
29989 * mvolatile-asm-stop: IA-64 Options. (line 32)
29990 * mvr4130-align: MIPS Options. (line 366)
29991 * mvrsave: RS/6000 and PowerPC Options.
29993 * mvxworks: RS/6000 and PowerPC Options.
29995 * mwarn-dynamicstack: S/390 and zSeries Options.
29997 * mwarn-framesize: S/390 and zSeries Options.
29999 * mwide-bitfields: MCore Options. (line 23)
30000 * mwindiss: RS/6000 and PowerPC Options.
30002 * mwords-little-endian: ARM Options. (line 76)
30003 * mxgot: MIPS Options. (line 105)
30004 * mxl-compat: RS/6000 and PowerPC Options.
30006 * myellowknife: RS/6000 and PowerPC Options.
30008 * mzarch: S/390 and zSeries Options.
30010 * mzda: V850 Options. (line 45)
30011 * mzero-extend: MMIX Options. (line 27)
30012 * no-integrated-cpp: C Dialect Options. (line 190)
30013 * no-red-zone: i386 and x86-64 Options.
30015 * no_dead_strip_inits_and_terms: Darwin Options. (line 182)
30016 * noall_load: Darwin Options. (line 182)
30017 * nocpp: MIPS Options. (line 282)
30018 * nodefaultlibs: Link Options. (line 62)
30019 * nofixprebinding: Darwin Options. (line 182)
30020 * nolibdld: HPPA Options. (line 190)
30021 * nomultidefs: Darwin Options. (line 182)
30022 * noprebind: Darwin Options. (line 182)
30023 * noseglinkedit: Darwin Options. (line 182)
30024 * nostartfiles: Link Options. (line 57)
30025 * nostdinc: Preprocessor Options.
30027 * nostdinc++ <1>: Preprocessor Options.
30029 * nostdinc++: C++ Dialect Options.
30031 * nostdlib: Link Options. (line 71)
30032 * o: Preprocessor Options.
30034 * O: Optimize Options. (line 32)
30035 * o: Overall Options. (line 175)
30036 * O0: Optimize Options. (line 106)
30037 * O1: Optimize Options. (line 32)
30038 * O2: Optimize Options. (line 67)
30039 * O3: Optimize Options. (line 101)
30040 * Os: Optimize Options. (line 109)
30041 * P: Preprocessor Options.
30043 * p: Debugging Options. (line 122)
30044 * pagezero_size: Darwin Options. (line 182)
30045 * param: Optimize Options. (line 1317)
30046 * pass-exit-codes: Overall Options. (line 134)
30047 * pedantic <1>: Warnings and Errors.
30049 * pedantic <2>: Alternate Keywords. (line 29)
30050 * pedantic <3>: C Extensions. (line 6)
30051 * pedantic <4>: Preprocessor Options.
30053 * pedantic <5>: Warning Options. (line 27)
30054 * pedantic: Standards. (line 13)
30055 * pedantic-errors <1>: Warnings and Errors.
30057 * pedantic-errors <2>: Non-bugs. (line 216)
30058 * pedantic-errors <3>: Preprocessor Options.
30060 * pedantic-errors <4>: Warning Options. (line 69)
30061 * pedantic-errors: Standards. (line 13)
30062 * pg: Debugging Options. (line 128)
30063 * pie: Link Options. (line 92)
30064 * pipe: Overall Options. (line 197)
30065 * prebind: Darwin Options. (line 182)
30066 * prebind_all_twolevel_modules: Darwin Options. (line 182)
30067 * preprocessor: Preprocessor Options.
30069 * print-file-name: Debugging Options. (line 699)
30070 * print-libgcc-file-name: Debugging Options. (line 720)
30071 * print-multi-directory: Debugging Options. (line 705)
30072 * print-multi-lib: Debugging Options. (line 710)
30073 * print-objc-runtime-info: Objective-C and Objective-C++ Dialect Options.
30075 * print-prog-name: Debugging Options. (line 717)
30076 * print-search-dirs: Debugging Options. (line 728)
30077 * private_bundle: Darwin Options. (line 182)
30078 * pthread <1>: SPARC Options. (line 238)
30079 * pthread <2>: RS/6000 and PowerPC Options.
30081 * pthread: IA-64 Options. (line 106)
30082 * pthreads: SPARC Options. (line 232)
30083 * Q: Debugging Options. (line 134)
30084 * Qn: System V Options. (line 18)
30085 * Qy: System V Options. (line 14)
30086 * rdynamic: Link Options. (line 98)
30087 * read_only_relocs: Darwin Options. (line 182)
30088 * remap: Preprocessor Options.
30090 * s: Link Options. (line 105)
30091 * S <1>: Link Options. (line 20)
30092 * S: Overall Options. (line 158)
30093 * save-temps: Debugging Options. (line 661)
30094 * sectalign: Darwin Options. (line 182)
30095 * sectcreate: Darwin Options. (line 182)
30096 * sectobjectsymbols: Darwin Options. (line 182)
30097 * sectorder: Darwin Options. (line 182)
30098 * seg1addr: Darwin Options. (line 182)
30099 * seg_addr_table: Darwin Options. (line 182)
30100 * seg_addr_table_filename: Darwin Options. (line 182)
30101 * segaddr: Darwin Options. (line 182)
30102 * seglinkedit: Darwin Options. (line 182)
30103 * segprot: Darwin Options. (line 182)
30104 * segs_read_only_addr: Darwin Options. (line 182)
30105 * segs_read_write_addr: Darwin Options. (line 182)
30106 * shared: Link Options. (line 114)
30107 * shared-libgcc: Link Options. (line 122)
30108 * sim: CRIS Options. (line 108)
30109 * sim2: CRIS Options. (line 114)
30110 * single_module: Darwin Options. (line 182)
30111 * specs: Directory Options. (line 84)
30112 * static <1>: HPPA Options. (line 194)
30113 * static <2>: Darwin Options. (line 182)
30114 * static: Link Options. (line 109)
30115 * static-libgcc: Link Options. (line 122)
30116 * std <1>: Non-bugs. (line 107)
30117 * std <2>: Other Builtins. (line 22)
30118 * std <3>: C Dialect Options. (line 47)
30119 * std: Standards. (line 13)
30120 * std=: Preprocessor Options.
30122 * sub_library: Darwin Options. (line 182)
30123 * sub_umbrella: Darwin Options. (line 182)
30124 * symbolic: Link Options. (line 157)
30125 * sysroot: Directory Options. (line 92)
30126 * target-help <1>: Preprocessor Options.
30128 * target-help: Overall Options. (line 228)
30129 * threads <1>: SPARC Options. (line 226)
30130 * threads: HPPA Options. (line 207)
30131 * time: Debugging Options. (line 675)
30132 * tls: FRV Options. (line 75)
30133 * TLS: FRV Options. (line 72)
30134 * traditional <1>: Incompatibilities. (line 6)
30135 * traditional: C Dialect Options. (line 202)
30136 * traditional-cpp <1>: Preprocessor Options.
30138 * traditional-cpp: C Dialect Options. (line 202)
30139 * trigraphs <1>: Preprocessor Options.
30141 * trigraphs: C Dialect Options. (line 186)
30142 * twolevel_namespace: Darwin Options. (line 182)
30143 * u: Link Options. (line 179)
30144 * U: Preprocessor Options.
30146 * umbrella: Darwin Options. (line 182)
30147 * undef: Preprocessor Options.
30149 * undefined: Darwin Options. (line 182)
30150 * unexported_symbols_list: Darwin Options. (line 182)
30151 * V: Target Options. (line 24)
30152 * v <1>: Preprocessor Options.
30154 * v: Overall Options. (line 186)
30155 * version <1>: Preprocessor Options.
30157 * version: Overall Options. (line 232)
30158 * W: Incompatibilities. (line 64)
30159 * w: Preprocessor Options.
30161 * W: Warning Options. (line 518)
30162 * w: Warning Options. (line 73)
30163 * Wa: Assembler Options. (line 9)
30164 * Wabi: C++ Dialect Options.
30166 * Waggregate-return: Warning Options. (line 783)
30167 * Wall <1>: Standard Libraries. (line 6)
30168 * Wall <2>: Preprocessor Options.
30170 * Wall: Warning Options. (line 502)
30171 * Wassign-intercept: Objective-C and Objective-C++ Dialect Options.
30173 * Wattributes: Warning Options. (line 788)
30174 * Wbad-function-cast: Warning Options. (line 732)
30175 * Wcast-align: Warning Options. (line 746)
30176 * Wcast-qual: Warning Options. (line 741)
30177 * Wchar-subscripts: Warning Options. (line 79)
30178 * Wcomment <1>: Preprocessor Options.
30180 * Wcomment: Warning Options. (line 84)
30181 * Wcomments: Preprocessor Options.
30183 * Wconversion <1>: Protoize Caveats. (line 31)
30184 * Wconversion: Warning Options. (line 763)
30185 * Wctor-dtor-privacy: C++ Dialect Options.
30187 * Wdeclaration-after-statement: Warning Options. (line 698)
30188 * Wdisabled-optimization: Warning Options. (line 1026)
30189 * Wdiv-by-zero: Warning Options. (line 590)
30190 * weak_reference_mismatches: Darwin Options. (line 182)
30191 * Weffc++: C++ Dialect Options.
30193 * Wendif-labels <1>: Preprocessor Options.
30195 * Wendif-labels: Warning Options. (line 708)
30196 * Werror <1>: Preprocessor Options.
30198 * Werror: Warning Options. (line 1041)
30199 * Werror-implicit-function-declaration: Warning Options. (line 198)
30200 * Wextra: Warning Options. (line 518)
30201 * Wfatal-errors: Warning Options. (line 89)
30202 * Wfloat-equal: Warning Options. (line 606)
30203 * Wformat <1>: Function Attributes.
30205 * Wformat: Warning Options. (line 94)
30206 * Wformat-nonliteral <1>: Function Attributes.
30208 * Wformat-nonliteral: Warning Options. (line 151)
30209 * Wformat-security: Warning Options. (line 156)
30210 * Wformat-y2k: Warning Options. (line 129)
30211 * Wformat=2: Warning Options. (line 167)
30212 * whatsloaded: Darwin Options. (line 182)
30213 * whyload: Darwin Options. (line 182)
30214 * Wimplicit: Warning Options. (line 204)
30215 * Wimplicit-function-declaration: Warning Options. (line 198)
30216 * Wimplicit-int: Warning Options. (line 193)
30217 * Wimport: Preprocessor Options.
30219 * Winit-self: Warning Options. (line 179)
30220 * Winline <1>: Inline. (line 35)
30221 * Winline: Warning Options. (line 970)
30222 * Winvalid-pch: Warning Options. (line 1005)
30223 * Wl: Link Options. (line 175)
30224 * Wlarger-than: Warning Options. (line 717)
30225 * Wlong-long: Warning Options. (line 1009)
30226 * Wmain: Warning Options. (line 208)
30227 * Wmissing-braces: Warning Options. (line 214)
30228 * Wmissing-declarations: Warning Options. (line 810)
30229 * Wmissing-field-initializers: Warning Options. (line 816)
30230 * Wmissing-format-attribute: Warning Options. (line 842)
30231 * Wmissing-include-dirs: Warning Options. (line 224)
30232 * Wmissing-noreturn: Warning Options. (line 834)
30233 * Wmissing-prototypes: Warning Options. (line 804)
30234 * Wmultichar: Warning Options. (line 861)
30235 * Wnested-externs: Warning Options. (line 945)
30236 * Wno-attributes: Warning Options. (line 788)
30237 * Wno-deprecated: C++ Dialect Options.
30239 * Wno-deprecated-declarations: Warning Options. (line 910)
30240 * Wno-div-by-zero: Warning Options. (line 590)
30241 * Wno-endif-labels: Warning Options. (line 708)
30242 * Wno-format-extra-args: Warning Options. (line 133)
30243 * Wno-format-zero-length: Warning Options. (line 147)
30244 * Wno-import: Warning Options. (line 76)
30245 * Wno-int-to-pointer-cast: Warning Options. (line 997)
30246 * Wno-invalid-offsetof: Warning Options. (line 983)
30247 * Wno-long-long: Warning Options. (line 1009)
30248 * Wno-multichar: Warning Options. (line 861)
30249 * Wno-non-template-friend: C++ Dialect Options.
30251 * Wno-pmf-conversions <1>: Bound member functions.
30253 * Wno-pmf-conversions: C++ Dialect Options.
30255 * Wno-pointer-sign: Warning Options. (line 1035)
30256 * Wno-pointer-to-int-cast: Warning Options. (line 1001)
30257 * Wno-pragmas: Warning Options. (line 483)
30258 * Wno-protocol: Objective-C and Objective-C++ Dialect Options.
30260 * Wno-variadic-macros: Warning Options. (line 1015)
30261 * Wno-volatile-register-var: Warning Options. (line 1021)
30262 * Wnon-virtual-dtor: C++ Dialect Options.
30264 * Wnonnull: Warning Options. (line 172)
30265 * Wnormalized: Warning Options. (line 867)
30266 * Wold-style-cast: C++ Dialect Options.
30268 * Wold-style-definition: Warning Options. (line 800)
30269 * Woverloaded-virtual: C++ Dialect Options.
30271 * Wp: Preprocessor Options.
30273 * Wpacked: Warning Options. (line 916)
30274 * Wpadded: Warning Options. (line 933)
30275 * Wparentheses: Warning Options. (line 227)
30276 * Wpointer-arith <1>: Pointer Arith. (line 13)
30277 * Wpointer-arith: Warning Options. (line 726)
30278 * Wpointer-sign: Warning Options. (line 1035)
30279 * Wpragmas: Warning Options. (line 483)
30280 * Wredundant-decls: Warning Options. (line 940)
30281 * Wreorder: C++ Dialect Options.
30283 * Wreturn-type: Warning Options. (line 322)
30284 * Wselector: Objective-C and Objective-C++ Dialect Options.
30286 * Wsequence-point: Warning Options. (line 273)
30287 * Wshadow: Warning Options. (line 712)
30288 * Wsign-compare: Warning Options. (line 776)
30289 * Wsign-promo: C++ Dialect Options.
30291 * Wstrict-aliasing: Warning Options. (line 488)
30292 * Wstrict-aliasing=2: Warning Options. (line 495)
30293 * Wstrict-null-sentinel: C++ Dialect Options.
30295 * Wstrict-prototypes: Warning Options. (line 794)
30296 * Wstrict-selector-match: Objective-C and Objective-C++ Dialect Options.
30298 * Wswitch: Warning Options. (line 341)
30299 * Wswitch-enum: Warning Options. (line 352)
30300 * Wswitch-switch: Warning Options. (line 349)
30301 * Wsystem-headers <1>: Preprocessor Options.
30303 * Wsystem-headers: Warning Options. (line 595)
30304 * Wtraditional <1>: Preprocessor Options.
30306 * Wtraditional: Warning Options. (line 621)
30307 * Wtrigraphs <1>: Preprocessor Options.
30309 * Wtrigraphs: Warning Options. (line 358)
30310 * Wundeclared-selector: Objective-C and Objective-C++ Dialect Options.
30312 * Wundef <1>: Preprocessor Options.
30314 * Wundef: Warning Options. (line 705)
30315 * Wuninitialized: Warning Options. (line 403)
30316 * Wunknown-pragmas: Warning Options. (line 476)
30317 * Wunreachable-code: Warning Options. (line 948)
30318 * Wunsafe-loop-optimizations: Warning Options. (line 720)
30319 * Wunused: Warning Options. (line 396)
30320 * Wunused-function: Warning Options. (line 363)
30321 * Wunused-label: Warning Options. (line 368)
30322 * Wunused-macros: Preprocessor Options.
30324 * Wunused-parameter: Warning Options. (line 375)
30325 * Wunused-value: Warning Options. (line 390)
30326 * Wunused-variable: Warning Options. (line 382)
30327 * Wvariadic-macros: Warning Options. (line 1015)
30328 * Wvolatile-register-var: Warning Options. (line 1021)
30329 * Wwrite-strings: Warning Options. (line 752)
30330 * x <1>: Preprocessor Options.
30332 * x: Overall Options. (line 109)
30333 * Xassembler: Assembler Options. (line 13)
30334 * Xlinker: Link Options. (line 163)
30335 * Ym: System V Options. (line 26)
30336 * YP: System V Options. (line 22)
30339 File: gcc.info, Node: Keyword Index, Prev: Option Index, Up: Top
30347 * ! in constraint: Multi-Alternative. (line 33)
30348 * # in constraint: Modifiers. (line 57)
30349 * #pragma: Pragmas. (line 6)
30350 * #pragma implementation: C++ Interface. (line 39)
30351 * #pragma implementation, implied: C++ Interface. (line 46)
30352 * #pragma interface: C++ Interface. (line 20)
30353 * #pragma, reason for not using: Function Attributes.
30355 * $: Dollar Signs. (line 6)
30356 * % in constraint: Modifiers. (line 45)
30357 * %include: Spec Files. (line 27)
30358 * %include_noerr: Spec Files. (line 31)
30359 * %rename: Spec Files. (line 35)
30360 * & in constraint: Modifiers. (line 25)
30361 * ': Incompatibilities. (line 116)
30362 * * in constraint: Modifiers. (line 62)
30363 * + in constraint: Modifiers. (line 12)
30364 * -lgcc, use with -nodefaultlibs: Link Options. (line 79)
30365 * -lgcc, use with -nostdlib: Link Options. (line 79)
30366 * -nodefaultlibs and unresolved references: Link Options. (line 79)
30367 * -nostdlib and unresolved references: Link Options. (line 79)
30368 * .sdata/.sdata2 references (PowerPC): RS/6000 and PowerPC Options.
30370 * //: C++ Comments. (line 6)
30371 * 0 in constraint: Simple Constraints. (line 115)
30372 * < in constraint: Simple Constraints. (line 46)
30373 * = in constraint: Modifiers. (line 8)
30374 * > in constraint: Simple Constraints. (line 50)
30375 * ? in constraint: Multi-Alternative. (line 27)
30376 * ?: extensions: Conditionals. (line 6)
30377 * ?: side effect: Conditionals. (line 20)
30378 * _ in variables in macros: Typeof. (line 42)
30379 * __builtin___fprintf_chk: Object Size Checking.
30381 * __builtin___memcpy_chk: Object Size Checking.
30383 * __builtin___memmove_chk: Object Size Checking.
30385 * __builtin___mempcpy_chk: Object Size Checking.
30387 * __builtin___memset_chk: Object Size Checking.
30389 * __builtin___printf_chk: Object Size Checking.
30391 * __builtin___snprintf_chk: Object Size Checking.
30393 * __builtin___sprintf_chk: Object Size Checking.
30395 * __builtin___stpcpy_chk: Object Size Checking.
30397 * __builtin___strcat_chk: Object Size Checking.
30399 * __builtin___strcpy_chk: Object Size Checking.
30401 * __builtin___strncat_chk: Object Size Checking.
30403 * __builtin___strncpy_chk: Object Size Checking.
30405 * __builtin___vfprintf_chk: Object Size Checking.
30407 * __builtin___vprintf_chk: Object Size Checking.
30409 * __builtin___vsnprintf_chk: Object Size Checking.
30411 * __builtin___vsprintf_chk: Object Size Checking.
30413 * __builtin_apply: Constructing Calls. (line 31)
30414 * __builtin_apply_args: Constructing Calls. (line 20)
30415 * __builtin_choose_expr: Other Builtins. (line 150)
30416 * __builtin_clz: Other Builtins. (line 362)
30417 * __builtin_clzl: Other Builtins. (line 380)
30418 * __builtin_clzll: Other Builtins. (line 400)
30419 * __builtin_constant_p: Other Builtins. (line 190)
30420 * __builtin_ctz: Other Builtins. (line 366)
30421 * __builtin_ctzl: Other Builtins. (line 384)
30422 * __builtin_ctzll: Other Builtins. (line 404)
30423 * __builtin_expect: Other Builtins. (line 236)
30424 * __builtin_ffs: Other Builtins. (line 358)
30425 * __builtin_ffsl: Other Builtins. (line 376)
30426 * __builtin_ffsll: Other Builtins. (line 396)
30427 * __builtin_frame_address: Return Address. (line 34)
30428 * __builtin_huge_val: Other Builtins. (line 300)
30429 * __builtin_huge_valf: Other Builtins. (line 305)
30430 * __builtin_huge_vall: Other Builtins. (line 308)
30431 * __builtin_inf: Other Builtins. (line 312)
30432 * __builtin_inff: Other Builtins. (line 316)
30433 * __builtin_infl: Other Builtins. (line 321)
30434 * __builtin_isgreater: Other Builtins. (line 6)
30435 * __builtin_isgreaterequal: Other Builtins. (line 6)
30436 * __builtin_isless: Other Builtins. (line 6)
30437 * __builtin_islessequal: Other Builtins. (line 6)
30438 * __builtin_islessgreater: Other Builtins. (line 6)
30439 * __builtin_isunordered: Other Builtins. (line 6)
30440 * __builtin_nan: Other Builtins. (line 325)
30441 * __builtin_nanf: Other Builtins. (line 340)
30442 * __builtin_nanl: Other Builtins. (line 343)
30443 * __builtin_nans: Other Builtins. (line 347)
30444 * __builtin_nansf: Other Builtins. (line 351)
30445 * __builtin_nansl: Other Builtins. (line 354)
30446 * __builtin_object_size: Object Size Checking.
30448 * __builtin_offsetof: Offsetof. (line 6)
30449 * __builtin_parity: Other Builtins. (line 373)
30450 * __builtin_parityl: Other Builtins. (line 392)
30451 * __builtin_parityll: Other Builtins. (line 412)
30452 * __builtin_popcount: Other Builtins. (line 370)
30453 * __builtin_popcountl: Other Builtins. (line 388)
30454 * __builtin_popcountll: Other Builtins. (line 408)
30455 * __builtin_powi: Other Builtins. (line 6)
30456 * __builtin_powif: Other Builtins. (line 6)
30457 * __builtin_powil: Other Builtins. (line 6)
30458 * __builtin_prefetch: Other Builtins. (line 261)
30459 * __builtin_return: Constructing Calls. (line 48)
30460 * __builtin_return_address: Return Address. (line 11)
30461 * __builtin_types_compatible_p: Other Builtins. (line 104)
30462 * __complex__ keyword: Complex. (line 6)
30463 * __declspec(dllexport): Function Attributes.
30465 * __declspec(dllimport): Function Attributes.
30467 * __extension__: Alternate Keywords. (line 29)
30468 * __func__ identifier: Function Names. (line 6)
30469 * __FUNCTION__ identifier: Function Names. (line 6)
30470 * __imag__ keyword: Complex. (line 27)
30471 * __PRETTY_FUNCTION__ identifier: Function Names. (line 6)
30472 * __real__ keyword: Complex. (line 27)
30473 * __STDC_HOSTED__: Standards. (line 6)
30474 * __sync_add_and_fetch: Atomic Builtins. (line 57)
30475 * __sync_and_and_fetch: Atomic Builtins. (line 57)
30476 * __sync_bool_compare_and_swap: Atomic Builtins. (line 65)
30477 * __sync_fetch_and_add: Atomic Builtins. (line 45)
30478 * __sync_fetch_and_and: Atomic Builtins. (line 45)
30479 * __sync_fetch_and_nand: Atomic Builtins. (line 45)
30480 * __sync_fetch_and_or: Atomic Builtins. (line 45)
30481 * __sync_fetch_and_sub: Atomic Builtins. (line 45)
30482 * __sync_fetch_and_xor: Atomic Builtins. (line 45)
30483 * __sync_lock_release: Atomic Builtins. (line 95)
30484 * __sync_lock_test_and_set: Atomic Builtins. (line 77)
30485 * __sync_nand_and_fetch: Atomic Builtins. (line 57)
30486 * __sync_or_and_fetch: Atomic Builtins. (line 57)
30487 * __sync_sub_and_fetch: Atomic Builtins. (line 57)
30488 * __sync_synchronize: Atomic Builtins. (line 74)
30489 * __sync_val_compare_and_swap: Atomic Builtins. (line 65)
30490 * __sync_xor_and_fetch: Atomic Builtins. (line 57)
30491 * __thread: Thread-Local. (line 6)
30492 * _Complex keyword: Complex. (line 6)
30493 * _exit: Other Builtins. (line 6)
30494 * _Exit: Other Builtins. (line 6)
30495 * ABI: Compatibility. (line 6)
30496 * abort: Other Builtins. (line 6)
30497 * abs: Other Builtins. (line 6)
30498 * accessing volatiles: Volatiles. (line 6)
30499 * acos: Other Builtins. (line 6)
30500 * acosf: Other Builtins. (line 6)
30501 * acosh: Other Builtins. (line 6)
30502 * acoshf: Other Builtins. (line 6)
30503 * acoshl: Other Builtins. (line 6)
30504 * acosl: Other Builtins. (line 6)
30505 * Ada: G++ and GCC. (line 6)
30506 * address constraints: Simple Constraints. (line 142)
30507 * address of a label: Labels as Values. (line 6)
30508 * address_operand: Simple Constraints. (line 146)
30509 * alias attribute: Function Attributes.
30511 * aliasing of parameters: Code Gen Options. (line 333)
30512 * aligned attribute <1>: Type Attributes. (line 30)
30513 * aligned attribute: Variable Attributes.
30515 * alignment: Alignment. (line 6)
30516 * alloca: Other Builtins. (line 6)
30517 * alloca vs variable-length arrays: Variable Length. (line 27)
30518 * Allow nesting in an interrupt handler on the Blackfin processor.: Function Attributes.
30520 * alternate keywords: Alternate Keywords. (line 6)
30521 * always_inline function attribute: Function Attributes.
30523 * AMD x86-64 Options: i386 and x86-64 Options.
30525 * AMD1: Standards. (line 6)
30526 * ANSI C: Standards. (line 6)
30527 * ANSI C standard: Standards. (line 6)
30528 * ANSI C89: Standards. (line 6)
30529 * ANSI support: C Dialect Options. (line 10)
30530 * ANSI X3.159-1989: Standards. (line 6)
30531 * apostrophes: Incompatibilities. (line 116)
30532 * application binary interface: Compatibility. (line 6)
30533 * ARC Options: ARC Options. (line 6)
30534 * ARM [Annotated C++ Reference Manual]: Backwards Compatibility.
30536 * ARM options: ARM Options. (line 6)
30537 * arrays of length zero: Zero Length. (line 6)
30538 * arrays of variable length: Variable Length. (line 6)
30539 * arrays, non-lvalue: Subscripting. (line 6)
30540 * asin: Other Builtins. (line 6)
30541 * asinf: Other Builtins. (line 6)
30542 * asinh: Other Builtins. (line 6)
30543 * asinhf: Other Builtins. (line 6)
30544 * asinhl: Other Builtins. (line 6)
30545 * asinl: Other Builtins. (line 6)
30546 * asm constraints: Constraints. (line 6)
30547 * asm expressions: Extended Asm. (line 6)
30548 * assembler instructions: Extended Asm. (line 6)
30549 * assembler names for identifiers: Asm Labels. (line 6)
30550 * assembly code, invalid: Bug Criteria. (line 12)
30551 * atan: Other Builtins. (line 6)
30552 * atan2: Other Builtins. (line 6)
30553 * atan2f: Other Builtins. (line 6)
30554 * atan2l: Other Builtins. (line 6)
30555 * atanf: Other Builtins. (line 6)
30556 * atanh: Other Builtins. (line 6)
30557 * atanhf: Other Builtins. (line 6)
30558 * atanhl: Other Builtins. (line 6)
30559 * atanl: Other Builtins. (line 6)
30560 * attribute of types: Type Attributes. (line 6)
30561 * attribute of variables: Variable Attributes.
30563 * attribute syntax: Attribute Syntax. (line 6)
30564 * autoincrement/decrement addressing: Simple Constraints. (line 28)
30565 * automatic inline for C++ member fns: Inline. (line 46)
30566 * AVR Options: AVR Options. (line 6)
30567 * Backwards Compatibility: Backwards Compatibility.
30569 * base class members: Name lookup. (line 6)
30570 * bcmp: Other Builtins. (line 6)
30571 * below100 attribute: Variable Attributes.
30573 * binary compatibility: Compatibility. (line 6)
30574 * Blackfin Options: Blackfin Options. (line 6)
30575 * bound pointer to member function: Bound member functions.
30577 * bounds checking: Optimize Options. (line 336)
30578 * bug criteria: Bug Criteria. (line 6)
30579 * bugs: Bugs. (line 6)
30580 * bugs, known: Trouble. (line 6)
30581 * built-in functions <1>: Other Builtins. (line 6)
30582 * built-in functions: C Dialect Options. (line 128)
30583 * bzero: Other Builtins. (line 6)
30584 * C compilation options: Invoking GCC. (line 17)
30585 * C intermediate output, nonexistent: G++ and GCC. (line 35)
30586 * C language extensions: C Extensions. (line 6)
30587 * C language, traditional: C Dialect Options. (line 200)
30588 * C standard: Standards. (line 6)
30589 * C standards: Standards. (line 6)
30590 * c++: Invoking G++. (line 13)
30591 * C++: G++ and GCC. (line 30)
30592 * C++ comments: C++ Comments. (line 6)
30593 * C++ compilation options: Invoking GCC. (line 23)
30594 * C++ interface and implementation headers: C++ Interface. (line 6)
30595 * C++ language extensions: C++ Extensions. (line 6)
30596 * C++ member fns, automatically inline: Inline. (line 46)
30597 * C++ misunderstandings: C++ Misunderstandings.
30599 * C++ options, command line: C++ Dialect Options.
30601 * C++ pragmas, effect on inlining: C++ Interface. (line 66)
30602 * C++ source file suffixes: Invoking G++. (line 6)
30603 * C++ static data, declaring and defining: Static Definitions.
30605 * C89: Standards. (line 6)
30606 * C90: Standards. (line 6)
30607 * C94: Standards. (line 6)
30608 * C95: Standards. (line 6)
30609 * C99: Standards. (line 6)
30610 * C9X: Standards. (line 6)
30611 * C_INCLUDE_PATH: Environment Variables.
30613 * cabs: Other Builtins. (line 6)
30614 * cabsf: Other Builtins. (line 6)
30615 * cabsl: Other Builtins. (line 6)
30616 * cacos: Other Builtins. (line 6)
30617 * cacosf: Other Builtins. (line 6)
30618 * cacosh: Other Builtins. (line 6)
30619 * cacoshf: Other Builtins. (line 6)
30620 * cacoshl: Other Builtins. (line 6)
30621 * cacosl: Other Builtins. (line 6)
30622 * calling functions through the function vector on the H8/300 processors: Function Attributes.
30624 * calloc: Other Builtins. (line 6)
30625 * carg: Other Builtins. (line 6)
30626 * cargf: Other Builtins. (line 6)
30627 * cargl: Other Builtins. (line 6)
30628 * case labels in initializers: Designated Inits. (line 6)
30629 * case ranges: Case Ranges. (line 6)
30630 * casin: Other Builtins. (line 6)
30631 * casinf: Other Builtins. (line 6)
30632 * casinh: Other Builtins. (line 6)
30633 * casinhf: Other Builtins. (line 6)
30634 * casinhl: Other Builtins. (line 6)
30635 * casinl: Other Builtins. (line 6)
30636 * cast to a union: Cast to Union. (line 6)
30637 * catan: Other Builtins. (line 6)
30638 * catanf: Other Builtins. (line 6)
30639 * catanh: Other Builtins. (line 6)
30640 * catanhf: Other Builtins. (line 6)
30641 * catanhl: Other Builtins. (line 6)
30642 * catanl: Other Builtins. (line 6)
30643 * cbrt: Other Builtins. (line 6)
30644 * cbrtf: Other Builtins. (line 6)
30645 * cbrtl: Other Builtins. (line 6)
30646 * ccos: Other Builtins. (line 6)
30647 * ccosf: Other Builtins. (line 6)
30648 * ccosh: Other Builtins. (line 6)
30649 * ccoshf: Other Builtins. (line 6)
30650 * ccoshl: Other Builtins. (line 6)
30651 * ccosl: Other Builtins. (line 6)
30652 * ceil: Other Builtins. (line 6)
30653 * ceilf: Other Builtins. (line 6)
30654 * ceill: Other Builtins. (line 6)
30655 * cexp: Other Builtins. (line 6)
30656 * cexpf: Other Builtins. (line 6)
30657 * cexpl: Other Builtins. (line 6)
30658 * character set, execution: Preprocessor Options.
30660 * character set, input: Preprocessor Options.
30662 * character set, input normalization: Warning Options. (line 867)
30663 * character set, wide execution: Preprocessor Options.
30665 * cimag: Other Builtins. (line 6)
30666 * cimagf: Other Builtins. (line 6)
30667 * cimagl: Other Builtins. (line 6)
30668 * cleanup attribute: Variable Attributes.
30670 * clog: Other Builtins. (line 6)
30671 * clogf: Other Builtins. (line 6)
30672 * clogl: Other Builtins. (line 6)
30673 * COBOL: G++ and GCC. (line 23)
30674 * code generation conventions: Code Gen Options. (line 6)
30675 * code, mixed with declarations: Mixed Declarations. (line 6)
30676 * command options: Invoking GCC. (line 6)
30677 * comments, C++ style: C++ Comments. (line 6)
30678 * common attribute: Variable Attributes.
30680 * comparison of signed and unsigned values, warning: Warning Options.
30682 * compiler bugs, reporting: Bug Reporting. (line 6)
30683 * compiler compared to C++ preprocessor: G++ and GCC. (line 35)
30684 * compiler options, C++: C++ Dialect Options.
30686 * compiler options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
30688 * compiler version, specifying: Target Options. (line 6)
30689 * COMPILER_PATH: Environment Variables.
30691 * complex conjugation: Complex. (line 34)
30692 * complex numbers: Complex. (line 6)
30693 * compound literals: Compound Literals. (line 6)
30694 * computed gotos: Labels as Values. (line 6)
30695 * conditional expressions, extensions: Conditionals. (line 6)
30696 * conflicting types: Disappointments. (line 21)
30697 * conj: Other Builtins. (line 6)
30698 * conjf: Other Builtins. (line 6)
30699 * conjl: Other Builtins. (line 6)
30700 * const applied to function: Function Attributes.
30702 * const function attribute: Function Attributes.
30704 * constants in constraints: Simple Constraints. (line 58)
30705 * constraint modifier characters: Modifiers. (line 6)
30706 * constraint, matching: Simple Constraints. (line 127)
30707 * constraints, asm: Constraints. (line 6)
30708 * constraints, machine specific: Machine Constraints.
30710 * constructing calls: Constructing Calls. (line 6)
30711 * constructor expressions: Compound Literals. (line 6)
30712 * constructor function attribute: Function Attributes.
30714 * contributors: Contributors. (line 6)
30715 * copysign: Other Builtins. (line 6)
30716 * copysignf: Other Builtins. (line 6)
30717 * copysignl: Other Builtins. (line 6)
30718 * core dump: Bug Criteria. (line 9)
30719 * cos: Other Builtins. (line 6)
30720 * cosf: Other Builtins. (line 6)
30721 * cosh: Other Builtins. (line 6)
30722 * coshf: Other Builtins. (line 6)
30723 * coshl: Other Builtins. (line 6)
30724 * cosl: Other Builtins. (line 6)
30725 * CPATH: Environment Variables.
30727 * CPLUS_INCLUDE_PATH: Environment Variables.
30729 * cpow: Other Builtins. (line 6)
30730 * cpowf: Other Builtins. (line 6)
30731 * cpowl: Other Builtins. (line 6)
30732 * cproj: Other Builtins. (line 6)
30733 * cprojf: Other Builtins. (line 6)
30734 * cprojl: Other Builtins. (line 6)
30735 * creal: Other Builtins. (line 6)
30736 * crealf: Other Builtins. (line 6)
30737 * creall: Other Builtins. (line 6)
30738 * CRIS Options: CRIS Options. (line 6)
30739 * cross compiling: Target Options. (line 6)
30740 * CRX Options: CRX Options. (line 6)
30741 * csin: Other Builtins. (line 6)
30742 * csinf: Other Builtins. (line 6)
30743 * csinh: Other Builtins. (line 6)
30744 * csinhf: Other Builtins. (line 6)
30745 * csinhl: Other Builtins. (line 6)
30746 * csinl: Other Builtins. (line 6)
30747 * csqrt: Other Builtins. (line 6)
30748 * csqrtf: Other Builtins. (line 6)
30749 * csqrtl: Other Builtins. (line 6)
30750 * ctan: Other Builtins. (line 6)
30751 * ctanf: Other Builtins. (line 6)
30752 * ctanh: Other Builtins. (line 6)
30753 * ctanhf: Other Builtins. (line 6)
30754 * ctanhl: Other Builtins. (line 6)
30755 * ctanl: Other Builtins. (line 6)
30756 * Darwin options: Darwin Options. (line 6)
30757 * dcgettext: Other Builtins. (line 6)
30758 * deallocating variable length arrays: Variable Length. (line 23)
30759 * debugging information options: Debugging Options. (line 6)
30760 * declaration scope: Incompatibilities. (line 80)
30761 * declarations inside expressions: Statement Exprs. (line 6)
30762 * declarations, mixed with code: Mixed Declarations. (line 6)
30763 * declaring attributes of functions: Function Attributes.
30765 * declaring static data in C++: Static Definitions. (line 6)
30766 * defining static data in C++: Static Definitions. (line 6)
30767 * dependencies for make as output: Environment Variables.
30769 * dependencies, make: Preprocessor Options.
30771 * DEPENDENCIES_OUTPUT: Environment Variables.
30773 * dependent name lookup: Name lookup. (line 6)
30774 * deprecated attribute: Variable Attributes.
30776 * deprecated attribute.: Function Attributes.
30778 * designated initializers: Designated Inits. (line 6)
30779 * designator lists: Designated Inits. (line 94)
30780 * designators: Designated Inits. (line 61)
30781 * destructor function attribute: Function Attributes.
30783 * dgettext: Other Builtins. (line 6)
30784 * diagnostic messages: Language Independent Options.
30786 * dialect options: C Dialect Options. (line 6)
30787 * digits in constraint: Simple Constraints. (line 115)
30788 * directory options: Directory Options. (line 6)
30789 * dollar signs in identifier names: Dollar Signs. (line 6)
30790 * double-word arithmetic: Long Long. (line 6)
30791 * downward funargs: Nested Functions. (line 6)
30792 * drem: Other Builtins. (line 6)
30793 * dremf: Other Builtins. (line 6)
30794 * dreml: Other Builtins. (line 6)
30795 * E in constraint: Simple Constraints. (line 77)
30796 * earlyclobber operand: Modifiers. (line 25)
30797 * eight bit data on the H8/300, H8/300H, and H8S: Function Attributes.
30799 * empty structures: Empty Structures. (line 6)
30800 * environment variables: Environment Variables.
30802 * erf: Other Builtins. (line 6)
30803 * erfc: Other Builtins. (line 6)
30804 * erfcf: Other Builtins. (line 6)
30805 * erfcl: Other Builtins. (line 6)
30806 * erff: Other Builtins. (line 6)
30807 * erfl: Other Builtins. (line 6)
30808 * error messages: Warnings and Errors.
30810 * escaped newlines: Escaped Newlines. (line 6)
30811 * exception handler functions on the Blackfin processor: Function Attributes.
30813 * exclamation point: Multi-Alternative. (line 33)
30814 * exit: Other Builtins. (line 6)
30815 * exp: Other Builtins. (line 6)
30816 * exp10: Other Builtins. (line 6)
30817 * exp10f: Other Builtins. (line 6)
30818 * exp10l: Other Builtins. (line 6)
30819 * exp2: Other Builtins. (line 6)
30820 * exp2f: Other Builtins. (line 6)
30821 * exp2l: Other Builtins. (line 6)
30822 * expf: Other Builtins. (line 6)
30823 * expl: Other Builtins. (line 6)
30824 * explicit register variables: Explicit Reg Vars. (line 6)
30825 * expm1: Other Builtins. (line 6)
30826 * expm1f: Other Builtins. (line 6)
30827 * expm1l: Other Builtins. (line 6)
30828 * expressions containing statements: Statement Exprs. (line 6)
30829 * expressions, constructor: Compound Literals. (line 6)
30830 * extended asm: Extended Asm. (line 6)
30831 * extensible constraints: Simple Constraints. (line 151)
30832 * extensions, ?:: Conditionals. (line 6)
30833 * extensions, C language: C Extensions. (line 6)
30834 * extensions, C++ language: C++ Extensions. (line 6)
30835 * external declaration scope: Incompatibilities. (line 80)
30836 * externally_visible attribute.: Function Attributes.
30838 * F in constraint: Simple Constraints. (line 82)
30839 * fabs: Other Builtins. (line 6)
30840 * fabsf: Other Builtins. (line 6)
30841 * fabsl: Other Builtins. (line 6)
30842 * fatal signal: Bug Criteria. (line 9)
30843 * fdim: Other Builtins. (line 6)
30844 * fdimf: Other Builtins. (line 6)
30845 * fdiml: Other Builtins. (line 6)
30846 * FDL, GNU Free Documentation License: GNU Free Documentation License.
30848 * ffs: Other Builtins. (line 6)
30849 * file name suffix: Overall Options. (line 14)
30850 * file names: Link Options. (line 10)
30851 * flatten function attribute: Function Attributes.
30853 * flexible array members: Zero Length. (line 6)
30854 * float as function value type: Incompatibilities. (line 141)
30855 * floating point precision <1>: Disappointments. (line 68)
30856 * floating point precision: Optimize Options. (line 1043)
30857 * floor: Other Builtins. (line 6)
30858 * floorf: Other Builtins. (line 6)
30859 * floorl: Other Builtins. (line 6)
30860 * fma: Other Builtins. (line 6)
30861 * fmaf: Other Builtins. (line 6)
30862 * fmal: Other Builtins. (line 6)
30863 * fmax: Other Builtins. (line 6)
30864 * fmaxf: Other Builtins. (line 6)
30865 * fmaxl: Other Builtins. (line 6)
30866 * fmin: Other Builtins. (line 6)
30867 * fminf: Other Builtins. (line 6)
30868 * fminl: Other Builtins. (line 6)
30869 * fmod: Other Builtins. (line 6)
30870 * fmodf: Other Builtins. (line 6)
30871 * fmodl: Other Builtins. (line 6)
30872 * format function attribute: Function Attributes.
30874 * format_arg function attribute: Function Attributes.
30876 * Fortran: G++ and GCC. (line 6)
30877 * forwarding calls: Constructing Calls. (line 6)
30878 * fprintf: Other Builtins. (line 6)
30879 * fprintf_unlocked: Other Builtins. (line 6)
30880 * fputs: Other Builtins. (line 6)
30881 * fputs_unlocked: Other Builtins. (line 6)
30882 * freestanding environment: Standards. (line 6)
30883 * freestanding implementation: Standards. (line 6)
30884 * frexp: Other Builtins. (line 6)
30885 * frexpf: Other Builtins. (line 6)
30886 * frexpl: Other Builtins. (line 6)
30887 * FRV Options: FRV Options. (line 6)
30888 * fscanf: Other Builtins. (line 6)
30889 * fscanf, and constant strings: Incompatibilities. (line 17)
30890 * function addressability on the M32R/D: Function Attributes.
30892 * function attributes: Function Attributes.
30894 * function pointers, arithmetic: Pointer Arith. (line 6)
30895 * function prototype declarations: Function Prototypes.
30897 * function without a prologue/epilogue code: Function Attributes.
30899 * function, size of pointer to: Pointer Arith. (line 6)
30900 * functions called via pointer on the RS/6000 and PowerPC: Function Attributes.
30902 * functions in arbitrary sections: Function Attributes.
30904 * functions that are passed arguments in registers on the 386: Function Attributes.
30906 * functions that behave like malloc: Function Attributes.
30908 * functions that do not pop the argument stack on the 386: Function Attributes.
30910 * functions that do pop the argument stack on the 386: Function Attributes.
30912 * functions that have no side effects: Function Attributes.
30914 * functions that never return: Function Attributes.
30916 * functions that pop the argument stack on the 386: Function Attributes.
30918 * functions that return more than once: Function Attributes.
30920 * functions which do not handle memory bank switching on 68HC11/68HC12: Function Attributes.
30922 * functions which handle memory bank switching: Function Attributes.
30924 * functions with non-null pointer arguments: Function Attributes.
30926 * functions with printf, scanf, strftime or strfmon style arguments: Function Attributes.
30928 * g in constraint: Simple Constraints. (line 108)
30929 * G in constraint: Simple Constraints. (line 86)
30930 * g++: Invoking G++. (line 13)
30931 * G++: G++ and GCC. (line 30)
30932 * gamma: Other Builtins. (line 6)
30933 * gammaf: Other Builtins. (line 6)
30934 * gammal: Other Builtins. (line 6)
30935 * GCC: G++ and GCC. (line 6)
30936 * GCC command options: Invoking GCC. (line 6)
30937 * GCC_EXEC_PREFIX: Environment Variables.
30939 * gcc_struct: Type Attributes. (line 288)
30940 * gcc_struct attribute: Variable Attributes.
30942 * gcov: Debugging Options. (line 160)
30943 * gettext: Other Builtins. (line 6)
30944 * global offset table: Code Gen Options. (line 170)
30945 * global register after longjmp: Global Reg Vars. (line 66)
30946 * global register variables: Global Reg Vars. (line 6)
30947 * GNAT: G++ and GCC. (line 30)
30948 * GNU C Compiler: G++ and GCC. (line 6)
30949 * GNU Compiler Collection: G++ and GCC. (line 6)
30950 * goto with computed label: Labels as Values. (line 6)
30951 * gp-relative references (MIPS): MIPS Options. (line 194)
30952 * gprof: Debugging Options. (line 127)
30953 * grouping options: Invoking GCC. (line 26)
30954 * H in constraint: Simple Constraints. (line 86)
30955 * hardware models and configurations, specifying: Submodel Options.
30957 * hex floats: Hex Floats. (line 6)
30958 * hosted environment <1>: C Dialect Options. (line 162)
30959 * hosted environment: Standards. (line 6)
30960 * hosted implementation: Standards. (line 6)
30961 * HPPA Options: HPPA Options. (line 6)
30962 * hypot: Other Builtins. (line 6)
30963 * hypotf: Other Builtins. (line 6)
30964 * hypotl: Other Builtins. (line 6)
30965 * I in constraint: Simple Constraints. (line 69)
30966 * i in constraint: Simple Constraints. (line 58)
30967 * i386 Options: i386 and x86-64 Options.
30969 * IA-64 Options: IA-64 Options. (line 6)
30970 * IBM RS/6000 and PowerPC Options: RS/6000 and PowerPC Options.
30972 * identifier names, dollar signs in: Dollar Signs. (line 6)
30973 * identifiers, names in assembler code: Asm Labels. (line 6)
30974 * ilogb: Other Builtins. (line 6)
30975 * ilogbf: Other Builtins. (line 6)
30976 * ilogbl: Other Builtins. (line 6)
30977 * imaxabs: Other Builtins. (line 6)
30978 * implementation-defined behavior, C language: C Implementation.
30980 * implied #pragma implementation: C++ Interface. (line 46)
30981 * incompatibilities of GCC: Incompatibilities. (line 6)
30982 * increment operators: Bug Criteria. (line 17)
30983 * index: Other Builtins. (line 6)
30984 * indirect calls on ARM: Function Attributes.
30986 * indirect calls on MIPS: Function Attributes.
30988 * init_priority attribute: C++ Attributes. (line 9)
30989 * initializations in expressions: Compound Literals. (line 6)
30990 * initializers with labeled elements: Designated Inits. (line 6)
30991 * initializers, non-constant: Initializers. (line 6)
30992 * inline automatic for C++ member fns: Inline. (line 46)
30993 * inline functions: Inline. (line 6)
30994 * inline functions, omission of: Inline. (line 51)
30995 * inlining and C++ pragmas: C++ Interface. (line 66)
30996 * installation trouble: Trouble. (line 6)
30997 * integrating function code: Inline. (line 6)
30998 * Intel 386 Options: i386 and x86-64 Options.
31000 * interface and implementation headers, C++: C++ Interface. (line 6)
31001 * intermediate C version, nonexistent: G++ and GCC. (line 35)
31002 * interrupt handler functions: Function Attributes.
31004 * interrupt handler functions on the Blackfin, m68k, H8/300 and SH processors: Function Attributes.
31006 * introduction: Top. (line 6)
31007 * invalid assembly code: Bug Criteria. (line 12)
31008 * invalid input: Bug Criteria. (line 42)
31009 * invoking g++: Invoking G++. (line 23)
31010 * isalnum: Other Builtins. (line 6)
31011 * isalpha: Other Builtins. (line 6)
31012 * isascii: Other Builtins. (line 6)
31013 * isblank: Other Builtins. (line 6)
31014 * iscntrl: Other Builtins. (line 6)
31015 * isdigit: Other Builtins. (line 6)
31016 * isgraph: Other Builtins. (line 6)
31017 * islower: Other Builtins. (line 6)
31018 * ISO 9899: Standards. (line 6)
31019 * ISO C: Standards. (line 6)
31020 * ISO C standard: Standards. (line 6)
31021 * ISO C90: Standards. (line 6)
31022 * ISO C94: Standards. (line 6)
31023 * ISO C95: Standards. (line 6)
31024 * ISO C99: Standards. (line 6)
31025 * ISO C9X: Standards. (line 6)
31026 * ISO support: C Dialect Options. (line 10)
31027 * ISO/IEC 9899: Standards. (line 6)
31028 * isprint: Other Builtins. (line 6)
31029 * ispunct: Other Builtins. (line 6)
31030 * isspace: Other Builtins. (line 6)
31031 * isupper: Other Builtins. (line 6)
31032 * iswalnum: Other Builtins. (line 6)
31033 * iswalpha: Other Builtins. (line 6)
31034 * iswblank: Other Builtins. (line 6)
31035 * iswcntrl: Other Builtins. (line 6)
31036 * iswdigit: Other Builtins. (line 6)
31037 * iswgraph: Other Builtins. (line 6)
31038 * iswlower: Other Builtins. (line 6)
31039 * iswprint: Other Builtins. (line 6)
31040 * iswpunct: Other Builtins. (line 6)
31041 * iswspace: Other Builtins. (line 6)
31042 * iswupper: Other Builtins. (line 6)
31043 * iswxdigit: Other Builtins. (line 6)
31044 * isxdigit: Other Builtins. (line 6)
31045 * j0: Other Builtins. (line 6)
31046 * j0f: Other Builtins. (line 6)
31047 * j0l: Other Builtins. (line 6)
31048 * j1: Other Builtins. (line 6)
31049 * j1f: Other Builtins. (line 6)
31050 * j1l: Other Builtins. (line 6)
31051 * Java: G++ and GCC. (line 6)
31052 * java_interface attribute: C++ Attributes. (line 29)
31053 * jn: Other Builtins. (line 6)
31054 * jnf: Other Builtins. (line 6)
31055 * jnl: Other Builtins. (line 6)
31056 * keywords, alternate: Alternate Keywords. (line 6)
31057 * known causes of trouble: Trouble. (line 6)
31058 * labeled elements in initializers: Designated Inits. (line 6)
31059 * labels as values: Labels as Values. (line 6)
31060 * labs: Other Builtins. (line 6)
31061 * LANG: Environment Variables.
31063 * language dialect options: C Dialect Options. (line 6)
31064 * LC_ALL: Environment Variables.
31066 * LC_CTYPE: Environment Variables.
31068 * LC_MESSAGES: Environment Variables.
31070 * ldexp: Other Builtins. (line 6)
31071 * ldexpf: Other Builtins. (line 6)
31072 * ldexpl: Other Builtins. (line 6)
31073 * length-zero arrays: Zero Length. (line 6)
31074 * lgamma: Other Builtins. (line 6)
31075 * lgammaf: Other Builtins. (line 6)
31076 * lgammal: Other Builtins. (line 6)
31077 * Libraries: Link Options. (line 24)
31078 * LIBRARY_PATH: Environment Variables.
31080 * link options: Link Options. (line 6)
31081 * LL integer suffix: Long Long. (line 6)
31082 * llabs: Other Builtins. (line 6)
31083 * llrint: Other Builtins. (line 6)
31084 * llrintf: Other Builtins. (line 6)
31085 * llrintl: Other Builtins. (line 6)
31086 * llround: Other Builtins. (line 6)
31087 * llroundf: Other Builtins. (line 6)
31088 * llroundl: Other Builtins. (line 6)
31089 * load address instruction: Simple Constraints. (line 142)
31090 * local labels: Local Labels. (line 6)
31091 * local variables in macros: Typeof. (line 42)
31092 * local variables, specifying registers: Local Reg Vars. (line 6)
31093 * locale: Environment Variables.
31095 * locale definition: Environment Variables.
31097 * log: Other Builtins. (line 6)
31098 * log10: Other Builtins. (line 6)
31099 * log10f: Other Builtins. (line 6)
31100 * log10l: Other Builtins. (line 6)
31101 * log1p: Other Builtins. (line 6)
31102 * log1pf: Other Builtins. (line 6)
31103 * log1pl: Other Builtins. (line 6)
31104 * log2: Other Builtins. (line 6)
31105 * log2f: Other Builtins. (line 6)
31106 * log2l: Other Builtins. (line 6)
31107 * logb: Other Builtins. (line 6)
31108 * logbf: Other Builtins. (line 6)
31109 * logbl: Other Builtins. (line 6)
31110 * logf: Other Builtins. (line 6)
31111 * logl: Other Builtins. (line 6)
31112 * long long data types: Long Long. (line 6)
31113 * longjmp: Global Reg Vars. (line 66)
31114 * longjmp incompatibilities: Incompatibilities. (line 39)
31115 * longjmp warnings: Warning Options. (line 459)
31116 * lrint: Other Builtins. (line 6)
31117 * lrintf: Other Builtins. (line 6)
31118 * lrintl: Other Builtins. (line 6)
31119 * lround: Other Builtins. (line 6)
31120 * lroundf: Other Builtins. (line 6)
31121 * lroundl: Other Builtins. (line 6)
31122 * m in constraint: Simple Constraints. (line 17)
31123 * M32C options: M32C Options. (line 6)
31124 * M32R/D options: M32R/D Options. (line 6)
31125 * M680x0 options: M680x0 Options. (line 6)
31126 * M68hc1x options: M68hc1x Options. (line 6)
31127 * machine dependent options: Submodel Options. (line 6)
31128 * machine specific constraints: Machine Constraints.
31130 * macro with variable arguments: Variadic Macros. (line 6)
31131 * macros containing asm: Extended Asm. (line 239)
31132 * macros, inline alternative: Inline. (line 6)
31133 * macros, local labels: Local Labels. (line 6)
31134 * macros, local variables in: Typeof. (line 42)
31135 * macros, statements in expressions: Statement Exprs. (line 6)
31136 * macros, types of arguments: Typeof. (line 6)
31137 * make: Preprocessor Options.
31139 * malloc: Other Builtins. (line 6)
31140 * malloc attribute: Function Attributes.
31142 * matching constraint: Simple Constraints. (line 127)
31143 * MCore options: MCore Options. (line 6)
31144 * member fns, automatically inline: Inline. (line 46)
31145 * memcmp: Other Builtins. (line 6)
31146 * memcpy: Other Builtins. (line 6)
31147 * memory references in constraints: Simple Constraints. (line 17)
31148 * mempcpy: Other Builtins. (line 6)
31149 * memset: Other Builtins. (line 6)
31150 * Mercury: G++ and GCC. (line 23)
31151 * message formatting: Language Independent Options.
31153 * messages, warning: Warning Options. (line 6)
31154 * messages, warning and error: Warnings and Errors.
31156 * middle-operands, omitted: Conditionals. (line 6)
31157 * MIPS options: MIPS Options. (line 6)
31158 * misunderstandings in C++: C++ Misunderstandings.
31160 * mixed declarations and code: Mixed Declarations. (line 6)
31161 * mktemp, and constant strings: Incompatibilities. (line 13)
31162 * MMIX Options: MMIX Options. (line 6)
31163 * MN10300 options: MN10300 Options. (line 6)
31164 * mode attribute: Variable Attributes.
31166 * modf: Other Builtins. (line 6)
31167 * modff: Other Builtins. (line 6)
31168 * modfl: Other Builtins. (line 6)
31169 * modifiers in constraints: Modifiers. (line 6)
31170 * ms_struct: Type Attributes. (line 288)
31171 * ms_struct attribute: Variable Attributes.
31173 * MT options: MT Options. (line 6)
31174 * mudflap: Optimize Options. (line 336)
31175 * multiple alternative constraints: Multi-Alternative. (line 6)
31176 * multiprecision arithmetic: Long Long. (line 6)
31177 * n in constraint: Simple Constraints. (line 63)
31178 * names used in assembler code: Asm Labels. (line 6)
31179 * naming convention, implementation headers: C++ Interface. (line 46)
31180 * nearbyint: Other Builtins. (line 6)
31181 * nearbyintf: Other Builtins. (line 6)
31182 * nearbyintl: Other Builtins. (line 6)
31183 * nested functions: Nested Functions. (line 6)
31184 * newlines (escaped): Escaped Newlines. (line 6)
31185 * nextafter: Other Builtins. (line 6)
31186 * nextafterf: Other Builtins. (line 6)
31187 * nextafterl: Other Builtins. (line 6)
31188 * nexttoward: Other Builtins. (line 6)
31189 * nexttowardf: Other Builtins. (line 6)
31190 * nexttowardl: Other Builtins. (line 6)
31191 * NFC: Warning Options. (line 867)
31192 * NFKC: Warning Options. (line 867)
31193 * NMI handler functions on the Blackfin processor: Function Attributes.
31195 * no_instrument_function function attribute: Function Attributes.
31197 * nocommon attribute: Variable Attributes.
31199 * noinline function attribute: Function Attributes.
31201 * non-constant initializers: Initializers. (line 6)
31202 * non-static inline function: Inline. (line 63)
31203 * nonnull function attribute: Function Attributes.
31205 * noreturn function attribute: Function Attributes.
31207 * nothrow function attribute: Function Attributes.
31209 * o in constraint: Simple Constraints. (line 21)
31210 * OBJC_INCLUDE_PATH: Environment Variables.
31212 * Objective-C <1>: Standards. (line 110)
31213 * Objective-C: G++ and GCC. (line 6)
31214 * Objective-C and Objective-C++ options, command line: Objective-C and Objective-C++ Dialect Options.
31216 * Objective-C++ <1>: Standards. (line 110)
31217 * Objective-C++: G++ and GCC. (line 6)
31218 * offsettable address: Simple Constraints. (line 21)
31219 * old-style function definitions: Function Prototypes.
31221 * omitted middle-operands: Conditionals. (line 6)
31222 * open coding: Inline. (line 6)
31223 * operand constraints, asm: Constraints. (line 6)
31224 * optimize options: Optimize Options. (line 6)
31225 * options to control diagnostics formatting: Language Independent Options.
31227 * options to control warnings: Warning Options. (line 6)
31228 * options, C++: C++ Dialect Options.
31230 * options, code generation: Code Gen Options. (line 6)
31231 * options, debugging: Debugging Options. (line 6)
31232 * options, dialect: C Dialect Options. (line 6)
31233 * options, directory search: Directory Options. (line 6)
31234 * options, GCC command: Invoking GCC. (line 6)
31235 * options, grouping: Invoking GCC. (line 26)
31236 * options, linking: Link Options. (line 6)
31237 * options, Objective-C and Objective-C++: Objective-C and Objective-C++ Dialect Options.
31239 * options, optimization: Optimize Options. (line 6)
31240 * options, order: Invoking GCC. (line 30)
31241 * options, preprocessor: Preprocessor Options.
31243 * order of evaluation, side effects: Non-bugs. (line 196)
31244 * order of options: Invoking GCC. (line 30)
31245 * other register constraints: Simple Constraints. (line 151)
31246 * output file option: Overall Options. (line 174)
31247 * overloaded virtual fn, warning: C++ Dialect Options.
31249 * p in constraint: Simple Constraints. (line 142)
31250 * packed attribute: Variable Attributes.
31252 * parameter forward declaration: Variable Length. (line 60)
31253 * parameters, aliased: Code Gen Options. (line 333)
31254 * Pascal: G++ and GCC. (line 23)
31255 * PDP-11 Options: PDP-11 Options. (line 6)
31256 * PIC: Code Gen Options. (line 170)
31257 * pmf: Bound member functions.
31259 * pointer arguments: Function Attributes.
31261 * pointer to member function: Bound member functions.
31263 * portions of temporary objects, pointers to: Temporaries. (line 6)
31264 * pow: Other Builtins. (line 6)
31265 * pow10: Other Builtins. (line 6)
31266 * pow10f: Other Builtins. (line 6)
31267 * pow10l: Other Builtins. (line 6)
31268 * PowerPC options: PowerPC Options. (line 6)
31269 * powf: Other Builtins. (line 6)
31270 * powl: Other Builtins. (line 6)
31271 * pragma, align: Solaris Pragmas. (line 11)
31272 * pragma, extern_prefix: Symbol-Renaming Pragmas.
31274 * pragma, fini: Solaris Pragmas. (line 19)
31275 * pragma, init: Solaris Pragmas. (line 24)
31276 * pragma, long_calls: ARM Pragmas. (line 11)
31277 * pragma, long_calls_off: ARM Pragmas. (line 17)
31278 * pragma, longcall: RS/6000 and PowerPC Pragmas.
31280 * pragma, mark: Darwin Pragmas. (line 11)
31281 * pragma, memregs: M32C Pragmas. (line 7)
31282 * pragma, no_long_calls: ARM Pragmas. (line 14)
31283 * pragma, options align: Darwin Pragmas. (line 14)
31284 * pragma, reason for not using: Function Attributes.
31286 * pragma, redefine_extname: Symbol-Renaming Pragmas.
31288 * pragma, segment: Darwin Pragmas. (line 21)
31289 * pragma, unused: Darwin Pragmas. (line 24)
31290 * pragma, weak: Weak Pragmas. (line 10)
31291 * pragmas: Pragmas. (line 6)
31292 * pragmas in C++, effect on inlining: C++ Interface. (line 66)
31293 * pragmas, interface and implementation: C++ Interface. (line 6)
31294 * pragmas, warning of unknown: Warning Options. (line 476)
31295 * precompiled headers: Precompiled Headers.
31297 * preprocessing numbers: Incompatibilities. (line 173)
31298 * preprocessing tokens: Incompatibilities. (line 173)
31299 * preprocessor options: Preprocessor Options.
31301 * printf: Other Builtins. (line 6)
31302 * printf_unlocked: Other Builtins. (line 6)
31303 * prof: Debugging Options. (line 121)
31304 * promotion of formal parameters: Function Prototypes.
31306 * pure function attribute: Function Attributes.
31308 * push address instruction: Simple Constraints. (line 142)
31309 * putchar: Other Builtins. (line 6)
31310 * puts: Other Builtins. (line 6)
31311 * qsort, and global register variables: Global Reg Vars. (line 42)
31312 * question mark: Multi-Alternative. (line 27)
31313 * r in constraint: Simple Constraints. (line 54)
31314 * ranges in case statements: Case Ranges. (line 6)
31315 * read-only strings: Incompatibilities. (line 9)
31316 * register variable after longjmp: Global Reg Vars. (line 66)
31317 * registers: Extended Asm. (line 6)
31318 * registers for local variables: Local Reg Vars. (line 6)
31319 * registers in constraints: Simple Constraints. (line 54)
31320 * registers, global allocation: Explicit Reg Vars. (line 6)
31321 * registers, global variables in: Global Reg Vars. (line 6)
31322 * regparm attribute: Function Attributes.
31324 * relocation truncated to fit (MIPS): MIPS Options. (line 113)
31325 * remainder: Other Builtins. (line 6)
31326 * remainderf: Other Builtins. (line 6)
31327 * remainderl: Other Builtins. (line 6)
31328 * remquo: Other Builtins. (line 6)
31329 * remquof: Other Builtins. (line 6)
31330 * remquol: Other Builtins. (line 6)
31331 * reordering, warning: C++ Dialect Options.
31333 * reporting bugs: Bugs. (line 6)
31334 * rest argument (in macro): Variadic Macros. (line 6)
31335 * restricted pointers: Restricted Pointers.
31337 * restricted references: Restricted Pointers.
31339 * restricted this pointer: Restricted Pointers.
31341 * returns_twice attribute: Function Attributes.
31343 * rindex: Other Builtins. (line 6)
31344 * rint: Other Builtins. (line 6)
31345 * rintf: Other Builtins. (line 6)
31346 * rintl: Other Builtins. (line 6)
31347 * round: Other Builtins. (line 6)
31348 * roundf: Other Builtins. (line 6)
31349 * roundl: Other Builtins. (line 6)
31350 * RS/6000 and PowerPC Options: RS/6000 and PowerPC Options.
31352 * RTTI: Vague Linkage. (line 43)
31353 * run-time options: Code Gen Options. (line 6)
31354 * s in constraint: Simple Constraints. (line 90)
31355 * S/390 and zSeries Options: S/390 and zSeries Options.
31357 * save all registers on the Blackfin, H8/300, H8/300H, and H8S: Function Attributes.
31359 * scalb: Other Builtins. (line 6)
31360 * scalbf: Other Builtins. (line 6)
31361 * scalbl: Other Builtins. (line 6)
31362 * scalbln: Other Builtins. (line 6)
31363 * scalblnf: Other Builtins. (line 6)
31364 * scalbn: Other Builtins. (line 6)
31365 * scalbnf: Other Builtins. (line 6)
31366 * scanf, and constant strings: Incompatibilities. (line 17)
31367 * scanfnl: Other Builtins. (line 6)
31368 * scope of a variable length array: Variable Length. (line 23)
31369 * scope of declaration: Disappointments. (line 21)
31370 * scope of external declarations: Incompatibilities. (line 80)
31371 * search path: Directory Options. (line 6)
31372 * section function attribute: Function Attributes.
31374 * section variable attribute: Variable Attributes.
31376 * sentinel function attribute: Function Attributes.
31378 * setjmp: Global Reg Vars. (line 66)
31379 * setjmp incompatibilities: Incompatibilities. (line 39)
31380 * shared strings: Incompatibilities. (line 9)
31381 * shared variable attribute: Variable Attributes.
31383 * side effect in ?:: Conditionals. (line 20)
31384 * side effects, macro argument: Statement Exprs. (line 35)
31385 * side effects, order of evaluation: Non-bugs. (line 196)
31386 * signal handler functions on the AVR processors: Function Attributes.
31388 * signbit: Other Builtins. (line 6)
31389 * signbitf: Other Builtins. (line 6)
31390 * signbitl: Other Builtins. (line 6)
31391 * signed and unsigned values, comparison warning: Warning Options.
31393 * significand: Other Builtins. (line 6)
31394 * significandf: Other Builtins. (line 6)
31395 * significandl: Other Builtins. (line 6)
31396 * simple constraints: Simple Constraints. (line 6)
31397 * sin: Other Builtins. (line 6)
31398 * sincos: Other Builtins. (line 6)
31399 * sincosf: Other Builtins. (line 6)
31400 * sincosl: Other Builtins. (line 6)
31401 * sinf: Other Builtins. (line 6)
31402 * sinh: Other Builtins. (line 6)
31403 * sinhf: Other Builtins. (line 6)
31404 * sinhl: Other Builtins. (line 6)
31405 * sinl: Other Builtins. (line 6)
31406 * sizeof: Typeof. (line 6)
31407 * smaller data references: M32R/D Options. (line 57)
31408 * smaller data references (MIPS): MIPS Options. (line 194)
31409 * smaller data references (PowerPC): RS/6000 and PowerPC Options.
31411 * snprintf: Other Builtins. (line 6)
31412 * SPARC options: SPARC Options. (line 6)
31413 * Spec Files: Spec Files. (line 6)
31414 * specified registers: Explicit Reg Vars. (line 6)
31415 * specifying compiler version and target machine: Target Options.
31417 * specifying hardware config: Submodel Options. (line 6)
31418 * specifying machine version: Target Options. (line 6)
31419 * specifying registers for local variables: Local Reg Vars. (line 6)
31420 * speed of compilation: Precompiled Headers.
31422 * sprintf: Other Builtins. (line 6)
31423 * sqrt: Other Builtins. (line 6)
31424 * sqrtf: Other Builtins. (line 6)
31425 * sqrtl: Other Builtins. (line 6)
31426 * sscanf: Other Builtins. (line 6)
31427 * sscanf, and constant strings: Incompatibilities. (line 17)
31428 * sseregparm attribute: Function Attributes.
31430 * statements inside expressions: Statement Exprs. (line 6)
31431 * static data in C++, declaring and defining: Static Definitions.
31433 * stpcpy: Other Builtins. (line 6)
31434 * stpncpy: Other Builtins. (line 6)
31435 * strcasecmp: Other Builtins. (line 6)
31436 * strcat: Other Builtins. (line 6)
31437 * strchr: Other Builtins. (line 6)
31438 * strcmp: Other Builtins. (line 6)
31439 * strcpy: Other Builtins. (line 6)
31440 * strcspn: Other Builtins. (line 6)
31441 * strdup: Other Builtins. (line 6)
31442 * strfmon: Other Builtins. (line 6)
31443 * strftime: Other Builtins. (line 6)
31444 * string constants: Incompatibilities. (line 9)
31445 * strlen: Other Builtins. (line 6)
31446 * strncasecmp: Other Builtins. (line 6)
31447 * strncat: Other Builtins. (line 6)
31448 * strncmp: Other Builtins. (line 6)
31449 * strncpy: Other Builtins. (line 6)
31450 * strndup: Other Builtins. (line 6)
31451 * strpbrk: Other Builtins. (line 6)
31452 * strrchr: Other Builtins. (line 6)
31453 * strspn: Other Builtins. (line 6)
31454 * strstr: Other Builtins. (line 6)
31455 * struct: Unnamed Fields. (line 6)
31456 * structures: Incompatibilities. (line 146)
31457 * structures, constructor expression: Compound Literals. (line 6)
31458 * submodel options: Submodel Options. (line 6)
31459 * subscripting: Subscripting. (line 6)
31460 * subscripting and function values: Subscripting. (line 6)
31461 * suffixes for C++ source: Invoking G++. (line 6)
31462 * SUNPRO_DEPENDENCIES: Environment Variables.
31464 * suppressing warnings: Warning Options. (line 6)
31465 * surprises in C++: C++ Misunderstandings.
31467 * syntax checking: Warning Options. (line 22)
31468 * system headers, warnings from: Warning Options. (line 595)
31469 * tan: Other Builtins. (line 6)
31470 * tanf: Other Builtins. (line 6)
31471 * tanh: Other Builtins. (line 6)
31472 * tanhf: Other Builtins. (line 6)
31473 * tanhl: Other Builtins. (line 6)
31474 * tanl: Other Builtins. (line 6)
31475 * target machine, specifying: Target Options. (line 6)
31476 * target options: Target Options. (line 6)
31477 * TC1: Standards. (line 6)
31478 * TC2: Standards. (line 6)
31479 * Technical Corrigenda: Standards. (line 6)
31480 * Technical Corrigendum 1: Standards. (line 6)
31481 * Technical Corrigendum 2: Standards. (line 6)
31482 * template instantiation: Template Instantiation.
31484 * temporaries, lifetime of: Temporaries. (line 6)
31485 * tgamma: Other Builtins. (line 6)
31486 * tgammaf: Other Builtins. (line 6)
31487 * tgammal: Other Builtins. (line 6)
31488 * Thread-Local Storage: Thread-Local. (line 6)
31489 * thunks: Nested Functions. (line 6)
31490 * tiny data section on the H8/300H and H8S: Function Attributes.
31492 * TLS: Thread-Local. (line 6)
31493 * tls_model attribute: Variable Attributes.
31495 * TMPDIR: Environment Variables.
31497 * TMS320C3x/C4x Options: TMS320C3x/C4x Options.
31499 * toascii: Other Builtins. (line 6)
31500 * tolower: Other Builtins. (line 6)
31501 * toupper: Other Builtins. (line 6)
31502 * towlower: Other Builtins. (line 6)
31503 * towupper: Other Builtins. (line 6)
31504 * traditional C language: C Dialect Options. (line 200)
31505 * treelang <1>: Standards. (line 123)
31506 * treelang: G++ and GCC. (line 6)
31507 * trunc: Other Builtins. (line 6)
31508 * truncf: Other Builtins. (line 6)
31509 * truncl: Other Builtins. (line 6)
31510 * two-stage name lookup: Name lookup. (line 6)
31511 * type alignment: Alignment. (line 6)
31512 * type attributes: Type Attributes. (line 6)
31513 * type_info: Vague Linkage. (line 43)
31514 * typedef names as function parameters: Incompatibilities. (line 97)
31515 * typeof: Typeof. (line 6)
31516 * ULL integer suffix: Long Long. (line 6)
31517 * Ultrix calling convention: Interoperation. (line 150)
31518 * undefined behavior: Bug Criteria. (line 17)
31519 * undefined function value: Bug Criteria. (line 17)
31520 * underscores in variables in macros: Typeof. (line 42)
31521 * union: Unnamed Fields. (line 6)
31522 * union, casting to a: Cast to Union. (line 6)
31523 * unions: Incompatibilities. (line 146)
31524 * unknown pragmas, warning: Warning Options. (line 476)
31525 * unresolved references and -nodefaultlibs: Link Options. (line 79)
31526 * unresolved references and -nostdlib: Link Options. (line 79)
31527 * unused attribute.: Function Attributes.
31529 * used attribute.: Function Attributes.
31531 * User stack pointer in interrupts on the Blackfin: Function Attributes.
31533 * V in constraint: Simple Constraints. (line 41)
31534 * V850 Options: V850 Options. (line 6)
31535 * vague linkage: Vague Linkage. (line 6)
31536 * value after longjmp: Global Reg Vars. (line 66)
31537 * variable addressability on the IA-64: Function Attributes.
31539 * variable addressability on the M32R/D: Variable Attributes.
31541 * variable alignment: Alignment. (line 6)
31542 * variable attributes: Variable Attributes.
31544 * variable number of arguments: Variadic Macros. (line 6)
31545 * variable-length array scope: Variable Length. (line 23)
31546 * variable-length arrays: Variable Length. (line 6)
31547 * variables in specified registers: Explicit Reg Vars. (line 6)
31548 * variables, local, in macros: Typeof. (line 42)
31549 * variadic macros: Variadic Macros. (line 6)
31550 * VAX calling convention: Interoperation. (line 150)
31551 * VAX options: VAX Options. (line 6)
31552 * vfprintf: Other Builtins. (line 6)
31553 * vfscanf: Other Builtins. (line 6)
31554 * visibility attribute: Function Attributes.
31556 * VLAs: Variable Length. (line 6)
31557 * void pointers, arithmetic: Pointer Arith. (line 6)
31558 * void, size of pointer to: Pointer Arith. (line 6)
31559 * volatile access: Volatiles. (line 6)
31560 * volatile applied to function: Function Attributes.
31562 * volatile read: Volatiles. (line 6)
31563 * volatile write: Volatiles. (line 6)
31564 * vprintf: Other Builtins. (line 6)
31565 * vscanf: Other Builtins. (line 6)
31566 * vsnprintf: Other Builtins. (line 6)
31567 * vsprintf: Other Builtins. (line 6)
31568 * vsscanf: Other Builtins. (line 6)
31569 * vtable: Vague Linkage. (line 28)
31570 * warn_unused_result attribute: Function Attributes.
31572 * warning for comparison of signed and unsigned values: Warning Options.
31574 * warning for overloaded virtual fn: C++ Dialect Options.
31576 * warning for reordering of member initializers: C++ Dialect Options.
31578 * warning for unknown pragmas: Warning Options. (line 476)
31579 * warning messages: Warning Options. (line 6)
31580 * warnings from system headers: Warning Options. (line 595)
31581 * warnings vs errors: Warnings and Errors.
31583 * weak attribute: Function Attributes.
31585 * weakref attribute: Function Attributes.
31587 * whitespace: Incompatibilities. (line 112)
31588 * X in constraint: Simple Constraints. (line 112)
31589 * X3.159-1989: Standards. (line 6)
31590 * x86-64 options: x86-64 Options. (line 6)
31591 * x86-64 Options: i386 and x86-64 Options.
31593 * Xstormy16 Options: Xstormy16 Options. (line 6)
31594 * Xtensa Options: Xtensa Options. (line 6)
31595 * y0: Other Builtins. (line 6)
31596 * y0f: Other Builtins. (line 6)
31597 * y0l: Other Builtins. (line 6)
31598 * y1: Other Builtins. (line 6)
31599 * y1f: Other Builtins. (line 6)
31600 * y1l: Other Builtins. (line 6)
31601 * yn: Other Builtins. (line 6)
31602 * ynf: Other Builtins. (line 6)
31603 * ynl: Other Builtins. (line 6)
31604 * zero-length arrays: Zero Length. (line 6)
31605 * zero-size structures: Empty Structures. (line 6)
31606 * zSeries options: zSeries Options. (line 6)
31612 Node: G++ and GCC
\7f3740
31613 Node: Standards
\7f5805
31614 Node: Invoking GCC
\7f12932
31615 Node: Option Summary
\7f16688
31616 Node: Overall Options
\7f44294
31617 Node: Invoking G++
\7f52793
31618 Node: C Dialect Options
\7f54415
31619 Node: C++ Dialect Options
\7f65425
31620 Node: Objective-C and Objective-C++ Dialect Options
\7f83883
31621 Node: Language Independent Options
\7f95490
31622 Node: Warning Options
\7f97573
31623 Node: Debugging Options
\7f143616
31624 Node: Optimize Options
\7f173536
31625 Node: Preprocessor Options
\7f250373
31626 Ref: Wtrigraphs
\7f254337
31627 Ref: dashMF
\7f259094
31628 Ref: fdollars-in-identifiers
\7f268145
31629 Node: Assembler Options
\7f276201
31630 Node: Link Options
\7f276906
31631 Ref: Link Options-Footnote-1
\7f285474
31632 Node: Directory Options
\7f285808
31633 Node: Spec Files
\7f291870
31634 Node: Target Options
\7f311158
31635 Node: Submodel Options
\7f312582
31636 Node: ARC Options
\7f314172
31637 Node: ARM Options
\7f315362
31638 Node: AVR Options
\7f326973
31639 Node: Blackfin Options
\7f329106
31640 Node: CRIS Options
\7f331874
31641 Node: CRX Options
\7f336093
31642 Node: Darwin Options
\7f336518
31643 Node: DEC Alpha Options
\7f343106
31644 Node: DEC Alpha/VMS Options
\7f354584
31645 Node: FRV Options
\7f354969
31646 Node: H8/300 Options
\7f361636
31647 Node: HPPA Options
\7f362697
31648 Node: i386 and x86-64 Options
\7f372290
31649 Node: IA-64 Options
\7f391212
31650 Node: M32C Options
\7f395203
31651 Node: M32R/D Options
\7f396494
31652 Node: M680x0 Options
\7f400081
31653 Node: M68hc1x Options
\7f407314
31654 Node: MCore Options
\7f408882
31655 Node: MIPS Options
\7f409903
31656 Node: MMIX Options
\7f423975
31657 Node: MN10300 Options
\7f426457
31658 Node: MT Options
\7f427875
31659 Node: PDP-11 Options
\7f428789
31660 Node: PowerPC Options
\7f430623
31661 Node: RS/6000 and PowerPC Options
\7f430857
31662 Node: S/390 and zSeries Options
\7f458917
31663 Node: SH Options
\7f466229
31664 Node: SPARC Options
\7f475465
31665 Node: System V Options
\7f486148
31666 Node: TMS320C3x/C4x Options
\7f486982
31667 Node: V850 Options
\7f492507
31668 Node: VAX Options
\7f495652
31669 Node: x86-64 Options
\7f496199
31670 Node: Xstormy16 Options
\7f496413
31671 Node: Xtensa Options
\7f496702
31672 Node: zSeries Options
\7f500542
31673 Node: Code Gen Options
\7f500738
31674 Node: Environment Variables
\7f520361
31675 Node: Precompiled Headers
\7f528033
31676 Node: Running Protoize
\7f534270
31677 Node: C Implementation
\7f540607
31678 Node: Translation implementation
\7f542270
31679 Node: Environment implementation
\7f542844
31680 Node: Identifiers implementation
\7f543394
31681 Node: Characters implementation
\7f544448
31682 Node: Integers implementation
\7f547254
31683 Node: Floating point implementation
\7f549079
31684 Node: Arrays and pointers implementation
\7f552008
31685 Ref: Arrays and pointers implementation-Footnote-1
\7f553443
31686 Node: Hints implementation
\7f553567
31687 Node: Structures unions enumerations and bit-fields implementation
\7f555033
31688 Node: Qualifiers implementation
\7f556996
31689 Node: Declarators implementation
\7f557379
31690 Node: Statements implementation
\7f557721
31691 Node: Preprocessing directives implementation
\7f558048
31692 Node: Library functions implementation
\7f560153
31693 Node: Architecture implementation
\7f560793
31694 Node: Locale-specific behavior implementation
\7f561496
31695 Node: C Extensions
\7f561801
31696 Node: Statement Exprs
\7f566151
31697 Node: Local Labels
\7f570664
31698 Node: Labels as Values
\7f573643
31699 Ref: Labels as Values-Footnote-1
\7f575697
31700 Node: Nested Functions
\7f575880
31701 Node: Constructing Calls
\7f579774
31702 Node: Typeof
\7f582110
31703 Node: Conditionals
\7f585276
31704 Node: Long Long
\7f586167
31705 Node: Complex
\7f587668
31706 Node: Hex Floats
\7f590234
31707 Node: Zero Length
\7f591269
31708 Node: Empty Structures
\7f594546
31709 Node: Variable Length
\7f594962
31710 Node: Variadic Macros
\7f597729
31711 Node: Escaped Newlines
\7f600111
31712 Node: Subscripting
\7f600950
31713 Node: Pointer Arith
\7f601673
31714 Node: Initializers
\7f602241
31715 Node: Compound Literals
\7f602737
31716 Node: Designated Inits
\7f604899
31717 Node: Case Ranges
\7f608554
31718 Node: Cast to Union
\7f609237
31719 Node: Mixed Declarations
\7f610333
31720 Node: Function Attributes
\7f610839
31721 Node: Attribute Syntax
\7f648874
31722 Node: Function Prototypes
\7f659958
31723 Node: C++ Comments
\7f661739
31724 Node: Dollar Signs
\7f662258
31725 Node: Character Escapes
\7f662723
31726 Node: Alignment
\7f663017
31727 Node: Variable Attributes
\7f664334
31728 Node: Type Attributes
\7f678366
31729 Node: Inline
\7f691817
31730 Node: Extended Asm
\7f696521
31731 Ref: Example of asm with clobbered asm reg
\7f702607
31732 Node: Constraints
\7f716703
31733 Node: Simple Constraints
\7f717553
31734 Node: Multi-Alternative
\7f724081
31735 Node: Modifiers
\7f725798
31736 Node: Machine Constraints
\7f728692
31737 Node: Asm Labels
\7f754827
31738 Node: Explicit Reg Vars
\7f756503
31739 Node: Global Reg Vars
\7f758111
31740 Node: Local Reg Vars
\7f762661
31741 Node: Alternate Keywords
\7f765102
31742 Node: Incomplete Enums
\7f766530
31743 Node: Function Names
\7f767287
31744 Node: Return Address
\7f769477
31745 Node: Vector Extensions
\7f772274
31746 Node: Offsetof
\7f775776
31747 Node: Atomic Builtins
\7f776562
31748 Node: Object Size Checking
\7f781647
31749 Node: Other Builtins
\7f787004
31750 Node: Target Builtins
\7f808198
31751 Node: Alpha Built-in Functions
\7f808931
31752 Node: ARM Built-in Functions
\7f811923
31753 Node: Blackfin Built-in Functions
\7f818630
31754 Node: FR-V Built-in Functions
\7f819247
31755 Node: Argument Types
\7f820106
31756 Node: Directly-mapped Integer Functions
\7f821862
31757 Node: Directly-mapped Media Functions
\7f822944
31758 Node: Raw read/write Functions
\7f829976
31759 Node: Other Built-in Functions
\7f830888
31760 Node: X86 Built-in Functions
\7f832077
31761 Node: MIPS DSP Built-in Functions
\7f842910
31762 Node: MIPS Paired-Single Support
\7f851335
31763 Node: Paired-Single Arithmetic
\7f852945
31764 Node: Paired-Single Built-in Functions
\7f853885
31765 Node: MIPS-3D Built-in Functions
\7f856549
31766 Node: PowerPC AltiVec Built-in Functions
\7f861918
31767 Node: SPARC VIS Built-in Functions
\7f963222
31768 Node: Target Format Checks
\7f964881
31769 Node: Solaris Format Checks
\7f965288
31770 Node: Pragmas
\7f965685
31771 Node: ARM Pragmas
\7f966269
31772 Node: M32C Pragmas
\7f966872
31773 Node: RS/6000 and PowerPC Pragmas
\7f967448
31774 Node: Darwin Pragmas
\7f968190
31775 Node: Solaris Pragmas
\7f969257
31776 Node: Symbol-Renaming Pragmas
\7f970418
31777 Node: Structure-Packing Pragmas
\7f973040
31778 Node: Weak Pragmas
\7f974303
31779 Node: Unnamed Fields
\7f975078
31780 Node: Thread-Local
\7f976588
31781 Node: C99 Thread-Local Edits
\7f978672
31782 Node: C++98 Thread-Local Edits
\7f980684
31783 Node: C++ Extensions
\7f984129
31784 Node: Volatiles
\7f985701
31785 Node: Restricted Pointers
\7f989047
31786 Node: Vague Linkage
\7f990641
31787 Node: C++ Interface
\7f994297
31788 Ref: C++ Interface-Footnote-1
\7f998594
31789 Node: Template Instantiation
\7f998731
31790 Node: Bound member functions
\7f1005743
31791 Node: C++ Attributes
\7f1007286
31792 Node: Strong Using
\7f1008926
31793 Node: Java Exceptions
\7f1010175
31794 Node: Deprecated Features
\7f1011571
31795 Node: Backwards Compatibility
\7f1014550
31796 Node: Objective-C
\7f1015905
31797 Node: Executing code before main
\7f1016486
31798 Node: What you can and what you cannot do in +load
\7f1019092
31799 Node: Type encoding
\7f1021259
31800 Node: Garbage Collection
\7f1024502
31801 Node: Constant string objects
\7f1027126
31802 Node: compatibility_alias
\7f1029634
31803 Node: Compatibility
\7f1030512
31804 Node: Gcov
\7f1037079
31805 Node: Gcov Intro
\7f1037603
31806 Node: Invoking Gcov
\7f1040319
31807 Node: Gcov and Optimization
\7f1052170
31808 Node: Gcov Data Files
\7f1054823
31809 Node: Cross-profiling
\7f1055961
31810 Node: Trouble
\7f1057787
31811 Node: Actual Bugs
\7f1059327
31812 Node: Cross-Compiler Problems
\7f1060067
31813 Node: Interoperation
\7f1060481
31814 Node: Incompatibilities
\7f1068079
31815 Node: Fixed Headers
\7f1076229
31816 Node: Standard Libraries
\7f1077892
31817 Node: Disappointments
\7f1079264
31818 Node: C++ Misunderstandings
\7f1083622
31819 Node: Static Definitions
\7f1084441
31820 Node: Name lookup
\7f1085494
31821 Ref: Name lookup-Footnote-1
\7f1090272
31822 Node: Temporaries
\7f1090459
31823 Node: Copy Assignment
\7f1092435
31824 Node: Protoize Caveats
\7f1094242
31825 Node: Non-bugs
\7f1098204
31826 Node: Warnings and Errors
\7f1108708
31827 Node: Bugs
\7f1110472
31828 Node: Bug Criteria
\7f1111036
31829 Node: Bug Reporting
\7f1113246
31830 Node: Service
\7f1113638
31831 Node: Contributing
\7f1114457
31832 Node: Funding
\7f1115197
31833 Node: GNU Project
\7f1117686
31834 Node: Copying
\7f1118332
31835 Node: GNU Free Documentation License
\7f1137509
31836 Node: Contributors
\7f1159915
31837 Node: Option Index
\7f1195479
31838 Node: Keyword Index
\7f1327225